[mutter] core/window: Do not apply limits if no previous size has been stored



commit 20519a1486d748b22d1bdcabc8d833d15b88fbf8
Author: Christian Rauch <Rauch Christian gmx de>
Date:   Sat Sep 21 00:49:44 2019 +0100

    core/window: Do not apply limits if no previous size has been stored
    
    A previously stored width and height of 0 signifies that no previous window
    size has been stored. This might be the case if an application starts in
    maximized or fullscreen mode. If no previous window size has been stored,
    the client needs to determine its own size.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=783901
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/801#note_607607

 src/core/window.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index 16a7dc2895..894d188347 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -3369,10 +3369,14 @@ meta_window_unmaximize (MetaWindow        *window,
 
       /* Window's size hints may have changed while maximized, making
        * saved_rect invalid.  #329152
+       * Do not enforce limits, if no previous 'saved_rect' has been stored.
        */
-      meta_window_frame_rect_to_client_rect (window, &target_rect, &target_rect);
-      ensure_size_hints_satisfied (&target_rect, &window->size_hints);
-      meta_window_client_rect_to_frame_rect (window, &target_rect, &target_rect);
+      if (target_rect.width > 0 && target_rect.height > 0)
+        {
+          meta_window_frame_rect_to_client_rect (window, &target_rect, &target_rect);
+          ensure_size_hints_satisfied (&target_rect, &window->size_hints);
+          meta_window_client_rect_to_frame_rect (window, &target_rect, &target_rect);
+        }
 
       meta_compositor_size_change_window (window->display->compositor, window,
                                           META_SIZE_CHANGE_UNMAXIMIZE,
@@ -3526,10 +3530,14 @@ meta_window_unmake_fullscreen (MetaWindow  *window)
 
       /* Window's size hints may have changed while maximized, making
        * saved_rect invalid.  #329152
+       * Do not enforce limits, if no previous 'saved_rect' has been stored.
        */
-      meta_window_frame_rect_to_client_rect (window, &target_rect, &target_rect);
-      ensure_size_hints_satisfied (&target_rect, &window->size_hints);
-      meta_window_client_rect_to_frame_rect (window, &target_rect, &target_rect);
+      if (target_rect.width > 0 && target_rect.height > 0)
+        {
+          meta_window_frame_rect_to_client_rect (window, &target_rect, &target_rect);
+          ensure_size_hints_satisfied (&target_rect, &window->size_hints);
+          meta_window_client_rect_to_frame_rect (window, &target_rect, &target_rect);
+        }
 
       /* Need to update window->has_resize_func before we move_resize()
        */
@@ -4061,6 +4069,7 @@ meta_window_move_resize_internal (MetaWindow          *window,
   temporary_rect = window->rect;
   if (flags & (META_MOVE_RESIZE_MOVE_ACTION | META_MOVE_RESIZE_RESIZE_ACTION) &&
       !(flags & META_MOVE_RESIZE_WAYLAND_FINISH_MOVE_RESIZE) &&
+      (unconstrained_rect.width > 0 && unconstrained_rect.height > 0) &&
       window->monitor)
     {
       MetaRectangle old_rect;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]