https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3672658e75586379477fda5fc70d4de43590f4a9

commit 3672658e75586379477fda5fc70d4de43590f4a9
Author:     Amine Khaldi <[email protected]>
AuthorDate: Sun Jan 21 21:59:45 2018 +0100
Commit:     Amine Khaldi <[email protected]>
CommitDate: Sun Jan 21 21:59:45 2018 +0100

    [WSHOM.OCX] Sync with Wine 3.0. CORE-14225
---
 dll/win32/wshom.ocx/shell.c | 78 ++++++++++++++++++++++++++++++++++++++++++---
 media/doc/README.WINE       |  2 +-
 2 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/dll/win32/wshom.ocx/shell.c b/dll/win32/wshom.ocx/shell.c
index 1641c6ed50..bdae7d9fcd 100644
--- a/dll/win32/wshom.ocx/shell.c
+++ b/dll/win32/wshom.ocx/shell.c
@@ -1272,11 +1272,81 @@ static HRESULT WINAPI WshShell3_Run(IWshShell3 *iface, 
BSTR cmd, VARIANT *style,
     }
 }
 
-static HRESULT WINAPI WshShell3_Popup(IWshShell3 *iface, BSTR Text, VARIANT* 
SecondsToWait, VARIANT *Title, VARIANT *Type, int *button)
+struct popup_thread_param
 {
-    FIXME("(%s %s %s %s %p): stub\n", debugstr_w(Text), 
debugstr_variant(SecondsToWait),
-        debugstr_variant(Title), debugstr_variant(Type), button);
-    return E_NOTIMPL;
+    WCHAR *text;
+    VARIANT title;
+    VARIANT type;
+    INT button;
+};
+
+static DWORD WINAPI popup_thread_proc(void *arg)
+{
+    static const WCHAR defaulttitleW[] = {'W','i','n','d','o','w','s',' 
','S','c','r','i','p','t',' ','H','o','s','t',0};
+    struct popup_thread_param *param = (struct popup_thread_param *)arg;
+
+    param->button = MessageBoxW(NULL, param->text, 
is_optional_argument(&param->title) ?
+            defaulttitleW : V_BSTR(&param->title), V_I4(&param->type));
+    return 0;
+}
+
+static HRESULT WINAPI WshShell3_Popup(IWshShell3 *iface, BSTR text, VARIANT 
*seconds_to_wait, VARIANT *title,
+        VARIANT *type, int *button)
+{
+    struct popup_thread_param param;
+    DWORD tid, status;
+    VARIANT timeout;
+    HANDLE hthread;
+    HRESULT hr;
+
+    TRACE("(%s %s %s %s %p)\n", debugstr_w(text), 
debugstr_variant(seconds_to_wait), debugstr_variant(title),
+        debugstr_variant(type), button);
+
+    if (!seconds_to_wait || !title || !type || !button)
+        return E_POINTER;
+
+    VariantInit(&timeout);
+    if (!is_optional_argument(seconds_to_wait))
+    {
+        hr = VariantChangeType(&timeout, seconds_to_wait, 0, VT_I4);
+        if (FAILED(hr))
+            return hr;
+    }
+
+    VariantInit(&param.type);
+    if (!is_optional_argument(type))
+    {
+        hr = VariantChangeType(&param.type, type, 0, VT_I4);
+        if (FAILED(hr))
+            return hr;
+    }
+
+    if (is_optional_argument(title))
+        param.title = *title;
+    else
+    {
+        VariantInit(&param.title);
+        hr = VariantChangeType(&param.title, title, 0, VT_BSTR);
+        if (FAILED(hr))
+            return hr;
+    }
+
+    param.text = text;
+    param.button = -1;
+    hthread = CreateThread(NULL, 0, popup_thread_proc, &param, 0, &tid);
+    status = MsgWaitForMultipleObjects(1, &hthread, FALSE, V_I4(&timeout) ? 
V_I4(&timeout) * 1000: INFINITE, 0);
+    if (status == WAIT_TIMEOUT)
+    {
+        PostThreadMessageW(tid, WM_QUIT, 0, 0);
+        MsgWaitForMultipleObjects(1, &hthread, FALSE, INFINITE, 0);
+        param.button = -1;
+    }
+    *button = param.button;
+
+    VariantClear(&param.title);
+    CloseHandle(hthread);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI WshShell3_CreateShortcut(IWshShell3 *iface, BSTR 
PathLink, IDispatch** Shortcut)
diff --git a/media/doc/README.WINE b/media/doc/README.WINE
index b661e3d685..f366990215 100644
--- a/media/doc/README.WINE
+++ b/media/doc/README.WINE
@@ -211,7 +211,7 @@ reactos/dll/win32/wldap32             # Synced to Wine-3.0
 reactos/dll/win32/wmi                 # Synced to WineStaging-2.9
 reactos/dll/win32/wmiutils            # Synced to WineStaging-2.9
 reactos/dll/win32/wmvcore             # Synced to Wine-3.0
-reactos/dll/win32/wshom.ocx           # Synced to WineStaging-2.9
+reactos/dll/win32/wshom.ocx           # Synced to Wine-3.0
 reactos/dll/win32/wtsapi32            # Synced to WineStaging-2.9
 reactos/dll/win32/wuapi               # Synced to WineStaging-2.9
 reactos/dll/win32/xinput1_1           # Synced to WineStaging-2.9

Reply via email to