[mutter] Make stack tracker work without X11
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] Make stack tracker work without X11
- Date: Sat, 7 Jul 2018 10:00:54 +0000 (UTC)
commit e6b885210c0bd97a7a9e0657e7a694d9e779463d
Author: Armin Krezović <krezovic armin gmail com>
Date: Sat Aug 26 22:43:28 2017 +0200
Make stack tracker work without X11
https://bugzilla.gnome.org/show_bug.cgi?id=759538
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 027d35f43..248de99f2 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -803,6 +803,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
@@ -835,9 +838,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 f6372dba7..0b3379b20 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]