[mutter] screen: use stack tracker for initial window query
- From: Daniel Drake <dsd src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] screen: use stack tracker for initial window query
- Date: Mon, 6 Jan 2014 20:28:06 +0000 (UTC)
commit bc9b923d5cba7370c83efdf343fee87eec5726cf
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 89c1846..efd6f41 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]