* 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
This commit is contained in:
David Quintana 2014-05-26 12:26:47 +00:00
parent 340c4e472a
commit be04b066aa
5 changed files with 35 additions and 28 deletions

View file

@ -378,6 +378,8 @@ LRESULT CMenuFocusManager::MsgFilterHook(INT nCode, WPARAM hookWParam, LPARAM ho
{ {
case WM_NCLBUTTONDOWN: case WM_NCLBUTTONDOWN:
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_NCRBUTTONDOWN:
case WM_RBUTTONDOWN:
if (m_menuBar) if (m_menuBar)
{ {
POINT pt = msg->pt; POINT pt = msg->pt;
@ -445,6 +447,8 @@ LRESULT CMenuFocusManager::GetMsgHook(INT nCode, WPARAM hookWParam, LPARAM hookL
{ {
case WM_NCLBUTTONDOWN: case WM_NCLBUTTONDOWN:
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_NCRBUTTONDOWN:
case WM_RBUTTONDOWN:
if (m_current->type == MenuPopupEntry) if (m_current->type == MenuPopupEntry)
{ {
HWND child = WindowFromPoint(pt); HWND child = WindowFromPoint(pt);

View file

@ -158,14 +158,14 @@ CDockSite::~CDockSite()
HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags) HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser, HWND hwnd, int bandID, int flags)
{ {
CComPtr<IObjectWithSite> site; CComPtr<IObjectWithSite> child;
CComPtr<IOleWindow> oleWindow; CComPtr<IOleWindow> oleWindow;
CComPtr<IDeskBand> deskBand; CComPtr<IDeskBand> deskBand;
TCHAR textBuffer[40]; TCHAR textBuffer[40];
REBARBANDINFOW bandInfo; REBARBANDINFOW bandInfo;
HRESULT hResult; HRESULT hResult;
hResult = containedBand->QueryInterface(IID_PPV_ARG(IObjectWithSite, &site)); hResult = containedBand->QueryInterface(IID_PPV_ARG(IObjectWithSite, &child));
if (FAILED(hResult)) if (FAILED(hResult))
return hResult; return hResult;
hResult = containedBand->QueryInterface(IID_PPV_ARG(IOleWindow, &oleWindow)); hResult = containedBand->QueryInterface(IID_PPV_ARG(IOleWindow, &oleWindow));
@ -179,7 +179,7 @@ HRESULT CDockSite::Initialize(IUnknown *containedBand, CInternetToolbar *browser
fRebarWindow = hwnd; fRebarWindow = hwnd;
fBandID = bandID; fBandID = bandID;
fFlags = flags; fFlags = flags;
hResult = site->SetSite(static_cast<IOleWindow *>(this)); hResult = child->SetSite(static_cast<IOleWindow *>(this));
if (FAILED(hResult)) if (FAILED(hResult))
return hResult; return hResult;
hResult = oleWindow->GetWindow(&fChildWindow); hResult = oleWindow->GetWindow(&fChildWindow);
@ -680,6 +680,8 @@ HRESULT CInternetToolbar::LockUnlockToolbars(bool locked)
} }
} }
hResult = ReserveBorderSpace(); hResult = ReserveBorderSpace();
// TODO: refresh view menu?
} }
return S_OK; return S_OK;
} }
@ -700,11 +702,11 @@ HRESULT CInternetToolbar::CommandStateChanged(bool newValue, int commandID)
break; break;
case 1: case 1:
// forward // forward
hResult = SetState(&CLSID_CommonButtons, gForwardCommandID, newValue ? TBSTATE_ENABLED : 0); hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_FORWARD, newValue ? TBSTATE_ENABLED : 0);
break; break;
case 2: case 2:
// back // back
hResult = SetState(&CLSID_CommonButtons, gBackCommandID, newValue ? TBSTATE_ENABLED : 0); hResult = SetState(&CLSID_CommonButtons, IDM_GOTO_BACK, newValue ? TBSTATE_ENABLED : 0);
break; break;
} }
return hResult; return hResult;
@ -1398,7 +1400,7 @@ LRESULT CInternetToolbar::OnMenuDropDown(UINT idControl, NMHDR *pNMHDR, BOOL &bH
::MapWindowPoints(fToolbarWindow, NULL, reinterpret_cast<POINT *>(&bounds), 2); ::MapWindowPoints(fToolbarWindow, NULL, reinterpret_cast<POINT *>(&bounds), 2);
switch (notifyInfo->iItem) switch (notifyInfo->iItem)
{ {
case gBackCommandID: case IDM_GOTO_BACK:
newMenu = CreatePopupMenu(); newMenu = CreatePopupMenu();
hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider)); hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider));
hResult = serviceProvider->QueryService( hResult = serviceProvider->QueryService(
@ -1428,7 +1430,7 @@ LRESULT CInternetToolbar::OnMenuDropDown(UINT idControl, NMHDR *pNMHDR, BOOL &bH
hResult = travelLog->Travel(browserService, -selectedItem); hResult = travelLog->Travel(browserService, -selectedItem);
DestroyMenu(newMenu); DestroyMenu(newMenu);
break; break;
case gForwardCommandID: case IDM_GOTO_FORWARD:
newMenu = CreatePopupMenu(); newMenu = CreatePopupMenu();
hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider)); hResult = fSite->QueryInterface(IID_PPV_ARG(IServiceProvider, &serviceProvider));
hResult = serviceProvider->QueryService(SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService)); hResult = serviceProvider->QueryService(SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService));
@ -1529,6 +1531,13 @@ LRESULT CInternetToolbar::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam,
default: default:
break; 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 // TODO: use GetSystemMetrics(SM_MENUDROPALIGNMENT) to determine menu alignment
command = TrackPopupMenu(contextMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, command = TrackPopupMenu(contextMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD,
clickLocation.x, clickLocation.y, 0, m_hWnd, NULL); 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 != 0)
{ {
if (nID == (UINT)gBackCommandID || nID == (UINT)gForwardCommandID) if (nID == (UINT)IDM_GOTO_BACK || nID == (UINT)IDM_GOTO_FORWARD)
{ {
// TODO: Should this call QueryService? // TODO: Should this call QueryService?
hResult = fSite->QueryInterface(IID_PPV_ARG(IBrowserService, &browserService)); hResult = fSite->QueryInterface(IID_PPV_ARG(IBrowserService, &browserService));
hResult = browserService->GetTravelLog(&travelLog); hResult = browserService->GetTravelLog(&travelLog);
hResult = travelLog->GetToolTipText(browserService, hResult = travelLog->GetToolTipText(browserService,
(nID == (UINT)gBackCommandID) ? TLOG_BACK : TLOG_FORE, (nID == (UINT)IDM_GOTO_BACK) ? TLOG_BACK : TLOG_FORE,
0, tempString, 299); 0, tempString, 299);
if (FAILED(hResult)) if (FAILED(hResult))
{ {

View file

@ -20,9 +20,6 @@
#pragma once #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 gSearchCommandID = 1003;
static const int gFoldersCommandID = 1004; static const int gFoldersCommandID = 1004;
static const int gMoveToCommandID = 0x701f; static const int gMoveToCommandID = 0x701f;
@ -31,10 +28,7 @@ static const int gDeleteCommandID = 0x7011;
static const int gUndoCommandID = 0x701b; static const int gUndoCommandID = 0x701b;
static const int gViewsCommandID = 0x7031; static const int gViewsCommandID = 0x7031;
static const int gStopCommandID = 1010; static const int gStopCommandID = 1010;
static const int gRefreshCommandID = 0xa220;
static const int gHomeCommandID = 1012; static const int gHomeCommandID = 1012;
static const int gMapDriveCommandID = 41089;
static const int gDisconnectCommandID = 41090;
static const int gFavoritesCommandID = 1015; static const int gFavoritesCommandID = 1015;
static const int gHistoryCommandID = 1016; static const int gHistoryCommandID = 1016;
static const int gFullScreenCommandID = 1017; static const int gFullScreenCommandID = 1017;
@ -42,7 +36,6 @@ static const int gPropertiesCommandID = 0x7013;
static const int gCutCommandID = 0x7018; static const int gCutCommandID = 0x7018;
static const int gCopyCommandID = 0x7019; static const int gCopyCommandID = 0x7019;
static const int gPasteCommandID = 0x701a; static const int gPasteCommandID = 0x701a;
static const int gFolderOptionsCommandID = 41251;
class CMenuCallback : class CMenuCallback :
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
@ -206,9 +199,9 @@ public:
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
BEGIN_MSG_MAP(CInternetToolbar) BEGIN_MSG_MAP(CInternetToolbar)
COMMAND_ID_HANDLER(gBackCommandID, OnTravelBack) COMMAND_ID_HANDLER(IDM_GOTO_BACK, OnTravelBack)
COMMAND_ID_HANDLER(gForwardCommandID, OnTravelForward) COMMAND_ID_HANDLER(IDM_GOTO_FORWARD, OnTravelForward)
COMMAND_ID_HANDLER(gUpLevelCommandID, OnUpLevel) COMMAND_ID_HANDLER(IDM_GOTO_UPONELEVEL, OnUpLevel)
COMMAND_ID_HANDLER(gSearchCommandID, OnSearch) COMMAND_ID_HANDLER(gSearchCommandID, OnSearch)
COMMAND_ID_HANDLER(gFoldersCommandID, OnFolders) COMMAND_ID_HANDLER(gFoldersCommandID, OnFolders)
COMMAND_RANGE_HANDLER(0x7000, 0x7fff, OnForwardToCommandTarget) COMMAND_RANGE_HANDLER(0x7000, 0x7fff, OnForwardToCommandTarget)

View file

@ -232,9 +232,9 @@ const int numShownButtons = 13;
const int numHiddenButtons = 13; const int numHiddenButtons = 13;
TBBUTTON tbButtonsAdd[numShownButtons + numHiddenButtons] = TBBUTTON tbButtonsAdd[numShownButtons + numHiddenButtons] =
{ {
{ backImageIndex, gBackCommandID, TBSTATE_ENABLED, BTNS_DROPDOWN | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Back }, { backImageIndex, IDM_GOTO_BACK, TBSTATE_ENABLED, BTNS_DROPDOWN | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Back },
{ forwardImageIndex, gForwardCommandID, TBSTATE_ENABLED, BTNS_DROPDOWN, { 0 }, 0, BtnIdx_Forward }, { forwardImageIndex, IDM_GOTO_FORWARD, TBSTATE_ENABLED, BTNS_DROPDOWN, { 0 }, 0, BtnIdx_Forward },
{ upImageIndex, gUpLevelCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Up }, { upImageIndex, IDM_GOTO_UPONELEVEL, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Up },
{ 6, -1, TBSTATE_ENABLED, BTNS_SEP }, { 6, -1, TBSTATE_ENABLED, BTNS_SEP },
{ searchImageIndex, gSearchCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Search }, { searchImageIndex, gSearchCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Search },
{ foldersImageIndex, gFoldersCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Folders }, { 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 }, { viewsImageIndex, gViewsCommandID, TBSTATE_ENABLED, BTNS_WHOLEDROPDOWN, { 0 }, 0, BtnIdx_Views },
{ 0, gStopCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Stop }, { 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 }, { 0, gHomeCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Home },
{ mapDriveImageIndex, gMapDriveCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_MapDrive }, { mapDriveImageIndex, IDM_TOOLS_MAPNETWORKDRIVE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_MapDrive },
{ disconnectImageIndex, gDisconnectCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Disconnect }, { disconnectImageIndex, IDM_TOOLS_DISCONNECTNETWORKDRIVE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Disconnect },
{ favoritesImageIndex, gFavoritesCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Favorites }, { favoritesImageIndex, gFavoritesCommandID, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_SHOWTEXT, { 0 }, 0, BtnIdx_Favorites },
{ 0, gHistoryCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_History }, { 0, gHistoryCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_History },
{ 0, gFullScreenCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_FullScreen }, { 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 }, { cutImageIndex, gCutCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Cut },
{ copyImageIndex, gCopyCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Copy }, { copyImageIndex, gCopyCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Copy },
{ pasteImageIndex, gPasteCommandID, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, BtnIdx_Paste }, { 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; HWND parentWindow;
IOleWindow *oleWindow; IOleWindow *oleWindow;
HWND toolbar; HWND toolbar;

View file

@ -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) LRESULT CDefView::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{ {
if (m_hMenu)
DestroyMenu(m_hMenu);
RevokeDragDrop(m_hWnd); RevokeDragDrop(m_hWnd);
SHChangeNotifyDeregister(m_hNotify); SHChangeNotifyDeregister(m_hNotify);
bHandled = FALSE; bHandled = FALSE;