[mutter] window: Force placement for first placement rule



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]