Andrew Bogott : shdocvw: Move OpenURL() from shdocvw_main.c into intshcut.c , and implement it.
Alexandre Julliard
julliard at winehq.org
Fri Nov 12 11:22:34 CST 2010
Module: wine
Branch: master
Commit: be01cdb6bf6306119cf3cde93316374cd8a1059e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=be01cdb6bf6306119cf3cde93316374cd8a1059e
Author: Andrew Bogott <andrew at CodeWeavers.com>
Date: Thu Nov 4 17:26:34 2010 -0500
shdocvw: Move OpenURL() from shdocvw_main.c into intshcut.c, and implement it.
---
dlls/shdocvw/intshcut.c | 62 +++++++++++++++++++++++++++++++++++++++---
dlls/shdocvw/shdocvw_main.c | 8 -----
2 files changed, 57 insertions(+), 13 deletions(-)
diff --git a/dlls/shdocvw/intshcut.c b/dlls/shdocvw/intshcut.c
index 2f1cad8..202a523 100644
--- a/dlls/shdocvw/intshcut.c
+++ b/dlls/shdocvw/intshcut.c
@@ -27,6 +27,9 @@
* The installer for the Zuma Deluxe Popcap game is good for testing.
*/
+#include <stdarg.h>
+#include <stdio.h>
+
#include "wine/debug.h"
#include "shdocvw.h"
#include "objidl.h"
@@ -34,6 +37,7 @@
#include "intshcut.h"
#include "shellapi.h"
#include "winreg.h"
+#include "shlwapi.h"
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
@@ -565,6 +569,22 @@ static const IPersistFileVtbl persistFileVtbl = {
PersistFile_GetCurFile
};
+static InternetShortcut *create_shortcut(void)
+{
+ InternetShortcut *newshortcut;
+
+ newshortcut = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(InternetShortcut));
+ if (newshortcut)
+ {
+ newshortcut->uniformResourceLocatorA.lpVtbl = &uniformResourceLocatorAVtbl;
+ newshortcut->uniformResourceLocatorW.lpVtbl = &uniformResourceLocatorWVtbl;
+ newshortcut->persistFile.lpVtbl = &persistFileVtbl;
+ newshortcut->refCount = 0;
+ }
+
+ return newshortcut;
+}
+
HRESULT InternetShortcut_Create(IUnknown *pOuter, REFIID riid, void **ppv)
{
InternetShortcut *This;
@@ -577,13 +597,9 @@ HRESULT InternetShortcut_Create(IUnknown *pOuter, REFIID riid, void **ppv)
if(pOuter)
return CLASS_E_NOAGGREGATION;
- This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(InternetShortcut));
+ This = create_shortcut();
if (This)
{
- This->uniformResourceLocatorA.lpVtbl = &uniformResourceLocatorAVtbl;
- This->uniformResourceLocatorW.lpVtbl = &uniformResourceLocatorWVtbl;
- This->persistFile.lpVtbl = &persistFileVtbl;
- This->refCount = 0;
hr = Unknown_QueryInterface(This, riid, ppv);
if (SUCCEEDED(hr))
SHDOCVW_LockModule();
@@ -594,3 +610,39 @@ HRESULT InternetShortcut_Create(IUnknown *pOuter, REFIID riid, void **ppv)
else
return E_OUTOFMEMORY;
}
+
+
+/**********************************************************************
+ * OpenURL (SHDOCVW.@)
+ */
+void WINAPI OpenURL(HWND hWnd, HINSTANCE hInst, LPCSTR lpcstrUrl, int nShowCmd)
+{
+ InternetShortcut *shortcut;
+ WCHAR* urlfilepath = NULL;
+ shortcut = create_shortcut();
+
+ if (shortcut)
+ {
+ int len;
+
+ len = MultiByteToWideChar(CP_ACP, 0, lpcstrUrl, -1, NULL, 0);
+ urlfilepath = heap_alloc(len * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, lpcstrUrl, -1, urlfilepath, len);
+
+ if(SUCCEEDED(IPersistFile_Load(&shortcut->persistFile, urlfilepath, 0)))
+ {
+ URLINVOKECOMMANDINFOW ici;
+
+ memset( &ici, 0, sizeof ici );
+ ici.dwcbSize = sizeof ici;
+ ici.dwFlags = IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB;
+ ici.hwndParent = hWnd;
+
+ if FAILED(UniformResourceLocatorW_InvokeCommand(&shortcut->uniformResourceLocatorW, (PURLINVOKECOMMANDINFOW) &ici))
+ TRACE("failed to open URL: %s\n.",debugstr_a(lpcstrUrl));
+ }
+
+ heap_free(shortcut);
+ heap_free(urlfilepath);
+ }
+}
diff --git a/dlls/shdocvw/shdocvw_main.c b/dlls/shdocvw/shdocvw_main.c
index f0fa0f6..a0070b4 100644
--- a/dlls/shdocvw/shdocvw_main.c
+++ b/dlls/shdocvw/shdocvw_main.c
@@ -219,14 +219,6 @@ DWORD WINAPI SetQueryNetSessionCount(DWORD arg)
}
/**********************************************************************
- * OpenURL (SHDOCVW.@)
- */
-void WINAPI OpenURL(HWND hWnd, HINSTANCE hInst, LPCSTR lpcstrUrl, int nShowCmd)
-{
- FIXME("%p %p %s %d\n", hWnd, hInst, debugstr_a(lpcstrUrl), nShowCmd);
-}
-
-/**********************************************************************
* Some forwards (by ordinal) to SHLWAPI
*/
More information about the wine-cvs
mailing list