diff options
author | Rui Matos <tiagomatos@gmail.com> | 2017-05-19 17:11:19 +0200 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2017-09-30 13:23:19 +0300 |
commit | 61bb2c4cdc7595f039821664f7d4d2961f5d41df (patch) | |
tree | 5293143c885ec50bc6d6c3320cc9f117f4b9f4ff | |
parent | 0e569d311556894d30c9677a73954590784083b9 (diff) | |
download | metacity-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.c | 37 |
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, |