[SHELL32]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 20 Oct 2011 20:28:30 +0000 (20:28 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 20 Oct 2011 20:28:30 +0000 (20:28 +0000)
- Hackfix shell new item service
- Add support for SID_IFolderView

svn path=/trunk/; revision=54217

reactos/dll/win32/shell32/shlview.cpp
reactos/dll/win32/shell32/shv_item_new.cpp
reactos/dll/win32/shell32/shv_item_new.h

index 82cc929..3d5edda 100644 (file)
@@ -2817,6 +2817,9 @@ HRESULT STDMETHODCALLTYPE CDefView::QueryService(REFGUID guidService, REFIID rii
 {
     if (IsEqualIID(guidService, SID_IShellBrowser))
         return pShellBrowser->QueryInterface(riid, ppvObject);
 {
     if (IsEqualIID(guidService, SID_IShellBrowser))
         return pShellBrowser->QueryInterface(riid, ppvObject);
+    else if(IsEqualIID(guidService, SID_IFolderView))
+        return QueryInterface(riid, ppvObject);
+
     return E_NOINTERFACE;
 }
 
     return E_NOINTERFACE;
 }
 
index fead6e0..ce933ac 100644 (file)
@@ -336,7 +336,7 @@ CNewMenu::InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu)
 }
 
 HRESULT
 }
 
 HRESULT
-CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi)
+CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView *psv)
 {
   SHELLNEW_ITEM *pCurItem = s_SnHead;
   IPersistFolder3 * psf;
 {
   SHELLNEW_ITEM *pCurItem = s_SnHead;
   IPersistFolder3 * psf;
@@ -372,9 +372,9 @@ CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi)
   if (!pCurItem)
       return E_UNEXPECTED;
 
   if (!pCurItem)
       return E_UNEXPECTED;
 
-    if (fSite == NULL)
-        return E_FAIL;
-    hResult = IUnknown_QueryService(fSite, SID_IFolderView, IID_IFolderView, (void **)&folderView);
+    //if (fSite == NULL)
+    //    return E_FAIL;
+    hResult = IUnknown_QueryService(psv, SID_IFolderView, IID_IFolderView, (void **)&folderView);
     if (FAILED(hResult))
         return hResult;
     hResult = folderView->GetFolder(IID_IShellFolder, (void **)&parentFolder);
     if (FAILED(hResult))
         return hResult;
     hResult = folderView->GetFolder(IID_IShellFolder, (void **)&parentFolder);
@@ -575,9 +575,9 @@ void CNewMenu::DoNewFolder(
     CComPtr<IShellFolder>                parentFolder;
     HRESULT                                hResult;
 
     CComPtr<IShellFolder>                parentFolder;
     HRESULT                                hResult;
 
-    if (fSite == NULL)
-        return;
-    hResult = IUnknown_QueryService(fSite, SID_IFolderView, IID_IFolderView, (void **)&folderView);
+    //if (fSite == NULL)
+    //    return;
+    hResult = IUnknown_QueryService(psv, SID_IFolderView, IID_IFolderView, (void **)&folderView);
     if (FAILED(hResult))
         return;
     hResult = folderView->GetFolder(IID_IShellFolder, (void **)&parentFolder);
     if (FAILED(hResult))
         return;
     hResult = folderView->GetFolder(IID_IShellFolder, (void **)&parentFolder);
@@ -620,8 +620,8 @@ HRESULT STDMETHODCALLTYPE CNewMenu::GetSite(REFIID riid, void **ppvSite)
     if (ppvSite == NULL)
         return E_POINTER;
     *ppvSite = fSite;
     if (ppvSite == NULL)
         return E_POINTER;
     *ppvSite = fSite;
-    if (fSite.p != NULL)
-        fSite.p->AddRef();
+    if (fSite != NULL)
+        fSite->AddRef();
     return S_OK;
 }
 
     return S_OK;
 }
 
@@ -690,7 +690,7 @@ CNewMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
         return S_OK;
     }
 
         return S_OK;
     }
 
-    hr = DoShellNewCmd(lpici);
+    hr = DoShellNewCmd(lpici, lpSV);
     if (SUCCEEDED(hr) && lpSV)
     {
         lpSV->Refresh();
     if (SUCCEEDED(hr) && lpSV)
     {
         lpSV->Refresh();
index 2d8778f..0201945 100644 (file)
@@ -51,7 +51,7 @@ private:
 
     LPWSTR szPath;
     SHELLNEW_ITEM *s_SnHead;
 
     LPWSTR szPath;
     SHELLNEW_ITEM *s_SnHead;
-       CComPtr<IUnknown>                                       fSite;
+    IUnknown*  fSite;
 public:
        CNewMenu();
        ~CNewMenu();
 public:
        CNewMenu();
        ~CNewMenu();
@@ -60,7 +60,7 @@ public:
        void UnloadShellItems();
        BOOL LoadShellNewItems();
        UINT InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu);
        void UnloadShellItems();
        BOOL LoadShellNewItems();
        UINT InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu);
-       HRESULT DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi);
+       HRESULT DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView * psv);
        HRESULT DoMeasureItem(HWND hWnd, MEASUREITEMSTRUCT *lpmis);
        HRESULT DoDrawItem(HWND hWnd, DRAWITEMSTRUCT *drawItem);
        void DoNewFolder(IShellView *psv);
        HRESULT DoMeasureItem(HWND hWnd, MEASUREITEMSTRUCT *lpmis);
        HRESULT DoDrawItem(HWND hWnd, DRAWITEMSTRUCT *drawItem);
        void DoNewFolder(IShellView *psv);