From deb830976093418238e7de9722f90b3463a84ccb Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 24 Sep 2010 12:46:02 +0200 Subject: [PATCH] user32: Fix initial computation of client area in WM_NCCALCSIZE for RTL windows. --- dlls/user32/controls.h | 2 +- dlls/user32/defwnd.c | 2 +- dlls/user32/nonclient.c | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h index c36db42525..065daeb3a9 100644 --- a/dlls/user32/controls.h +++ b/dlls/user32/controls.h @@ -167,7 +167,7 @@ extern void MENU_EndMenu(HWND) DECLSPEC_HIDDEN; /* nonclient area */ extern LRESULT NC_HandleNCPaint( HWND hwnd , HRGN clip) DECLSPEC_HIDDEN; extern LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN; -extern LRESULT NC_HandleNCCalcSize( HWND hwnd, RECT *winRect ) DECLSPEC_HIDDEN; +extern LRESULT NC_HandleNCCalcSize( HWND hwnd, WPARAM wParam, RECT *winRect ) DECLSPEC_HIDDEN; extern LRESULT NC_HandleNCHitTest( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN; extern LRESULT NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN; extern LRESULT NC_HandleNCLButtonDblClk( HWND hwnd, WPARAM wParam, LPARAM lParam) DECLSPEC_HIDDEN; diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c index e4f14b5d5f..226b604c22 100644 --- a/dlls/user32/defwnd.c +++ b/dlls/user32/defwnd.c @@ -309,7 +309,7 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa } case WM_NCCALCSIZE: - return NC_HandleNCCalcSize( hwnd, (RECT *)lParam ); + return NC_HandleNCCalcSize( hwnd, wParam, (RECT *)lParam ); case WM_WINDOWPOSCHANGING: return WINPOS_HandleWindowPosChanging( hwnd, (WINDOWPOS *)lParam ); diff --git a/dlls/user32/nonclient.c b/dlls/user32/nonclient.c index f385445886..cc52f381c8 100644 --- a/dlls/user32/nonclient.c +++ b/dlls/user32/nonclient.c @@ -410,7 +410,7 @@ BOOL WINAPI AdjustWindowRectEx( LPRECT rect, DWORD style, BOOL menu, DWORD exSty * * Handle a WM_NCCALCSIZE message. Called from DefWindowProc(). */ -LRESULT NC_HandleNCCalcSize( HWND hwnd, RECT *winRect ) +LRESULT NC_HandleNCCalcSize( HWND hwnd, WPARAM wparam, RECT *winRect ) { RECT tmpRect = { 0, 0, 0, 0 }; LRESULT result = 0; @@ -451,7 +451,11 @@ LRESULT NC_HandleNCCalcSize( HWND hwnd, RECT *winRect ) - GetSystemMetrics(SM_CYEDGE)); if (style & WS_VSCROLL) - if( winRect->right - winRect->left >= GetSystemMetrics(SM_CXVSCROLL)){ + if (winRect->right - winRect->left >= GetSystemMetrics(SM_CXVSCROLL)) + { + /* rectangle is in screen coords when wparam is false */ + if (!wparam && (exStyle & WS_EX_LAYOUTRTL)) exStyle ^= WS_EX_LEFTSCROLLBAR; + if((exStyle & WS_EX_LEFTSCROLLBAR) != 0) winRect->left += GetSystemMetrics(SM_CXVSCROLL); else -- 2.33.8