[mutter/wayland] display: Use MetaWindow for auto-raise callbacks



commit 08df9bf5590deb93485bf62a2d97a1a1b67bb0be
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Oct 16 00:19:33 2013 -0400

    display: Use MetaWindow for auto-raise callbacks
    
    This allows us to autoraise Wayland windows... well, except for the
    XQueryPointer, but we'll replace that soon.

 src/core/display.c |   34 ++++------------------------------
 src/core/window.c  |    2 ++
 2 files changed, 6 insertions(+), 30 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index deb2056..c7e86b2 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -117,12 +117,6 @@ typedef struct
   guint        ping_timeout_id;
 } MetaPingData;
 
-typedef struct 
-{
-  MetaDisplay *display;
-  Window xwindow;
-} MetaAutoRaiseData;
-
 typedef struct
 {
   MetaDisplay *display;
@@ -1620,23 +1614,10 @@ reset_ignored_crossing_serials (MetaDisplay *display)
 static gboolean 
 window_raise_with_delay_callback (void *data)
 {
-  MetaWindow *window;
-  MetaAutoRaiseData *auto_raise;
-
-  auto_raise = data;
-
-  meta_topic (META_DEBUG_FOCUS, 
-             "In autoraise callback for window 0x%lx\n", 
-             auto_raise->xwindow);
-
-  auto_raise->display->autoraise_timeout_id = 0;
-  auto_raise->display->autoraise_window = NULL;
+  MetaWindow *window = data;
 
-  window  = meta_display_lookup_x_window (auto_raise->display, 
-                                         auto_raise->xwindow);
-  
-  if (window == NULL) 
-    return FALSE;
+  window->display->autoraise_timeout_id = 0;
+  window->display->autoraise_window = NULL;
 
   /* If we aren't already on top, check whether the pointer is inside
    * the window and raise the window if so.
@@ -1778,17 +1759,11 @@ void
 meta_display_queue_autoraise_callback (MetaDisplay *display,
                                        MetaWindow  *window)
 {
-  MetaAutoRaiseData *auto_raise_data;
-
   meta_topic (META_DEBUG_FOCUS, 
               "Queuing an autoraise timeout for %s with delay %d\n", 
               window->desc, 
               meta_prefs_get_auto_raise_delay ());
   
-  auto_raise_data = g_new (MetaAutoRaiseData, 1);
-  auto_raise_data->display = window->display;
-  auto_raise_data->xwindow = window->xwindow;
-  
   if (display->autoraise_timeout_id != 0)
     g_source_remove (display->autoraise_timeout_id);
 
@@ -1796,8 +1771,7 @@ meta_display_queue_autoraise_callback (MetaDisplay *display,
     g_timeout_add_full (G_PRIORITY_DEFAULT,
                         meta_prefs_get_auto_raise_delay (),
                         window_raise_with_delay_callback,
-                        auto_raise_data,
-                        g_free);
+                        window, NULL);
   display->autoraise_window = window;
 }
 
diff --git a/src/core/window.c b/src/core/window.c
index fd4ed51..09a8f83 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -2000,6 +2000,8 @@ meta_window_unmanage (MetaWindow  *window,
   meta_window_ungrab_keys (window);
   meta_display_ungrab_window_buttons (window->display, window->xwindow);
   meta_display_ungrab_focus_window_button (window->display, window);
+  if (window->display->autoraise_window == window)
+    meta_display_remove_autoraise_callback (window->display);
 
   if (window->client_type == META_WINDOW_CLIENT_TYPE_X11)
     {


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