]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix for wxTextCtrl::GetSelection for singel line controls in GTK2 mode
authorRobin Dunn <robin@alldunn.com>
Fri, 8 Aug 2003 03:57:35 +0000 (03:57 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 8 Aug 2003 03:57:35 +0000 (03:57 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22692 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/textctrl.cpp
src/gtk1/textctrl.cpp

index 23b5a380f2d98c7fd23ebe4ffc382d87cb71f336..0b1fc61efe8a28e61b6829aa6add7fc9dad1d8af 100644 (file)
@@ -515,7 +515,7 @@ wxString wxTextCtrl::GetValue() const
         GtkTextIter end;
         gtk_text_buffer_get_end_iter( text_buffer, &end );
         gchar *text = gtk_text_buffer_get_text( text_buffer, &start, &end, TRUE );
-        
+
 #if wxUSE_UNICODE
         wxWCharBuffer buffer( wxConvUTF8.cMB2WX( text ) );
 #else
@@ -592,7 +592,7 @@ void wxTextCtrl::WriteText( const wxString &text )
         wxCharBuffer buffer( wxConvUTF8.cWC2MB( wxConvLocal.cWX2WC( text ) ) );
 #endif
         GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(m_text) );
-        
+
         // TODO: Call whatever is needed to delete the selection.
         wxGtkTextInsert( m_text, text_buffer, m_defaultStyle, buffer );
 
@@ -1185,36 +1185,49 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
 {
     wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
 
-    gint from, to;
-#ifdef __WXGTK20__
-    GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (m_text));
-    GtkTextIter ifrom, ito;
-    if (!gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito))
-#else
-    if ( !(GTK_EDITABLE(m_text)->has_selection) )
-#endif
-    {
-        from =
-        to = GetInsertionPoint();
-    }
-    else // got selection
-    {
+    gint from = -1;
+    gint to = -1;
+    bool haveSelection = FALSE;
+
 #ifdef __WXGTK20__
-        from = gtk_text_iter_get_offset(&ifrom);
-        to = gtk_text_iter_get_offset(&ito);
-#else
-        from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
-        to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
+     if (m_windowStyle & wxTE_MULTILINE)
+     {
+         GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (m_text));
+         GtkTextIter ifrom, ito;
+         if ( gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito) )
+         {
+             haveSelection = TRUE;
+             from = gtk_text_iter_get_offset(&ifrom);
+             to = gtk_text_iter_get_offset(&ito);
+         }
+     }
+     else  // not multi-line
+     {
+         if ( gtk_editable_get_selection_bounds( GTK_EDITABLE(m_text),
+                                                 &from, &to) )
+         {
+             haveSelection = TRUE;
+         }
+     }
+#else //  not GTK2
+     if ( (GTK_EDITABLE(m_text)->has_selection) )
+     {
+         haveSelection = TRUE;
+         from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
+         to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
+     }
 #endif
 
-        if ( from > to )
-        {
-            // exchange them to be compatible with wxMSW
-            gint tmp = from;
-            from = to;
-            to = tmp;
-        }
-    }
+     if (! haveSelection )
+          from = to = GetInsertionPoint();
+
+     if ( from > to )
+     {
+         // exchange them to be compatible with wxMSW
+         gint tmp = from;
+         from = to;
+         to = tmp;
+     }
 
     if ( fromOut )
         *fromOut = from;
@@ -1222,6 +1235,7 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
         *toOut = to;
 }
 
