Commit 3326fba5 authored by LRN's avatar LRN

GDK W32: Change WM_SYSMENU style switch logic

Instead of checking for window state and giving it extra styles that
fit, just give it all styles that it is missing. It turned out that
otherwise it is impossible to, for example, restore a maximized window
via sysmenu. Also, be more flexible towards GDK/WM window state mismatches
and consider the window minimized/maximized if *either* GDK or WM thinks so.

https://bugzilla.gnome.org/show_bug.cgi?id=776485
parent 51645b58
......@@ -1939,22 +1939,28 @@ handle_wm_sysmenu (GdkWindow *window, MSG *msg, gint *ret_valp)
style = GetWindowLongPtr (msg->hwnd, GWL_STYLE);
maximized = IsZoomed (msg->hwnd);
minimized = IsIconic (msg->hwnd);
maximized = IsZoomed (msg->hwnd) || (style & WS_MAXIMIZE);
minimized = IsIconic (msg->hwnd) || (style & WS_MINIMIZE);
additional_styles = 0;
if (!(style & WS_SYSMENU))
additional_styles |= WS_SYSMENU;
if (!maximized && !(style & WS_MAXIMIZEBOX))
if (!(style & WS_MAXIMIZEBOX))
additional_styles |= WS_MAXIMIZEBOX;
if (!minimized && !(style & WS_MINIMIZEBOX))
if (!(style & WS_MINIMIZEBOX))
additional_styles |= WS_MINIMIZEBOX;
if (!minimized && !maximized && !(style & WS_SIZEBOX))
if (!(style & WS_SIZEBOX))
additional_styles |= WS_SIZEBOX;
if (!(style & WS_DLGFRAME))
additional_styles |= WS_DLGFRAME;
if (!(style & WS_BORDER))
additional_styles |= WS_BORDER;
if (additional_styles == 0)
/* The caller will eventually pass this to DefWindowProc (),
* only without the style dance, which isn't needed, as it turns out.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment