Added patch to enable the correct dialog owner in DIALOG_DoDialogBox.

This commit is contained in:
Sebastian Lackner 2016-03-31 06:46:04 +02:00
parent 336873284e
commit 962403c7ca
6 changed files with 476 additions and 0 deletions

View File

@ -327,6 +327,7 @@ patch_enable_all ()
enable_user_exe16_CONTAINING_RECORD="$1"
enable_user_exe16_DlgDirList="$1"
enable_user32_DeferWindowPos="$1"
enable_user32_Dialog_Owner="$1"
enable_user32_Dialog_Paint_Event="$1"
enable_user32_DrawTextExW="$1"
enable_user32_EnumDisplayMonitors="$1"
@ -1160,6 +1161,9 @@ patch_enable ()
user32-DeferWindowPos)
enable_user32_DeferWindowPos="$2"
;;
user32-Dialog_Owner)
enable_user32_Dialog_Owner="$2"
;;
user32-Dialog_Paint_Event)
enable_user32_Dialog_Paint_Event="$2"
;;
@ -6737,6 +6741,28 @@ if test "$enable_user32_DeferWindowPos" -eq 1; then
) >> "$patchlist"
fi
# Patchset user32-Dialog_Owner
# |
# | This patchset fixes the following Wine bugs:
# | * [#40282] Enable the correct dialog owner in DIALOG_DoDialogBox
# |
# | Modified files:
# | * dlls/user.exe16/dialog.c, dlls/user.exe16/user_private.h, dlls/user32/controls.h, dlls/user32/dialog.c,
# | dlls/user32/tests/win.c
# |
if test "$enable_user32_Dialog_Owner" -eq 1; then
patch_apply user32-Dialog_Owner/0001-user32-tests-Add-some-tests-for-dialog-owner-disable.patch
patch_apply user32-Dialog_Owner/0002-user32-Enable-the-specified-dialog-owner.patch
patch_apply user32-Dialog_Owner/0003-user32-Enable-correct-dialog-owner.patch
patch_apply user32-Dialog_Owner/0004-user32-Unconditionally-enable-dialog-owner.patch
(
echo '+ { "Dmitry Timoshkov", "user32/tests: Add some tests for dialog owner disabled state.", 3 },';
echo '+ { "Dmitry Timoshkov", "user32: Enable the specified dialog owner.", 1 },';
echo '+ { "Dmitry Timoshkov", "user32: Enable correct dialog owner.", 1 },';
echo '+ { "Dmitry Timoshkov", "user32: Unconditionally enable dialog owner.", 1 },';
) >> "$patchlist"
fi
# Patchset user32-Dialog_Paint_Event
# |
# | This patchset fixes the following Wine bugs:

View File

