forked from AuroraMiddleware/gtk
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
This commit is contained in:
parent
51645b5851
commit
3326fba524
@ -1939,22 +1939,28 @@ handle_wm_sysmenu (GdkWindow *window, MSG *msg, gint *ret_valp)
|
|||||||
|
|
||||||
style = GetWindowLongPtr (msg->hwnd, GWL_STYLE);
|
style = GetWindowLongPtr (msg->hwnd, GWL_STYLE);
|
||||||
|
|
||||||
maximized = IsZoomed (msg->hwnd);
|
maximized = IsZoomed (msg->hwnd) || (style & WS_MAXIMIZE);
|
||||||
minimized = IsIconic (msg->hwnd);
|
minimized = IsIconic (msg->hwnd) || (style & WS_MINIMIZE);
|
||||||
additional_styles = 0;
|
additional_styles = 0;
|
||||||
|
|
||||||
if (!(style & WS_SYSMENU))
|
if (!(style & WS_SYSMENU))
|
||||||
additional_styles |= WS_SYSMENU;
|
additional_styles |= WS_SYSMENU;
|
||||||
|
|
||||||
if (!maximized && !(style & WS_MAXIMIZEBOX))
|
if (!(style & WS_MAXIMIZEBOX))
|
||||||
additional_styles |= WS_MAXIMIZEBOX;
|
additional_styles |= WS_MAXIMIZEBOX;
|
||||||
|
|
||||||
if (!minimized && !(style & WS_MINIMIZEBOX))
|
if (!(style & WS_MINIMIZEBOX))
|
||||||
additional_styles |= WS_MINIMIZEBOX;
|
additional_styles |= WS_MINIMIZEBOX;
|
||||||
|
|
||||||
if (!minimized && !maximized && !(style & WS_SIZEBOX))
|
if (!(style & WS_SIZEBOX))
|
||||||
additional_styles |= 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)
|
if (additional_styles == 0)
|
||||||
/* The caller will eventually pass this to DefWindowProc (),
|
/* The caller will eventually pass this to DefWindowProc (),
|
||||||
* only without the style dance, which isn't needed, as it turns out.
|
* only without the style dance, which isn't needed, as it turns out.
|
||||||
|
Loading…
Reference in New Issue
Block a user