From be04b066aabd796536335936227610afe4b17a08 Mon Sep 17 00:00:00 2001 From: David Quintana Date: Mon, 26 May 2014 12:26:47 +0000 Subject: [PATCH] [RSHELL] * Close menu on right click too. [BROWSEUI] * Check/uncheck the lock toolbar item based on the lock state. The view menu does not update yet. [SHELL32] * Destroy the menu when the view window is destroyed. svn path=/branches/shell-experiments/; revision=63461 --- base/shell/rshell/CMenuFocusManager.cpp | 4 ++++ dll/win32/browseui/internettoolbar.cpp | 27 ++++++++++++++++--------- dll/win32/browseui/internettoolbar.h | 13 +++--------- dll/win32/browseui/toolsband.cpp | 17 ++++++++-------- dll/win32/shell32/shlview.cpp | 2 ++ 5 files changed, 35 insertions(+), 28 deletions(-) diff --git a/base/shell/rshell/CMenuFocusManager.cpp b/base/shell/rshell/CMenuFocusManager.cpp index 9bc1b7daeb5..ce3f2ed2789 100644 --- a/base/shell/rshell/CMenuFocusManager.cpp +++ b/base/shell/rshell/CMenuFocusManager.cpp @@ -378,6 +378,8 @@ LRESULT CMenuFocusManager::MsgFilterHook(INT nCode, WPARAM hookWParam, LPARAM ho { case WM_NCLBUTTONDOWN: case WM_LBUTTONDOWN: + case WM_NCRBUTTONDOWN: + case WM_RBUTTONDOWN: if (m_menuBar) { POINT pt = msg->pt; @@ -445,6 +447,8 @@ LRESULT CMenuFocusManager::GetMsgHook(INT nCode, WPARAM hookWParam, LPARAM hookL { case WM_NCLBUTTONDOWN: case WM_LBUTTONDOWN: + case WM_NCRBUTTONDOWN: + case WM_RBUTTONDOWN: if (m_current->type == MenuPopupEntry) { HWND child = WindowFromPoint(pt); diff --git a/dll/win32/browseui/internettoolbar.cpp b/dll/win32/browseui/internettoolbar.cpp index eba24bdf3cd..bcb87bb7fe2 100644 --- a/dll/win32/browseui/internettoolbar.cpp +++ b/dll/win32/browseui/internettoolbar.cpp @@ -158,14 +158,14 @@ CDockSite::~CDockSite() HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags) { - CComPtr site; + CComPtr child; CComPtr oleWindow; CComPtr deskBand; TCHAR textBuffer[40]; REBARBANDINFOW bandInfo; HRESULT hResult; - hResult = containedBand->QueryInterface(IID_PPV_ARG(IObjectWithSite, &site)); + hResult = containedBand->QueryInterface(IID_PPV_ARG(IObjectWithSite, &child)); if (FAILED(hResult)) return hResult; hResult = containedBand->QueryInterface(IID_PPV_ARG(IOleWindow, &oleWindow)); @@ -179,7 +179,7 @@ HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser fRebarWindow = hwnd; fBandID = bandID; fFlags = flags; - hResult = site->SetSite(static_cast(this)); + hResult = child->SetSite(static_cast(this)); if (FAILED(hResult)) return hResult; hResult = oleWindow->GetWindow(&fChildWindow); @@ -680,6 +680,8 @@ HRESULT CInternetToolbar::LockUnlockToolbars(bool locked) } } hResult = ReserveBorderSpace(); + + // TODO: refresh view menu? } return S_OK; } @@ -700,11 +702,11 @@ HRESULT CInternetToolbar::CommandStateChanged(bool newValue, int commandID) break; case 1: // forward - hResult = SetState(&CLSID_CommonButtons, gForwardCommandID, newValue ? TBSTATE_ENABLED : 0); + hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_FORWARD, newValue ? TBSTATE_ENABLED : 0); break; case 2: // back - hResult = SetState(&CLSID_CommonButtons, gBackCommandID, newValue ? TBSTATE_ENABLED : 0); + hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_BACK, newValue ? TBSTATE_ENABLED : 0); break; } return hResult; @@ -1398,7 +1400,7 @@ LRESULT CInternetToolbar::OnMenuDropDown(UINT idControl, NMHDR *pNMHDR, BOOL &bH ::MapWindowPoints(fToolbarWindow, NULL, reinterpret_cast(&bounds), 2); switch (notifyInfo->iItem) { - case gBackCommandID: + case IDM_GOTO_BACK: newMenu = CreatePopupMenu(); hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider)); hResult = serviceProvider->QueryService( @@ -1428,7 +1430,7 @@ LRESULT CInternetToolbar::OnMenuDropDown(UINT idControl, NMHDR *pNMHDR, BOOL &bH hResult = travelLog->Travel(browserService, -selectedItem); DestroyMenu(newMenu); break; - case gForwardCommandID: + case IDM_GOTO_FORWARD: newMenu = CreatePopupMenu(); hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider)); hResult = serviceProvider->QueryService(SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService)); @@ -1529,6 +1531,13 @@ LRESULT CInternetToolbar::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, default: break; } + + MENUITEMINFO mii; + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_STATE; + mii.fState = fLocked ? MFS_CHECKED : MFS_UNCHECKED; + command = SetMenuItemInfo(contextMenu, IDM_TOOLBARS_LOCKTOOLBARS, FALSE, &mii); + // TODO: use GetSystemMetrics(SM_MENUDROPALIGNMENT) to determine menu alignment command = TrackPopupMenu(contextMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, clickLocation.x, clickLocation.y, 0, m_hWnd, NULL); @@ -1588,13 +1597,13 @@ LRESULT CInternetToolbar::OnTipText(UINT idControl, NMHDR *pNMHDR, BOOL &bHandle if (nID != 0) { - if (nID == (UINT)gBackCommandID || nID == (UINT)gForwardCommandID) + if (nID == (UINT)IDM_GOTO_BACK || nID == (UINT)IDM_GOTO_FORWARD) { // TODO: Should this call QueryService? hResult = fSite->QueryInterface(IID_PPV_ARG(IBrowserService, &browserService)); hResult = browserService->GetTravelLog(&travelLog); hResult = travelLog->GetToolTipText(browserService, - (nID == (UINT)gBackCommandID) ? TLOG_BACK : TLOG_FORE, + (nID == (UINT)IDM_GOTO_BACK) ? TLOG_BACK : TLOG_FORE, 0, tempString, 299); if (FAILED(hResult)) { diff --git a/dll/win32/browseui/internettoolbar.h b/dll/win32/browseui/internettoolbar.h index b4160430966..a825dbac462 100644 --- a/dll/win32/browseui/internettoolbar.h +++ b/dll/win32/browseui/internettoolbar.h @@ -20,9 +20,6 @@ #pragma once -static const int gBackCommandID = 0xa121; -static const int gForwardCommandID = 0xa122; -static const int gUpLevelCommandID = 0xa022; static const int gSearchCommandID = 1003; static const int gFoldersCommandID = 1004; static const int gMoveToCommandID = 0x701f; @@ -31,10 +28,7 @@ static const int gDeleteCommandID = 0x7011; static const int gUndoCommandID = 0x701b; static const int gViewsCommandID = 0x7031; static const int gStopCommandID = 1010; -static const int gRefreshCommandID = 0xa220; static const int gHomeCommandID = 1012; -static const int gMapDriveCommandID = 41089; -static const int gDisconnectCommandID = 41090; static const int gFavoritesCommandID = 1015; static const int gHistoryCommandID = 1016; static const int gFullScreenCommandID = 1017; @@ -42,7 +36,6 @@ static const int gPropertiesCommandID = 0x7013; static const int gCutCommandID = 0x7018; static const int gCopyCommandID = 0x7019; static const int gPasteCommandID = 0x701a; -static const int gFolderOptionsCommandID = 41251; class CMenuCallback : public CComObjectRootEx, @@ -206,9 +199,9 @@ public: LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); BEGIN_MSG_MAP(CInternetToolbar) - COMMAND_ID_HANDLER(gBackCommandID, OnTravelBack) - COMMAND_ID_HANDLER(gForwardCommandID, OnTravelForward) - COMMAND_ID_HANDLER(gUpLevelCommandID, OnUpLevel) + COMMAND_ID_HANDLER(IDM_GOTO_BACK, OnTravelBack) + COMMAND_ID_HANDLER(IDM_GOTO_FORWARD, OnTravelForward) + COMMAND_ID_HANDLER(IDM_GOTO_UPONELEVEL, OnUpLevel) COMMAND_ID_HANDLER(gSearchCommandID, OnSearch) COMMAND_ID_HANDLER(gFoldersCommandID, OnFolders) COMMAND_RANGE_HANDLER(0x7000, 0x7fff, OnForwardToCommandTarget) diff --git a/dll/win32/browseui/toolsband.cpp b/dll/win32/browseui/toolsband.cpp index 9a4909b5cc8..36feec55bc5 100644 --- a/dll/win32/browseui/toolsband.cpp +++ b/dll/win32/browseui/toolsband.cpp @@ -232,9 +232,9 @@ const int numShownButtons = 13; const int numHiddenButtons = 13; TBBUTTON tbButtonsAdd[numShownButtons + numHiddenButtons] = { - { backImageIndex, gBackCommandID, TBSTATE_ENABLED, BTNS_DROPDOWN | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Back }, - { forwardImageIndex, gForwardCommandID, TBSTATE_ENABLED, BTNS_DROPDOWN, { 0 }, 0, BtnIdx_Forward }, - { upImageIndex, gUpLevelCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Up }, + { backImageIndex, IDM_GOTO_BACK, TBSTATE_ENABLED, BTNS_DROPDOWN | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Back }, + { forwardImageIndex, IDM_GOTO_FORWARD, TBSTATE_ENABLED, BTNS_DROPDOWN, { 0 }, 0, BtnIdx_Forward }, + { upImageIndex, IDM_GOTO_UPONELEVEL, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Up }, { 6, -1, TBSTATE_ENABLED, BTNS_SEP }, { searchImageIndex, gSearchCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Search }, { foldersImageIndex, gFoldersCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Folders }, @@ -247,10 +247,10 @@ TBBUTTON tbButtonsAdd[numShownButtons + numHiddenButtons] = { viewsImageIndex, gViewsCommandID, TBSTATE_ENABLED, BTNS_WHOLEDROPDOWN, { 0 }, 0, BtnIdx_Views }, { 0, gStopCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Stop }, - { 0, gRefreshCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Refresh }, + { 0, IDM_VIEW_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Refresh }, { 0, gHomeCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Home }, - { mapDriveImageIndex, gMapDriveCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_MapDrive }, - { disconnectImageIndex, gDisconnectCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Disconnect }, + { mapDriveImageIndex, IDM_TOOLS_MAPNETWORKDRIVE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_MapDrive }, + { disconnectImageIndex, IDM_TOOLS_DISCONNECTNETWORKDRIVE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Disconnect }, { favoritesImageIndex, gFavoritesCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Favorites }, { 0, gHistoryCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_History }, { 0, gFullScreenCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_FullScreen }, @@ -258,11 +258,10 @@ TBBUTTON tbButtonsAdd[numShownButtons + numHiddenButtons] = { cutImageIndex, gCutCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Cut }, { copyImageIndex, gCopyCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Copy }, { pasteImageIndex, gPasteCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Paste }, - { folderOptionsImageIndex, gFolderOptionsCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_FolderOptions }, + { folderOptionsImageIndex, IDM_TOOLS_FOLDEROPTIONS, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_FolderOptions }, }; -HRESULT STDMETHODCALLTYPE CToolsBand::SetSite(IUnknown* pUnkSite) -{ +HRESULT STDMETHODCALLTYPE CToolsBand::SetSite(IUnknown* pUnkSite){ HWND parentWindow; IOleWindow *oleWindow; HWND toolbar; diff --git a/dll/win32/shell32/shlview.cpp b/dll/win32/shell32/shlview.cpp index cafd7f5a7de..bcc03954c92 100644 --- a/dll/win32/shell32/shlview.cpp +++ b/dll/win32/shell32/shlview.cpp @@ -922,6 +922,8 @@ LRESULT CDefView::OnGetDlgCode(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bH LRESULT CDefView::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) { + if (m_hMenu) + DestroyMenu(m_hMenu); RevokeDragDrop(m_hWnd); SHChangeNotifyDeregister(m_hNotify); bHandled = FALSE;