Author: jimtabor
Date: Tue Nov 22 03:57:48 2016
New Revision: 73333
URL:
http://svn.reactos.org/svn/reactos?rev=73333&view=rev
Log:
[User32]
- Fix dialog pop up crash due to loop.
- Sync/Port from wine head, not sure about Staging.
Modified:
trunk/reactos/win32ss/user/user32/windows/dialog.c
Modified: trunk/reactos/win32ss/user/user32/windows/dialog.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/user32/window…
==============================================================================
--- trunk/reactos/win32ss/user/user32/windows/dialog.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/user32/windows/dialog.c [iso-8859-1] Tue Nov 22 03:57:48
2016
@@ -847,10 +847,7 @@
/* Create dialog main window */
- rect.left = rect.top = 0;
- rect.right = MulDiv(template.cx, xBaseUnit, 4);
- rect.bottom = MulDiv(template.cy, yBaseUnit, 8);
-
+ SetRect(&rect, 0, 0, MulDiv(template.cx, xBaseUnit, 4), MulDiv(template.cy,
yBaseUnit, 8));
if (template.style & DS_CONTROL)
template.style &= ~(WS_CAPTION|WS_SYSMENU);
template.style |= DS_3DLOOK;
@@ -926,24 +923,13 @@
* even if dialog has WS_CHILD, but only for modal dialogs, which matched what
* Windows does.
*/
-
+ while ((GetWindowLongW( owner, GWL_STYLE ) & (WS_POPUP|WS_CHILD)) ==
WS_CHILD)
+ {
+ parent = GetParent( owner );
+ if (!parent || parent == GetDesktopWindow()) break;
+ owner = parent;
+ }
////// Wine'ie babies need to fix your code!!!! CORE-11633
- if ((GetWindowLongW( owner, GWL_STYLE ) & (WS_POPUP|WS_CHILD)) == WS_CHILD)
- {
- parent = owner;
- while ((GetWindowLongW( parent, GWL_STYLE ) & (WS_POPUP|WS_CHILD)) ==
WS_CHILD)
- {
- parent = GetParent( owner );
- if (!parent || parent == GetDesktopWindow())
- {
- parent = NULL;
- break;
- }
- }
- }
- else
- parent = GetAncestor( owner, GA_ROOT );
-
if (parent)
{
owner = parent;
@@ -2488,6 +2474,9 @@
LPMSG lpMsg)
{
INT dlgCode = 0;
+
+ if (!IsWindow( hDlg ))
+ return FALSE;
if (CallMsgFilterW( lpMsg, MSGF_DIALOGBOX )) return TRUE;