Author: akhaldi
Date: Sun Mar 5 20:57:57 2017
New Revision: 74093
URL:
http://svn.reactos.org/svn/reactos?rev=74093&view=rev
Log:
[COMDLG32_WINETEST] Sync with Wine Staging 2.2. CORE-12823
Modified:
trunk/rostests/winetests/comdlg32/filedlg.c
Modified: trunk/rostests/winetests/comdlg32/filedlg.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/comdlg32/filedl…
==============================================================================
--- trunk/rostests/winetests/comdlg32/filedlg.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/comdlg32/filedlg.c [iso-8859-1] Sun Mar 5 20:57:57 2017
@@ -36,6 +36,9 @@
#include <shlguid.h>
#define COBJMACROS
#include <shobjidl.h>
+
+#include <ole2.h>
+#include <reactos/undocuser.h>
/* ##### */
@@ -1274,6 +1277,73 @@
todo_wine ok(!ret, "GetOpenFileNameW returned %#x\n", ret);
}
+static UINT_PTR WINAPI test_ole_init_wndproc(HWND dlg, UINT msg, WPARAM wParam, LPARAM
lParam)
+{
+ HRESULT hr;
+
+ hr = OleInitialize(NULL);
+ ok(hr == S_FALSE, "OleInitialize() returned %#x\n", hr);
+ OleUninitialize();
+
+ if (msg == WM_NOTIFY)
+ PostMessageA(GetParent(dlg), WM_COMMAND, IDCANCEL, 0);
+ return FALSE;
+}
+
+static LRESULT CALLBACK hook_proc(int code, WPARAM wp, LPARAM lp)
+{
+ static BOOL first_dlg = TRUE;
+ HRESULT hr;
+
+ if (code == HCBT_CREATEWND)
+ {
+ CBT_CREATEWNDW *c = (CBT_CREATEWNDW *)lp;
+
+ if (c->lpcs->lpszClass == (LPWSTR)WC_DIALOG)
+ {
+ /* OleInitialize() creates a window for the main apartment. Since
+ * Vista OleInitialize() is called before the file dialog is
+ * created. SimCity 2000 expects that the first window created
+ * after GetOpenFileA() is a file dialog window. Mark Vista+
+ * behavior as broken. */
+ hr = OleInitialize(NULL);
+ ok((first_dlg ? hr == S_OK : hr == S_FALSE)
+ || broken(first_dlg && hr == S_FALSE),
+ "OleInitialize() returned %#x (first dialog %#x)\n", hr,
first_dlg);
+ OleUninitialize();
+ first_dlg = FALSE;
+ }
+ }
+
+ return CallNextHookEx(NULL, code, wp, lp);
+}
+
+static void test_ole_initialization(void)
+{
+ char file[MAX_PATH] = {0};
+ OPENFILENAMEA ofn = {0};
+ HRESULT hr;
+ HHOOK hook;
+ BOOL ret;
+
+ hook = SetWindowsHookExW(WH_CBT, hook_proc, NULL, GetCurrentThreadId());
+
+ ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400A;
+ ofn.lpstrFile = file;
+ ofn.nMaxFile = MAX_PATH;
+ ofn.lpfnHook = test_ole_init_wndproc;
+ ofn.Flags = OFN_ENABLEHOOK | OFN_EXPLORER;
+ ofn.hInstance = GetModuleHandleA(NULL);
+ ret = GetOpenFileNameA(&ofn);
+ ok(!ret, "GetOpenFileNameA returned %#x\n", ret);
+
+ hr = OleInitialize(NULL);
+ ok(hr == S_OK, "OleInitialize() returned %#x\n", hr);
+ OleUninitialize();
+
+ UnhookWindowsHookEx(hook);
+}
+
START_TEST(filedlg)
{
test_DialogCancel();
@@ -1288,4 +1358,5 @@
test_extension();
test_null_filename();
test_directory_filename();
-}
+ test_ole_initialization();
+}