mirror of
https://github.com/reactos/reactos.git
synced 2024-11-23 11:33:31 +08:00
[WIN32SS] WindowSnap must not affect the taskbar
This fixes regression CORE-16289 where we could not longer
move the taskbar at a different than default location,
as WindowSnap would interfere.
Many Thanks to the patches author Doug Lyons.
Eventually the heuristic that we use here to identify the
taskbar via used window-styles could be improved later.
Theoretically possible that it bails out on some other windows.
The regression was introduced by 0.4.12-dev-373-g
7e396787ed
This commit is contained in:
parent
238ea69ca0
commit
4193b8d8ac
@ -539,6 +539,9 @@ IntDefWindowProc(
|
||||
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
||||
LRESULT lResult = 0;
|
||||
USER_REFERENCE_ENTRY Ref;
|
||||
BOOL IsTaskBar;
|
||||
DWORD Style;
|
||||
DWORD ExStyle;
|
||||
|
||||
if (Msg > WM_USER) return 0;
|
||||
|
||||
@ -785,7 +788,22 @@ IntDefWindowProc(
|
||||
{
|
||||
HWND hwndTop = UserGetForegroundWindow();
|
||||
PWND topWnd = UserGetWindowObject(hwndTop);
|
||||
if (topWnd)
|
||||
|
||||
/* Test for typical TaskBar ExStyle Values */
|
||||
ExStyle = (topWnd->ExStyle & WS_EX_TOOLWINDOW);
|
||||
TRACE("ExStyle is '%x'.\n", ExStyle);
|
||||
|
||||
/* Test for typical TaskBar Style Values */
|
||||
Style = (topWnd->style & (WS_POPUP | WS_VISIBLE |
|
||||
WS_CLIPSIBLINGS | WS_CLIPCHILDREN));
|
||||
TRACE("Style is '%x'.\n", Style);
|
||||
|
||||
/* Test for masked typical TaskBar Style and ExStyles to detect TaskBar */
|
||||
IsTaskBar = (Style == (WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN))
|
||||
&& (ExStyle == WS_EX_TOOLWINDOW);
|
||||
TRACE("This %s the TaskBar.\n", IsTaskBar ? "is" : "is not");
|
||||
|
||||
if (topWnd && !IsTaskBar) /* Second test is so we are not touching the Taskbar */
|
||||
{
|
||||
if ((topWnd->style & WS_THICKFRAME) == 0)
|
||||
{
|
||||
|
@ -256,6 +256,8 @@ DefWndDoSizeMove(PWND pwnd, WORD wParam)
|
||||
//PMONITOR mon = 0; Don't port sync from wine!!! This breaks explorer task bar sizing!!
|
||||
// The task bar can grow in size and can not reduce due to the change
|
||||
// in the work area.
|
||||
DWORD ExStyleTB, StyleTB;
|
||||
BOOL IsTaskBar;
|
||||
|
||||
Style = pwnd->style;
|
||||
ExStyle = pwnd->ExStyle;
|
||||
@ -394,6 +396,20 @@ DefWndDoSizeMove(PWND pwnd, WORD wParam)
|
||||
/* Exit on button-up */
|
||||
if (msg.message == WM_LBUTTONUP)
|
||||
{
|
||||
/* Test for typical TaskBar ExStyle Values */
|
||||
ExStyleTB = (ExStyle & WS_EX_TOOLWINDOW);
|
||||
TRACE("ExStyle is '%x'.\n", ExStyleTB);
|
||||
|
||||
/* Test for typical TaskBar Style Values */
|
||||
StyleTB = (Style & (WS_POPUP | WS_VISIBLE |
|
||||
WS_CLIPSIBLINGS | WS_CLIPCHILDREN));
|
||||
TRACE("Style is '%x'.\n", StyleTB);
|
||||
|
||||
/* Test for masked typical TaskBar Style and ExStyles to detect TaskBar */
|
||||
IsTaskBar = (StyleTB == (WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN))
|
||||
&& (ExStyleTB == WS_EX_TOOLWINDOW);
|
||||
TRACE("This %s the TaskBar.\n", IsTaskBar ? "is" : "is not");
|
||||
|
||||
// check for snapping if was moved by caption
|
||||
if (hittest == HTCAPTION && thickframe && (ExStyle & WS_EX_MDICHILD) == 0)
|
||||
{
|
||||
@ -401,6 +417,11 @@ DefWndDoSizeMove(PWND pwnd, WORD wParam)
|
||||
BOOL doSideSnap = FALSE;
|
||||
UserSystemParametersInfo(SPI_GETWORKAREA, 0, &snapRect, 0);
|
||||
|
||||
/* if this is the taskbar, then we want to just exit */
|
||||
if (IsTaskBar)
|
||||
{
|
||||
break;
|
||||
}
|
||||
// snap to left
|
||||
if (pt.x <= snapRect.left)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user