Jacek Caban : ieframe: Moved TaskbarList implementation to ieframe.

Alexandre Julliard julliard at winehq.org
Tue Jul 26 11:37:57 CDT 2011


Module: wine
Branch: master
Commit: 5ac7376e49642488428d8149a52e4a4dbea67420
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5ac7376e49642488428d8149a52e4a4dbea67420

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul 26 12:03:49 2011 +0200

ieframe: Moved TaskbarList implementation to ieframe.

---

 dlls/ieframe/Makefile.in                |    1 +
 dlls/ieframe/ieframe.h                  |    2 +
 dlls/ieframe/ieframe_main.c             |   16 +++++++++++++++
 dlls/{shdocvw => ieframe}/taskbarlist.c |   32 +++++++++++-------------------
 dlls/shdocvw/Makefile.in                |    1 -
 dlls/shdocvw/factory.c                  |    7 +----
 dlls/shdocvw/shdocvw.h                  |    2 -
 7 files changed, 33 insertions(+), 28 deletions(-)

diff --git a/dlls/ieframe/Makefile.in b/dlls/ieframe/Makefile.in
index 340beb0..a6e0f23 100644
--- a/dlls/ieframe/Makefile.in
+++ b/dlls/ieframe/Makefile.in
@@ -5,6 +5,7 @@ IMPORTS   = uuid urlmon shell32 ole32 advapi32
 C_SRCS = \
 	ieframe_main.c \
 	intshcut.c \
+	taskbarlist.c \
 	urlhist.c
 
 @MAKE_DLL_RULES@
diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h
index 4e14eb9..f449369 100644
--- a/dlls/ieframe/ieframe.h
+++ b/dlls/ieframe/ieframe.h
@@ -29,11 +29,13 @@
 #include "winuser.h"
 
 #include "ole2.h"
+#include "shlobj.h"
 
 #include "wine/unicode.h"
 
 HRESULT WINAPI CUrlHistory_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
 HRESULT WINAPI InternetShortcut_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
+HRESULT WINAPI TaskbarList_Create(IClassFactory*,IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
 
 extern LONG module_ref DECLSPEC_HIDDEN;
 
diff --git a/dlls/ieframe/ieframe_main.c b/dlls/ieframe/ieframe_main.c
index 569c425..1b8a3d7 100644
--- a/dlls/ieframe/ieframe_main.c
+++ b/dlls/ieframe/ieframe_main.c
@@ -86,6 +86,16 @@ static const IClassFactoryVtbl CUrlHistoryFactoryVtbl = {
 
 static IClassFactory CUrlHistoryFactory = { &CUrlHistoryFactoryVtbl };
 
+static const IClassFactoryVtbl TaskbarListFactoryVtbl = {
+    ClassFactory_QueryInterface,
+    ClassFactory_AddRef,
+    ClassFactory_Release,
+    TaskbarList_Create,
+    ClassFactory_LockServer
+};
+
+static IClassFactory TaskbarListFactory = { &TaskbarListFactoryVtbl };
+
 /******************************************************************
  *              DllMain (ieframe.@)
  */
@@ -120,6 +130,12 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
         return IClassFactory_QueryInterface(&CUrlHistoryFactory, riid, ppv);
     }
 
+    if(IsEqualGUID(&CLSID_TaskbarList, rclsid)) {
+        TRACE("(CLSID_TaskbarList %s %p)\n", debugstr_guid(riid), ppv);
+        return IClassFactory_QueryInterface(&TaskbarListFactory, riid, ppv);
+    }
+
+
     FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     return CLASS_E_CLASSNOTAVAILABLE;
 }
diff --git a/dlls/shdocvw/taskbarlist.c b/dlls/ieframe/taskbarlist.c
similarity index 94%
rename from dlls/shdocvw/taskbarlist.c
rename to dlls/ieframe/taskbarlist.c
index 5834cf6..747a033 100644
--- a/dlls/shdocvw/taskbarlist.c
+++ b/dlls/ieframe/taskbarlist.c
@@ -18,11 +18,9 @@
  *
  */
 
-#include "config.h"
-#include "wine/port.h"
-#include "wine/debug.h"
+#include "ieframe.h"
 
-#include "shdocvw.h"
+#include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
@@ -79,8 +77,8 @@ static ULONG STDMETHODCALLTYPE taskbar_list_Release(ITaskbarList4 *iface)
 
     if (!refcount)
     {
-        HeapFree(GetProcessHeap(), 0, This);
-        SHDOCVW_UnlockModule();
+        heap_free(This);
+        unlock_module();
     }
 
     return refcount;
