#define USE_CUSTOM_EXPLORERBAND 1
-extern "C"
-BOOL WINAPI Shell_GetImageLists(
- _Out_ HIMAGELIST *phiml,
- _Out_ HIMAGELIST *phimlSmall);
-
extern HRESULT IUnknown_ShowDW(IUnknown * punk, BOOL fShow);
#include "newatlinterfaces.h"
};
static const unsigned int folderOptionsPageCountMax = 20;
+static const long BTP_DONT_UPDATE_HISTORY = 0;
static const long BTP_UPDATE_CUR_HISTORY = 1;
static const long BTP_UPDATE_NEXT_HISTORY = 2;
// temporary
extern HRESULT CreateInternetToolbar(REFIID riid, void **ppv);
-
-HMENU SHGetMenuFromID(HMENU topMenu, int theID)
-{
- MENUITEMINFO menuItemInfo;
-
- menuItemInfo.cbSize = sizeof(menuItemInfo);
- menuItemInfo.fMask = MIIM_SUBMENU;
- if (!GetMenuItemInfo(topMenu, theID, FALSE, &menuItemInfo))
- return NULL;
- return menuItemInfo.hSubMenu;
-}
-
-void SHCheckMenuItem(HMENU theMenu, int theID, BOOL checked)
-{
- MENUITEMINFO menuItemInfo;
-
- menuItemInfo.cbSize = sizeof(menuItemInfo);
- menuItemInfo.fMask = MIIM_STATE;
- if (GetMenuItemInfo(theMenu, theID, FALSE, &menuItemInfo))
- {
- if (checked)
- menuItemInfo.fState |= MF_CHECKED;
- else
- menuItemInfo.fState &= ~MF_CHECKED;
- SetMenuItemInfo(theMenu, theID, FALSE, &menuItemInfo);
- }
-}
-
void DeleteMenuItems(HMENU theMenu, unsigned int firstIDToDelete, unsigned int lastIDToDelete)
{
MENUITEMINFO menuItemInfo;
HRESULT FireCommandStateChange(bool newState, int commandID);
HRESULT FireCommandStateChangeAll();
HRESULT UpdateForwardBackState();
+ HRESULT UpdateUpState();
void UpdateGotoMenu(HMENU theMenu);
void UpdateViewMenu(HMENU theMenu);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnInitMenuPopup(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+ LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT RelayMsgToShellView(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_SIZE, OnSize)
MESSAGE_HANDLER(WM_INITMENUPOPUP, OnInitMenuPopup)
+ MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
MESSAGE_HANDLER(WM_MEASUREITEM, RelayMsgToShellView)
MESSAGE_HANDLER(WM_DRAWITEM, RelayMsgToShellView)
MESSAGE_HANDLER(WM_MENUSELECT, RelayMsgToShellView)
::SendMessage(fCurrentShellViewWindow, WM_SETREDRAW, 0, 0);
// set site
- hResult = newShellView->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite));
- if (SUCCEEDED(hResult) && objectWithSite.p != NULL)
- hResult = objectWithSite->SetSite(static_cast<IDropTarget *>(this));
+ hResult = IUnknown_SetSite(newShellView, static_cast<IDropTarget *>(this));
// update folder and view
saveCurrentShellFolder = fCurrentShellFolder;
FireCommandStateChangeAll();
hResult = UpdateForwardBackState();
+ hResult = UpdateUpState();
return S_OK;
}
LPITEMIDLIST newDirectory = ILClone(fCurrentDirectoryPIDL);
if (newDirectory == NULL)
return E_OUTOFMEMORY;
+ if (_ILIsDesktop(newDirectory))
+ {
+ ILFree(newDirectory);
+ return E_INVALIDARG;
+ }
ILRemoveLastID(newDirectory);
HRESULT hResult = BrowseToPIDL(newDirectory, BTP_UPDATE_CUR_HISTORY | BTP_UPDATE_NEXT_HISTORY);
ILFree(newDirectory);
if (FAILED_UNEXPECTEDLY(hResult))
return E_FAIL;
+// CORE-11140 : Disabled this bit, because it prevents the folder options from showing.
+// It returns 'E_NOTIMPL'
+#if 0
if (fCurrentShellView != NULL)
{
hResult = fCurrentShellView->AddPropertySheetPages(
if (FAILED_UNEXPECTEDLY(hResult))
return E_FAIL;
}
+#endif
// show sheet
m_PropSheet.dwSize = sizeof(PROPSHEETHEADER);
{
if (uMsg == WM_NCDESTROY)
{
- saveWindowProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(hWnd, GWL_WNDPROC));
+ saveWindowProc = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWL_WNDPROC));
lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
- if (saveWindowProc == reinterpret_cast<WNDPROC>(GetWindowLongPtr(hWnd, GWL_WNDPROC)))
- SetWindowLongPtr(hWnd, GWL_WNDPROC, (LONG_PTR)pThis->m_pfnSuperWindowProc);
+ if (saveWindowProc == reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWL_WNDPROC)))
+ ::SetWindowLongPtr(hWnd, GWL_WNDPROC, (LONG_PTR)pThis->m_pfnSuperWindowProc);
pThis->m_dwState |= WINSTATE_DESTROYED;
}
else
return S_OK;
}
+HRESULT CShellBrowser::UpdateUpState()
+{
+ bool canGoUp;
+ HRESULT hResult;
+
+ canGoUp = true;
+ if (_ILIsDesktop(fCurrentDirectoryPIDL))
+ canGoUp = false;
+ hResult = FireCommandStateChange(canGoUp, 3);
+ return S_OK;
+}
+
void CShellBrowser::UpdateGotoMenu(HMENU theMenu)
{
CComPtr<ITravelLog> travelLog;
+ CComPtr<ITravelEntry> unusedEntry;
int position;
MENUITEMINFO menuItemInfo;
HRESULT hResult;
hResult = GetTravelLog(&travelLog);
if (FAILED_UNEXPECTEDLY(hResult))
return;
+
+ hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
+ TLOG_BACK,
+ &unusedEntry);
+
+ if (SUCCEEDED(hResult))
+ {
+ SHEnableMenuItem(theMenu, IDM_GOTO_BACK, TRUE);
+ unusedEntry.Release();
+ }
+ else
+ SHEnableMenuItem(theMenu, IDM_GOTO_BACK, FALSE);
+
+ hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
+ TLOG_FORE,
+ &unusedEntry);
+
+ if (SUCCEEDED(hResult))
+ {
+ SHEnableMenuItem(theMenu, IDM_GOTO_FORWARD, TRUE);
+ unusedEntry.Release();
+ }
+ else
+ SHEnableMenuItem(theMenu, IDM_GOTO_FORWARD, FALSE);
+
+ SHEnableMenuItem(theMenu,
+ IDM_GOTO_UPONELEVEL,
+ !_ILIsDesktop(fCurrentDirectoryPIDL));
+
hResult = travelLog->InsertMenuEntries(static_cast<IDropTarget *>(this), theMenu, position,
IDM_GOTO_TRAVEL_FIRSTTARGET, IDM_GOTO_TRAVEL_LASTTARGET, TLMENUF_BACKANDFORTH | TLMENUF_CHECKCURRENT);
if (SUCCEEDED(hResult))
return E_NOTIMPL;
}
-extern HRESULT IUnknown_HasFocusIO(IUnknown * punk);
-extern HRESULT IUnknown_TranslateAcceleratorIO(IUnknown * punk, MSG * pmsg);
HRESULT STDMETHODCALLTYPE CShellBrowser::v_MayTranslateAccelerator(MSG *pmsg)
{
for (int i = 0; i < 3; i++)
fHistoryObject = viewHistoryObject;
fHistoryStream = pStream;
fHistoryBindContext = pbc;
- hResult = BrowseToPIDL(pidl, BTP_UPDATE_CUR_HISTORY);
+ hResult = BrowseToPIDL(pidl, BTP_DONT_UPDATE_HISTORY);
fHistoryObject = NULL;
fHistoryStream = NULL;
fHistoryBindContext = NULL;
SHEnableMenuItem(theMenu, IDM_TOOLS_MAPNETWORKDRIVE, FALSE);
SHEnableMenuItem(theMenu, IDM_TOOLS_DISCONNECTNETWORKDRIVE, FALSE);
SHEnableMenuItem(theMenu, IDM_TOOLS_SYNCHRONIZE, FALSE);
- SHEnableMenuItem(theMenu, IDM_TOOLS_FOLDEROPTIONS, FALSE);
+ FIXME("Folder options dialog is stubbed: CORE-11141\n");
+ SHEnableMenuItem(theMenu, IDM_TOOLS_FOLDEROPTIONS, FALSE); // Remove when CORE-11141 is fixed.
menuIndex = 4;
}
else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_HELP))
return ret;
}
+LRESULT CShellBrowser::OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
+{
+ ::SetFocus(fCurrentShellViewWindow);
+ return 0;
+}
+
LRESULT CShellBrowser::RelayMsgToShellView(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{
if (fCurrentShellViewWindow != NULL)