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/windows... ============================================================================== --- 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;