mirror of
https://github.com/reactos/reactos.git
synced 2024-11-27 05:23:33 +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();
|
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
||||||
LRESULT lResult = 0;
|
LRESULT lResult = 0;
|
||||||
USER_REFERENCE_ENTRY Ref;
|
USER_REFERENCE_ENTRY Ref;
|
||||||
|
BOOL IsTaskBar;
|
||||||
|
DWORD Style;
|
||||||
|
DWORD ExStyle;
|
||||||
|
|
||||||
if (Msg > WM_USER) return 0;
|
if (Msg > WM_USER) return 0;
|
||||||
|
|
||||||
@ -785,7 +788,22 @@ IntDefWindowProc(
|
|||||||
{
|
{
|
||||||
HWND hwndTop = UserGetForegroundWindow();
|
HWND hwndTop = UserGetForegroundWindow();
|
||||||
PWND topWnd = UserGetWindowObject(hwndTop);
|
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)
|
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!!
|
//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
|
// The task bar can grow in size and can not reduce due to the change
|
||||||
// in the work area.
|
// in the work area.
|
||||||
|
DWORD ExStyleTB, StyleTB;
|
||||||
|
BOOL IsTaskBar;
|
||||||
|
|
||||||
Style = pwnd->style;
|
Style = pwnd->style;
|
||||||
ExStyle = pwnd->ExStyle;
|
ExStyle = pwnd->ExStyle;
|
||||||
@ -394,6 +396,20 @@ DefWndDoSizeMove(PWND pwnd, WORD wParam)
|
|||||||
/* Exit on button-up */
|
/* Exit on button-up */
|
||||||
if (msg.message == WM_LBUTTONUP)
|
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
|
// check for snapping if was moved by caption
|
||||||
if (hittest == HTCAPTION && thickframe && (ExStyle & WS_EX_MDICHILD) == 0)
|
if (hittest == HTCAPTION && thickframe && (ExStyle & WS_EX_MDICHILD) == 0)
|
||||||
{
|
{
|
||||||
@ -401,6 +417,11 @@ DefWndDoSizeMove(PWND pwnd, WORD wParam)
|
|||||||
BOOL doSideSnap = FALSE;
|
BOOL doSideSnap = FALSE;
|
||||||
UserSystemParametersInfo(SPI_GETWORKAREA, 0, &snapRect, 0);
|
UserSystemParametersInfo(SPI_GETWORKAREA, 0, &snapRect, 0);
|
||||||
|
|
||||||
|
/* if this is the taskbar, then we want to just exit */
|
||||||
|
if (IsTaskBar)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
// snap to left
|
// snap to left
|
||||||
if (pt.x <= snapRect.left)
|
if (pt.x <= snapRect.left)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user