@ -0,0 +1,146 @@
From 42523810c310acb304dd44f3df0087c69989aade Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Wed, 30 Mar 2016 17:44:05 +0800
Subject: user32/tests: Add some tests for dialog owner disabled state. (v3)
---
dlls/user32/tests/win.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 96 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 957e8a1d..528669e 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -4258,6 +4258,78 @@ static INT_PTR WINAPI empty_dlg_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM
return 0;
}
+static INT_PTR WINAPI empty_dlg_proc3(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ if (msg == WM_INITDIALOG)
+ EndDialog(hwnd, 0);
+
+ return 0;
+}
+
+struct dialog_param
+{
+ HWND parent, grand_parent;
+ DLGTEMPLATE *dlg_data;
+};
+
+static INT_PTR WINAPI empty_dlg_proc2(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ if (msg == WM_INITDIALOG)
+ {
+ DWORD style = GetWindowLongA(hwnd, GWL_STYLE);
+ struct dialog_param *param = (struct dialog_param *)lparam;
+ BOOL parent_is_child;
+ HWND disabled_hwnd;
+
+ parent_is_child = (GetWindowLongA(param->parent, GWL_STYLE) & (WS_POPUP | WS_CHILD)) == WS_CHILD;
+
+ ok(IsWindowEnabled(hwnd), "wrong state for %p\n", hwnd);
+ if (parent_is_child)
+ {
+ ok(IsWindowEnabled(param->parent), "wrong state for %08x\n", style);
+ disabled_hwnd = param->grand_parent;
+ }
+ else
+ {
+ ok(!IsWindowEnabled(param->parent), "wrong state for %08x\n", style);
+ disabled_hwnd = param->parent;
+ }
+
+ if (param->grand_parent)
+ {
+ if (parent_is_child)
+ ok(!IsWindowEnabled(param->grand_parent), "wrong state for %08x\n", style);
+ else
+ ok(IsWindowEnabled(param->grand_parent), "wrong state for %08x\n", style);
+ }
+
+ DialogBoxIndirectParamA(GetModuleHandleA(NULL), param->dlg_data, disabled_hwnd, empty_dlg_proc3, 0);
+ todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
+ ok(IsWindowEnabled(disabled_hwnd), "wrong state for %08x\n", style);
+
+ ok(IsWindowEnabled(hwnd), "wrong state for %p\n", hwnd);
+ ok(IsWindowEnabled(param->parent), "wrong state for %p\n", param->parent);
+ if (param->grand_parent)
+ todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
+ ok(IsWindowEnabled(param->grand_parent), "wrong state for %p (%08x)\n", param->grand_parent, style);
+
+ DialogBoxIndirectParamA(GetModuleHandleA(NULL), param->dlg_data, hwnd, empty_dlg_proc3, 0);
+ ok(IsWindowEnabled(hwnd), "wrong state for %p\n", hwnd);
+ ok(IsWindowEnabled(param->parent), "wrong state for %p\n", param->parent);
+ if (param->grand_parent)
+ todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
+ ok(IsWindowEnabled(param->grand_parent), "wrong state for %p (%08x)\n", param->grand_parent, style);
+
+ param->dlg_data->style |= WS_CHILD;
+ DialogBoxIndirectParamA(GetModuleHandleA(NULL), param->dlg_data, hwnd, empty_dlg_proc3, 0);
+ todo_wine_if (!(style & (WS_CHILD|WS_POPUP)))
+ ok(IsWindowEnabled(hwnd), "wrong state for %p (%08x)\n", hwnd, style);
+
+ EndDialog(hwnd, 0);
+ }
+ return 0;
+}
+
static void check_dialog_style(DWORD style_in, DWORD ex_style_in, DWORD style_out, DWORD ex_style_out)
{
struct
@@ -4269,11 +4341,19 @@ static void check_dialog_style(DWORD style_in, DWORD ex_style_in, DWORD style_ou
WCHAR caption[1];
} dlg_data;
DWORD style, ex_style;
- HWND hwnd, parent = 0;
+ HWND hwnd, grand_parent = 0, parent = 0;
+ struct dialog_param param;
if (style_in & WS_CHILD)
- parent = CreateWindowExA(0, "static", NULL, WS_OVERLAPPEDWINDOW,
+ {
+ grand_parent = CreateWindowExA(0, "static", NULL, WS_OVERLAPPEDWINDOW,
0, 0, 0, 0, NULL, NULL, NULL, NULL);
+ ok(grand_parent != 0, "grand_parent creation failed\n");
+ }
+
+ parent = CreateWindowExA(0, "static", NULL, style_in,
+ 0, 0, 0, 0, grand_parent, NULL, NULL, NULL);
+ ok(parent != 0, "parent creation failed, style %#x\n", style_in);
dlg_data.dt.style = style_in;
dlg_data.dt.dwExtendedStyle = ex_style_in;
@@ -4297,6 +4377,8 @@ static void check_dialog_style(DWORD style_in, DWORD ex_style_in, DWORD style_ou
ok(style == (style_out | DS_3DLOOK), "got %#x\n", style);
ok(ex_style == ex_style_out, "expected ex_style %#x, got %#x\n", ex_style_out, ex_style);
+ ok(IsWindowEnabled(parent), "wrong parent state (dialog style %#x)\n", style_in);
+
/* try setting the styles explicitly */
SetWindowLongA(hwnd, GWL_EXSTYLE, ex_style_in);
style = GetWindowLongA(hwnd, GWL_STYLE);
@@ -4330,7 +4412,19 @@ static void check_dialog_style(DWORD style_in, DWORD ex_style_in, DWORD style_ou
ok(ex_style == ex_style_out, "expected ex_style %#x, got %#x\n", ex_style_out, ex_style);
DestroyWindow(hwnd);
+
+ param.parent = parent;
+ param.grand_parent = grand_parent;
+ param.dlg_data = &dlg_data.dt;
+ DialogBoxIndirectParamA(GetModuleHandleA(NULL), &dlg_data.dt, parent, empty_dlg_proc2, (LPARAM)&param);
+
+ ok(IsWindowEnabled(parent), "wrong parent state (dialog style %#x)\n", style_in);
+ if (grand_parent)
+ todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
+ ok(IsWindowEnabled(grand_parent), "wrong grand parent state (dialog style %#x)\n", style_in);
+
DestroyWindow(parent);
+ DestroyWindow(grand_parent);
}
static void test_dialog_styles(void)
--
2.7.1

View File

@ -0,0 +1,129 @@
From 1e8d81841236d710c483dc4133fa90991bcc07d0 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Wed, 30 Mar 2016 17:58:35 +0800
Subject: user32: Enable the specified dialog owner.
This patch reverts d75991d80e77ac9d93b85b8369c6fce39bd4fdb2
and a part of 0d7116b968edae3f5912112bda436df8924911fb.
---
dlls/user.exe16/dialog.c | 4 ++--
dlls/user.exe16/user_private.h | 2 +-
dlls/user32/controls.h | 4 ++--
dlls/user32/dialog.c | 9 ++++-----
dlls/user32/tests/win.c | 1 -
5 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/dlls/user.exe16/dialog.c b/dlls/user.exe16/dialog.c
index 766a468..fead42d 100644
--- a/dlls/user.exe16/dialog.c
+++ b/dlls/user.exe16/dialog.c
@@ -744,7 +744,7 @@ INT16 WINAPI DialogBoxParam16( HINSTANCE16 hInst, LPCSTR template,
{
HWND owner = WIN_Handle32(owner16);
hwnd = DIALOG_CreateIndirect16( hInst, data, owner, dlgProc, param, TRUE );
- if (hwnd) ret = wow_handlers32.dialog_box_loop( hwnd );
+ if (hwnd) ret = wow_handlers32.dialog_box_loop( hwnd, owner );
GlobalUnlock16( hmem );
}
FreeResource16( hmem );
@@ -764,7 +764,7 @@ INT16 WINAPI DialogBoxIndirectParam16( HINSTANCE16 hInst, HANDLE16 dlgTemplate,
if (!(ptr = GlobalLock16( dlgTemplate ))) return -1;
hwnd = DIALOG_CreateIndirect16( hInst, ptr, owner, dlgProc, param, TRUE );
GlobalUnlock16( dlgTemplate );
- if (hwnd) return wow_handlers32.dialog_box_loop( hwnd );
+ if (hwnd) return wow_handlers32.dialog_box_loop( hwnd, owner );
return -1;
}
diff --git a/dlls/user.exe16/user_private.h b/dlls/user.exe16/user_private.h
index 3d97546..7c91afb 100644
--- a/dlls/user.exe16/user_private.h
+++ b/dlls/user.exe16/user_private.h
@@ -63,7 +63,7 @@ struct wow_handlers32
HWND (*get_win_handle)(HWND);
WNDPROC (*alloc_winproc)(WNDPROC,BOOL);
struct tagDIALOGINFO *(*get_dialog_info)(HWND,BOOL);
- INT (*dialog_box_loop)(HWND);
+ INT (*dialog_box_loop)(HWND,HWND);
ULONG_PTR (*get_icon_param)(HICON);
ULONG_PTR (*set_icon_param)(HICON,ULONG_PTR);
};
diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h
index 542bf39..69bc94c 100644
--- a/dlls/user32/controls.h
+++ b/dlls/user32/controls.h
@@ -121,7 +121,7 @@ struct wow_handlers32
HWND (*get_win_handle)(HWND);
WNDPROC (*alloc_winproc)(WNDPROC,BOOL);
struct tagDIALOGINFO *(*get_dialog_info)(HWND,BOOL);
- INT (*dialog_box_loop)(HWND);
+ INT (*dialog_box_loop)(HWND,HWND);
ULONG_PTR (*get_icon_param)(HICON);
ULONG_PTR (*set_icon_param)(HICON,ULONG_PTR);
};
@@ -244,7 +244,7 @@ typedef struct tagDIALOGINFO
#define DF_OWNERENABLED 0x0002
extern DIALOGINFO *DIALOG_get_info( HWND hwnd, BOOL create ) DECLSPEC_HIDDEN;
-extern INT DIALOG_DoDialogBox( HWND hwnd ) DECLSPEC_HIDDEN;
+extern INT DIALOG_DoDialogBox( HWND hwnd, HWND owner ) DECLSPEC_HIDDEN;
HRGN set_control_clipping( HDC hdc, const RECT *rect ) DECLSPEC_HIDDEN;
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c
index 3ea426d..a61090d 100644
--- a/dlls/user32/dialog.c
+++ b/dlls/user32/dialog.c
@@ -769,9 +769,8 @@ HWND WINAPI CreateDialogIndirectParamW( HINSTANCE hInst, LPCDLGTEMPLATEW dlgTemp
/***********************************************************************
* DIALOG_DoDialogBox
*/
-INT DIALOG_DoDialogBox( HWND hwnd )
+INT DIALOG_DoDialogBox( HWND hwnd, HWND owner )
{
- HWND owner = GetWindow( hwnd, GW_OWNER );
DIALOGINFO * dlgInfo;
MSG msg;
INT retval;
@@ -842,7 +841,7 @@ INT_PTR WINAPI DialogBoxParamA( HINSTANCE hInst, LPCSTR name,
if (!(hrsrc = FindResourceA( hInst, name, (LPSTR)RT_DIALOG ))) return -1;
if (!(ptr = LoadResource(hInst, hrsrc))) return -1;
hwnd = DIALOG_CreateIndirect( hInst, ptr, owner, dlgProc, param, FALSE, TRUE );
- if (hwnd) return DIALOG_DoDialogBox( hwnd );
+ if (hwnd) return DIALOG_DoDialogBox( hwnd, owner );
return 0;
}
@@ -860,7 +859,7 @@ INT_PTR WINAPI DialogBoxParamW( HINSTANCE hInst, LPCWSTR name,
if (!(hrsrc = FindResourceW( hInst, name, (LPWSTR)RT_DIALOG ))) return -1;
if (!(ptr = LoadResource(hInst, hrsrc))) return -1;
hwnd = DIALOG_CreateIndirect( hInst, ptr, owner, dlgProc, param, TRUE, TRUE );
- if (hwnd) return DIALOG_DoDialogBox( hwnd );
+ if (hwnd) return DIALOG_DoDialogBox( hwnd, owner );
return 0;
}
@@ -873,7 +872,7 @@ INT_PTR WINAPI DialogBoxIndirectParamAorW( HINSTANCE hInstance, LPCVOID template
LPARAM param, DWORD flags )
{
HWND hwnd = DIALOG_CreateIndirect( hInstance, template, owner, dlgProc, param, !flags, TRUE );
- if (hwnd) return DIALOG_DoDialogBox( hwnd );
+ if (hwnd) return DIALOG_DoDialogBox( hwnd, owner );
return -1;
}
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 528669e..9c0a44a 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -4322,7 +4322,6 @@ static INT_PTR WINAPI empty_dlg_proc2(HWND hwnd, UINT msg, WPARAM wparam, LPARAM
param->dlg_data->style |= WS_CHILD;
DialogBoxIndirectParamA(GetModuleHandleA(NULL), param->dlg_data, hwnd, empty_dlg_proc3, 0);
- todo_wine_if (!(style & (WS_CHILD|WS_POPUP)))
ok(IsWindowEnabled(hwnd), "wrong state for %p (%08x)\n", hwnd, style);
EndDialog(hwnd, 0);
--
2.7.1

View File

@ -0,0 +1,82 @@
From c2ad598c5826f3b86111f49bde37e226ca7467fe Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Thu, 31 Mar 2016 11:50:20 +0800
Subject: user32: Enable correct dialog owner.
---
dlls/user32/dialog.c | 32 ++++++++++++++++++++------------
dlls/user32/tests/win.c | 1 -
2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c
index a61090d..d28b840 100644
--- a/dlls/user32/dialog.c
+++ b/dlls/user32/dialog.c
@@ -434,6 +434,21 @@ static LPCSTR DIALOG_ParseTemplate32( LPCSTR template, DLG_TEMPLATE * result )
return (LPCSTR)(((UINT_PTR)p + 3) & ~3);
}
+static HWND real_owner( HWND owner )
+{
+ HWND parent;
+ /*
+ * Owner needs to be top level window. We need to duplicate the logic from server,
+ * because we need to disable it before creating dialog window.
+ */
+ while ((GetWindowLongW( owner, GWL_STYLE ) & (WS_POPUP|WS_CHILD)) == WS_CHILD)
+ {
+ parent = GetParent( owner );
+ if (!parent || parent == GetDesktopWindow()) break;
+ owner = parent;
+ }
+ return owner;
+}
/***********************************************************************
* DIALOG_CreateIndirect
@@ -586,18 +601,8 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
if (modal && owner)
{
- HWND parent;
- disabled_owner = owner;
- /*
- * Owner needs to be top level window. We need to duplicate the logic from server,
- * because we need to disable it before creating dialog window.
- */
- while ((GetWindowLongW( disabled_owner, GWL_STYLE ) & (WS_POPUP|WS_CHILD)) == WS_CHILD)
- {
- parent = GetParent( disabled_owner );
- if (!parent || parent == GetDesktopWindow()) break;
- disabled_owner = parent;
- }
+ disabled_owner = real_owner( owner );
+
if (IsWindowEnabled( disabled_owner ))
{
flags |= DF_OWNERENABLED;
@@ -778,6 +783,9 @@ INT DIALOG_DoDialogBox( HWND hwnd, HWND owner )
if (!(dlgInfo = DIALOG_get_info( hwnd, FALSE ))) return -1;
+ if (owner)
+ owner = real_owner( owner );
+
bFirstEmpty = TRUE;
if (!(dlgInfo->flags & DF_END)) /* was EndDialog called in WM_INITDIALOG ? */
{
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 9c0a44a..5ec370e 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -4419,7 +4419,6 @@ static void check_dialog_style(DWORD style_in, DWORD ex_style_in, DWORD style_ou
ok(IsWindowEnabled(parent), "wrong parent state (dialog style %#x)\n", style_in);
if (grand_parent)
- todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
ok(IsWindowEnabled(grand_parent), "wrong grand parent state (dialog style %#x)\n", style_in);
DestroyWindow(parent);
--
2.7.1

View File

@ -0,0 +1,92 @@
From c47e1ecc0bfdfac833dd9548b0818087bb7bc69d Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Wed, 30 Mar 2016 18:16:54 +0800
Subject: user32: Unconditionally enable dialog owner.
---
dlls/user32/controls.h | 1 -
dlls/user32/dialog.c | 8 ++------
dlls/user32/tests/win.c | 3 ---
3 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h
index 69bc94c..1641645 100644
--- a/dlls/user32/controls.h
+++ b/dlls/user32/controls.h
@@ -241,7 +241,6 @@ typedef struct tagDIALOGINFO
} DIALOGINFO;
#define DF_END 0x0001
-#define DF_OWNERENABLED 0x0002
extern DIALOGINFO *DIALOG_get_info( HWND hwnd, BOOL create ) DECLSPEC_HIDDEN;
extern INT DIALOG_DoDialogBox( HWND hwnd, HWND owner ) DECLSPEC_HIDDEN;
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c
index d28b840..1aa954f 100644
--- a/dlls/user32/dialog.c
+++ b/dlls/user32/dialog.c
@@ -472,7 +472,6 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
HWND disabled_owner = NULL;
HMENU hMenu = 0;
HFONT hUserFont = 0;
- UINT flags = 0;
UINT xBaseUnit = LOWORD(units);
UINT yBaseUnit = HIWORD(units);
@@ -604,10 +603,7 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
disabled_owner = real_owner( owner );
if (IsWindowEnabled( disabled_owner ))
- {
- flags |= DF_OWNERENABLED;
EnableWindow( disabled_owner, FALSE );
- }
else
disabled_owner = NULL;
}
@@ -663,7 +659,7 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
dlgInfo->hMenu = hMenu;
dlgInfo->xBaseUnit = xBaseUnit;
dlgInfo->yBaseUnit = yBaseUnit;
- dlgInfo->flags = flags;
+ dlgInfo->flags = 0;
if (template.helpId) SetWindowContextHelpId( hwnd, template.helpId );
@@ -829,7 +825,7 @@ INT DIALOG_DoDialogBox( HWND hwnd, HWND owner )
}
}
}
- if (dlgInfo->flags & DF_OWNERENABLED) EnableWindow( owner, TRUE );
+ EnableWindow( owner, TRUE );
retval = dlgInfo->idResult;
DestroyWindow( hwnd );
return retval;
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 5ec370e..96d293d 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -4304,20 +4304,17 @@ static INT_PTR WINAPI empty_dlg_proc2(HWND hwnd, UINT msg, WPARAM wparam, LPARAM
}
DialogBoxIndirectParamA(GetModuleHandleA(NULL), param->dlg_data, disabled_hwnd, empty_dlg_proc3, 0);
- todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
ok(IsWindowEnabled(disabled_hwnd), "wrong state for %08x\n", style);
ok(IsWindowEnabled(hwnd), "wrong state for %p\n", hwnd);
ok(IsWindowEnabled(param->parent), "wrong state for %p\n", param->parent);
if (param->grand_parent)
- todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
ok(IsWindowEnabled(param->grand_parent), "wrong state for %p (%08x)\n", param->grand_parent, style);
DialogBoxIndirectParamA(GetModuleHandleA(NULL), param->dlg_data, hwnd, empty_dlg_proc3, 0);
ok(IsWindowEnabled(hwnd), "wrong state for %p\n", hwnd);
ok(IsWindowEnabled(param->parent), "wrong state for %p\n", param->parent);
if (param->grand_parent)
- todo_wine_if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
ok(IsWindowEnabled(param->grand_parent), "wrong state for %p (%08x)\n", param->grand_parent, style);
param->dlg_data->style |= WS_CHILD;
--
2.7.1

View File

@ -0,0 +1 @@
Fixes: [40282] Enable the correct dialog owner in DIALOG_DoDialogBox