From 5716fe12e40368141aec92b99bd8e76a963225fb Mon Sep 17 00:00:00 2001
From: rcaridade145 <rcaridade145@gmail.com>
Date: Tue, 3 Mar 2020 20:05:27 +0000
Subject: [PATCH 3/4] stack: make meta_window_raise() and meta_window_lower()
smarter
https://bugzilla.gnome.org/show_bug.cgi?id=620744
Based on commit https://gitlab.gnome.org/GNOME/metacity/-/commit/9245f9588bd7c17ccbe04df65c1579313cbad07b
---
src/core/stack.c | 42 +++++++++++++++++++++++++++++++++++++++---
1 file changed, 39 insertions(+), 3 deletions(-)
diff --git a/src/core/stack.c b/src/core/stack.c
index 23a257b8..fa4dbee3 100644
--- a/src/core/stack.c
+++ b/src/core/stack.c
@@ -181,8 +181,25 @@ void
meta_stack_raise (MetaStack *stack,
MetaWindow *window)
{
- meta_window_set_stack_position_no_sync (window,
- stack->n_positions - 1);
+ GList *l;
+ int max_stack_position = window->stack_position;
+ MetaWorkspace *workspace;
+
+ g_assert (stack->added == NULL);
+
+ workspace = meta_window_get_workspace (window);
+ for (l = stack->sorted; l; l = l->next)
+ {
+ MetaWindow *w = (MetaWindow *) l->data;
+ if (meta_window_located_on_workspace (w, workspace) &&
+ w->stack_position > max_stack_position)
+ max_stack_position = w->stack_position;
+ }
+
+ if (max_stack_position == window->stack_position)
+ return;
+
+ meta_window_set_stack_position_no_sync (window, max_stack_position);
stack_sync_to_server (stack);
}
@@ -191,7 +208,25 @@ void
meta_stack_lower (MetaStack *stack,
MetaWindow *window)
{
- meta_window_set_stack_position_no_sync (window, 0);
+ GList *l;
+ int min_stack_position = window->stack_position;
+ MetaWorkspace *workspace;
+
+ g_assert (stack->added == NULL);
+
+ workspace = meta_window_get_workspace (window);
+ for (l = stack->sorted; l; l = l->next)
+ {
+ MetaWindow *w = (MetaWindow *) l->data;
+ if (meta_window_located_on_workspace (w, workspace) &&
+ w->stack_position < min_stack_position)
+ min_stack_position = w->stack_position;
+ }
+
+ if (min_stack_position == window->stack_position)
+ return;
+
+ meta_window_set_stack_position_no_sync (window, min_stack_position);
stack_sync_to_server (stack);
}
@@ -202,6 +237,7 @@ meta_stack_freeze (MetaStack *stack)
stack->freeze_count += 1;
}
+
void
meta_stack_thaw (MetaStack *stack)
{
--
2.21.1