diff options
author | Daniel Drake <drake@endlessm.com> | 2013-12-30 14:26:10 -0600 |
---|---|---|
committer | Daniel Drake <drake@endlessm.com> | 2014-01-06 14:23:43 -0600 |
commit | bc9b923d5cba7370c83efdf343fee87eec5726cf (patch) | |
tree | c17707b8dea44418f3a20f8a83504fe524843324 | |
parent | fef32fb0d471b5f258d8cfcea05d7c6a82692ce8 (diff) | |
download | mutter-bc9b923d5cba7370c83efdf343fee87eec5726cf.tar.gz |
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
-rw-r--r-- | 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 89c18463b..efd6f4101 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -883,9 +883,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); @@ -894,10 +894,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) { @@ -905,9 +905,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); |