[mutter/wip/xwayland-on-demand: 23/32] Make stack tracker work without X11



commit 703f05f6e38b4c9a7bc812436a9e382742dbb501
Author: Armin Krezović <krezovic armin gmail com>
Date:   Sat Aug 26 22:43:28 2017 +0200

    Make stack tracker work without X11

 src/core/display.c       |    6 +++---
 src/core/stack-tracker.c |   26 ++++++++++++++++++--------
 2 files changed, 21 insertions(+), 11 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index f892413..1f761ff 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -797,6 +797,9 @@ meta_display_open (void)
 
   meta_display_set_cursor (display, META_CURSOR_DEFAULT);
 
+  display->stack = meta_stack_new (display);
+  display->stack_tracker = meta_stack_tracker_new (display);
+
   /* This is the default layout extracted from default
    * variable values in update_num_workspaces ()
    * This can be overriden using _NET_DESKTOP_LAYOUT in
@@ -830,9 +833,6 @@ meta_display_open (void)
 
   timestamp = display->x11_display->timestamp;
 
-  display->stack = meta_stack_new (display);
-  display->stack_tracker = meta_stack_tracker_new (display);
-
   display->last_focus_time = timestamp;
   display->last_user_time = timestamp;
   display->compositor = NULL;
diff --git a/src/core/stack-tracker.c b/src/core/stack-tracker.c
index f6372db..0b3379b 100644
--- a/src/core/stack-tracker.c
+++ b/src/core/stack-tracker.c
@@ -476,13 +476,14 @@ copy_stack (GArray *stack)
 }
 
 static void
-query_xserver_stack (MetaStackTracker *tracker)
+query_xserver_stack (MetaDisplay      *display,
+                     MetaStackTracker *tracker)
 {
-  MetaX11Display *x11_display = tracker->display->x11_display;
+  MetaX11Display *x11_display = display->x11_display;
   Window ignored1, ignored2;
   Window *children;
   guint n_children;
-  guint i;
+  guint i, old_len;
 
   tracker->xserver_serial = XNextRequest (x11_display->xdisplay);
 
@@ -490,11 +491,12 @@ query_xserver_stack (MetaStackTracker *tracker)
               x11_display->xroot,
               &ignored1, &ignored2, &children, &n_children);
 
-  tracker->verified_stack = g_array_sized_new (FALSE, FALSE, sizeof (guint64), n_children);
-  g_array_set_size (tracker->verified_stack, n_children);
+  old_len = tracker->verified_stack->len;
+
+  g_array_set_size (tracker->verified_stack, old_len + n_children);
 
   for (i = 0; i < n_children; i++)
-    g_array_index (tracker->verified_stack, guint64, i) = children[i];
+    g_array_index (tracker->verified_stack, guint64, old_len + i) = children[i];
 
   XFree (children);
 }
@@ -507,10 +509,14 @@ meta_stack_tracker_new (MetaDisplay *display)
   tracker = g_new0 (MetaStackTracker, 1);
   tracker->display = display;
 
-  query_xserver_stack (tracker);
-
+  tracker->verified_stack = g_array_new (FALSE, FALSE, sizeof (guint64));
   tracker->unverified_predictions = g_queue_new ();
 
+  g_signal_connect (display,
+                    "x11-display-opened",
+                    G_CALLBACK (query_xserver_stack),
+                    tracker);
+
   meta_stack_tracker_dump (tracker);
 
   return tracker;
@@ -530,6 +536,10 @@ meta_stack_tracker_free (MetaStackTracker *tracker)
   g_queue_free (tracker->unverified_predictions);
   tracker->unverified_predictions = NULL;
 
+  g_signal_handlers_disconnect_by_func (tracker->display,
+                                        (gpointer)query_xserver_stack,
+                                        tracker);
+
   g_free (tracker);
 }
 


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