[mutter] window: Force placement for first placement rule
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Force placement for first placement rule
- Date: Fri, 6 Mar 2020 18:46:14 +0000 (UTC)
commit 6cd0aa429f0e042477ca89a5a9c0176f36ad117b
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Fri Mar 6 17:24:35 2020 +0100
window: Force placement for first placement rule
If we don't force the placement, we enter the constrain machinery with
the position (0, 0), meaning we always get the "current work area" setup
to correspond to whatever logical monitor was at that position.
Avoid this by doing the same as "meta_window_force_placement()" and set
"window->calc_placement" to TRUE while move-resizing, causing the
move-resize to first calculate the initial position.
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/1098
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1110
src/wayland/meta-window-wayland.c | 7 +++++++
1 file changed, 7 insertions(+)
---
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
index 9864d2fd4..86cdbf86e 100644
--- a/src/wayland/meta-window-wayland.c
+++ b/src/wayland/meta-window-wayland.c
@@ -1001,6 +1001,10 @@ void
meta_window_place_with_placement_rule (MetaWindow *window,
MetaPlacementRule *placement_rule)
{
+ gboolean first_placement;
+
+ first_placement = !window->placement.rule;
+
g_clear_pointer (&window->placement.rule, g_free);
window->placement.rule = g_new0 (MetaPlacementRule, 1);
*window->placement.rule = *placement_rule;
@@ -1009,12 +1013,15 @@ meta_window_place_with_placement_rule (MetaWindow *window,
window->unconstrained_rect.y = window->rect.y;
window->unconstrained_rect.width = placement_rule->width;
window->unconstrained_rect.height = placement_rule->height;
+
+ window->calc_placement = first_placement;
meta_window_move_resize_internal (window,
(META_MOVE_RESIZE_MOVE_ACTION |
META_MOVE_RESIZE_RESIZE_ACTION |
META_MOVE_RESIZE_PLACEMENT_CHANGED),
META_GRAVITY_NORTH_WEST,
window->unconstrained_rect);
+ window->calc_placement = FALSE;
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]