win32: Fix minimize and maximize buttons missing on ssd
authordgsasha <dgsasha04@gmail.com>
Wed, 31 May 2023 01:51:42 +0000 (21:51 -0400)
committerMat <mail@mathias.is>
Wed, 30 Aug 2023 10:53:49 +0000 (13:53 +0300)
Completely fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5142

gdk/win32/gdkevents-win32.c
gdk/win32/gdksurface-win32.c

index 392bf2335a24dfe96c34753fd6e77ad44172c874..2fa987d473e77aa04cbc37265d22dd06eb0fd264 100644 (file)
@@ -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;
index 8df6a2537878e5b7862b3498e38b395939e58687..a41b3e357657b50191bba37d7e0739e21027efa8 100644 (file)
@@ -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;
     }