From: Giannis Adamopoulos Date: Tue, 18 Feb 2014 09:18:16 +0000 (+0000) Subject: [rshell] X-Git-Tag: backups/shell-experiments@75904~358 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=46e9b4d1e3975d4b115a6b0a59bae0060a65e29e [rshell] - CStartMenu: add a test flag that makes the start menu show its submenus using SMIF_TRACKPOPUP in order to show how CMenuBand can use TrackPopupMenu svn path=/branches/shell-experiments/; revision=62238 --- diff --git a/base/shell/rshell/CStartMenu.cpp b/base/shell/rshell/CStartMenu.cpp index 6e51e10b6fc..d6b67a4bbc1 100644 --- a/base/shell/rshell/CStartMenu.cpp +++ b/base/shell/rshell/CStartMenu.cpp @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define TEST_TRACKPOPUPMENU_SUBMENUS + #include "precomp.h" /* NOTE: The following constants *MUST NOT* be changed because @@ -47,6 +49,7 @@ * 1. append the start menu contents from all users * 2. implement the context menu for start menu entries (programs, control panel, network connetions, printers) * 3. filter out programs folder from the shell folder part of the start menu + * 4. showing the programs start menu is SLOW compared to windows. this needs some investigation */ class CShellMenuCallback : @@ -72,7 +75,11 @@ private: hr = IUnknown_GetSite(m_pDeskBar, IID_PPV_ARG(ITrayPriv, &m_pTrayPriv)); hr = IUnknown_GetWindow(m_pTrayPriv, &m_hwndTray); hr = m_pTrayPriv->AppendMenuW(&hmenu); +#ifndef TEST_TRACKPOPUPMENU_SUBMENUS hr = m_pShellMenu->SetMenu(hmenu, NULL, SMSET_BOTTOM); +#else + hr = m_pShellMenu->SetMenu(hmenu, m_hwndTray, SMSET_BOTTOM); +#endif return hr; } @@ -106,8 +113,12 @@ private: if (iconIndex) { - psminfo->dwMask = SMIM_ICON; - psminfo->iIcon = Shell_GetCachedImageIndex(L"shell32.dll", iconIndex, FALSE); + if ((psminfo->dwMask & SMIM_ICON) != 0) + psminfo->iIcon = Shell_GetCachedImageIndex(L"shell32.dll", iconIndex, FALSE); +#ifdef TEST_TRACKPOPUPMENU_SUBMENUS + if ((psminfo->dwMask & SMIM_FLAGS) != 0) + psminfo->dwFlags |= SMIF_TRACKPOPUP; +#endif } return S_OK; }