Module: wine Branch: master Commit: 35ac1b3f0700b3f6c1b8a9bbb87e9aad37ce3cc6 URL: https://source.winehq.org/git/wine.git/?a=commit;h=35ac1b3f0700b3f6c1b8a9bbb...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Apr 15 14:54:16 2022 +0200
win32u: Move more WM_SYSCOMMAND handling from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/nonclient.c | 17 ----------------- dlls/win32u/defwnd.c | 22 +++++++++++++++++++++- dlls/win32u/win32u_private.h | 1 + dlls/win32u/window.c | 2 +- 4 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/dlls/user32/nonclient.c b/dlls/user32/nonclient.c index dbcb09875d0..a2b5a82a5e6 100644 --- a/dlls/user32/nonclient.c +++ b/dlls/user32/nonclient.c @@ -1550,23 +1550,6 @@ LRESULT NC_HandleSysCommand( HWND hwnd, WPARAM wParam, LPARAM lParam ) WINPOS_SysCommandSizeMove( hwnd, wParam ); break;
- case SC_MINIMIZE: - ShowOwnedPopups(hwnd,FALSE); - NtUserShowWindow( hwnd, SW_MINIMIZE ); - break; - - case SC_MAXIMIZE: - if (IsIconic(hwnd)) - ShowOwnedPopups(hwnd,TRUE); - NtUserShowWindow( hwnd, SW_MAXIMIZE ); - break; - - case SC_RESTORE: - if (IsIconic(hwnd)) - ShowOwnedPopups(hwnd,TRUE); - NtUserShowWindow( hwnd, SW_RESTORE ); - break; - case SC_CLOSE: return SendMessageW( hwnd, WM_CLOSE, 0, 0 );
diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index 22d2b08951d..0080d4f7cc6 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -131,7 +131,27 @@ static LRESULT handle_sys_command( HWND hwnd, WPARAM wparam, LPARAM lparam ) if (!user_driver->pSysCommand( hwnd, wparam, lparam )) return 0;
- return 1; + switch (wparam & 0xfff0) + { + case SC_MINIMIZE: + show_owned_popups( hwnd, FALSE ); + NtUserShowWindow( hwnd, SW_MINIMIZE ); + break; + + case SC_MAXIMIZE: + if (is_iconic(hwnd)) show_owned_popups( hwnd, TRUE ); + NtUserShowWindow( hwnd, SW_MAXIMIZE ); + break; + + case SC_RESTORE: + if (is_iconic( hwnd )) show_owned_popups( hwnd, TRUE ); + NtUserShowWindow( hwnd, SW_RESTORE ); + break; + + default: + return 1; /* handle on client side */ + } + return 0; }
LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi ) diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index ceff548526b..651003d4e84 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -431,6 +431,7 @@ extern LONG_PTR set_window_long( HWND hwnd, INT offset, UINT size, LONG_PTR newv BOOL ansi ) DECLSPEC_HIDDEN; extern BOOL set_window_pos( WINDOWPOS *winpos, int parent_x, int parent_y ) DECLSPEC_HIDDEN; extern ULONG set_window_style( HWND hwnd, ULONG set_bits, ULONG clear_bits ) DECLSPEC_HIDDEN; +extern BOOL show_owned_popups( HWND owner, BOOL show ) DECLSPEC_HIDDEN; extern void update_window_state( HWND hwnd ) DECLSPEC_HIDDEN; extern HWND window_from_point( HWND hwnd, POINT pt, INT *hittest ) DECLSPEC_HIDDEN;
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 49813aa2ad3..ba58dbf96aa 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -4238,7 +4238,7 @@ BOOL WINAPI NtUserShowWindow( HWND hwnd, INT cmd ) }
/* see ShowOwnedPopups */ -static BOOL show_owned_popups( HWND owner, BOOL show ) +BOOL show_owned_popups( HWND owner, BOOL show ) { int count = 0; HWND *win_array = list_window_children( 0, get_desktop_window(), NULL, 0 );