mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-01 09:50:52 +00:00
comdlg32: Return E_UNEXPECTED if IFileDialog is already shown.
This commit is contained in:
parent
3149d84502
commit
5bc5d36065
2 changed files with 48 additions and 1 deletions
|
@ -2246,6 +2246,9 @@ static HRESULT create_dialog(FileDialogImpl *This, HWND parent)
|
|||
{
|
||||
INT_PTR res;
|
||||
|
||||
if (This->dlg_hwnd)
|
||||
return E_UNEXPECTED;
|
||||
|
||||
SetLastError(0);
|
||||
res = DialogBoxParamW(COMDLG32_hInstance,
|
||||
MAKEINTRESOURCEW(NEWFILEOPENV3ORD),
|
||||
|
|
|
@ -27,12 +27,14 @@
|
|||
|
||||
#define IDT_CHANGEFILETYPE 500
|
||||
#define IDT_CLOSEDIALOG 501
|
||||
#define IDT_SHOWDIALOG 502
|
||||
|
||||
typedef enum {
|
||||
IFDEVENT_TEST_NONE = 0,
|
||||
IFDEVENT_TEST1 = 0x1,
|
||||
IFDEVENT_TEST2 = 0x2,
|
||||
IFDEVENT_TEST3 = 0x3
|
||||
IFDEVENT_TEST3 = 0x3,
|
||||
IFDEVENT_TEST4 = 0x4,
|
||||
} FileDialogEventsTest;
|
||||
|
||||
static HRESULT (WINAPI *pSHCreateShellItem)(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
|
||||
|
@ -193,6 +195,15 @@ static LRESULT CALLBACK test_customize_dlgproc(HWND hwnd, UINT message, WPARAM w
|
|||
br = PostMessageW(hwnd, WM_COMMAND, IDCANCEL, 0);
|
||||
ok(br, "Failed\n");
|
||||
return TRUE;
|
||||
case IDT_SHOWDIALOG:
|
||||
{
|
||||
HRESULT hr;
|
||||
KillTimer(hwnd, IDT_SHOWDIALOG);
|
||||
hr = IFileDialog_Show(pfd, NULL);
|
||||
ok(hr == E_UNEXPECTED, "got 0x%08lx.\n", hr);
|
||||
SetTimer(hwnd, IDT_CLOSEDIALOG, 100, 0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -249,6 +260,9 @@ static HRESULT WINAPI IFileDialogEvents_fnOnFolderChange(IFileDialogEvents *ifac
|
|||
case IFDEVENT_TEST3:
|
||||
SetTimer(dlg_hwnd, IDT_CHANGEFILETYPE, 100, 0);
|
||||
break;
|
||||
case IFDEVENT_TEST4:
|
||||
SetTimer(dlg_hwnd, IDT_SHOWDIALOG, 100, 0);
|
||||
break;
|
||||
default:
|
||||
ok(FALSE, "Should not happen (%d)\n", This->events_test);
|
||||
}
|
||||
|
@ -2496,6 +2510,35 @@ static void test_customize_remove_from_empty_combobox(void)
|
|||
IFileDialog_Release(pfod);
|
||||
}
|
||||
|
||||
static void test_double_show(void)
|
||||
{
|
||||
IFileDialogEventsImpl *pfdeimpl;
|
||||
IFileDialogEvents *pfde;
|
||||
IFileDialog *pfd;
|
||||
DWORD cookie;
|
||||
HRESULT hr;
|
||||
|
||||
hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER,
|
||||
&IID_IFileDialog, (void**)&pfd);
|
||||
ok(hr == S_OK, "got 0x%08lx.\n", hr);
|
||||
|
||||
pfde = IFileDialogEvents_Constructor();
|
||||
pfdeimpl = impl_from_IFileDialogEvents(pfde);
|
||||
pfdeimpl->events_test = IFDEVENT_TEST4;
|
||||
|
||||
hr = IFileDialog_Advise(pfd, pfde, &cookie);
|
||||
ok(hr == S_OK, "got 0x%08lx.\n", hr);
|
||||
|
||||
hr = IFileDialog_Show(pfd, NULL);
|
||||
ok(hr == HRESULT_FROM_WIN32(ERROR_CANCELLED), "got 0x%08lx.\n", hr);
|
||||
|
||||
hr = IFileDialog_Unadvise(pfd, cookie);
|
||||
ok(hr == S_OK, "got 0x%08lx.\n", hr);
|
||||
|
||||
IFileDialogEvents_Release(pfde);
|
||||
IFileDialog_Release(pfd);
|
||||
}
|
||||
|
||||
START_TEST(itemdlg)
|
||||
{
|
||||
OleInitialize(NULL);
|
||||
|
@ -2521,6 +2564,7 @@ START_TEST(itemdlg)
|
|||
test_persistent_state();
|
||||
test_overwrite();
|
||||
test_customize_remove_from_empty_combobox();
|
||||
test_double_show();
|
||||
}
|
||||
else
|
||||
skip("Skipping all Item Dialog tests.\n");
|
||||
|
|
Loading…
Reference in a new issue