mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Added patch to enable the correct dialog owner in DIALOG_DoDialogBox.
This commit is contained in:
parent
336873284e
commit
962403c7ca
@ -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:
|
||||
|
@ -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)¶m);
|
||||
+
|
||||
+ 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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
1
patches/user32-Dialog_Owner/definition
Normal file
1
patches/user32-Dialog_Owner/definition
Normal file
@ -0,0 +1 @@
|
||||
Fixes: [40282] Enable the correct dialog owner in DIALOG_DoDialogBox
|
Loading…
Reference in New Issue
Block a user