]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textctrl.cpp
adding x server license terms for polygon methods
[wxWidgets.git] / src / gtk / textctrl.cpp
index 0e408c532b6a6a981af020ccba1abdce7247a338..10a90eaad78622c769de2343fc33f5984a2ad886 100644 (file)
@@ -461,6 +461,25 @@ au_check_range(GtkTextIter *s,
 //-----------------------------------------------------------------------------
 
 extern "C" {
+
+// Normal version used for detecting IME input and generating appropriate
+// events for it.
+void
+wx_insert_text_callback(GtkTextBuffer* buffer,
+                        GtkTextIter* WXUNUSED(end),
+                        gchar *text,
+                        gint WXUNUSED(len),
+                        wxTextCtrl *win)
+{
+    if ( win->GTKOnInsertText(text) )
+    {
+        // If we already handled the new text insertion, don't do it again.
+        g_signal_stop_emission_by_name (buffer, "insert_text");
+    }
+}
+
+
+// And an "after" version used for detecting URLs in the text.
 static void
 au_insert_text_callback(GtkTextBuffer * WXUNUSED(buffer),
                         GtkTextIter *end,
@@ -610,7 +629,7 @@ void wxTextCtrl::Init()
     m_anonymousMarkList = NULL;
 }
 
-wxTextCtrl::~wxTextCtrl() wxNOEXCEPT
+wxTextCtrl::~wxTextCtrl()
 {
     if (m_text)
         GTKDisconnect(m_text);
@@ -787,12 +806,19 @@ bool wxTextCtrl::Create( wxWindow *parent,
             gtk_text_buffer_get_end_iter(m_buffer, &end);
             au_check_range(&start, &end);
         }
+
+        // Also connect a normal (not "after") signal handler for checking for
+        // the IME-generated input.
+        g_signal_connect(m_buffer, "insert_text",
+                         G_CALLBACK(wx_insert_text_callback), this);
     }
     else // single line
     {
         // do the right thing with Enter presses depending on whether we have
         // wxTE_PROCESS_ENTER or not
         GTKSetActivatesDefault();
+
+        GTKConnectInsertTextSignal(GTK_ENTRY(m_text));
     }
 
 
@@ -815,6 +841,30 @@ GtkEntry *wxTextCtrl::GetEntry() const
     return GTK_ENTRY(m_text);
 }
 
+int wxTextCtrl::GTKIMFilterKeypress(GdkEventKey* event) const
+{
+#if GTK_CHECK_VERSION(2, 22, 0)
+    if ( gtk_check_version(2, 12, 0) == 0 )
+    {
+        if ( IsSingleLine() )
+        {
+            return wxTextEntry::GTKIMFilterKeypress(event);
+        }
+        else
+        {
+            return gtk_text_view_im_context_filter_keypress(
+                        GTK_TEXT_VIEW(m_text),
+                        event
+                    );
+        }
+    }
+#else // GTK+ < 2.22
+    wxUnusedVar(event);
+#endif // GTK+ 2.22+
+
+    return FALSE;
+}
+
 // ----------------------------------------------------------------------------
 // flags handling
 // ----------------------------------------------------------------------------
@@ -1291,26 +1341,6 @@ bool wxTextCtrl::Enable( bool enable )
     return true;
 }
 
-// wxGTK-specific: called recursively by Enable,
-// to give widgets an opportunity to correct their colours after they
-// have been changed by Enable
-void wxTextCtrl::OnEnabled(bool WXUNUSED(enable))
-{
-    // If we have a custom background colour, we use this colour in both
-    // disabled and enabled mode, or we end up with a different colour under the
-    // text.
-    wxColour oldColour = GetBackgroundColour();
-    if (oldColour.IsOk())
-    {
-        // Need to set twice or it'll optimize the useful stuff out
-        if (oldColour == * wxWHITE)
-            SetBackgroundColour(*wxBLACK);
-        else
-            SetBackgroundColour(*wxWHITE);
-        SetBackgroundColour(oldColour);
-    }
-}
-
 void wxTextCtrl::MarkDirty()
 {
     m_modified = true;
@@ -1588,7 +1618,7 @@ void wxTextCtrl::OnChar( wxKeyEvent &key_event )
     {
         if ( HasFlag(wxTE_PROCESS_ENTER) )
         {
-            wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
+            wxCommandEvent event(wxEVT_TEXT_ENTER, m_windowId);
             event.SetEventObject(this);
             event.SetString(GetValue());
             if ( HandleWindowEvent(event) )
@@ -2009,7 +2039,7 @@ bool wxTextCtrl::GTKProcessEvent(wxEvent& event) const
 wxVisualAttributes
 wxTextCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
 {
-    return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true);
+    return GetDefaultAttributesFromGTKWidget(gtk_entry_new(), true);
 }
 
 #endif // wxUSE_TEXTCTRL