user32: Fix initial computation of client area in WM_NCCALCSIZE for RTL windows.
authorAlexandre Julliard <julliard@winehq.org>
Fri, 24 Sep 2010 10:46:02 +0000 (12:46 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Fri, 24 Sep 2010 13:45:54 +0000 (15:45 +0200)
dlls/user32/controls.h
dlls/user32/defwnd.c
dlls/user32/nonclient.c

index c36db425252366b0f185934603dca5077ee90967..065daeb3a98b1ffd03bca2b7f0783ed850f98f79 100644 (file)
@@ -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;
index e4f14b5d5f827e41d8b52ac70031f85db9ed6aa3..226b604c22c42962530f7681dd5d16f9034fd336 100644 (file)
@@ -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 );
index f385445886d20b5d3d3ad51685e1e39a18df1a30..cc52f381c8a463b15aff6dbba7ff1bf963cfb87c 100644 (file)
@@ -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