summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Matos <tiagomatos@gmail.com>2017-05-19 17:11:19 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2017-09-30 13:23:19 +0300
commit61bb2c4cdc7595f039821664f7d4d2961f5d41df (patch)
tree5293143c885ec50bc6d6c3320cc9f117f4b9f4ff
parent0e569d311556894d30c9677a73954590784083b9 (diff)
downloadmetacity-61bb2c4cdc7595f039821664f7d4d2961f5d41df.tar.gz
stack-tracker: keep override redirect windows on top
https://git.gnome.org/browse/mutter/commit/?id=e3d5bc07 https://bugzilla.gnome.org/show_bug.cgi?id=780485
-rw-r--r--src/core/stack-tracker.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/core/stack-tracker.c b/src/core/stack-tracker.c
index dedfbfab..922801f2 100644
--- a/src/core/stack-tracker.c
+++ b/src/core/stack-tracker.c
@@ -151,6 +151,9 @@ struct _MetaStackTracker
};
static void
+meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker);
+
+static void
meta_stack_op_dump (MetaStackOp *op,
const char *prefix,
const char *suffix)
@@ -768,6 +771,8 @@ meta_stack_tracker_sync_stack (MetaStackTracker *tracker)
tracker->sync_stack_idle = 0;
}
+ meta_stack_tracker_keep_override_redirect_on_top (tracker);
+
meta_stack_tracker_get_stack (tracker, &windows, &n_windows);
meta_windows = NULL;
@@ -891,6 +896,38 @@ meta_stack_tracker_lower (MetaStackTracker *tracker,
meta_stack_tracker_raise_above (tracker, window, None);
}
+static void
+meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker)
+{
+ MetaWindow *window;
+ Window *stack;
+ int n_windows, i;
+ int topmost_non_or;
+
+ meta_stack_tracker_get_stack (tracker, &stack, &n_windows);
+
+ for (i = n_windows - 1; i >= 0; i--)
+ {
+ window = meta_display_lookup_x_window (tracker->screen->display, stack[i]);
+ if (window && window->layer != META_LAYER_OVERRIDE_REDIRECT)
+ break;
+ }
+
+ topmost_non_or = i;
+
+ for (i -= 1; i >= 0; i--)
+ {
+ window = meta_display_lookup_x_window (tracker->screen->display, stack[i]);
+ if (window && window->layer == META_LAYER_OVERRIDE_REDIRECT)
+ {
+ meta_stack_tracker_raise_above (tracker, stack[i], stack[topmost_non_or]);
+ meta_stack_tracker_get_stack (tracker, &stack, &n_windows);
+ topmost_non_or -= 1;
+ }
+ }
+}
+
+
void
meta_stack_tracker_restack_managed (MetaStackTracker *tracker,
const Window *managed,