- Sync up with wine NCActivate.

svn path=/trunk/; revision=56838
This commit is contained in:
James Tabor 2012-07-05 21:39:21 +00:00
parent f23fd581a7
commit a117d3a0ca
2 changed files with 33 additions and 6 deletions

View file

@ -18,7 +18,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(user32);
LRESULT DefWndNCPaint(HWND hWnd, HRGN hRgn, BOOL Active); LRESULT DefWndNCPaint(HWND hWnd, HRGN hRgn, BOOL Active);
LRESULT DefWndNCCalcSize(HWND hWnd, BOOL CalcSizeStruct, RECT *Rect); LRESULT DefWndNCCalcSize(HWND hWnd, BOOL CalcSizeStruct, RECT *Rect);
LRESULT DefWndNCActivate(HWND hWnd, WPARAM wParam); LRESULT DefWndNCActivate(HWND hWnd, WPARAM wParam, LPARAM lParam);
LRESULT DefWndNCHitTest(HWND hWnd, POINT Point); LRESULT DefWndNCHitTest(HWND hWnd, POINT Point);
LRESULT DefWndNCLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam); LRESULT DefWndNCLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam);
LRESULT DefWndNCLButtonDblClk(HWND hWnd, WPARAM wParam, LPARAM lParam); LRESULT DefWndNCLButtonDblClk(HWND hWnd, WPARAM wParam, LPARAM lParam);
@ -1053,7 +1053,7 @@ User32DefWindowProc(HWND hWnd,
case WM_NCACTIVATE: case WM_NCACTIVATE:
{ {
return DefWndNCActivate(hWnd, wParam); return DefWndNCActivate(hWnd, wParam, lParam);
} }
case WM_NCHITTEST: case WM_NCHITTEST:

View file

@ -495,7 +495,7 @@ DefWndNCPaint(HWND hWnd, HRGN hRgn, BOOL Active)
if (hRgn != HRGN_WINDOW) if (hRgn != HRGN_WINDOW)
DeleteObject(hRgn); // We use DCX_KEEPCLIPRGN DeleteObject(hRgn); // We use DCX_KEEPCLIPRGN
return 0; return 0; // For WM_NCPAINT message, return 0.
} }
LRESULT LRESULT
@ -652,9 +652,35 @@ DefWndNCCalcSize(HWND hWnd, BOOL CalcSizeStruct, RECT *Rect)
} }
LRESULT LRESULT
DefWndNCActivate(HWND hWnd, WPARAM wParam) DefWndNCActivate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{ {
DefWndNCPaint(hWnd, HRGN_WINDOW, wParam); PWND Wnd = ValidateHwnd(hWnd);
if (!Wnd) return 0;
/* Lotus Notes draws menu descriptions in the caption of its main
* window. When it wants to restore original "system" view, it just
* sends WM_NCACTIVATE message to itself. Any optimizations here in
* attempt to minimize redrawings lead to a not restored caption.
*/
if (wParam)
NtUserxSetWindowState(Wnd, WNDSACTIVEFRAME);
else
NtUserxClearWindowState(Wnd, WNDSACTIVEFRAME);
if (Wnd->state & WNDS_NONCPAINT)
return 0;
/* This isn't documented but is reproducible in at least XP SP2 and
* Outlook 2007 depends on it
*/
// MSDN:
// If this parameter is set to -1, DefWindowProc does not repaint the
// nonclient area to reflect the state change.
if (lParam != -1)
{
DefWndNCPaint(hWnd, HRGN_WINDOW, wParam);
}
return TRUE; return TRUE;
} }
@ -930,6 +956,7 @@ DefWndDoButton(HWND hWnd, WPARAM wParam)
{ {
if (GetMessageW(&Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST) <= 0) if (GetMessageW(&Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST) <= 0)
break; break;
if (CallMsgFilterW( &Msg, MSGF_MAX )) continue;
if (Msg.message == WM_LBUTTONUP) if (Msg.message == WM_LBUTTONUP)
break; break;
@ -948,7 +975,7 @@ DefWndDoButton(HWND hWnd, WPARAM wParam)
ReleaseCapture(); ReleaseCapture();
ReleaseDC(hWnd, WindowDC); ReleaseDC(hWnd, WindowDC);
if (Pressed) if (Pressed)
SendMessageW(hWnd, WM_SYSCOMMAND, SCMsg, 0); SendMessageW(hWnd, WM_SYSCOMMAND, SCMsg, MAKELONG(Msg.pt.x,Msg.pt.y));
} }