]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textctrl.cpp
Fix wxCursor(wxImage&) ctor for image widths not a multiple of 8, and finding second...
[wxWidgets.git] / src / gtk / textctrl.cpp
index a1bdfc5414f601bfdcb93badd9ba78ca9bfc0404..8fc7205172944d0dd430e28380ff5e6403168709 100644 (file)
@@ -198,14 +198,9 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text,
         wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXINDENT", start, end);
 
         // Convert indent from 1/10th of a mm into pixels
-        float factor;
-#if GTK_CHECK_VERSION(2,2,0)
-        if (!gtk_check_version(2,2,0))
-            factor = (float)gdk_screen_get_width(gtk_widget_get_screen(text)) /
+        float factor =
+            (float)gdk_screen_get_width(gtk_widget_get_screen(text)) /
                       gdk_screen_get_width_mm(gtk_widget_get_screen(text)) / 10;
-        else
-#endif
-            factor = (float)gdk_screen_width() / gdk_screen_width_mm() / 10;
 
         const int indent = (int)(factor * attr.GetLeftIndent());
         const int subIndent = (int)(factor * attr.GetLeftSubIndent());
@@ -260,14 +255,9 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text,
         if (!tag)
         {
             // Factor to convert from 1/10th of a mm into pixels
-            float factor;
-#if GTK_CHECK_VERSION(2,2,0)
-            if (!gtk_check_version(2,2,0))
-                factor = (float)gdk_screen_get_width(gtk_widget_get_screen(text)) /
+            float factor =
+                (float)gdk_screen_get_width(gtk_widget_get_screen(text)) /
                           gdk_screen_get_width_mm(gtk_widget_get_screen(text)) / 10;
-            else
-#endif
-                factor = (float)gdk_screen_width() / gdk_screen_width_mm() / 10;
 
             PangoTabArray* tabArray = pango_tab_array_new(tabs.GetCount(), TRUE);
             for (size_t i = 0; i < tabs.GetCount(); i++)
@@ -536,7 +526,7 @@ handle_text_clipboard_callback( GtkWidget *widget, wxTextCtrl *win,
 {
     wxClipboardTextEvent event( eventType, win->GetId() );
     event.SetEventObject( win );
-    if ( win->GetEventHandler()->ProcessEvent( event ) )
+    if ( win->HandleWindowEvent( event ) )
     {
         // don't let the default processing to take place if we did something
         // ourselves in the event handler
@@ -711,6 +701,7 @@ bool wxTextCtrl::Create( wxWindow *parent,
 
         if (style & wxNO_BORDER)
             g_object_set (m_text, "has-frame", FALSE, NULL);
+            
     }
 
     m_parent->DoAddChild( this );
@@ -789,6 +780,13 @@ bool wxTextCtrl::Create( wxWindow *parent,
             au_check_range(&start, &end);
         }
     }
+    else // single line
+    {
+        // do the right thing with Enter presses depending on whether we have
+        // wxTE_PROCESS_ENTER or not
+        GTKSetActivatesDefault();
+    }
+
 
     g_signal_connect (m_text, "copy-clipboard",
                       G_CALLBACK (gtk_copy_clipboard_callback), this);
@@ -824,9 +822,19 @@ void wxTextCtrl::GTKSetEditable()
 
 void wxTextCtrl::GTKSetVisibility()
 {
-    // VZ: shouldn't we assert if wxTE_PASSWORD is set for multiline control?
-    if ( IsSingleLine() )
-        gtk_entry_set_visibility(GTK_ENTRY(m_text), !HasFlag(wxTE_PASSWORD));
+    wxCHECK_RET( IsSingleLine(),
+                 "wxTE_PASSWORD is for single line text controls only" );
+
+    gtk_entry_set_visibility(GTK_ENTRY(m_text), !HasFlag(wxTE_PASSWORD));
+}
+
+void wxTextCtrl::GTKSetActivatesDefault()
+{
+    wxCHECK_RET( IsSingleLine(),
+                 "wxTE_PROCESS_ENTER is for single line text controls only" );
+
+    gtk_entry_set_activates_default(GTK_ENTRY(m_text),
+                                    !HasFlag(wxTE_PROCESS_ENTER));
 }
 
 void wxTextCtrl::GTKSetWrapMode()
@@ -844,17 +852,7 @@ void wxTextCtrl::GTKSetWrapMode()
     else if ( HasFlag( wxTE_WORDWRAP ) )
         wrap = GTK_WRAP_WORD;
     else // HasFlag(wxTE_BESTWRAP) always true as wxTE_BESTWRAP == 0
-    {
-        // GTK_WRAP_WORD_CHAR seems to be new in GTK+ 2.4
-#ifdef __WXGTK24__
-        if ( !gtk_check_version(2,4,0) )
-        {
-            wrap = GTK_WRAP_WORD_CHAR;
-        }
-        else
-#endif // __WXGTK24__
-        wrap = GTK_WRAP_WORD;
-    }
+        wrap = GTK_WRAP_WORD_CHAR;
 
     gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW( m_text ), wrap );
 }
@@ -875,23 +873,16 @@ void wxTextCtrl::GTKSetJustification()
     }
     else // single line
     {
-#ifdef __WXGTK24__
-        // gtk_entry_set_alignment was introduced in gtk+-2.3.5
-        if (!gtk_check_version(2,4,0))
-        {
-            gfloat align;
-            if ( HasFlag(wxTE_RIGHT) )
-                align = 1.0;
-            else if ( HasFlag(wxTE_CENTRE) )
-                align = 0.5;
-            else // single line
-                align = 0.0;
-
-            gtk_entry_set_alignment(GTK_ENTRY(m_text), align);
-        }
-#endif // __WXGTK24__
-    }
+        gfloat align;
+        if ( HasFlag(wxTE_RIGHT) )
+            align = 1.0;
+        else if ( HasFlag(wxTE_CENTRE) )
+            align = 0.5;
+        else // single line
+            align = 0.0;
 
