]> git.saurik.com Git - wxWidgets.git/commitdiff
Use g_signal_connect_after for GTK+ native controls
authorRobert Roebling <robert@roebling.de>
Thu, 16 Feb 2006 09:00:45 +0000 (09:00 +0000)
committerRobert Roebling <robert@roebling.de>
Thu, 16 Feb 2006 09:00:45 +0000 (09:00 +0000)
    and wxTopLevelWindow focus events and the normal
    _connect for custom controls.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37620 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/toplevel.cpp
src/gtk/window.cpp

index 5e8b65ab9b2fbe23e70074cad97d99ee64ba93da..fa07bb1c9be3bba0bb3f63cf6141a44b9032aa81 100644 (file)
@@ -120,7 +120,7 @@ static gboolean gtk_frame_urgency_timer_callback( wxTopLevelWindowGTK *win )
 //-----------------------------------------------------------------------------
 
 extern "C" {
-static gint gtk_frame_focus_in_callback( GtkWidget *widget,
+static gboolean gtk_frame_focus_in_callback( GtkWidget *widget,
                                          GdkEvent *WXUNUSED(event),
                                          wxTopLevelWindowGTK *win )
 {
@@ -173,7 +173,7 @@ static gint gtk_frame_focus_in_callback( GtkWidget *widget,
     event.SetEventObject(g_activeFrame);
     g_activeFrame->GetEventHandler()->ProcessEvent(event);
 
-    return false;
+    return FALSE;
 }
 }
 
@@ -182,7 +182,7 @@ static gint gtk_frame_focus_in_callback( GtkWidget *widget,
 //-----------------------------------------------------------------------------
 
 extern "C" {
-static gint gtk_frame_focus_out_callback( GtkWidget *widget,
+static gboolean gtk_frame_focus_out_callback( GtkWidget *widget,
                                           GdkEventFocus *WXUNUSED(gdk_event),
                                           wxTopLevelWindowGTK *win )
 {
@@ -208,7 +208,7 @@ static gint gtk_frame_focus_out_callback( GtkWidget *widget,
         g_activeFrame = NULL;
     }
 
-    return false;
+    return FALSE;
 }
 }
 
@@ -217,7 +217,7 @@ static gint gtk_frame_focus_out_callback( GtkWidget *widget,
 //-----------------------------------------------------------------------------
 
 extern "C" {
-static gint gtk_frame_focus_callback( GtkWidget *widget, GtkDirectionType WXUNUSED(d), wxWindow *WXUNUSED(win) )
+static gboolean gtk_frame_focus_callback( GtkWidget *widget, GtkDirectionType WXUNUSED(d), wxWindow *WXUNUSED(win) )
 {
     if (g_isIdle)
         wxapp_install_idle_handler();
@@ -619,9 +619,9 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent,
                       G_CALLBACK (gtk_frame_focus_callback), this);
 
     // activation
-    g_signal_connect (m_widget, "focus_in_event",
+    g_signal_connect_after (m_widget, "focus_in_event",
                       G_CALLBACK (gtk_frame_focus_in_callback), this);
-    g_signal_connect (m_widget, "focus_out_event",
+    g_signal_connect_after (m_widget, "focus_out_event",
                       G_CALLBACK (gtk_frame_focus_out_callback), this);
 
     // decorations
index 0138ad5c26c373d4e999e1437930a6c7638537de..ae4e00120e2d01a54e442e64983a2ff9dd9f2f91 100644 (file)
@@ -1877,15 +1877,15 @@ static gboolean gtk_window_focus_in_callback( GtkWidget *widget,
 
         (void)DoSendFocusEvents(win);
         
-        ret = TRUE;
+        ret = true;
     }
 
     // Disable default focus handling for custom windows
     // since the default GTK+ handler issues a repaint
     if (win->m_wxwindow)
-        g_signal_stop_emission_by_name (widget, "focus_in_event");
+        return ret;
         
-    return ret;
+    return false;
 }
 }
 
@@ -1943,15 +1943,15 @@ static gboolean gtk_window_focus_out_callback( GtkWidget *widget,
 
         (void)win->GetEventHandler()->ProcessEvent( event );
         
-        ret = TRUE;
+        ret = true;
     }
     
     // Disable default focus handling for custom windows
     // since the default GTK+ handler issues a repaint
     if (win->m_wxwindow)
-        g_signal_stop_emission_by_name (widget, "focus_out_event");
+        return ret;
            
-    return ret;
+    return false;
 }
 }
 
@@ -2748,10 +2748,20 @@ void wxWindowGTK::PostCreation()
         if (m_focusWidget == NULL)
             m_focusWidget = m_widget;
 
-        g_signal_connect (m_focusWidget, "focus_in_event",
+        if (m_wxwindow)
+        {
+            g_signal_connect (m_focusWidget, "focus_in_event",
+                          G_CALLBACK (gtk_window_focus_in_callback), this);
+            g_signal_connect (m_focusWidget, "focus_out_event",
+                                G_CALLBACK (gtk_window_focus_out_callback), this);
+        }
+        else
+        {
+            g_signal_connect_after (m_focusWidget, "focus_in_event",
                           G_CALLBACK (gtk_window_focus_in_callback), this);
-        g_signal_connect_after (m_focusWidget, "focus_out_event",
+            g_signal_connect_after (m_focusWidget, "focus_out_event",
                                 G_CALLBACK (gtk_window_focus_out_callback), this);
+        }
     }
 
     // connect to the various key and mouse handlers