Author: dquintana
Date: Sun Nov  2 22:26:44 2014
New Revision: 65200

URL: http://svn.reactos.org/svn/reactos?rev=65200&view=rev
Log:
[EXPLORER-NEW]
* Refactor startmnu.cpp into three separate files. startctxmnu.cpp contains the 
context menu handler for the start button, and startmnusite.cpp contains the 
former IStartMenuSiteImpl, renamed to CStartMenuSite.

Added:
    branches/shell-experiments/base/shell/explorer-new/startctxmnu.cpp
      - copied, changed from r65199, 
branches/shell-experiments/base/shell/explorer-new/startmnu.cpp
    branches/shell-experiments/base/shell/explorer-new/startmnusite.cpp
      - copied, changed from r65199, 
branches/shell-experiments/base/shell/explorer-new/startmnu.cpp
Modified:
    branches/shell-experiments/base/shell/explorer-new/CMakeLists.txt
    branches/shell-experiments/base/shell/explorer-new/precomp.h
    branches/shell-experiments/base/shell/explorer-new/startmnu.cpp

Modified: branches/shell-experiments/base/shell/explorer-new/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/explorer-new/CMakeLists.txt?rev=65200&r1=65199&r2=65200&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/explorer-new/CMakeLists.txt   
[iso-8859-1] (original)
+++ branches/shell-experiments/base/shell/explorer-new/CMakeLists.txt   
[iso-8859-1] Sun Nov  2 22:26:44 2014
@@ -11,7 +11,9 @@
     rshell.cpp
     settings.cpp
     shellservice.cpp
+    startctxmnu.cpp
     startmnu.cpp
+    startmnusite.cpp
     startup.cpp
     taskband.cpp
     taskswnd.cpp

Modified: branches/shell-experiments/base/shell/explorer-new/precomp.h
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/explorer-new/precomp.h?rev=65200&r1=65199&r2=65200&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/explorer-new/precomp.h        
[iso-8859-1] (original)
+++ branches/shell-experiments/base/shell/explorer-new/precomp.h        
[iso-8859-1] Sun Nov  2 22:26:44 2014
@@ -243,7 +243,7 @@
 IN DWORD dwValue);
 
 /*
- * startup.c
+ * startup.cpp
  */
 
 int
@@ -257,7 +257,7 @@
 DisplayTrayProperties(IN HWND hwndOwner);
 
 /*
- * desktop.c
+ * desktop.cpp
  */
 HANDLE
 DesktopCreateWindow(IN OUT ITrayWindow *Tray);
@@ -266,7 +266,7 @@
 DesktopDestroyShellWindow(IN HANDLE hDesktop);
 
 /*
- * taskband.c
+ * taskband.cpp
  */
 
 /* Internal Task Band CLSID */
@@ -297,7 +297,7 @@
 CreateTaskBand(IN OUT ITrayWindow *Tray);
 
 /*
- * tbsite.c
+ * tbsite.cpp
  */
 
 #define INTERFACE ITrayBandSite
@@ -339,7 +339,7 @@
 OUT HWND *phWndTaskSwitch);
 
 /*
- * startmnu.c
+ * startmnu.cpp
  */
 
 extern const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu;
@@ -375,6 +375,13 @@
 IN BOOL bSmallIcons);
 
 /*
+* startmnusite.cpp
+*/
+
+HRESULT 
+CreateStartMenuSite(IN OUT ITrayWindow *Tray, const IID & riid, PVOID * ppv);
+
+/*
  * trayntfy.c
  */
 

Copied: branches/shell-experiments/base/shell/explorer-new/startctxmnu.cpp 
(from r65199, branches/shell-experiments/base/shell/explorer-new/startmnu.cpp)
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/explorer-new/startctxmnu.cpp?p2=branches/shell-experiments/base/shell/explorer-new/startctxmnu.cpp&p1=branches/shell-experiments/base/shell/explorer-new/startmnu.cpp&r1=65199&r2=65200&rev=65200&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/explorer-new/startmnu.cpp     
[iso-8859-1] (original)
+++ branches/shell-experiments/base/shell/explorer-new/startctxmnu.cpp  
[iso-8859-1] Sun Nov  2 22:26:44 2014
@@ -23,6 +23,8 @@
 /*
  * Start menu button context menu
  */
+
+// TODO: Convert into an IContextMenu
 
 typedef struct _STARTMNU_CTMENU_CTX
 {
@@ -56,7 +58,7 @@
     HRESULT hRet;
     HMENU hPopup;
 
-    hRet = psf->GetUIObjectOf(hWndOwner, 1, (LPCITEMIDLIST *)&pidl, 
IID_NULL_PPV_ARG(IContextMenu, &pcm));
+    hRet = psf->GetUIObjectOf(hWndOwner, 1, (LPCITEMIDLIST *) &pidl, 
IID_NULL_PPV_ARG(IContextMenu, &pcm));
     if (SUCCEEDED(hRet))
     {
         hPopup = CreatePopupMenu();
@@ -64,11 +66,11 @@
         if (hPopup != NULL)
         {
             hRet = pcm->QueryContextMenu(
-                                                 hPopup,
-                                                 0,
-                                                 ID_SHELL_CMD_FIRST,
-                                                 ID_SHELL_CMD_LAST,
-                                                 CMF_VERBSONLY);
+                hPopup,
+                0,
+                ID_SHELL_CMD_FIRST,
+                ID_SHELL_CMD_LAST,
+                CMF_VERBSONLY);
 
             if (SUCCEEDED(hRet))
             {
@@ -95,18 +97,18 @@
     {
         if ((uiCmdId >= ID_SHELL_CMD_FIRST) && (uiCmdId <= ID_SHELL_CMD_LAST))
         {
-            CMINVOKECOMMANDINFO cmici = {0};
+            CMINVOKECOMMANDINFO cmici = { 0 };
             CHAR szDir[MAX_PATH];
 
             /* Setup and invoke the shell command */
             cmici.cbSize = sizeof(cmici);
             cmici.hwnd = hWndOwner;
-            cmici.lpVerb = (LPCSTR)MAKEINTRESOURCE(uiCmdId - 
ID_SHELL_CMD_FIRST);
+            cmici.lpVerb = (LPCSTR) MAKEINTRESOURCE(uiCmdId - 
ID_SHELL_CMD_FIRST);
             cmici.nShow = SW_NORMAL;
 
             /* FIXME: Support Unicode!!! */
             if (SHGetPathFromIDListA(psmcmc->pidl,
-                                     szDir))
+                szDir))
             {
                 cmici.lpDirectory = szDir;
             }
@@ -126,17 +128,16 @@
 }
 
 static VOID
-AddStartContextMenuItems(IN HWND hWndOwner,
-                         IN HMENU hPopup)
+AddStartContextMenuItems(IN HWND hWndOwner, IN HMENU hPopup)
 {
     WCHAR szBuf[MAX_PATH];
     HRESULT hRet;
 
     /* Add the "Open All Users" menu item */
     if (LoadString(hExplorerInstance,
-                   IDS_PROPERTIES,
-                   szBuf,
-                   sizeof(szBuf) / sizeof(szBuf[0])))
+        IDS_PROPERTIES,
+        szBuf,
+        sizeof(szBuf) / sizeof(szBuf[0])))
     {
         AppendMenu(hPopup,
                    MF_STRING,
@@ -167,9 +168,9 @@
 
                 /* Add the "Open All Users" menu item */
                 if (LoadString(hExplorerInstance,
-                               IDS_OPEN_ALL_USERS,
-                               szBuf,
-                               sizeof(szBuf) / sizeof(szBuf[0])))
+                    IDS_OPEN_ALL_USERS,
+                    szBuf,
+                    sizeof(szBuf) / sizeof(szBuf[0])))
                 {
                     AppendMenu(hPopup,
                                MF_STRING,
@@ -179,9 +180,9 @@
 
                 /* Add the "Explore All Users" menu item */
                 if (LoadString(hExplorerInstance,
-                               IDS_EXPLORE_ALL_USERS,
-                               szBuf,
-                               sizeof(szBuf) / sizeof(szBuf[0])))
+                    IDS_EXPLORE_ALL_USERS,
+                    szBuf,
+                    sizeof(szBuf) / sizeof(szBuf[0])))
                 {
                     AppendMenu(hPopup,
                                MF_STRING,
@@ -260,537 +261,3 @@
 
     return NULL;
 }
-
-/*****************************************************************************
- ** IStartMenuSite ***********************************************************
- *****************************************************************************/
-
-class IStartMenuSiteImpl :
-    public CComCoClass<IStartMenuSiteImpl>,
-    public CComObjectRootEx<CComMultiThreadModelNoCS>,
-    public IStartMenuSite,
-    public IServiceProvider,
-    public ITrayPriv,
-    public IOleCommandTarget,
-    public IMenuPopup
-{
-    CComPtr<ITrayWindow> Tray;
-    CComPtr<IMenuPopup> StartMenuPopup;
-
-public:
-    IStartMenuSiteImpl()
-    {
-    }
-
-    virtual ~IStartMenuSiteImpl() { }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE QueryService(
-        IN REFGUID guidService,
-        IN REFIID riid,
-        OUT PVOID *ppvObject)
-    {
-        if (IsEqualGUID(guidService, SID_SMenuPopup))
-        {
-            return QueryInterface(riid, ppvObject);
-        }
-
-        return E_NOINTERFACE;
-    }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE GetWindow(
-        OUT HWND *phwnd)
-    {
-        TRACE("ITrayPriv::GetWindow\n");
-
-        *phwnd = Tray->GetHWND();
-        if (*phwnd != NULL)
-            return S_OK;
-
-        return E_FAIL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(
-        IN BOOL fEnterMode)
-    {
-        TRACE("ITrayPriv::ContextSensitiveHelp\n");
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Execute(
-        IN IShellFolder *pShellFolder,
-        IN LPCITEMIDLIST pidl)
-    {
-        HMODULE hShlwapi;
-        HRESULT ret = S_FALSE;
-
-        TRACE("ITrayPriv::Execute\n");
-
-        hShlwapi = GetModuleHandle(TEXT("SHLWAPI.DLL"));
-        if (hShlwapi != NULL)
-        {
-            SHINVDEFCMD SHInvokeDefCmd;
-
-            /* SHInvokeDefaultCommand */
-            SHInvokeDefCmd = (SHINVDEFCMD) GetProcAddress(hShlwapi,
-                (LPCSTR) ((LONG) 279));
-            if (SHInvokeDefCmd != NULL)
-            {
-                ret = SHInvokeDefCmd(Tray->GetHWND(),
-                    pShellFolder,
-                    pidl);
-            }
-        }
-
-        return ret;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Unknown(
-        IN PVOID Unknown1,
-        IN PVOID Unknown2,
-        IN PVOID Unknown3,
-        IN PVOID Unknown4)
-    {
-        TRACE("ITrayPriv::Unknown(0x%p,0x%p,0x%p,0x%p)\n", Unknown1, Unknown2, 
Unknown3, Unknown4);
-        return E_NOTIMPL;
-    }
-
-    virtual BOOL
-        ShowUndockMenuItem(VOID)
-    {
-        TRACE("ShowUndockMenuItem() not implemented!\n");
-        /* FIXME: How do we detect this?! */
-        return FALSE;
-    }
-
-    virtual BOOL
-        ShowSynchronizeMenuItem(VOID)
-    {
-        TRACE("ShowSynchronizeMenuItem() not implemented!\n");
-        /* FIXME: How do we detect this?! */
-        return FALSE;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE AppendMenu(
-        OUT HMENU* phMenu)
-    {
-        HMENU hMenu, hSettingsMenu;
-        DWORD dwLogoff;
-        BOOL bWantLogoff;
-        UINT uLastItemsCount = 5; /* 5 menu items below the last separator */
-        WCHAR szUser[128];
-
-        TRACE("ITrayPriv::AppendMenu\n");
-
-        hMenu = LoadPopupMenu(hExplorerInstance,
-            MAKEINTRESOURCE(IDM_STARTMENU));
-        *phMenu = hMenu;
-        if (hMenu == NULL)
-            return E_FAIL;
-
-        /* Remove menu items that don't apply */
-
-        dwLogoff = SHRestricted(REST_STARTMENULOGOFF);
-        bWantLogoff = (dwLogoff == 2 ||
-            SHRestricted(REST_FORCESTARTMENULOGOFF) ||
-            GetExplorerRegValueSet(HKEY_CURRENT_USER,
-            TEXT("Advanced"),
-            TEXT("StartMenuLogoff")));
-
-        /* Favorites */
-        if (!GetExplorerRegValueSet(HKEY_CURRENT_USER,
-            TEXT("Advanced"),
-            TEXT("StartMenuFavorites")))
-        {
-            DeleteMenu(hMenu,
-                IDM_FAVORITES,
-                MF_BYCOMMAND);
-        }
-
-        /* Documents */
-        if (SHRestricted(REST_NORECENTDOCSMENU))
-        {
-            DeleteMenu(hMenu,
-                IDM_DOCUMENTS,
-                MF_BYCOMMAND);
-        }
-
-        /* Settings */
-        hSettingsMenu = FindSubMenu(hMenu,
-            IDM_SETTINGS,
-            FALSE);
-        if (hSettingsMenu != NULL)
-        {
-            if (SHRestricted(REST_NOSETFOLDERS))
-            {
-                /* Control Panel */
-                if (SHRestricted(REST_NOCONTROLPANEL))
-                {
-                    DeleteMenu(hSettingsMenu,
-                        IDM_CONTROLPANEL,
-                        MF_BYCOMMAND);
-
-                    /* Delete the separator below it */
-                    DeleteMenu(hSettingsMenu,
-                        0,
-                        MF_BYPOSITION);
-                }
-
-                /* Network Connections */
-                if (SHRestricted(REST_NONETWORKCONNECTIONS))
-                {
-                    DeleteMenu(hSettingsMenu,
-                        IDM_NETWORKCONNECTIONS,
-                        MF_BYCOMMAND);
-                }
-
-                /* Printers and Faxes */
-                DeleteMenu(hSettingsMenu,
-                    IDM_PRINTERSANDFAXES,
-                    MF_BYCOMMAND);
-            }
-
-            /* Security */
-            if (GetSystemMetrics(SM_REMOTECONTROL) == 0 ||
-                SHRestricted(REST_NOSECURITY))
-            {
-                DeleteMenu(hSettingsMenu,
-                    IDM_SECURITY,
-                    MF_BYCOMMAND);
-            }
-
-            if (GetMenuItemCount(hSettingsMenu) == 0)
-            {
-                DeleteMenu(hMenu,
-                    IDM_SETTINGS,
-                    MF_BYCOMMAND);
-            }
-        }
-
-        /* Search */
-        /* FIXME: Enable after implementing */
-        /* if (SHRestricted(REST_NOFIND)) */
-    {
-        DeleteMenu(hMenu,
-            IDM_SEARCH,
-            MF_BYCOMMAND);
-    }
-
-        /* FIXME: Help */
-
-        /* Run */
-        if (SHRestricted(REST_NORUN))
-        {
-            DeleteMenu(hMenu,
-                IDM_RUN,
-                MF_BYCOMMAND);
-        }
-
-        /* Synchronize */
-        if (!ShowSynchronizeMenuItem())
-        {
-            DeleteMenu(hMenu,
-                IDM_SYNCHRONIZE,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        /* Log off */
-        if (dwLogoff != 1 && bWantLogoff)
-        {
-            /* FIXME: We need a more sophisticated way to determine whether to 
show
-                      or hide it, it might be hidden in too many cases!!! */
-
-            /* Update Log Off menu item */
-            if (!GetCurrentLoggedOnUserName(szUser,
-                sizeof(szUser) / sizeof(szUser[0])))
-            {
-                szUser[0] = _T('\0');
-            }
-
-            if (!FormatMenuString(hMenu,
-                IDM_LOGOFF,
-                MF_BYCOMMAND,
-                szUser))
-            {
-                /* We couldn't update the menu item, delete it... */
-                DeleteMenu(hMenu,
-                    IDM_LOGOFF,
-                    MF_BYCOMMAND);
-            }
-        }
-        else
-        {
-            DeleteMenu(hMenu,
-                IDM_LOGOFF,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-
-        /* Disconnect */
-        if (GetSystemMetrics(SM_REMOTECONTROL) == 0)
-        {
-            DeleteMenu(hMenu,
-                IDM_DISCONNECT,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        /* Undock computer */
-        if (!ShowUndockMenuItem())
-        {
-            DeleteMenu(hMenu,
-                IDM_UNDOCKCOMPUTER,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        /* Shut down */
-        if (SHRestricted(REST_NOCLOSE))
-        {
-            DeleteMenu(hMenu,
-                IDM_SHUTDOWN,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        if (uLastItemsCount == 0)
-        {
-            /* Remove the separator at the end of the menu */
-            DeleteMenu(hMenu,
-                IDM_LASTSTARTMENU_SEPARATOR,
-                MF_BYCOMMAND);
-        }
-
-        return S_OK;
-    }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE QueryStatus(
-        IN const GUID *pguidCmdGroup  OPTIONAL,
-        IN ULONG cCmds,
-        IN OUT OLECMD *prgCmds,
-        IN OUT OLECMDTEXT *pCmdText  OPTIONAL)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Exec(
-        IN const GUID *pguidCmdGroup  OPTIONAL,
-        IN DWORD nCmdID,
-        IN DWORD nCmdExecOpt,
-        IN VARIANTARG *pvaIn  OPTIONAL,
-        IN VARIANTARG *pvaOut  OPTIONAL)
-    {
-        return E_NOTIMPL;
-    }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE SetClient(IUnknown *punkClient)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE GetClient(IUnknown ** ppunkClient)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE OnPosRectChangeDB(RECT *prc)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Popup(POINTL *ppt, RECTL *prcExclude, 
MP_POPUPFLAGS dwFlags)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE OnSelect(DWORD dwSelectType)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE SetSubMenu(IMenuPopup *pmp, BOOL fSet)
-    {
-        if (!fSet)
-        {
-            return Tray_OnStartMenuDismissed();
-        }
-
-        return S_OK;
-    }
-
-    /*******************************************************************/
-
-    HRESULT Initialize(IN ITrayWindow *tray)
-    {
-        Tray = tray;
-        return S_OK;
-    }
-
-    DECLARE_NOT_AGGREGATABLE(IStartMenuSiteImpl)
-
-    DECLARE_PROTECT_FINAL_CONSTRUCT()
-    BEGIN_COM_MAP(IStartMenuSiteImpl)
-        COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
-        COM_INTERFACE_ENTRY_IID(IID_ITrayPriv, ITrayPriv)
-        COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
-        COM_INTERFACE_ENTRY_IID(IID_IMenuPopup, IMenuPopup)
-        COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
-    END_COM_MAP()
-};
-
-HRESULT CreateStartMenuSite(IN OUT ITrayWindow *Tray, const IID & riid, PVOID 
* ppv)
-{
-    return ShellObjectCreatorInit<IStartMenuSiteImpl>(Tray, riid, ppv);
-}
-
-HRESULT
-UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup,
-                IN HBITMAP hbmBanner  OPTIONAL,
-                IN BOOL bSmallIcons)
-{
-    CComPtr<IBanneredBar> pbb;
-    HRESULT hRet;
-
-    hRet = pMenuPopup->QueryInterface(IID_PPV_ARG(IBanneredBar, &pbb));
-    if (SUCCEEDED(hRet))
-    {
-        hRet = pbb->SetBitmap( hbmBanner);
-
-        /* Update the icon size */
-        hRet = pbb->SetIconSize(bSmallIcons ? BMICON_SMALL : BMICON_LARGE);
-    }
-
-    return hRet;
-}
-
-IMenuPopup *
-CreateStartMenu(IN ITrayWindow *Tray,
-                OUT IMenuBand **ppMenuBand,
-                IN HBITMAP hbmBanner  OPTIONAL,
-                IN BOOL bSmallIcons)
-{
-    HRESULT hr;
-    IObjectWithSite *pOws = NULL;
-    IMenuPopup *pMp = NULL;
-    IUnknown *pSms = NULL;
-    IMenuBand *pMb = NULL;
-    IInitializeObject *pIo;
-    IUnknown *pUnk = NULL;
-    IBandSite *pBs = NULL;
-    DWORD dwBandId = 0;
-
-    hr = CreateStartMenuSite(Tray, IID_PPV_ARG(IUnknown, &pSms));
-    if (FAILED_UNEXPECTEDLY(hr))
-        return NULL;
-
-#if 0
-    hr = CoCreateInstance(&CLSID_StartMenu,
-                          NULL,
-                          CLSCTX_INPROC_SERVER,
-                          &IID_IMenuPopup,
-                          (PVOID *)&pMp);
-#else
-    hr = _CStartMenu_Constructor(IID_PPV_ARG(IMenuPopup, &pMp));
-#endif
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("CoCreateInstance failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pMp->QueryInterface(IID_PPV_ARG(IObjectWithSite, &pOws));
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IMenuPopup_QueryInterface failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    /* Set the menu site so we can handle messages */
-    hr = pOws->SetSite(pSms);
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IObjectWithSite_SetSite failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    /* Initialize the menu object */
-    hr = pMp->QueryInterface(IID_PPV_ARG(IInitializeObject, &pIo));
-    if (SUCCEEDED(hr))
-    {
-        hr = pIo->Initialize();
-        pIo->Release();
-    }
-    else
-        hr = S_OK;
-
-    /* Everything is initialized now. Let's get the IMenuBand interface. */
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IMenuPopup_QueryInterface failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pMp->GetClient( &pUnk);
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IMenuPopup_GetClient failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pUnk->QueryInterface(IID_PPV_ARG(IBandSite, &pBs));
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IUnknown_QueryInterface pBs failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    /* Finally we have the IBandSite interface, there's only one
-       band in it that apparently provides the IMenuBand interface */
-    hr = pBs->EnumBands( 0, &dwBandId);
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IBandSite_EnumBands failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pBs->GetBandObject( dwBandId, IID_PPV_ARG(IMenuBand, &pMb));
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IBandSite_GetBandObject failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    UpdateStartMenu(pMp,
-                    hbmBanner,
-                    bSmallIcons);
-
-cleanup:
-    if (SUCCEEDED(hr))
-        *ppMenuBand = pMb;
-    else if (pMb != NULL)
-        pMb->Release();
-
-    if (pBs != NULL)
-        pBs->Release();
-    if (pUnk != NULL)
-        pUnk->Release();
-    if (pOws != NULL)
-        pOws->Release();
-    if (pMp != NULL)
-        pMp->Release();
-    if (pSms != NULL)
-        pSms->Release();
-
-    if (FAILED_UNEXPECTEDLY(hr))
-        return NULL;
-    return pMp;
-}

Modified: branches/shell-experiments/base/shell/explorer-new/startmnu.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/explorer-new/startmnu.cpp?rev=65200&r1=65199&r2=65200&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/explorer-new/startmnu.cpp     
[iso-8859-1] (original)
+++ branches/shell-experiments/base/shell/explorer-new/startmnu.cpp     
[iso-8859-1] Sun Nov  2 22:26:44 2014
@@ -20,638 +20,6 @@
 
 #include "precomp.h"
 
-/*
- * Start menu button context menu
- */
-
-typedef struct _STARTMNU_CTMENU_CTX
-{
-    IContextMenu *pcm;
-    LPITEMIDLIST pidl;
-} STARTMNU_CTMENU_CTX, *PSTARTMNU_CTMENU_CTX;
-
-static HMENU
-CreateStartContextMenu(IN HWND hWndOwner,
-                       IN PVOID *ppcmContext,
-                       IN PVOID Context  OPTIONAL);
-
-static VOID
-OnStartContextMenuCommand(IN HWND hWndOwner,
-                          IN UINT uiCmdId,
-                          IN PVOID pcmContext  OPTIONAL,
-                          IN PVOID Context  OPTIONAL);
-
-const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu = {
-    CreateStartContextMenu,
-    OnStartContextMenuCommand
-};
-
-static HMENU
-CreateContextMenuFromShellFolderPidl(IN HWND hWndOwner,
-                                     IN OUT IShellFolder *psf,
-                                     IN OUT LPITEMIDLIST pidl,
-                                     OUT IContextMenu **ppcm)
-{
-    CComPtr<IContextMenu> pcm;
-    HRESULT hRet;
-    HMENU hPopup;
-
-    hRet = psf->GetUIObjectOf(hWndOwner, 1, (LPCITEMIDLIST *)&pidl, 
IID_NULL_PPV_ARG(IContextMenu, &pcm));
-    if (SUCCEEDED(hRet))
-    {
-        hPopup = CreatePopupMenu();
-
-        if (hPopup != NULL)
-        {
-            hRet = pcm->QueryContextMenu(
-                                                 hPopup,
-                                                 0,
-                                                 ID_SHELL_CMD_FIRST,
-                                                 ID_SHELL_CMD_LAST,
-                                                 CMF_VERBSONLY);
-
-            if (SUCCEEDED(hRet))
-            {
-                *ppcm = pcm;
-                return hPopup;
-            }
-
-            DestroyMenu(hPopup);
-        }
-    }
-
-    return NULL;
-}
-
-static VOID
-OnStartContextMenuCommand(IN HWND hWndOwner,
-                          IN UINT uiCmdId,
-                          IN PVOID pcmContext  OPTIONAL,
-                          IN PVOID Context  OPTIONAL)
-{
-    PSTARTMNU_CTMENU_CTX psmcmc = (PSTARTMNU_CTMENU_CTX) pcmContext;
-
-    if (uiCmdId != 0)
-    {
-        if ((uiCmdId >= ID_SHELL_CMD_FIRST) && (uiCmdId <= ID_SHELL_CMD_LAST))
-        {
-            CMINVOKECOMMANDINFO cmici = {0};
-            CHAR szDir[MAX_PATH];
-
-            /* Setup and invoke the shell command */
-            cmici.cbSize = sizeof(cmici);
-            cmici.hwnd = hWndOwner;
-            cmici.lpVerb = (LPCSTR)MAKEINTRESOURCE(uiCmdId - 
ID_SHELL_CMD_FIRST);
-            cmici.nShow = SW_NORMAL;
-
-            /* FIXME: Support Unicode!!! */
-            if (SHGetPathFromIDListA(psmcmc->pidl,
-                                     szDir))
-            {
-                cmici.lpDirectory = szDir;
-            }
-
-            psmcmc->pcm->InvokeCommand(&cmici);
-        }
-        else
-        {
-            ITrayWindow * TrayWnd = (ITrayWindow *) Context;
-            TrayWnd->ExecContextMenuCmd(uiCmdId);
-        }
-    }
-
-    psmcmc->pcm->Release();
-
-    HeapFree(hProcessHeap, 0, psmcmc);
-}
-
-static VOID
-AddStartContextMenuItems(IN HWND hWndOwner,
-                         IN HMENU hPopup)
-{
-    WCHAR szBuf[MAX_PATH];
-    HRESULT hRet;
-
-    /* Add the "Open All Users" menu item */
-    if (LoadString(hExplorerInstance,
-                   IDS_PROPERTIES,
-                   szBuf,
-                   sizeof(szBuf) / sizeof(szBuf[0])))
-    {
-        AppendMenu(hPopup,
-                   MF_STRING,
-                   ID_SHELL_CMD_PROPERTIES,
-                   szBuf);
-    }
-
-    if (!SHRestricted(REST_NOCOMMONGROUPS))
-    {
-        /* Check if we should add menu items for the common start menu */
-        hRet = SHGetFolderPath(hWndOwner,
-                               CSIDL_COMMON_STARTMENU,
-                               NULL,
-                               SHGFP_TYPE_CURRENT,
-                               szBuf);
-        if (SUCCEEDED(hRet) && hRet != S_FALSE)
-        {
-            /* The directory exists, but only show the items if the
-               user can actually make any changes to the common start
-               menu. This is most likely only the case if the user
-               has administrative rights! */
-            if (IsUserAnAdmin())
-            {
-                AppendMenu(hPopup,
-                           MF_SEPARATOR,
-                           0,
-                           NULL);
-
-                /* Add the "Open All Users" menu item */
-                if (LoadString(hExplorerInstance,
-                               IDS_OPEN_ALL_USERS,
-                               szBuf,
-                               sizeof(szBuf) / sizeof(szBuf[0])))
-                {
-                    AppendMenu(hPopup,
-                               MF_STRING,
-                               ID_SHELL_CMD_OPEN_ALL_USERS,
-                               szBuf);
-                }
-
-                /* Add the "Explore All Users" menu item */
-                if (LoadString(hExplorerInstance,
-                               IDS_EXPLORE_ALL_USERS,
-                               szBuf,
-                               sizeof(szBuf) / sizeof(szBuf[0])))
-                {
-                    AppendMenu(hPopup,
-                               MF_STRING,
-                               ID_SHELL_CMD_EXPLORE_ALL_USERS,
-                               szBuf);
-                }
-            }
-        }
-    }
-}
-
-static HMENU
-CreateStartContextMenu(IN HWND hWndOwner,
-                       IN PVOID *ppcmContext,
-                       IN PVOID Context  OPTIONAL)
-{
-    LPITEMIDLIST pidlStart, pidlLast;
-    CComPtr<IShellFolder> psfStart;
-    CComPtr<IShellFolder> psfDesktop;
-    CComPtr<IContextMenu> pcm;
-    HRESULT hRet;
-    HMENU hPopup;
-
-    pidlStart = SHCloneSpecialIDList(hWndOwner,
-                                     CSIDL_STARTMENU,
-                                     TRUE);
-
-    if (pidlStart != NULL)
-    {
-        pidlLast = ILClone(ILFindLastID(pidlStart));
-        ILRemoveLastID(pidlStart);
-
-        if (pidlLast != NULL)
-        {
-            hRet = SHGetDesktopFolder(&psfDesktop);
-            if (SUCCEEDED(hRet))
-            {
-                hRet = psfDesktop->BindToObject(pidlStart, NULL, 
IID_PPV_ARG(IShellFolder, &psfStart));
-                if (SUCCEEDED(hRet))
-                {
-                    hPopup = CreateContextMenuFromShellFolderPidl(hWndOwner,
-                                                                  psfStart,
-                                                                  pidlLast,
-                                                                  &pcm);
-
-                    if (hPopup != NULL)
-                    {
-                        PSTARTMNU_CTMENU_CTX psmcmc;
-
-                        psmcmc = (PSTARTMNU_CTMENU_CTX) 
HeapAlloc(hProcessHeap, 0, sizeof(*psmcmc));
-                        if (psmcmc != NULL)
-                        {
-                            psmcmc->pcm = pcm;
-                            psmcmc->pidl = pidlLast;
-
-                            AddStartContextMenuItems(hWndOwner,
-                                                     hPopup);
-
-                            *ppcmContext = psmcmc;
-                            return hPopup;
-                        }
-                        else
-                        {
-                            DestroyMenu(hPopup);
-                            hPopup = NULL;
-                        }
-                    }
-                }
-            }
-
-            ILFree(pidlLast);
-        }
-
-        ILFree(pidlStart);
-    }
-
-    return NULL;
-}
-
-/*****************************************************************************
- ** IStartMenuSite ***********************************************************
- *****************************************************************************/
-
-class IStartMenuSiteImpl :
-    public CComCoClass<IStartMenuSiteImpl>,
-    public CComObjectRootEx<CComMultiThreadModelNoCS>,
-    public IStartMenuSite,
-    public IServiceProvider,
-    public ITrayPriv,
-    public IOleCommandTarget,
-    public IMenuPopup
-{
-    CComPtr<ITrayWindow> Tray;
-    CComPtr<IMenuPopup> StartMenuPopup;
-
-public:
-    IStartMenuSiteImpl()
-    {
-    }
-
-    virtual ~IStartMenuSiteImpl() { }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE QueryService(
-        IN REFGUID guidService,
-        IN REFIID riid,
-        OUT PVOID *ppvObject)
-    {
-        if (IsEqualGUID(guidService, SID_SMenuPopup))
-        {
-            return QueryInterface(riid, ppvObject);
-        }
-
-        return E_NOINTERFACE;
-    }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE GetWindow(
-        OUT HWND *phwnd)
-    {
-        TRACE("ITrayPriv::GetWindow\n");
-
-        *phwnd = Tray->GetHWND();
-        if (*phwnd != NULL)
-            return S_OK;
-
-        return E_FAIL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(
-        IN BOOL fEnterMode)
-    {
-        TRACE("ITrayPriv::ContextSensitiveHelp\n");
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Execute(
-        IN IShellFolder *pShellFolder,
-        IN LPCITEMIDLIST pidl)
-    {
-        HMODULE hShlwapi;
-        HRESULT ret = S_FALSE;
-
-        TRACE("ITrayPriv::Execute\n");
-
-        hShlwapi = GetModuleHandle(TEXT("SHLWAPI.DLL"));
-        if (hShlwapi != NULL)
-        {
-            SHINVDEFCMD SHInvokeDefCmd;
-
-            /* SHInvokeDefaultCommand */
-            SHInvokeDefCmd = (SHINVDEFCMD) GetProcAddress(hShlwapi,
-                (LPCSTR) ((LONG) 279));
-            if (SHInvokeDefCmd != NULL)
-            {
-                ret = SHInvokeDefCmd(Tray->GetHWND(),
-                    pShellFolder,
-                    pidl);
-            }
-        }
-
-        return ret;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Unknown(
-        IN PVOID Unknown1,
-        IN PVOID Unknown2,
-        IN PVOID Unknown3,
-        IN PVOID Unknown4)
-    {
-        TRACE("ITrayPriv::Unknown(0x%p,0x%p,0x%p,0x%p)\n", Unknown1, Unknown2, 
Unknown3, Unknown4);
-        return E_NOTIMPL;
-    }
-
-    virtual BOOL
-        ShowUndockMenuItem(VOID)
-    {
-        TRACE("ShowUndockMenuItem() not implemented!\n");
-        /* FIXME: How do we detect this?! */
-        return FALSE;
-    }
-
-    virtual BOOL
-        ShowSynchronizeMenuItem(VOID)
-    {
-        TRACE("ShowSynchronizeMenuItem() not implemented!\n");
-        /* FIXME: How do we detect this?! */
-        return FALSE;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE AppendMenu(
-        OUT HMENU* phMenu)
-    {
-        HMENU hMenu, hSettingsMenu;
-        DWORD dwLogoff;
-        BOOL bWantLogoff;
-        UINT uLastItemsCount = 5; /* 5 menu items below the last separator */
-        WCHAR szUser[128];
-
-        TRACE("ITrayPriv::AppendMenu\n");
-
-        hMenu = LoadPopupMenu(hExplorerInstance,
-            MAKEINTRESOURCE(IDM_STARTMENU));
-        *phMenu = hMenu;
-        if (hMenu == NULL)
-            return E_FAIL;
-
-        /* Remove menu items that don't apply */
-
-        dwLogoff = SHRestricted(REST_STARTMENULOGOFF);
-        bWantLogoff = (dwLogoff == 2 ||
-            SHRestricted(REST_FORCESTARTMENULOGOFF) ||
-            GetExplorerRegValueSet(HKEY_CURRENT_USER,
-            TEXT("Advanced"),
-            TEXT("StartMenuLogoff")));
-
-        /* Favorites */
-        if (!GetExplorerRegValueSet(HKEY_CURRENT_USER,
-            TEXT("Advanced"),
-            TEXT("StartMenuFavorites")))
-        {
-            DeleteMenu(hMenu,
-                IDM_FAVORITES,
-                MF_BYCOMMAND);
-        }
-
-        /* Documents */
-        if (SHRestricted(REST_NORECENTDOCSMENU))
-        {
-            DeleteMenu(hMenu,
-                IDM_DOCUMENTS,
-                MF_BYCOMMAND);
-        }
-
-        /* Settings */
-        hSettingsMenu = FindSubMenu(hMenu,
-            IDM_SETTINGS,
-            FALSE);
-        if (hSettingsMenu != NULL)
-        {
-            if (SHRestricted(REST_NOSETFOLDERS))
-            {
-                /* Control Panel */
-                if (SHRestricted(REST_NOCONTROLPANEL))
-                {
-                    DeleteMenu(hSettingsMenu,
-                        IDM_CONTROLPANEL,
-                        MF_BYCOMMAND);
-
-                    /* Delete the separator below it */
-                    DeleteMenu(hSettingsMenu,
-                        0,
-                        MF_BYPOSITION);
-                }
-
-                /* Network Connections */
-                if (SHRestricted(REST_NONETWORKCONNECTIONS))
-                {
-                    DeleteMenu(hSettingsMenu,
-                        IDM_NETWORKCONNECTIONS,
-                        MF_BYCOMMAND);
-                }
-
-                /* Printers and Faxes */
-                DeleteMenu(hSettingsMenu,
-                    IDM_PRINTERSANDFAXES,
-                    MF_BYCOMMAND);
-            }
-
-            /* Security */
-            if (GetSystemMetrics(SM_REMOTECONTROL) == 0 ||
-                SHRestricted(REST_NOSECURITY))
-            {
-                DeleteMenu(hSettingsMenu,
-                    IDM_SECURITY,
-                    MF_BYCOMMAND);
-            }
-
-            if (GetMenuItemCount(hSettingsMenu) == 0)
-            {
-                DeleteMenu(hMenu,
-                    IDM_SETTINGS,
-                    MF_BYCOMMAND);
-            }
-        }
-
-        /* Search */
-        /* FIXME: Enable after implementing */
-        /* if (SHRestricted(REST_NOFIND)) */
-    {
-        DeleteMenu(hMenu,
-            IDM_SEARCH,
-            MF_BYCOMMAND);
-    }
-
-        /* FIXME: Help */
-
-        /* Run */
-        if (SHRestricted(REST_NORUN))
-        {
-            DeleteMenu(hMenu,
-                IDM_RUN,
-                MF_BYCOMMAND);
-        }
-
-        /* Synchronize */
-        if (!ShowSynchronizeMenuItem())
-        {
-            DeleteMenu(hMenu,
-                IDM_SYNCHRONIZE,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        /* Log off */
-        if (dwLogoff != 1 && bWantLogoff)
-        {
-            /* FIXME: We need a more sophisticated way to determine whether to 
show
-                      or hide it, it might be hidden in too many cases!!! */
-
-            /* Update Log Off menu item */
-            if (!GetCurrentLoggedOnUserName(szUser,
-                sizeof(szUser) / sizeof(szUser[0])))
-            {
-                szUser[0] = _T('\0');
-            }
-
-            if (!FormatMenuString(hMenu,
-                IDM_LOGOFF,
-                MF_BYCOMMAND,
-                szUser))
-            {
-                /* We couldn't update the menu item, delete it... */
-                DeleteMenu(hMenu,
-                    IDM_LOGOFF,
-                    MF_BYCOMMAND);
-            }
-        }
-        else
-        {
-            DeleteMenu(hMenu,
-                IDM_LOGOFF,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-
-        /* Disconnect */
-        if (GetSystemMetrics(SM_REMOTECONTROL) == 0)
-        {
-            DeleteMenu(hMenu,
-                IDM_DISCONNECT,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        /* Undock computer */
-        if (!ShowUndockMenuItem())
-        {
-            DeleteMenu(hMenu,
-                IDM_UNDOCKCOMPUTER,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        /* Shut down */
-        if (SHRestricted(REST_NOCLOSE))
-        {
-            DeleteMenu(hMenu,
-                IDM_SHUTDOWN,
-                MF_BYCOMMAND);
-            uLastItemsCount--;
-        }
-
-        if (uLastItemsCount == 0)
-        {
-            /* Remove the separator at the end of the menu */
-            DeleteMenu(hMenu,
-                IDM_LASTSTARTMENU_SEPARATOR,
-                MF_BYCOMMAND);
-        }
-
-        return S_OK;
-    }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE QueryStatus(
-        IN const GUID *pguidCmdGroup  OPTIONAL,
-        IN ULONG cCmds,
-        IN OUT OLECMD *prgCmds,
-        IN OUT OLECMDTEXT *pCmdText  OPTIONAL)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Exec(
-        IN const GUID *pguidCmdGroup  OPTIONAL,
-        IN DWORD nCmdID,
-        IN DWORD nCmdExecOpt,
-        IN VARIANTARG *pvaIn  OPTIONAL,
-        IN VARIANTARG *pvaOut  OPTIONAL)
-    {
-        return E_NOTIMPL;
-    }
-
-    /*******************************************************************/
-
-    virtual HRESULT STDMETHODCALLTYPE SetClient(IUnknown *punkClient)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE GetClient(IUnknown ** ppunkClient)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE OnPosRectChangeDB(RECT *prc)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE Popup(POINTL *ppt, RECTL *prcExclude, 
MP_POPUPFLAGS dwFlags)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE OnSelect(DWORD dwSelectType)
-    {
-        return E_NOTIMPL;
-    }
-
-    virtual HRESULT STDMETHODCALLTYPE SetSubMenu(IMenuPopup *pmp, BOOL fSet)
-    {
-        if (!fSet)
-        {
-            return Tray_OnStartMenuDismissed();
-        }
-
-        return S_OK;
-    }
-
-    /*******************************************************************/
-
-    HRESULT Initialize(IN ITrayWindow *tray)
-    {
-        Tray = tray;
-        return S_OK;
-    }
-
-    DECLARE_NOT_AGGREGATABLE(IStartMenuSiteImpl)
-
-    DECLARE_PROTECT_FINAL_CONSTRUCT()
-    BEGIN_COM_MAP(IStartMenuSiteImpl)
-        COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
-        COM_INTERFACE_ENTRY_IID(IID_ITrayPriv, ITrayPriv)
-        COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
-        COM_INTERFACE_ENTRY_IID(IID_IMenuPopup, IMenuPopup)
-        COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
-    END_COM_MAP()
-};
-
-HRESULT CreateStartMenuSite(IN OUT ITrayWindow *Tray, const IID & riid, PVOID 
* ppv)
-{
-    return ShellObjectCreatorInit<IStartMenuSiteImpl>(Tray, riid, ppv);
-}
-
 HRESULT
 UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup,
                 IN HBITMAP hbmBanner  OPTIONAL,
@@ -663,7 +31,7 @@
     hRet = pMenuPopup->QueryInterface(IID_PPV_ARG(IBanneredBar, &pbb));
     if (SUCCEEDED(hRet))
     {
-        hRet = pbb->SetBitmap( hbmBanner);
+        hRet = pbb->SetBitmap(hbmBanner);
 
         /* Update the icon size */
         hRet = pbb->SetIconSize(bSmallIcons ? BMICON_SMALL : BMICON_LARGE);
@@ -739,7 +107,7 @@
         goto cleanup;
     }
 
-    hr = pMp->GetClient( &pUnk);
+    hr = pMp->GetClient(&pUnk);
     if (FAILED_UNEXPECTEDLY(hr))
     {
         TRACE("IMenuPopup_GetClient failed: %x\n", hr);
@@ -755,14 +123,14 @@
 
     /* Finally we have the IBandSite interface, there's only one
        band in it that apparently provides the IMenuBand interface */
-    hr = pBs->EnumBands( 0, &dwBandId);
+    hr = pBs->EnumBands(0, &dwBandId);
     if (FAILED_UNEXPECTEDLY(hr))
     {
         TRACE("IBandSite_EnumBands failed: %x\n", hr);
         goto cleanup;
     }
 
-    hr = pBs->GetBandObject( dwBandId, IID_PPV_ARG(IMenuBand, &pMb));
+    hr = pBs->GetBandObject(dwBandId, IID_PPV_ARG(IMenuBand, &pMb));
     if (FAILED_UNEXPECTEDLY(hr))
     {
         TRACE("IBandSite_GetBandObject failed: %x\n", hr);

Copied: branches/shell-experiments/base/shell/explorer-new/startmnusite.cpp 
(from r65199, branches/shell-experiments/base/shell/explorer-new/startmnu.cpp)
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/explorer-new/startmnusite.cpp?p2=branches/shell-experiments/base/shell/explorer-new/startmnusite.cpp&p1=branches/shell-experiments/base/shell/explorer-new/startmnu.cpp&r1=65199&r2=65200&rev=65200&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/explorer-new/startmnu.cpp     
[iso-8859-1] (original)
+++ branches/shell-experiments/base/shell/explorer-new/startmnusite.cpp 
[iso-8859-1] Sun Nov  2 22:26:44 2014
@@ -20,253 +20,12 @@
 
 #include "precomp.h"
 
-/*
- * Start menu button context menu
- */
-
-typedef struct _STARTMNU_CTMENU_CTX
-{
-    IContextMenu *pcm;
-    LPITEMIDLIST pidl;
-} STARTMNU_CTMENU_CTX, *PSTARTMNU_CTMENU_CTX;
-
-static HMENU
-CreateStartContextMenu(IN HWND hWndOwner,
-                       IN PVOID *ppcmContext,
-                       IN PVOID Context  OPTIONAL);
-
-static VOID
-OnStartContextMenuCommand(IN HWND hWndOwner,
-                          IN UINT uiCmdId,
-                          IN PVOID pcmContext  OPTIONAL,
-                          IN PVOID Context  OPTIONAL);
-
-const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu = {
-    CreateStartContextMenu,
-    OnStartContextMenuCommand
-};
-
-static HMENU
-CreateContextMenuFromShellFolderPidl(IN HWND hWndOwner,
-                                     IN OUT IShellFolder *psf,
-                                     IN OUT LPITEMIDLIST pidl,
-                                     OUT IContextMenu **ppcm)
-{
-    CComPtr<IContextMenu> pcm;
-    HRESULT hRet;
-    HMENU hPopup;
-
-    hRet = psf->GetUIObjectOf(hWndOwner, 1, (LPCITEMIDLIST *)&pidl, 
IID_NULL_PPV_ARG(IContextMenu, &pcm));
-    if (SUCCEEDED(hRet))
-    {
-        hPopup = CreatePopupMenu();
-
-        if (hPopup != NULL)
-        {
-            hRet = pcm->QueryContextMenu(
-                                                 hPopup,
-                                                 0,
-                                                 ID_SHELL_CMD_FIRST,
-                                                 ID_SHELL_CMD_LAST,
-                                                 CMF_VERBSONLY);
-
-            if (SUCCEEDED(hRet))
-            {
-                *ppcm = pcm;
-                return hPopup;
-            }
-
-            DestroyMenu(hPopup);
-        }
-    }
-
-    return NULL;
-}
-
-static VOID
-OnStartContextMenuCommand(IN HWND hWndOwner,
-                          IN UINT uiCmdId,
-                          IN PVOID pcmContext  OPTIONAL,
-                          IN PVOID Context  OPTIONAL)
-{
-    PSTARTMNU_CTMENU_CTX psmcmc = (PSTARTMNU_CTMENU_CTX) pcmContext;
-
-    if (uiCmdId != 0)
-    {
-        if ((uiCmdId >= ID_SHELL_CMD_FIRST) && (uiCmdId <= ID_SHELL_CMD_LAST))
-        {
-            CMINVOKECOMMANDINFO cmici = {0};
-            CHAR szDir[MAX_PATH];
-
-            /* Setup and invoke the shell command */
-            cmici.cbSize = sizeof(cmici);
-            cmici.hwnd = hWndOwner;
-            cmici.lpVerb = (LPCSTR)MAKEINTRESOURCE(uiCmdId - 
ID_SHELL_CMD_FIRST);
-            cmici.nShow = SW_NORMAL;
-
-            /* FIXME: Support Unicode!!! */
-            if (SHGetPathFromIDListA(psmcmc->pidl,
-                                     szDir))
-            {
-                cmici.lpDirectory = szDir;
-            }
-
-            psmcmc->pcm->InvokeCommand(&cmici);
-        }
-        else
-        {
-            ITrayWindow * TrayWnd = (ITrayWindow *) Context;
-            TrayWnd->ExecContextMenuCmd(uiCmdId);
-        }
-    }
-
-    psmcmc->pcm->Release();
-
-    HeapFree(hProcessHeap, 0, psmcmc);
-}
-
-static VOID
-AddStartContextMenuItems(IN HWND hWndOwner,
-                         IN HMENU hPopup)
-{
-    WCHAR szBuf[MAX_PATH];
-    HRESULT hRet;
-
-    /* Add the "Open All Users" menu item */
-    if (LoadString(hExplorerInstance,
-                   IDS_PROPERTIES,
-                   szBuf,
-                   sizeof(szBuf) / sizeof(szBuf[0])))
-    {
-        AppendMenu(hPopup,
-                   MF_STRING,
-                   ID_SHELL_CMD_PROPERTIES,
-                   szBuf);
-    }
-
-    if (!SHRestricted(REST_NOCOMMONGROUPS))
-    {
-        /* Check if we should add menu items for the common start menu */
-        hRet = SHGetFolderPath(hWndOwner,
-                               CSIDL_COMMON_STARTMENU,
-                               NULL,
-                               SHGFP_TYPE_CURRENT,
-                               szBuf);
-        if (SUCCEEDED(hRet) && hRet != S_FALSE)
-        {
-            /* The directory exists, but only show the items if the
-               user can actually make any changes to the common start
-               menu. This is most likely only the case if the user
-               has administrative rights! */
-            if (IsUserAnAdmin())
-            {
-                AppendMenu(hPopup,
-                           MF_SEPARATOR,
-                           0,
-                           NULL);
-
-                /* Add the "Open All Users" menu item */
-                if (LoadString(hExplorerInstance,
-                               IDS_OPEN_ALL_USERS,
-                               szBuf,
-                               sizeof(szBuf) / sizeof(szBuf[0])))
-                {
-                    AppendMenu(hPopup,
-                               MF_STRING,
-                               ID_SHELL_CMD_OPEN_ALL_USERS,
-                               szBuf);
-                }
-
-                /* Add the "Explore All Users" menu item */
-                if (LoadString(hExplorerInstance,
-                               IDS_EXPLORE_ALL_USERS,
-                               szBuf,
-                               sizeof(szBuf) / sizeof(szBuf[0])))
-                {
-                    AppendMenu(hPopup,
-                               MF_STRING,
-                               ID_SHELL_CMD_EXPLORE_ALL_USERS,
-                               szBuf);
-                }
-            }
-        }
-    }
-}
-
-static HMENU
-CreateStartContextMenu(IN HWND hWndOwner,
-                       IN PVOID *ppcmContext,
-                       IN PVOID Context  OPTIONAL)
-{
-    LPITEMIDLIST pidlStart, pidlLast;
-    CComPtr<IShellFolder> psfStart;
-    CComPtr<IShellFolder> psfDesktop;
-    CComPtr<IContextMenu> pcm;
-    HRESULT hRet;
-    HMENU hPopup;
-
-    pidlStart = SHCloneSpecialIDList(hWndOwner,
-                                     CSIDL_STARTMENU,
-                                     TRUE);
-
-    if (pidlStart != NULL)
-    {
-        pidlLast = ILClone(ILFindLastID(pidlStart));
-        ILRemoveLastID(pidlStart);
-
-        if (pidlLast != NULL)
-        {
-            hRet = SHGetDesktopFolder(&psfDesktop);
-            if (SUCCEEDED(hRet))
-            {
-                hRet = psfDesktop->BindToObject(pidlStart, NULL, 
IID_PPV_ARG(IShellFolder, &psfStart));
-                if (SUCCEEDED(hRet))
-                {
-                    hPopup = CreateContextMenuFromShellFolderPidl(hWndOwner,
-                                                                  psfStart,
-                                                                  pidlLast,
-                                                                  &pcm);
-
-                    if (hPopup != NULL)
-                    {
-                        PSTARTMNU_CTMENU_CTX psmcmc;
-
-                        psmcmc = (PSTARTMNU_CTMENU_CTX) 
HeapAlloc(hProcessHeap, 0, sizeof(*psmcmc));
-                        if (psmcmc != NULL)
-                        {
-                            psmcmc->pcm = pcm;
-                            psmcmc->pidl = pidlLast;
-
-                            AddStartContextMenuItems(hWndOwner,
-                                                     hPopup);
-
-                            *ppcmContext = psmcmc;
-                            return hPopup;
-                        }
-                        else
-                        {
-                            DestroyMenu(hPopup);
-                            hPopup = NULL;
-                        }
-                    }
-                }
-            }
-
-            ILFree(pidlLast);
-        }
-
-        ILFree(pidlStart);
-    }
-
-    return NULL;
-}
-
 /*****************************************************************************
  ** IStartMenuSite ***********************************************************
  *****************************************************************************/
 
-class IStartMenuSiteImpl :
-    public CComCoClass<IStartMenuSiteImpl>,
+class CStartMenuSite :
+    public CComCoClass<CStartMenuSite>,
     public CComObjectRootEx<CComMultiThreadModelNoCS>,
     public IStartMenuSite,
     public IServiceProvider,
@@ -278,11 +37,11 @@
     CComPtr<IMenuPopup> StartMenuPopup;
 
 public:
-    IStartMenuSiteImpl()
-    {
-    }
-
-    virtual ~IStartMenuSiteImpl() { }
+    CStartMenuSite()
+    {
+    }
+
+    virtual ~CStartMenuSite() {}
 
     /*******************************************************************/
 
@@ -336,12 +95,12 @@
 
             /* SHInvokeDefaultCommand */
             SHInvokeDefCmd = (SHINVDEFCMD) GetProcAddress(hShlwapi,
-                (LPCSTR) ((LONG) 279));
+                                                          (LPCSTR) ((LONG) 
279));
             if (SHInvokeDefCmd != NULL)
             {
                 ret = SHInvokeDefCmd(Tray->GetHWND(),
-                    pShellFolder,
-                    pidl);
+                                     pShellFolder,
+                                     pidl);
             }
         }
 
@@ -386,7 +145,7 @@
         TRACE("ITrayPriv::AppendMenu\n");
 
         hMenu = LoadPopupMenu(hExplorerInstance,
-            MAKEINTRESOURCE(IDM_STARTMENU));
+                              MAKEINTRESOURCE(IDM_STARTMENU));
         *phMenu = hMenu;
         if (hMenu == NULL)
             return E_FAIL;
@@ -395,10 +154,10 @@
 
         dwLogoff = SHRestricted(REST_STARTMENULOGOFF);
         bWantLogoff = (dwLogoff == 2 ||
-            SHRestricted(REST_FORCESTARTMENULOGOFF) ||
-            GetExplorerRegValueSet(HKEY_CURRENT_USER,
-            TEXT("Advanced"),
-            TEXT("StartMenuLogoff")));
+                       SHRestricted(REST_FORCESTARTMENULOGOFF) ||
+                       GetExplorerRegValueSet(HKEY_CURRENT_USER,
+                       TEXT("Advanced"),
+                       TEXT("StartMenuLogoff")));
 
         /* Favorites */
         if (!GetExplorerRegValueSet(HKEY_CURRENT_USER,
@@ -406,22 +165,22 @@
             TEXT("StartMenuFavorites")))
         {
             DeleteMenu(hMenu,
-                IDM_FAVORITES,
-                MF_BYCOMMAND);
+                       IDM_FAVORITES,
+                       MF_BYCOMMAND);
         }
 
         /* Documents */
         if (SHRestricted(REST_NORECENTDOCSMENU))
         {
             DeleteMenu(hMenu,
-                IDM_DOCUMENTS,
-                MF_BYCOMMAND);
+                       IDM_DOCUMENTS,
+                       MF_BYCOMMAND);
         }
 
         /* Settings */
         hSettingsMenu = FindSubMenu(hMenu,
-            IDM_SETTINGS,
-            FALSE);
+                                    IDM_SETTINGS,
+                                    FALSE);
         if (hSettingsMenu != NULL)
         {
             if (SHRestricted(REST_NOSETFOLDERS))
@@ -430,27 +189,27 @@
                 if (SHRestricted(REST_NOCONTROLPANEL))
                 {
                     DeleteMenu(hSettingsMenu,
-                        IDM_CONTROLPANEL,
-                        MF_BYCOMMAND);
+                               IDM_CONTROLPANEL,
+                               MF_BYCOMMAND);
 
                     /* Delete the separator below it */
                     DeleteMenu(hSettingsMenu,
-                        0,
-                        MF_BYPOSITION);
+                               0,
+                               MF_BYPOSITION);
                 }
 
                 /* Network Connections */
                 if (SHRestricted(REST_NONETWORKCONNECTIONS))
                 {
                     DeleteMenu(hSettingsMenu,
-                        IDM_NETWORKCONNECTIONS,
-                        MF_BYCOMMAND);
+                               IDM_NETWORKCONNECTIONS,
+                               MF_BYCOMMAND);
                 }
 
                 /* Printers and Faxes */
                 DeleteMenu(hSettingsMenu,
-                    IDM_PRINTERSANDFAXES,
-                    MF_BYCOMMAND);
+                           IDM_PRINTERSANDFAXES,
+                           MF_BYCOMMAND);
             }
 
             /* Security */
@@ -458,15 +217,15 @@
                 SHRestricted(REST_NOSECURITY))
             {
                 DeleteMenu(hSettingsMenu,
-                    IDM_SECURITY,
-                    MF_BYCOMMAND);
+                           IDM_SECURITY,
+                           MF_BYCOMMAND);
             }
 
             if (GetMenuItemCount(hSettingsMenu) == 0)
             {
                 DeleteMenu(hMenu,
-                    IDM_SETTINGS,
-                    MF_BYCOMMAND);
+                           IDM_SETTINGS,
+                           MF_BYCOMMAND);
             }
         }
 
@@ -475,8 +234,8 @@
         /* if (SHRestricted(REST_NOFIND)) */
     {
         DeleteMenu(hMenu,
-            IDM_SEARCH,
-            MF_BYCOMMAND);
+                   IDM_SEARCH,
+                   MF_BYCOMMAND);
     }
 
         /* FIXME: Help */
@@ -485,16 +244,16 @@
         if (SHRestricted(REST_NORUN))
         {
             DeleteMenu(hMenu,
-                IDM_RUN,
-                MF_BYCOMMAND);
+                       IDM_RUN,
+                       MF_BYCOMMAND);
         }
 
         /* Synchronize */
         if (!ShowSynchronizeMenuItem())
         {
             DeleteMenu(hMenu,
-                IDM_SYNCHRONIZE,
-                MF_BYCOMMAND);
+                       IDM_SYNCHRONIZE,
+                       MF_BYCOMMAND);
             uLastItemsCount--;
         }
 
@@ -518,15 +277,15 @@
             {
                 /* We couldn't update the menu item, delete it... */
                 DeleteMenu(hMenu,
-                    IDM_LOGOFF,
-                    MF_BYCOMMAND);
+                           IDM_LOGOFF,
+                           MF_BYCOMMAND);
             }
         }
         else
         {
             DeleteMenu(hMenu,
-                IDM_LOGOFF,
-                MF_BYCOMMAND);
+                       IDM_LOGOFF,
+                       MF_BYCOMMAND);
             uLastItemsCount--;
         }
 
@@ -535,8 +294,8 @@
         if (GetSystemMetrics(SM_REMOTECONTROL) == 0)
         {
             DeleteMenu(hMenu,
-                IDM_DISCONNECT,
-                MF_BYCOMMAND);
+                       IDM_DISCONNECT,
+                       MF_BYCOMMAND);
             uLastItemsCount--;
         }
 
@@ -544,8 +303,8 @@
         if (!ShowUndockMenuItem())
         {
             DeleteMenu(hMenu,
-                IDM_UNDOCKCOMPUTER,
-                MF_BYCOMMAND);
+                       IDM_UNDOCKCOMPUTER,
+                       MF_BYCOMMAND);
             uLastItemsCount--;
         }
 
@@ -553,8 +312,8 @@
         if (SHRestricted(REST_NOCLOSE))
         {
             DeleteMenu(hMenu,
-                IDM_SHUTDOWN,
-                MF_BYCOMMAND);
+                       IDM_SHUTDOWN,
+                       MF_BYCOMMAND);
             uLastItemsCount--;
         }
 
@@ -562,8 +321,8 @@
         {
             /* Remove the separator at the end of the menu */
             DeleteMenu(hMenu,
-                IDM_LASTSTARTMENU_SEPARATOR,
-                MF_BYCOMMAND);
+                       IDM_LASTSTARTMENU_SEPARATOR,
+                       MF_BYCOMMAND);
         }
 
         return S_OK;
@@ -635,10 +394,10 @@
         return S_OK;
     }
 
-    DECLARE_NOT_AGGREGATABLE(IStartMenuSiteImpl)
+    DECLARE_NOT_AGGREGATABLE(CStartMenuSite)
 
     DECLARE_PROTECT_FINAL_CONSTRUCT()
-    BEGIN_COM_MAP(IStartMenuSiteImpl)
+    BEGIN_COM_MAP(CStartMenuSite)
         COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
         COM_INTERFACE_ENTRY_IID(IID_ITrayPriv, ITrayPriv)
         COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
@@ -649,148 +408,5 @@
 
 HRESULT CreateStartMenuSite(IN OUT ITrayWindow *Tray, const IID & riid, PVOID 
* ppv)
 {
-    return ShellObjectCreatorInit<IStartMenuSiteImpl>(Tray, riid, ppv);
+    return ShellObjectCreatorInit<CStartMenuSite>(Tray, riid, ppv);
 }
-
-HRESULT
-UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup,
-                IN HBITMAP hbmBanner  OPTIONAL,
-                IN BOOL bSmallIcons)
-{
-    CComPtr<IBanneredBar> pbb;
-    HRESULT hRet;
-
-    hRet = pMenuPopup->QueryInterface(IID_PPV_ARG(IBanneredBar, &pbb));
-    if (SUCCEEDED(hRet))
-    {
-        hRet = pbb->SetBitmap( hbmBanner);
-
-        /* Update the icon size */
-        hRet = pbb->SetIconSize(bSmallIcons ? BMICON_SMALL : BMICON_LARGE);
-    }
-
-    return hRet;
-}
-
-IMenuPopup *
-CreateStartMenu(IN ITrayWindow *Tray,
-                OUT IMenuBand **ppMenuBand,
-                IN HBITMAP hbmBanner  OPTIONAL,
-                IN BOOL bSmallIcons)
-{
-    HRESULT hr;
-    IObjectWithSite *pOws = NULL;
-    IMenuPopup *pMp = NULL;
-    IUnknown *pSms = NULL;
-    IMenuBand *pMb = NULL;
-    IInitializeObject *pIo;
-    IUnknown *pUnk = NULL;
-    IBandSite *pBs = NULL;
-    DWORD dwBandId = 0;
-
-    hr = CreateStartMenuSite(Tray, IID_PPV_ARG(IUnknown, &pSms));
-    if (FAILED_UNEXPECTEDLY(hr))
-        return NULL;
-
-#if 0
-    hr = CoCreateInstance(&CLSID_StartMenu,
-                          NULL,
-                          CLSCTX_INPROC_SERVER,
-                          &IID_IMenuPopup,
-                          (PVOID *)&pMp);
-#else
-    hr = _CStartMenu_Constructor(IID_PPV_ARG(IMenuPopup, &pMp));
-#endif
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("CoCreateInstance failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pMp->QueryInterface(IID_PPV_ARG(IObjectWithSite, &pOws));
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IMenuPopup_QueryInterface failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    /* Set the menu site so we can handle messages */
-    hr = pOws->SetSite(pSms);
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IObjectWithSite_SetSite failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    /* Initialize the menu object */
-    hr = pMp->QueryInterface(IID_PPV_ARG(IInitializeObject, &pIo));
-    if (SUCCEEDED(hr))
-    {
-        hr = pIo->Initialize();
-        pIo->Release();
-    }
-    else
-        hr = S_OK;
-
-    /* Everything is initialized now. Let's get the IMenuBand interface. */
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IMenuPopup_QueryInterface failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pMp->GetClient( &pUnk);
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IMenuPopup_GetClient failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pUnk->QueryInterface(IID_PPV_ARG(IBandSite, &pBs));
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IUnknown_QueryInterface pBs failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    /* Finally we have the IBandSite interface, there's only one
-       band in it that apparently provides the IMenuBand interface */
-    hr = pBs->EnumBands( 0, &dwBandId);
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IBandSite_EnumBands failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    hr = pBs->GetBandObject( dwBandId, IID_PPV_ARG(IMenuBand, &pMb));
-    if (FAILED_UNEXPECTEDLY(hr))
-    {
-        TRACE("IBandSite_GetBandObject failed: %x\n", hr);
-        goto cleanup;
-    }
-
-    UpdateStartMenu(pMp,
-                    hbmBanner,
-                    bSmallIcons);
-
-cleanup:
-    if (SUCCEEDED(hr))
-        *ppMenuBand = pMb;
-    else if (pMb != NULL)
-        pMb->Release();
-
-    if (pBs != NULL)
-        pBs->Release();
-    if (pUnk != NULL)
-        pUnk->Release();
-    if (pOws != NULL)
-        pOws->Release();
-    if (pMp != NULL)
-        pMp->Release();
-    if (pSms != NULL)
-        pSms->Release();
-
-    if (FAILED_UNEXPECTEDLY(hr))
-        return NULL;
-    return pMp;
-}


Reply via email to