[gtk+] GDK W32: Change WM_SYSMENU style switch logic
- From: Руслан Ижбулатов <ruslanizhb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GDK W32: Change WM_SYSMENU style switch logic
- Date: Sat, 2 Dec 2017 11:23:07 +0000 (UTC)
commit e1240b42edb89da49a89b58f05bfd443ef5e1505
Author: Руслан Ижбулатов <lrn1986 gmail com>
Date: Sun Dec 25 17:48:20 2016 +0000
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
gdk/win32/gdkevents-win32.c | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index e35c384..a84774e 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -1977,22 +1977,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.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]