From: dgsasha Date: Wed, 31 May 2023 01:51:42 +0000 (-0400) Subject: win32: Fix minimize and maximize buttons missing on ssd X-Git-Tag: archive/raspbian/4.12.4+ds-3+rpi1^2~21^2~2^2~47^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=03f6684dc32549e11ae9afb676ef11488dbac603;p=gtk4.git win32: Fix minimize and maximize buttons missing on ssd Completely fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5142 --- diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index 392bf2335a..2fa987d473 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -2857,7 +2857,10 @@ gdk_event_translate (MSG *msg, break; case WM_SYSCOMMAND: - switch (msg->wParam) + /* From: https://learn.microsoft.com/en-us/windows/win32/menurc/wm-syscommand?redirectedfrom=MSDN + * To obtain the correct result when testing the value of wParam, + * an application must combine the value 0xFFF0 with the wParam value by using the bitwise AND operator. */ + switch (msg->wParam & 0xFFF0) { case SC_MINIMIZE: case SC_RESTORE: @@ -2964,6 +2967,14 @@ gdk_event_translate (MSG *msg, windowpos = (WINDOWPOS *) msg->lParam; windowpos->cx = our_mmi.ptMaxSize.x; windowpos->cy = our_mmi.ptMaxSize.y; + + if (!_gdk_win32_surface_lacks_wm_decorations (window) && + !(windowpos->flags & SWP_NOCLIENTSIZE) && + window->width == impl->next_layout.configured_width && + window->height == impl->next_layout.configured_height) + { + impl->inhibit_configure = TRUE; + } } impl->maximizing = FALSE; diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c index 8df6a25378..a41b3e3576 100644 --- a/gdk/win32/gdksurface-win32.c +++ b/gdk/win32/gdksurface-win32.c @@ -1230,18 +1230,11 @@ get_effective_window_decorations (GdkSurface *window, *decoration |= GDK_DECOR_MINIMIZE; - return TRUE; - } - else if (impl->hint_flags & GDK_HINT_MAX_SIZE) - { - *decoration = GDK_DECOR_ALL | GDK_DECOR_MAXIMIZE; - *decoration |= GDK_DECOR_MINIMIZE; - return TRUE; } else { - *decoration = (GDK_DECOR_ALL | GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE); + *decoration = GDK_DECOR_ALL; return TRUE; }