[mutter/gnome-3-10] screen: use stack tracker for initial window query



commit 1066c19e6700fd012acf0c5db54f2c8602ec69bd
Author: Daniel Drake <drake endlessm com>
Date:   Mon Dec 30 14:26:10 2013 -0600

    screen: use stack tracker for initial window query
    
    In meta_screen_manage_all_windows() we can use our own stack
    tracker to get the list of windows - no need to query X again.
    
    A copy is needed because the stack gets modified as part of the loop.
    Specifically, meta_stack_tracker_get_stack() at this time returns the
    predicted stack, and meta_window_new() performs a few operations
    (e.g. framing) which cause immediate changes to the predicted stack.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=721345

 src/core/screen.c |   14 ++++++--------
 1 files changed, 6 insertions(+), 8 deletions(-)
---
diff --git a/src/core/screen.c b/src/core/screen.c
index c981778..0bfe2d9 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -880,9 +880,9 @@ meta_screen_free (MetaScreen *screen,
 void
 meta_screen_manage_all_windows (MetaScreen *screen)
 {
-  Window ignored1, ignored2;
+  Window *_children;
   Window *children;
-  guint n_children, i;
+  int n_children, i;
 
   meta_display_grab (screen->display);
 
@@ -891,10 +891,10 @@ meta_screen_manage_all_windows (MetaScreen *screen)
                                                 screen);
 
   meta_stack_freeze (screen->stack);
+  meta_stack_tracker_get_stack (screen->stack_tracker, &_children, &n_children);
 
-  XQueryTree (screen->display->xdisplay,
-              screen->xroot,
-              &ignored1, &ignored2, &children, &n_children);
+  /* Copy the stack as it will be modified as part of the loop */
+  children = g_memdup (_children, sizeof (Window) * n_children);
 
   for (i = 0; i < n_children; ++i)
     {
@@ -902,9 +902,7 @@ meta_screen_manage_all_windows (MetaScreen *screen)
                        META_COMP_EFFECT_NONE);
     }
 
-  if (children)
-    XFree (children);
-
+  g_free (children);
   meta_stack_thaw (screen->stack);
 
   meta_display_ungrab (screen->display);


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