mirror of
https://github.com/reactos/reactos.git
synced 2025-07-05 21:31:26 +00:00
[User32]
- Patch by Piotr Caban : Make it possible to activate a window with parent and no WS_CHILD flag in WS_NCLBUTTONDOWN function. - Sync port from wine with modifications and addons. svn path=/trunk/; revision=62610
This commit is contained in:
parent
2fce3630ab
commit
82b5418f45
1 changed files with 37 additions and 12 deletions
|
@ -980,11 +980,22 @@ DefWndDoButton(HWND hWnd, WPARAM wParam)
|
||||||
LRESULT
|
LRESULT
|
||||||
DefWndNCLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
DefWndNCLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
PWND Wnd = ValidateHwnd(hWnd);
|
||||||
|
|
||||||
switch (wParam)
|
switch (wParam)
|
||||||
{
|
{
|
||||||
case HTCAPTION:
|
case HTCAPTION:
|
||||||
{
|
{
|
||||||
HWND hTopWnd = GetAncestor(hWnd, GA_ROOT);
|
HWND hTopWnd = hWnd, parent;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
if ((GetWindowLongW( hTopWnd, GWL_STYLE ) & (WS_POPUP|WS_CHILD)) != WS_CHILD)
|
||||||
|
break;
|
||||||
|
parent = GetAncestor( hTopWnd, GA_PARENT );
|
||||||
|
if (!parent || parent == GetDesktopWindow()) break;
|
||||||
|
hTopWnd = parent;
|
||||||
|
}
|
||||||
|
|
||||||
if ( NtUserCallHwndLock(hTopWnd, HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE) ||
|
if ( NtUserCallHwndLock(hTopWnd, HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE) ||
|
||||||
GetActiveWindow() == hTopWnd)
|
GetActiveWindow() == hTopWnd)
|
||||||
{
|
{
|
||||||
|
@ -997,8 +1008,15 @@ DefWndNCLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||||
LONG style = GetWindowLongPtrW( hWnd, GWL_STYLE );
|
LONG style = GetWindowLongPtrW( hWnd, GWL_STYLE );
|
||||||
if (style & WS_SYSMENU)
|
if (style & WS_SYSMENU)
|
||||||
{
|
{
|
||||||
SendMessageW(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU + HTSYSMENU,
|
if( Wnd && !(style & WS_MINIMIZE) )
|
||||||
lParam);
|
{
|
||||||
|
RECT rect;
|
||||||
|
HDC hDC = GetWindowDC(hWnd);
|
||||||
|
UserGetInsideRectNC(Wnd, &rect);
|
||||||
|
UserDrawSysMenuButton(hWnd, hDC, &rect, TRUE);
|
||||||
|
ReleaseDC( hWnd, hDC );
|
||||||
|
}
|
||||||
|
SendMessageW(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU + HTSYSMENU, lParam);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1070,7 +1088,14 @@ DefWndNCLButtonDblClk(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
case HTSYSMENU:
|
case HTSYSMENU:
|
||||||
{
|
{
|
||||||
SendMessageW(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
|
HMENU hSysMenu = GetSystemMenu(hWnd, FALSE);
|
||||||
|
UINT state = GetMenuState(hSysMenu, SC_CLOSE, MF_BYCOMMAND);
|
||||||
|
|
||||||
|
/* If the close item of the sysmenu is disabled or not present do nothing */
|
||||||
|
if ((state & (MF_DISABLED | MF_GRAYED)) || (state == 0xFFFFFFFF))
|
||||||
|
break;
|
||||||
|
|
||||||
|
SendMessageW(hWnd, WM_SYSCOMMAND, SC_CLOSE, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue