[RSHELL]
authorDavid Quintana <gigaherz@gmail.com>
Tue, 18 Feb 2014 11:05:20 +0000 (11:05 +0000)
committerDavid Quintana <gigaherz@gmail.com>
Tue, 18 Feb 2014 11:05:20 +0000 (11:05 +0000)
* CMenuBand: Fix submenu creation for shell folder menus.
CORE-7881

svn path=/branches/shell-experiments/; revision=62240

base/shell/rshell/CMenuBand.cpp

index b818317..0090407 100644 (file)
@@ -1333,9 +1333,43 @@ HRESULT CMenuSFToolbar::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResu
 
 HRESULT CMenuSFToolbar::PopupItem(UINT uItem)
 {
+    HRESULT hr;
+    UINT uId;
+    UINT uIdAncestor;
+    DWORD flags;
     int index;
+    CComPtr<IShellMenuCallback> psmc;
     CComPtr<IShellMenu> shellMenu;
-    HRESULT hr = m_menuBand->CallCBWithPidl(GetPidlFromId(uItem, &index), SMC_GETOBJECT, (WPARAM) &IID_IShellMenu, (LPARAM) &shellMenu);
+    
+    LPITEMIDLIST pidl = GetPidlFromId(uItem, &index);
+
+    if (!pidl)
+        return E_FAIL;
+
+#ifndef USE_BUILTIN_MENUBAND
+    hr = CoCreateInstance(CLSID_MenuBand,
+        NULL,
+        CLSCTX_INPROC_SERVER,
+        IID_PPV_ARG(IShellMenu, &pShellMenu));
+#else
+    hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &shellMenu));
+#endif
+    if (FAILED(hr))
+        return hr;
+
+    m_menuBand->GetMenuInfo(&psmc, &uId, &uIdAncestor, &flags);
+
+    // FIXME: not sure waht to use as uId/uIdAncestor here
+    hr = shellMenu->Initialize(psmc, 0, uId, SMINIT_VERTICAL);
+    if (FAILED(hr))
+        return hr;
+
+    CComPtr<IShellFolder> childFolder;
+    hr = m_shellFolder->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, &childFolder));
+    if (FAILED(hr))
+        return hr;
+
+    hr = shellMenu->SetShellFolder(childFolder, NULL, NULL, 0);
     if (FAILED(hr))
         return hr;