[mutter/wip/ui-on-own-connection: 9/13] ui: Don't hang the MetaUI pointer off the GdkDisplay



commit bbcbf5820ffe4cb8e3a864cec7b36274ea69d06c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Sun Apr 6 17:22:55 2014 -0400

    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 files changed, 10 insertions(+), 16 deletions(-)
---
diff --git a/src/ui/ui.c b/src/ui/ui.c
index 11de813..5b60927 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);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]