From a393e2ef33b1220fd8365f350202b0e7a12004e2 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Tue, 2 Oct 2018 17:49:19 +0200 Subject: [PATCH 1/2] wayland: Update saved size when maximized/fullscreen If a client issues a `move_resize()` request while the window is maximized or fullscreen, update the saved size for when it will be unmaximized/unfullscreened Related: https://gitlab.gnome.org/GNOME/gtk/issues/1044 --- gdk/wayland/gdkwindow-wayland.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index 1c62c8f65e..b5d427ce31 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -3311,6 +3311,12 @@ gdk_window_wayland_move_resize (GdkWindow *window, } } + if (window->state & (GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_MAXIMIZED)) + { + impl->saved_width = width; + impl->saved_height = height; + } + /* If this function is called with width and height = -1 then that means * just move the window - don't update its size */ From eb71ec911c95bd4f67a9ddddef306aa49a9488ee Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 2 Oct 2018 18:22:33 +0200 Subject: [PATCH 2/2] window: handle configure request when maximized/fullscreen Commit 42b02d9d ("ignore resize increments for maximized/fullscreen") introduced a regression which prevents window from being resized while maximized or fullscreen. Move the check for maximized/fullscreen where the geometry is handled rather than ignoring the geometry info when maximized/fullscreen so that a client issuing a "move_resize()" while maximized or fullscreen can get the requested size when restoring the original window state. Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1044 --- gtk/gtkwindow.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 62a7cb7686..5298470d6f 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -9416,8 +9416,9 @@ gtk_window_compute_configure_request_size (GtkWindow *window, info = gtk_window_get_geometry_info (window, FALSE); - if (priv->need_default_size || - priv->force_resize) + if ((priv->need_default_size || priv->force_resize) && + !priv->maximized && + !priv->fullscreen) { gtk_window_guess_default_size (window, width, height); gtk_window_get_remembered_size (window, &w, &h); @@ -9453,13 +9454,7 @@ gtk_window_compute_configure_request_size (GtkWindow *window, gtk_window_get_remembered_size (window, width, height); } - /* Override any size with gtk_window_resize() values */ - if (priv->maximized || priv->fullscreen) - { - /* Unless we are maximized or fullscreen */ - gtk_window_get_remembered_size (window, width, height); - } - else if (info) + if (info) { gint resize_width_csd = info->resize_width; gint resize_height_csd = info->resize_height;