]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/window.cpp
Fix header formatting problem in wxMessageBox() documentation.
[wxWidgets.git] / src / gtk / window.cpp
index 1a3f1065b08be29f2cee5a115802df9c3d02d80b..526a47f492770f541725fa3f955cb2ce2e086b55 100644 (file)
@@ -1068,6 +1068,21 @@ gtk_window_key_release_callback( GtkWidget * WXUNUSED(widget),
 }
 }
 
+//-----------------------------------------------------------------------------
+// key and mouse events, after, from m_widget
+//-----------------------------------------------------------------------------
+
+extern "C" {
+static gboolean key_and_mouse_event_after(GtkWidget* widget, GdkEventKey*, wxWindow*)
+{
+    // If a widget does not handle a key or mouse event, GTK+ sends it up the
+    // parent chain until it is handled. These events are not supposed to
+    // propagate in wxWidgets, so prevent it unless widget is in a native
+    // container.
+    return WX_IS_PIZZA(gtk_widget_get_parent(widget));
+}
+}
+
 // ============================================================================
 // the mouse events
 // ============================================================================
@@ -2357,6 +2372,18 @@ void wxWindowGTK::PostCreation()
 
     ConnectWidget( connect_widget );
 
+    // connect handler to prevent events from propagating up parent chain
+    g_signal_connect_after(m_widget,
+        "key_press_event", G_CALLBACK(key_and_mouse_event_after), this);
+    g_signal_connect_after(m_widget,
+        "key_release_event", G_CALLBACK(key_and_mouse_event_after), this);
+    g_signal_connect_after(m_widget,
+        "button_press_event", G_CALLBACK(key_and_mouse_event_after), this);
+    g_signal_connect_after(m_widget,
+        "button_release_event", G_CALLBACK(key_and_mouse_event_after), this);
+    g_signal_connect_after(m_widget,
+        "motion_notify_event", G_CALLBACK(key_and_mouse_event_after), this);
+
     // We cannot set colours, fonts and cursors before the widget has been
     // realized, so we do this directly after realization -- unless the widget
     // was in fact realized already.