+
 bool wxTextCtrl::IsEditable() const
 {
     wxCHECK_MSG( m_text != NULL, FALSE, wxT("invalid text ctrl") );
@@ -1449,7 +1463,7 @@ bool wxTextCtrl::SetStyle( long start, long end, const wxTextAttr& style )
 #else
         // VERY dirty way to do that - removes the required text and re-adds it
         // with styling (FIXME)
-         
+
         gint l = gtk_text_get_length( GTK_TEXT(m_text) );
 
         wxCHECK_MSG( start >= 0 && end <= l, FALSE,
index 23b5a380f2d98c7fd23ebe4ffc382d87cb71f336..0b1fc61efe8a28e61b6829aa6add7fc9dad1d8af 100644 (file)
@@ -515,7 +515,7 @@ wxString wxTextCtrl::GetValue() const
         GtkTextIter end;
         gtk_text_buffer_get_end_iter( text_buffer, &end );
         gchar *text = gtk_text_buffer_get_text( text_buffer, &start, &end, TRUE );
-        
+
 #if wxUSE_UNICODE
         wxWCharBuffer buffer( wxConvUTF8.cMB2WX( text ) );
 #else
@@ -592,7 +592,7 @@ void wxTextCtrl::WriteText( const wxString &text )
         wxCharBuffer buffer( wxConvUTF8.cWC2MB( wxConvLocal.cWX2WC( text ) ) );
 #endif
         GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(m_text) );
-        
+
         // TODO: Call whatever is needed to delete the selection.
         wxGtkTextInsert( m_text, text_buffer, m_defaultStyle, buffer );
 
@@ -1185,36 +1185,49 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
 {
     wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
 
-    gint from, to;
-#ifdef __WXGTK20__
-    GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (m_text));
-    GtkTextIter ifrom, ito;
-    if (!gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito))
-#else
-    if ( !(GTK_EDITABLE(m_text)->has_selection) )
-#endif
-    {
-        from =
-        to = GetInsertionPoint();
-    }
-    else // got selection
-    {
+    gint from = -1;
+    gint to = -1;
+    bool haveSelection = FALSE;
+
 #ifdef __WXGTK20__
-        from = gtk_text_iter_get_offset(&ifrom);
-        to = gtk_text_iter_get_offset(&ito);
-#else
-        from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
-        to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
+     if (m_windowStyle & wxTE_MULTILINE)
+     {
+         GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (m_text));
+         GtkTextIter ifrom, ito;
+         if ( gtk_text_buffer_get_selection_bounds(buffer, &ifrom, &ito) )
+         {
+             haveSelection = TRUE;
+             from = gtk_text_iter_get_offset(&ifrom);
+             to = gtk_text_iter_get_offset(&ito);
+         }
+     }
+     else  // not multi-line
+     {
+         if ( gtk_editable_get_selection_bounds( GTK_EDITABLE(m_text),
+                                                 &from, &to) )
+         {
+             haveSelection = TRUE;
+         }
+     }
+#else //  not GTK2
+     if ( (GTK_EDITABLE(m_text)->has_selection) )
+     {
+         haveSelection = TRUE;
+         from = (long) GTK_EDITABLE(m_text)->selection_start_pos;
+         to = (long) GTK_EDITABLE(m_text)->selection_end_pos;
+     }
 #endif
 
-        if ( from > to )
-        {
-            // exchange them to be compatible with wxMSW
-            gint tmp = from;
-            from = to;
-            to = tmp;
-        }
-    }
+     if (! haveSelection )
+          from = to = GetInsertionPoint();
+
+     if ( from > to )
+     {
+         // exchange them to be compatible with wxMSW
+         gint tmp = from;
+         from = to;
+         to = tmp;
+     }
 
     if ( fromOut )
         *fromOut = from;
@@ -1222,6 +1235,7 @@ void wxTextCtrl::GetSelection(long* fromOut, long* toOut) const
         *toOut = to;
 }
 
+
 bool wxTextCtrl::IsEditable() const
 {
     wxCHECK_MSG( m_text != NULL, FALSE, wxT("invalid text ctrl") );
@@ -1449,7 +1463,7 @@ bool wxTextCtrl::SetStyle( long start, long end, const wxTextAttr& style )
 #else
         // VERY dirty way to do that - removes the required text and re-adds it
         // with styling (FIXME)
-         
+
         gint l = gtk_text_get_length( GTK_TEXT(m_text) );
 
         wxCHECK_MSG( start >= 0 && end <= l, FALSE,