[RSHELL]
[reactos.git] / base / shell / rshell / CStartMenu.cpp
index 14388bb..f9a53ff 100644 (file)
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
+#include "precomp.h"
 
-#define TEST_TRACKPOPUPMENU_SUBMENUS
+//#define TEST_TRACKPOPUPMENU_SUBMENUS
 
-#include "precomp.h"
 
 /* NOTE: The following constants *MUST NOT* be changed because
          they're hardcoded and need to be the exact values
@@ -90,23 +90,26 @@ private:
 
         switch (psmd->uId)
         {
-        case IDM_PROGRAMS:  iconIndex = -20; break;
-        case IDM_FAVORITES: iconIndex = -173; break;
-        case IDM_DOCUMENTS: iconIndex = -21; break;
-        case IDM_SETTINGS: iconIndex = -22; break;
+            // Smaller "24x24" icons used for the start menu
+            // The bitmaps are still 32x32, but the image is centered
+        case IDM_FAVORITES: iconIndex = -209; break;
+        case IDM_SEARCH: iconIndex = -210; break;
+        case IDM_HELPANDSUPPORT: iconIndex = -211; break;
+        case IDM_LOGOFF: iconIndex = -212; break;
+        case IDM_PROGRAMS:  iconIndex = -213; break;
+        case IDM_DOCUMENTS: iconIndex = -214; break;
+        case IDM_RUN: iconIndex = -215; break;
+        case IDM_SHUTDOWN: iconIndex = -216; break;
+        case IDM_SETTINGS: iconIndex = -217; break;
+
         case IDM_CONTROLPANEL: iconIndex = -22; break;
-        //case IDM_SECURITY: iconIndex = -21; break;
         case IDM_NETWORKCONNECTIONS: iconIndex = -257; break;
         case IDM_PRINTERSANDFAXES: iconIndex = -138; break;
         case IDM_TASKBARANDSTARTMENU: iconIndex = -40; break;
-        case IDM_SEARCH: iconIndex = -23; break;
-        case IDM_HELPANDSUPPORT: iconIndex = -24; break;
-        case IDM_RUN: iconIndex = -25; break;
+        //case IDM_SECURITY: iconIndex = -21; break;
         //case IDM_SYNCHRONIZE: iconIndex = -21; break;
-        case IDM_LOGOFF: iconIndex = -45; break;
         //case IDM_DISCONNECT: iconIndex = -21; break;
         //case IDM_UNDOCKCOMPUTER: iconIndex = -21; break;
-        case IDM_SHUTDOWN: iconIndex = -28; break;
         default:
             return S_FALSE;
         }
@@ -136,7 +139,7 @@ private:
         case IDM_DOCUMENTS: csidl = CSIDL_RECENT; break;
         }
 
-#ifndef USE_BUILTIN_MENUBAND
+#if USE_SYSTEM_MENUBAND
         hr = CoCreateInstance(CLSID_MenuBand,
             NULL,
             CLSCTX_INPROC_SERVER,
@@ -144,6 +147,13 @@ private:
 #else
         hr = CMenuBand_Constructor(IID_PPV_ARG(IShellMenu, &pShellMenu));
 #endif
+        if (FAILED(hr))
+            return hr;
+#if WRAP_MENUBAND
+        hr = CMenuBand_Wrapper(pShellMenu, IID_PPV_ARG(IShellMenu, &pShellMenu));
+        if (FAILED(hr))
+            return hr;
+#endif
 
         hr = pShellMenu->Initialize(this, 0, ANCESTORDEFAULT, SMINIT_VERTICAL);
 
@@ -259,7 +269,7 @@ public:
 };
 
 extern "C"
-HRESULT
+HRESULT WINAPI
 CStartMenu_Constructor(REFIID riid, void **ppv)
 {
     IShellMenu* pShellMenu;
@@ -271,7 +281,7 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
     IShellFolder *shellFolder;
     IShellFolder *psfStartMenu;
 
-#ifndef USE_BUILTIN_MENUBAND
+#if USE_SYSTEM_MENUBAND
     hr = CoCreateInstance(CLSID_MenuBand,
                           NULL,
                           CLSCTX_INPROC_SERVER,
@@ -281,8 +291,13 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
 #endif
     if (FAILED(hr))
         return hr;
+#if WRAP_MENUBAND
+    hr = CMenuBand_Wrapper(pShellMenu, IID_PPV_ARG(IShellMenu, &pShellMenu));
+    if (FAILED(hr))
+        return hr;
+#endif
 
-#ifndef USE_BUILTIN_MENUSITE
+#if USE_SYSTEM_MENUSITE
     hr = CoCreateInstance(CLSID_MenuBandSite,
                           NULL,
                           CLSCTX_INPROC_SERVER,
@@ -292,8 +307,13 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
 #endif
     if (FAILED(hr))
         return hr;
+#if WRAP_MENUSITE
+    hr = CMenuSite_Wrapper(pBandSite, IID_PPV_ARG(IBandSite, &pBandSite));
+    if (FAILED(hr))
+        return hr;
+#endif
 
-#ifndef USE_BUILTIN_MENUDESKBAR
+#if USE_SYSTEM_MENUDESKBAR
     hr = CoCreateInstance(CLSID_MenuDeskBar,
                           NULL,
                           CLSCTX_INPROC_SERVER,
@@ -303,6 +323,11 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
 #endif
     if (FAILED(hr))
         return hr;
+#if WRAP_MENUDESKBAR
+    hr = CMenuDeskBar_Wrapper(pDeskBar, IID_PPV_ARG(IDeskBar, &pDeskBar));
+    if (FAILED(hr))
+        return hr;
+#endif
 
     CComObject<CShellMenuCallback> *pCallback;
     hr = CComObject<CShellMenuCallback>::CreateInstance(&pCallback);
@@ -311,7 +336,7 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
     pCallback->AddRef(); // CreateInstance returns object with 0 ref count */
     pCallback->Initialize(pShellMenu, pBandSite, pDeskBar);
 
-    pShellMenu->Initialize(pCallback, -1, 0, SMINIT_TOPLEVEL | SMINIT_VERTICAL);
+    pShellMenu->Initialize(pCallback, (UINT)-1, 0, SMINIT_TOPLEVEL | SMINIT_VERTICAL);
     if (FAILED(hr))
         return hr;