IFACEMETHODIMP ComposerShellMenu::QueryContextMenu( HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) { // Do nothing if uFlags include CMF_DEFAULTONLY. if (CMF_DEFAULTONLY & uFlags) return S_OK; // See if we have already written the menu. if (MenuExists(hMenu)) return S_OK; // Get the target directory and status HRESULT hr = GetTargetData(); if (SUCCEEDED(hr)) { DWORD result = 0; if (!MenuBuild(hMenu, indexMenu, idCmdFirst, &result)) { hr = HRESULT_FROM_WIN32(result); } else { hr = MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(result)); } } return hr; }
// update one of the core menus void Menu_Update(int id) { switch (id) { case MENU_UPD_ROOT: // right click menu or any of its submenus if (MenuExists("Core_root")) { ShowMenu(MakeRootMenu("root", menuPath(NULL), default_root_menu, false)); break; } // fall though case MENU_UPD_CONFIG: // the core config menu if (MenuExists("Core_configuration")) ShowMenu(MakeConfigMenu(false)); break; case MENU_UPD_TASKS: // desktop workspaces menu etc. if (MenuExists("Core_tasks")) { if (MenuExists("Core_tasks_workspace")) ShowMenu(MakeDesktopMenu(0, false)); else if (MenuExists("Core_tasks_icons")) ShowMenu(MakeDesktopMenu(1, false)); if (MenuExists("Core_tasks_menu")) ShowMenu(MakeDesktopMenu(2, false)); if (MenuExists("Core_tasks_recoverwindows")) ShowMenu(MakeRecoverMenu(false)); } break; } }