Author: jimtabor
Date: Sun May 13 05:38:04 2012
New Revision: 56570
URL:
http://svn.reactos.org/svn/reactos?rev=56570&view=rev
Log:
[Win32k]
- Fix bug 6796, use wine code to clear bits before checking to minimize or maximize.
- Fix all the wine Win test_window_styles and todo tests.
Modified:
trunk/reactos/win32ss/user/ntuser/window.c
trunk/reactos/win32ss/user/ntuser/window.h
Modified: trunk/reactos/win32ss/user/ntuser/window.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/window…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/window.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/window.c [iso-8859-1] Sun May 13 05:38:04 2012
@@ -80,6 +80,17 @@
return Window;
}
+ULONG FASTCALL
+IntSetStyle( PWND pwnd, ULONG set_bits, ULONG clear_bits )
+{
+ ULONG styleOld, styleNew;
+ styleOld = pwnd->style;
+ styleNew = (pwnd->style | set_bits) & ~clear_bits;
+ if (styleNew == styleOld) return styleNew;
+ pwnd->style = styleNew;
+ if ((styleOld ^ styleNew) & WS_VISIBLE) DceResetActiveDCEs( pwnd );
+ return styleOld;
+}
/*
* IntIsWindow
@@ -162,7 +173,7 @@
if (bEnable)
{
- pWnd->style &= ~WS_DISABLED;
+ IntSetStyle( pWnd, 0, WS_DISABLED );
}
else
{
@@ -175,7 +186,7 @@
{
co_UserSetFocus(NULL);
}
- pWnd->style |= WS_DISABLED;
+ IntSetStyle( pWnd, WS_DISABLED, 0 );
}
if (Update)
@@ -1780,6 +1791,7 @@
PLARGE_STRING WindowName,
PVOID acbiBuffer)
{
+ ULONG style;
PWND Window = NULL, ParentWindow = NULL, OwnerWindow;
HWND hWnd, hWndParent, hWndOwner, hwndInsertAfter;
PWINSTATION_OBJECT WinSta;
@@ -2060,12 +2072,14 @@
}
/* Show or maybe minimize or maximize the window. */
- if (Window->style & (WS_MINIMIZE | WS_MAXIMIZE))
+
+ style = IntSetStyle( Window, 0, WS_MAXIMIZE | WS_MINIMIZE );
+ if (style & (WS_MINIMIZE | WS_MAXIMIZE))
{
RECTL NewPos;
UINT16 SwFlag;
- SwFlag = (Window->style & WS_MINIMIZE) ? SW_MINIMIZE : SW_MAXIMIZE;
+ SwFlag = (style & WS_MINIMIZE) ? SW_MINIMIZE : SW_MAXIMIZE;
co_WinPosMinMaximize(Window, SwFlag, &NewPos);
@@ -3217,6 +3231,18 @@
END_CLEANUP;
}
+// Fixes wine Win test_window_styles and todo tests...
+static BOOL FASTCALL
+IntCheckFrameEdge(ULONG Style, ULONG ExStyle)
+{
+ if (ExStyle & WS_EX_DLGMODALFRAME)
+ return TRUE;
+ else if (!(ExStyle & WS_EX_STATICEDGE) && (Style & (WS_DLGFRAME |
WS_THICKFRAME)))
+ return TRUE;
+ else
+ return FALSE;
+}
+
LONG FASTCALL
co_UserSetWindowLong(HWND hWnd, DWORD Index, LONG NewValue, BOOL Ansi)
{
@@ -3264,6 +3290,8 @@
OldValue = (LONG) Window->ExStyle;
Style.styleOld = OldValue;
Style.styleNew = NewValue;
+
+ co_IntSendMessage(hWnd, WM_STYLECHANGING, GWL_EXSTYLE, (LPARAM) &Style);
/*
* Remove extended window style bit WS_EX_TOPMOST for shell windows.
@@ -3274,8 +3302,12 @@
if (hWnd == WindowStation->ShellWindow || hWnd ==
WindowStation->ShellListView)
Style.styleNew &= ~WS_EX_TOPMOST;
}
-
- co_IntSendMessage(hWnd, WM_STYLECHANGING, GWL_EXSTYLE, (LPARAM) &Style);
+ /* WS_EX_WINDOWEDGE depends on some other styles */
+ if (IntCheckFrameEdge(Window->style, NewValue))
+ Style.styleNew |= WS_EX_WINDOWEDGE;
+ else
+ Style.styleNew &= ~WS_EX_WINDOWEDGE;
+
Window->ExStyle = (DWORD)Style.styleNew;
co_IntSendMessage(hWnd, WM_STYLECHANGED, GWL_EXSTYLE, (LPARAM) &Style);
break;
@@ -3285,6 +3317,15 @@
Style.styleOld = OldValue;
Style.styleNew = NewValue;
co_IntSendMessage(hWnd, WM_STYLECHANGING, GWL_STYLE, (LPARAM) &Style);
+
+ /* WS_CLIPSIBLINGS can't be reset on top-level windows */
+ if (Window->spwndParent == UserGetDesktopWindow()) Style.styleNew |=
WS_CLIPSIBLINGS;
+ /* Fixes wine FIXME: changing WS_DLGFRAME | WS_THICKFRAME is supposed to
change WS_EX_WINDOWEDGE too */
+ if (IntCheckFrameEdge(NewValue, Window->ExStyle))
+ Window->ExStyle |= WS_EX_WINDOWEDGE;
+ else
+ Window->ExStyle &= ~WS_EX_WINDOWEDGE;
+
Window->style = (DWORD)Style.styleNew;
co_IntSendMessage(hWnd, WM_STYLECHANGED, GWL_STYLE, (LPARAM) &Style);
break;
Modified: trunk/reactos/win32ss/user/ntuser/window.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/window…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/window.h [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/window.h [iso-8859-1] Sun May 13 05:38:04 2012
@@ -49,6 +49,7 @@
VOID FASTCALL IntNotifyWinEvent(DWORD, PWND, LONG, LONG, DWORD);
PWND FASTCALL co_UserCreateWindowEx(CREATESTRUCTW*, PUNICODE_STRING, PLARGE_STRING,
PVOID);
BOOL FASTCALL IntEnableWindow(HWND,BOOL);
-DWORD FASTCALL GetNCHitEx(PWND pWnd, POINT pt);
+DWORD FASTCALL GetNCHitEx(PWND,POINT);
+ULONG FASTCALL IntSetStyle(PWND,ULONG,ULONG);
/* EOF */