X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0c131a5ad27be67aa6d859ee31024dac9885a753..0aa7c4413630644b24c808d2762c7eff9216f21d:/src/gtk/textctrl.cpp diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index d36c312925..5e852cc3a6 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -28,13 +28,6 @@ #include "wx/gtk/private.h" #include -//----------------------------------------------------------------------------- -// idle system -//----------------------------------------------------------------------------- - -extern void wxapp_install_idle_handler(); -extern bool g_isIdle; - //----------------------------------------------------------------------------- // data //----------------------------------------------------------------------------- @@ -954,10 +947,38 @@ int wxTextCtrl::GetLineLength(long lineNo) const int wxTextCtrl::GetNumberOfLines() const { - if (m_windowStyle & wxTE_MULTILINE) - return gtk_text_buffer_get_line_count( m_buffer ); - else + if ( m_windowStyle & wxTE_MULTILINE ) + { + GtkTextIter iter; + gtk_text_buffer_get_iter_at_offset( m_buffer, &iter, 0 ); + + // move forward by one display line until the end is reached + int lineCount = 1; + while ( gtk_text_view_forward_display_line(GTK_TEXT_VIEW(m_text), &iter) ) + { + lineCount++; + } + + // If the last character in the text buffer is a newline, + // gtk_text_view_forward_display_line() will return false without that + // line being counted. Must add one manually in that case. + GtkTextIter lastCharIter; + gtk_text_buffer_get_iter_at_offset + ( + m_buffer, + &lastCharIter, + gtk_text_buffer_get_char_count(m_buffer) - 1 + ); + gchar lastChar = gtk_text_iter_get_char( &lastCharIter ); + if ( lastChar == wxT('\n') ) + lineCount++; + + return lineCount; + } + else // single line + { return 1; + } } void wxTextCtrl::SetInsertionPoint( long pos )