[WIN32SS][NTUSER] Refactor PR #1226 (#1266)

Refactoring of #1226. CORE-12845
This commit is contained in:
Katayama Hirofumi MZ 2019-01-19 23:56:33 +09:00 committed by GitHub
parent c3e4b5fec6
commit d0d909245f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -783,85 +783,84 @@ IntDefWindowProc(
}
if (IS_KEY_DOWN(gafAsyncKeyState, VK_LWIN) || IS_KEY_DOWN(gafAsyncKeyState, VK_RWIN))
{
PWND topWnd = UserGetWindowObject(UserGetForegroundWindow());
HWND hwndTop = UserGetForegroundWindow();
PWND topWnd = UserGetWindowObject(hwndTop);
if (topWnd)
{
if (wParam == VK_DOWN)
{
co_IntSendMessage(UserHMGetHandle(topWnd), WM_SYSCOMMAND, (topWnd->style & WS_MAXIMIZE) ? SC_RESTORE : SC_MINIMIZE, lParam);
}
else
if (wParam == VK_UP)
if (topWnd->style & WS_MAXIMIZE)
co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_RESTORE, lParam);
else
co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_MINIMIZE, lParam);
}
else if (wParam == VK_UP)
{
RECT currentRect = (topWnd->InternalPos.NormalRect.right == topWnd->InternalPos.NormalRect.left) ||
(topWnd->InternalPos.NormalRect.top == topWnd->InternalPos.NormalRect.bottom)
? topWnd->rcWindow
: topWnd->InternalPos.NormalRect;
co_IntSendMessage(UserHMGetHandle(topWnd), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
RECT currentRect;
if ((topWnd->InternalPos.NormalRect.right == topWnd->InternalPos.NormalRect.left) ||
(topWnd->InternalPos.NormalRect.top == topWnd->InternalPos.NormalRect.bottom))
{
currentRect = topWnd->rcWindow;
}
else
{
currentRect = topWnd->InternalPos.NormalRect;
}
co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
// save normal rect if maximazing snapped window
topWnd->InternalPos.NormalRect = currentRect;
}
else
if (wParam == VK_LEFT || wParam == VK_RIGHT)
else if (wParam == VK_LEFT || wParam == VK_RIGHT)
{
RECT snapRect;
RECT normalRect;
RECT windowRect;
BOOL snapped = FALSE;
RECT snapRect, normalRect, windowRect;
BOOL snapped;
normalRect = topWnd->InternalPos.NormalRect;
snapped = (normalRect.left != 0
&& normalRect.right != 0
&& normalRect.top != 0
&& normalRect.bottom != 0);
snapped = (normalRect.left != 0 && normalRect.right != 0 &&
normalRect.top != 0 && normalRect.bottom != 0);
if (topWnd->style & WS_MAXIMIZE)
{
co_IntSendMessage(UserHMGetHandle(topWnd), WM_SYSCOMMAND, SC_RESTORE, lParam);
co_IntSendMessage(hwndTop, WM_SYSCOMMAND, SC_RESTORE, lParam);
snapped = FALSE;
}
windowRect = topWnd->rcWindow;
UserSystemParametersInfo(SPI_GETWORKAREA, 0, &snapRect, 0);
if (wParam == VK_LEFT)
{
snapRect.right = (snapRect.right - snapRect.left) / 2 + snapRect.left;
snapRect.right = (snapRect.left + snapRect.right) / 2;
}
else // VK_RIGHT
{
snapRect.left = (snapRect.right - snapRect.left) / 2 + snapRect.left;
snapRect.left = (snapRect.left + snapRect.right) / 2;
}
if (snapped)
{
// if window was snapped but moved to other location - restore normal size
if (snapRect.left != windowRect.left ||
snapRect.right != windowRect.right ||
snapRect.top != windowRect.top ||
snapRect.bottom != windowRect.bottom)
if (!IntEqualRect(&snapRect, &windowRect))
{
RECT empty = {0, 0, 0, 0};
co_WinPosSetWindowPos(topWnd,
0,
normalRect.left,
normalRect.top,
normalRect.right - normalRect.left,
normalRect.bottom - normalRect.top,
0);
0,
normalRect.left,
normalRect.top,
normalRect.right - normalRect.left,
normalRect.bottom - normalRect.top,
0);
topWnd->InternalPos.NormalRect = empty;
}
}
else
{
co_WinPosSetWindowPos(topWnd,
0,
snapRect.left,
snapRect.top,
snapRect.right - snapRect.left,
snapRect.bottom - snapRect.top,
0);
0,
snapRect.left,
snapRect.top,
snapRect.right - snapRect.left,
snapRect.bottom - snapRect.top,
0);
topWnd->InternalPos.NormalRect = windowRect;
}
}