Jacek Caban : win32u: Copy implementation of AdjustWindowRectEx from user32.

Alexandre Julliard julliard at winehq.org
Mon May 2 16:02:11 CDT 2022


Module: wine
Branch: master
Commit: 033cad432e1d93a0ddf5a5b71a989f31441f588c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=033cad432e1d93a0ddf5a5b71a989f31441f588c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Apr 15 20:43:19 2022 +0200

win32u: Copy implementation of AdjustWindowRectEx from user32.

It will be useful for drivers as well.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/user_main.c      |  1 -
 dlls/win32u/defwnd.c         | 38 ++++++++++++++++++++++++++++++++++++++
 dlls/win32u/ntuser_private.h |  1 -
 dlls/win32u/window.c         |  4 +---
 4 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c
index fa849e9cf2d..b282056d8c8 100644
--- a/dlls/user32/user_main.c
+++ b/dlls/user32/user_main.c
@@ -159,7 +159,6 @@ static void CDECL free_win_ptr( WND *win )
 
 static const struct user_callbacks user_funcs =
 {
-    AdjustWindowRectEx,
     CopyImage,
     EndMenu,
     ImmProcessKey,
diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c
index 0080d4f7cc6..7455a91980c 100644
--- a/dlls/win32u/defwnd.c
+++ b/dlls/win32u/defwnd.c
@@ -31,6 +31,44 @@
 WINE_DEFAULT_DEBUG_CHANNEL(win);
 
 
+/***********************************************************************
+ *           AdjustWindowRectEx (win32u.so)
+ */
+BOOL WINAPI AdjustWindowRectEx( RECT *rect, DWORD style, BOOL menu, DWORD ex_style )
+{
+    NONCLIENTMETRICSW ncm;
+    int adjust = 0;
+
+    ncm.cbSize = sizeof(ncm);
+    NtUserSystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0 );
+
+    if ((ex_style & (WS_EX_STATICEDGE|WS_EX_DLGMODALFRAME)) == WS_EX_STATICEDGE)
+        adjust = 1; /* for the outer frame always present */
+    else if ((ex_style & WS_EX_DLGMODALFRAME) || (style & (WS_THICKFRAME|WS_DLGFRAME)))
+        adjust = 2; /* outer */
+
+    if (style & WS_THICKFRAME)
+        adjust += ncm.iBorderWidth + ncm.iPaddedBorderWidth; /* The resize border */
+
+    if ((style & (WS_BORDER|WS_DLGFRAME)) || (ex_style & WS_EX_DLGMODALFRAME))
+        adjust++; /* The other border */
+
+    InflateRect( rect, adjust, adjust );
+
+    if ((style & WS_CAPTION) == WS_CAPTION)
+    {
+        if (ex_style & WS_EX_TOOLWINDOW)
+            rect->top -= ncm.iSmCaptionHeight + 1;
+        else
+            rect->top -= ncm.iCaptionHeight + 1;
+    }
+    if (menu) rect->top -= ncm.iMenuHeight + 1;
+
+    if (ex_style & WS_EX_CLIENTEDGE)
+        InflateRect( rect, get_system_metrics(SM_CXEDGE), get_system_metrics(SM_CYEDGE) );
+    return TRUE;
+}
+
 static BOOL set_window_text( HWND hwnd, const void *text, BOOL ansi )
 {
     static const WCHAR emptyW[] = { 0 };
diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h
index c870037f7b3..6e25e0ec0db 100644
--- a/dlls/win32u/ntuser_private.h
+++ b/dlls/win32u/ntuser_private.h
@@ -32,7 +32,6 @@ struct hardware_msg_data;
 
 struct user_callbacks
 {
-    BOOL (WINAPI *pAdjustWindowRectEx)( RECT *, DWORD, BOOL, DWORD );
     HANDLE (WINAPI *pCopyImage)( HANDLE, UINT, INT, INT, UINT );
     BOOL (WINAPI *pEndMenu)(void);
     BOOL (WINAPI *pImmProcessKey)(HWND, HKL, UINT, LPARAM, DWORD);
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c
index edafc522d14..9231f98539e 100644
--- a/dlls/win32u/window.c
+++ b/dlls/win32u/window.c
@@ -3683,9 +3683,7 @@ static MINMAXINFO get_min_max_info( HWND hwnd )
         adjusted_style = style;
 
     get_client_rect( NtUserGetAncestor( hwnd, GA_PARENT ), &rc );
-    if (user_callbacks)
-        user_callbacks->pAdjustWindowRectEx( &rc, adjusted_style,
-                                             (style & WS_POPUP) && get_menu( hwnd ), exstyle);
+    AdjustWindowRectEx( &rc, adjusted_style, (style & WS_POPUP) && get_menu( hwnd ), exstyle );
 
     xinc = -rc.left;
     yinc = -rc.top;




More information about the wine-cvs mailing list