From bbcbf5820ffe4cb8e3a864cec7b36274ea69d06c Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 6 Apr 2014 17:22:55 -0400 Subject: [PATCH] ui: Don't hang the MetaUI pointer off the GdkDisplay Instead, use the user_data in the filter to pass a MetaUI through. --- src/ui/ui.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/ui/ui.c b/src/ui/ui.c index 11de81306..5b60927ca 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -94,12 +94,12 @@ is_input_event (XEvent *event) */ static gboolean -maybe_redirect_mouse_event (XEvent *xevent) +maybe_redirect_mouse_event (MetaUI *ui, + XEvent *xevent) { GdkDisplay *gdisplay; GdkDeviceManager *gmanager; GdkDevice *gdevice; - MetaUI *ui; GdkEvent *gevent; GdkWindow *gdk_window; Window window; @@ -107,6 +107,9 @@ maybe_redirect_mouse_event (XEvent *xevent) XIDeviceEvent *xev_d = NULL; XIEnterEvent *xev_e = NULL; + if (xev->display != ui->xdisplay) + return FALSE; + if (!is_input_event (xevent)) return FALSE; @@ -130,10 +133,6 @@ maybe_redirect_mouse_event (XEvent *xevent) } gdisplay = gdk_x11_lookup_xdisplay (xev->display); - ui = g_object_get_data (G_OBJECT (gdisplay), "meta-ui"); - if (!ui) - return FALSE; - gdk_window = gdk_x11_window_lookup_for_display (gdisplay, window); if (gdk_window == NULL) return FALSE; @@ -227,7 +226,9 @@ ui_filter_func (GdkXEvent *xevent, GdkEvent *event, gpointer data) { - if (maybe_redirect_mouse_event (xevent)) + MetaUI *ui = data; + + if (maybe_redirect_mouse_event (ui, xevent)) return GDK_FILTER_REMOVE; else return GDK_FILTER_CONTINUE; @@ -256,9 +257,7 @@ meta_ui_new (Display *xdisplay, */ gtk_widget_show (GTK_WIDGET (ui->frames)); - gdk_window_add_filter (NULL, ui_filter_func, NULL); - - g_object_set_data (G_OBJECT (gdisplay), "meta-ui", ui); + gdk_window_add_filter (NULL, ui_filter_func, ui); return ui; } @@ -266,14 +265,9 @@ meta_ui_new (Display *xdisplay, void meta_ui_free (MetaUI *ui) { - GdkDisplay *gdisplay; - gtk_widget_destroy (GTK_WIDGET (ui->frames)); - gdisplay = gdk_x11_lookup_xdisplay (ui->xdisplay); - g_object_set_data (G_OBJECT (gdisplay), "meta-ui", NULL); - - gdk_window_remove_filter (NULL, ui_filter_func, NULL); + gdk_window_remove_filter (NULL, ui_filter_func, ui); g_free (ui); }