@@ -289,10 +287,10 @@ static const struct ITaskbarList4Vtbl taskbar_list_vtbl =
     taskbar_list_SetTabProperties,
 };
 
-HRESULT TaskbarList_Create(IUnknown *outer, REFIID riid, void **taskbar_list)
+HRESULT WINAPI TaskbarList_Create(IClassFactory *iface, IUnknown *outer, REFIID riid, void **taskbar_list)
 {
     struct taskbar_list *object;
-    HRESULT hr;
+    HRESULT hres;
 
     TRACE("outer %p, riid %s, taskbar_list %p\n", outer, debugstr_guid(riid), taskbar_list);
 
@@ -303,7 +301,7 @@ HRESULT TaskbarList_Create(IUnknown *outer, REFIID riid, void **taskbar_list)
         return CLASS_E_NOAGGREGATION;
     }
 
-    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+    object = heap_alloc_zero(sizeof(*object));
     if (!object)
     {
         ERR("Failed to allocate taskbar list object memory\n");
@@ -312,18 +310,12 @@ HRESULT TaskbarList_Create(IUnknown *outer, REFIID riid, void **taskbar_list)
     }
 
     object->ITaskbarList4_iface.lpVtbl = &taskbar_list_vtbl;
-    object->refcount = 0;
+    object->refcount = 1;
+    lock_module();
 
     TRACE("Created ITaskbarList4 %p\n", object);
 
-    hr = ITaskbarList4_QueryInterface(&object->ITaskbarList4_iface, riid, taskbar_list);
-    if (FAILED(hr))
-    {
-        HeapFree(GetProcessHeap(), 0, object);
-        return hr;
-    }
-
-    SHDOCVW_LockModule();
-
-    return S_OK;
+    hres = ITaskbarList4_QueryInterface(&object->ITaskbarList4_iface, riid, taskbar_list);
+    ITaskbarList4_Release(&object->ITaskbarList4_iface);
+    return hres;
 }
diff --git a/dlls/shdocvw/Makefile.in b/dlls/shdocvw/Makefile.in
index 7c13420..b3c3156 100644
--- a/dlls/shdocvw/Makefile.in
+++ b/dlls/shdocvw/Makefile.in
@@ -19,7 +19,6 @@ C_SRCS = \
 	shdocvw_main.c \
 	shellbrowser.c \
 	shlinstobj.c \
-	taskbarlist.c \
 	view.c \
 	webbrowser.c
 
diff --git a/dlls/shdocvw/factory.c b/dlls/shdocvw/factory.c
index d9f6d68..3288813 100644
--- a/dlls/shdocvw/factory.c
+++ b/dlls/shdocvw/factory.c
@@ -154,7 +154,6 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
 {
     static IClassFactoryImpl WB1ClassFactory = {{&WBCF_Vtbl}, WebBrowserV1_Create};
     static IClassFactoryImpl WB2ClassFactory = {{&WBCF_Vtbl}, WebBrowserV2_Create};
-    static IClassFactoryImpl TBLClassFactory = {{&WBCF_Vtbl}, TaskbarList_Create};
 
     TRACE("\n");
 
@@ -165,12 +164,10 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
         return IClassFactory_QueryInterface(&WB1ClassFactory.IClassFactory_iface, riid, ppv);
 
     if(IsEqualGUID(&CLSID_InternetShortcut, rclsid)
-       || IsEqualGUID(&CLSID_CUrlHistory, rclsid))
+       || IsEqualGUID(&CLSID_CUrlHistory, rclsid)
+       || IsEqualGUID(&CLSID_TaskbarList, rclsid))
         return get_ieframe_object(rclsid, riid, ppv);
 
-    if(IsEqualGUID(&CLSID_TaskbarList, rclsid))
-        return IClassFactory_QueryInterface(&TBLClassFactory.IClassFactory_iface, riid, ppv);
-
     /* As a last resort, figure if the CLSID belongs to a 'Shell Instance Object' */
     return SHDOCVW_GetShellInstanceObjectClassObject(rclsid, riid, ppv);
 }
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h
index 4522b65..f960a1a 100644
--- a/dlls/shdocvw/shdocvw.h
+++ b/dlls/shdocvw/shdocvw.h
@@ -258,8 +258,6 @@ void InternetExplorer_WebBrowser_Init(InternetExplorer*) DECLSPEC_HIDDEN;
 
 void released_obj(void) DECLSPEC_HIDDEN;
 
-HRESULT TaskbarList_Create(IUnknown*,REFIID,void**) DECLSPEC_HIDDEN;
-
 /**********************************************************************
  * Dll lifetime tracking declaration for shdocvw.dll
  */




More information about the wine-cvs mailing list