[RSHELL]
[reactos.git] / base / shell / rshell / CStartMenu.cpp
index 3609630..79c7864 100644 (file)
@@ -151,7 +151,14 @@ private:
         int csidl = 0;
         IShellMenu *pShellMenu;
 
+#if USE_SYSTEM_MENUBAND
+        hr = CoCreateInstance(CLSID_MenuBand,
+            NULL,
+            CLSCTX_INPROC_SERVER,
+            IID_PPV_ARG(IShellMenu, &pShellMenu));
+#else
         hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
+#endif
         if (FAILED_UNEXPECTEDLY(hr))
             return hr;
 
@@ -255,16 +262,13 @@ public:
         IBandSite* pBandSite,
         IDeskBar* pDeskBar)
     {
-        m_pShellMenu.Attach(pShellMenu);
-        m_pBandSite.Attach(pBandSite);
-        m_pDeskBar.Attach(pDeskBar);
+        m_pShellMenu = pShellMenu;
+        m_pBandSite = pBandSite;
+        m_pDeskBar = pDeskBar;
     }
 
     ~CShellMenuCallback()
     {
-        m_pShellMenu.Release();
-        m_pBandSite.Release();
-        m_pDeskBar.Release();
     }
 
     HRESULT _SetProgramsFolder(IShellFolder * psf, LPITEMIDLIST pidl)
@@ -383,9 +387,9 @@ extern "C"
 HRESULT WINAPI
 CStartMenu_Constructor(REFIID riid, void **ppv)
 {
-    IShellMenu* pShellMenu;
-    IBandSite* pBandSite;
-    IDeskBar* pDeskBar;
+    CComPtr<IShellMenu> pShellMenu;
+    CComPtr<IBandSite> pBandSite;
+    CComPtr<IDeskBar> pDeskBar;
 
     HRESULT hr;
     IShellFolder * psf;
@@ -394,15 +398,36 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
     LPITEMIDLIST pidlPrograms;
     CComPtr<IShellFolder> psfPrograms;
 
+#if USE_SYSTEM_MENUBAND
+    hr = CoCreateInstance(CLSID_MenuBand,
+                          NULL,
+                          CLSCTX_INPROC_SERVER,
+                          IID_PPV_ARG(IShellMenu, &pShellMenu));
+#else
     hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
+#endif
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;
 
+#if USE_SYSTEM_MENUSITE
+    hr = CoCreateInstance(CLSID_MenuBandSite,
+                          NULL,
+                          CLSCTX_INPROC_SERVER,
+                          IID_PPV_ARG(IBandSite, &pBandSite));
+#else
     hr = CMenuSite_Constructor(IID_PPV_ARG(IBandSite, &pBandSite));
+#endif
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;
 
+#if USE_SYSTEM_MENUDESKBAR
+    hr = CoCreateInstance(CLSID_MenuDeskBar,
+                          NULL,
+                          CLSCTX_INPROC_SERVER,
+                          IID_PPV_ARG(IDeskBar, &pDeskBar));
+#else
     hr = CMenuDeskBar_Constructor(IID_PPV_ARG(IDeskBar, &pDeskBar));
+#endif
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;