[PATCH 7/7] win32u: Move WM_SHOWWINDOW implementation from user32.
Jacek Caban
wine at gitlab.winehq.org
Mon Jun 20 08:21:45 CDT 2022
From: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
---
dlls/user32/defwnd.c | 84 ++++++++++++++------------------------------
dlls/win32u/defwnd.c | 25 +++++++++++++
2 files changed, 51 insertions(+), 58 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c
index 96dd2e873fa..16442b6899e 100644
--- a/dlls/user32/defwnd.c
+++ b/dlls/user32/defwnd.c
@@ -73,57 +73,6 @@ HBRUSH DEFWND_ControlColor( HDC hDC, UINT ctlType )
}
-/***********************************************************************
- * DEFWND_DefWinProc
- *
- * Default window procedure for messages that are the same in Ansi and Unicode.
- */
-static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
-{
- switch(msg)
- {
- case WM_NCMOUSEMOVE:
- return NC_HandleNCMouseMove( hwnd, wParam, lParam );
-
- case WM_NCMOUSELEAVE:
- return NC_HandleNCMouseLeave( hwnd );
-
- case WM_SYSCOMMAND:
- return NC_HandleSysCommand( hwnd, wParam, lParam );
-
- case WM_SHOWWINDOW:
- {
- LONG style = GetWindowLongW( hwnd, GWL_STYLE );
- WND *pWnd;
- if (!lParam) return 0; /* sent from ShowWindow */
- if ((style & WS_VISIBLE) && wParam) return 0;
- if (!(style & WS_VISIBLE) && !wParam) return 0;
- if (!GetWindow( hwnd, GW_OWNER )) return 0;
- if (!(pWnd = WIN_GetPtr( hwnd ))) return 0;
- if (pWnd == WND_OTHER_PROCESS) return 0;
- if (wParam)
- {
- if (!(pWnd->flags & WIN_NEEDS_SHOW_OWNEDPOPUP))
- {
- WIN_ReleasePtr( pWnd );
- return 0;
- }
- pWnd->flags &= ~WIN_NEEDS_SHOW_OWNEDPOPUP;
- }
- else pWnd->flags |= WIN_NEEDS_SHOW_OWNEDPOPUP;
- WIN_ReleasePtr( pWnd );
- NtUserShowWindow( hwnd, wParam ? SW_SHOWNOACTIVATE : SW_HIDE );
- break;
- }
-
- default:
- return NtUserMessageCall( hwnd, msg, wParam, lParam, 0, NtUserDefWindowProc, FALSE );
-
- }
-
- return 0;
-}
-
static LPARAM DEFWND_GetTextA( WND *wndPtr, LPSTR dest, WPARAM wParam )
{
LPARAM result = 0;
@@ -184,6 +133,18 @@ LRESULT WINAPI DefWindowProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
}
break;
+ case WM_NCMOUSEMOVE:
+ result = NC_HandleNCMouseMove( hwnd, wParam, lParam );
+ break;
+
+ case WM_NCMOUSELEAVE:
+ result = NC_HandleNCMouseLeave( hwnd );
+ break;
+
+ case WM_SYSCOMMAND:
+ result = NC_HandleSysCommand( hwnd, wParam, lParam );
+ break;
+
case WM_GETTEXTLENGTH:
{
WND *wndPtr = WIN_GetPtr( hwnd );
@@ -207,11 +168,6 @@ LRESULT WINAPI DefWindowProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
}
break;
- case WM_SETTEXT:
- case WM_SYSCHAR:
- result = NtUserMessageCall( hwnd, msg, wParam, lParam, 0, NtUserDefWindowProc, TRUE );
- break;
-
case WM_IME_CHAR:
if (HIBYTE(wParam)) PostMessageA( hwnd, WM_CHAR, HIBYTE(wParam), lParam );
PostMessageA( hwnd, WM_CHAR, LOBYTE(wParam), lParam );
@@ -281,7 +237,7 @@ LRESULT WINAPI DefWindowProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
break;
default:
- result = DEFWND_DefWinProc( hwnd, msg, wParam, lParam );
+ result = NtUserMessageCall( hwnd, msg, wParam, lParam, 0, NtUserDefWindowProc, TRUE );
break;
}
@@ -357,6 +313,18 @@ LRESULT WINAPI DefWindowProcW(
}
break;
+ case WM_NCMOUSEMOVE:
+ result = NC_HandleNCMouseMove( hwnd, wParam, lParam );
+ break;
+
+ case WM_NCMOUSELEAVE:
+ result = NC_HandleNCMouseLeave( hwnd );
+ break;
+
+ case WM_SYSCOMMAND:
+ result = NC_HandleSysCommand( hwnd, wParam, lParam );
+ break;
+
case WM_GETTEXTLENGTH:
{
WND *wndPtr = WIN_GetPtr( hwnd );
@@ -431,7 +399,7 @@ LRESULT WINAPI DefWindowProcW(
break;
default:
- result = DEFWND_DefWinProc( hwnd, msg, wParam, lParam );
+ result = NtUserMessageCall( hwnd, msg, wParam, lParam, 0, NtUserDefWindowProc, FALSE );
break;
}
SPY_ExitMessage( SPY_RESULT_DEFWND, hwnd, msg, result, wParam, lParam );
diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c
index 5625f15d42a..90323e304fc 100644
--- a/dlls/win32u/defwnd.c
+++ b/dlls/win32u/defwnd.c
@@ -2530,6 +2530,31 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
handle_set_cursor( hwnd, wparam, lparam );
break;
+ case WM_SHOWWINDOW:
+ {
+ LONG style = get_window_long( hwnd, GWL_STYLE );
+ WND *win;
+ if (!lparam) break; /* sent from ShowWindow */
+ if ((style & WS_VISIBLE) && wparam) break;
+ if (!(style & WS_VISIBLE) && !wparam) break;
+ if (!get_window_relative( hwnd, GW_OWNER )) break;
+ if (!(win = get_win_ptr( hwnd ))) break;
+ if (win == WND_OTHER_PROCESS) break;
+ if (wparam)
+ {
+ if (!(win->flags & WIN_NEEDS_SHOW_OWNEDPOPUP))
+ {
+ release_win_ptr( win );
+ break;
+ }
+ win->flags &= ~WIN_NEEDS_SHOW_OWNEDPOPUP;
+ }
+ else win->flags |= WIN_NEEDS_SHOW_OWNEDPOPUP;
+ release_win_ptr( win );
+ NtUserShowWindow( hwnd, wparam ? SW_SHOWNOACTIVATE : SW_HIDE );
+ break;
+ }
+
case WM_CTLCOLORMSGBOX:
case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/285
More information about the wine-devel
mailing list