+        gtk_entry_set_alignment(GTK_ENTRY(m_text), align);
+    }
 }
 
 void wxTextCtrl::SetWindowStyleFlag(long style)
@@ -906,6 +897,9 @@ void wxTextCtrl::SetWindowStyleFlag(long style)
     if ( (style & wxTE_PASSWORD) != (styleOld & wxTE_PASSWORD) )
         GTKSetVisibility();
 
+    if ( (style & wxTE_PROCESS_ENTER) != (styleOld & wxTE_PROCESS_ENTER) )
+        GTKSetActivatesDefault();
+
     static const long flagsWrap = wxTE_WORDWRAP | wxTE_CHARWRAP | wxTE_DONTWRAP;
     if ( (style & flagsWrap) != (styleOld & flagsWrap) )
         GTKSetWrapMode();
@@ -1534,32 +1528,9 @@ void wxTextCtrl::OnChar( wxKeyEvent &key_event )
             wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
             event.SetEventObject(this);
             event.SetString(GetValue());
-            if ( GetEventHandler()->ProcessEvent(event) )
+            if ( HandleWindowEvent(event) )
                 return;
         }
-
-        // FIXME: this is not the right place to do it, wxDialog::OnCharHook()
-        //        probably is
-        if ( IsSingleLine() )
-        {
-            // This will invoke the dialog default action, such
-            // as the clicking the default button.
-
-            wxWindow *top_frame = m_parent;
-            while (top_frame->GetParent() && !(top_frame->IsTopLevel()))
-                top_frame = top_frame->GetParent();
-
-            if (top_frame && GTK_IS_WINDOW(top_frame->m_widget))
-            {
-                GtkWindow *window = GTK_WINDOW(top_frame->m_widget);
-
-                if (window->default_widget)
-                {
-                    gtk_widget_activate (window->default_widget);
-                    return;
-                }
-            }
-        }
     }
 
     key_event.Skip();
@@ -1853,8 +1824,8 @@ void wxTextCtrl::OnUrlMouseEvent(wxMouseEvent& event)
 
     InitCommandEvent(url_event);
     // Is that a good idea? Seems not (pleasure with gtk_text_view_start_selection_drag)
-    //event.Skip(!GetEventHandler()->ProcessEvent(url_event));
-    GetEventHandler()->ProcessEvent(url_event);
+    //event.Skip(!HandleWindowEvent(url_event));
+    HandleWindowEvent(url_event);
 }
 
 bool wxTextCtrl::GTKProcessEvent(wxEvent& event) const