diff --git a/dll/win32/browseui/lang/bg-BG.rc b/dll/win32/browseui/lang/bg-BG.rc index 86e95224f7b..58ae078489e 100644 --- a/dll/win32/browseui/lang/bg-BG.rc +++ b/dll/win32/browseui/lang/bg-BG.rc @@ -174,6 +174,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/de-DE.rc b/dll/win32/browseui/lang/de-DE.rc index 754346eac2a..d7c5fc49661 100644 --- a/dll/win32/browseui/lang/de-DE.rc +++ b/dll/win32/browseui/lang/de-DE.rc @@ -181,6 +181,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/en-US.rc b/dll/win32/browseui/lang/en-US.rc index b67218b1788..6b8cb976aac 100644 --- a/dll/win32/browseui/lang/en-US.rc +++ b/dll/win32/browseui/lang/en-US.rc @@ -192,6 +192,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/es-ES.rc b/dll/win32/browseui/lang/es-ES.rc index 8c05bb82062..5a8d1fd2c73 100644 --- a/dll/win32/browseui/lang/es-ES.rc +++ b/dll/win32/browseui/lang/es-ES.rc @@ -183,6 +183,7 @@ BEGIN "Q", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/et-EE.rc b/dll/win32/browseui/lang/et-EE.rc index 5ca6ab485de..77bc0749496 100644 --- a/dll/win32/browseui/lang/et-EE.rc +++ b/dll/win32/browseui/lang/et-EE.rc @@ -181,6 +181,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/eu-ES.rc b/dll/win32/browseui/lang/eu-ES.rc index 503a1abe907..0f9d17ced86 100644 --- a/dll/win32/browseui/lang/eu-ES.rc +++ b/dll/win32/browseui/lang/eu-ES.rc @@ -181,6 +181,7 @@ BEGIN "Q", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/fr-FR.rc b/dll/win32/browseui/lang/fr-FR.rc index 4a40987c50d..a522c3ed9bd 100644 --- a/dll/win32/browseui/lang/fr-FR.rc +++ b/dll/win32/browseui/lang/fr-FR.rc @@ -192,6 +192,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/he-IL.rc b/dll/win32/browseui/lang/he-IL.rc index 062f166c007..94574f8071d 100644 --- a/dll/win32/browseui/lang/he-IL.rc +++ b/dll/win32/browseui/lang/he-IL.rc @@ -176,6 +176,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/hi-IN.rc b/dll/win32/browseui/lang/hi-IN.rc index d93d138dd71..0a775f41c26 100644 --- a/dll/win32/browseui/lang/hi-IN.rc +++ b/dll/win32/browseui/lang/hi-IN.rc @@ -174,6 +174,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/hu-HU.rc b/dll/win32/browseui/lang/hu-HU.rc index 8448a3c5b3c..e5106f017a0 100644 --- a/dll/win32/browseui/lang/hu-HU.rc +++ b/dll/win32/browseui/lang/hu-HU.rc @@ -192,6 +192,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/id-ID.rc b/dll/win32/browseui/lang/id-ID.rc index 9a9140a8d50..882532025b4 100644 --- a/dll/win32/browseui/lang/id-ID.rc +++ b/dll/win32/browseui/lang/id-ID.rc @@ -193,6 +193,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/it-IT.rc b/dll/win32/browseui/lang/it-IT.rc index 02def76b811..a9be40d22bd 100644 --- a/dll/win32/browseui/lang/it-IT.rc +++ b/dll/win32/browseui/lang/it-IT.rc @@ -174,6 +174,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/ja-JP.rc b/dll/win32/browseui/lang/ja-JP.rc index 232cf3d2873..56f08791147 100644 --- a/dll/win32/browseui/lang/ja-JP.rc +++ b/dll/win32/browseui/lang/ja-JP.rc @@ -192,6 +192,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/pl-PL.rc b/dll/win32/browseui/lang/pl-PL.rc index e0775bc16e3..db28a5924b5 100644 --- a/dll/win32/browseui/lang/pl-PL.rc +++ b/dll/win32/browseui/lang/pl-PL.rc @@ -183,6 +183,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/pt-BR.rc b/dll/win32/browseui/lang/pt-BR.rc index 492b13149a5..0622c169836 100644 --- a/dll/win32/browseui/lang/pt-BR.rc +++ b/dll/win32/browseui/lang/pt-BR.rc @@ -176,6 +176,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/pt-PT.rc b/dll/win32/browseui/lang/pt-PT.rc index ff548d3061b..5c3dc63637b 100644 --- a/dll/win32/browseui/lang/pt-PT.rc +++ b/dll/win32/browseui/lang/pt-PT.rc @@ -182,6 +182,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/ro-RO.rc b/dll/win32/browseui/lang/ro-RO.rc index 6066a75a76d..8f0422990f2 100644 --- a/dll/win32/browseui/lang/ro-RO.rc +++ b/dll/win32/browseui/lang/ro-RO.rc @@ -182,6 +182,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/ru-RU.rc b/dll/win32/browseui/lang/ru-RU.rc index 3adf8d0343a..7e5d840d098 100644 --- a/dll/win32/browseui/lang/ru-RU.rc +++ b/dll/win32/browseui/lang/ru-RU.rc @@ -183,6 +183,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/sq-AL.rc b/dll/win32/browseui/lang/sq-AL.rc index de25625bc38..33be1301c49 100644 --- a/dll/win32/browseui/lang/sq-AL.rc +++ b/dll/win32/browseui/lang/sq-AL.rc @@ -193,6 +193,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/tr-TR.rc b/dll/win32/browseui/lang/tr-TR.rc index 8fd35da1e57..084fb050ee6 100644 --- a/dll/win32/browseui/lang/tr-TR.rc +++ b/dll/win32/browseui/lang/tr-TR.rc @@ -176,6 +176,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/uk-UA.rc b/dll/win32/browseui/lang/uk-UA.rc index 8da603d91f5..28ce1e6042b 100644 --- a/dll/win32/browseui/lang/uk-UA.rc +++ b/dll/win32/browseui/lang/uk-UA.rc @@ -182,6 +182,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/zh-CN.rc b/dll/win32/browseui/lang/zh-CN.rc index 51434d0c6af..4b68197d69e 100644 --- a/dll/win32/browseui/lang/zh-CN.rc +++ b/dll/win32/browseui/lang/zh-CN.rc @@ -196,6 +196,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/lang/zh-TW.rc b/dll/win32/browseui/lang/zh-TW.rc index 1c234785f1c..65c4e43f7ea 100644 --- a/dll/win32/browseui/lang/zh-TW.rc +++ b/dll/win32/browseui/lang/zh-TW.rc @@ -198,6 +198,7 @@ BEGIN "E", IDM_EXPLORERBAR_SEARCH, VIRTKEY, CONTROL, NOINVERT "I", IDM_EXPLORERBAR_FAVORITES, VIRTKEY, CONTROL, NOINVERT "H", IDM_EXPLORERBAR_HISTORY, VIRTKEY, CONTROL, NOINVERT + VK_F11, FCIDM_BROWSER_TOGGLEFULLSCREEN, VIRTKEY, NOINVERT END /* Strings */ diff --git a/dll/win32/browseui/resource.h b/dll/win32/browseui/resource.h index d6c1a39b558..e8f3a46bb5c 100644 --- a/dll/win32/browseui/resource.h +++ b/dll/win32/browseui/resource.h @@ -20,6 +20,7 @@ #pragma once +// FCIDM_BROWSERFIRST/LAST: 0xa000..0xbf00 #define IDM_FILE_CLOSE 0xA021 #define IDM_FILE_EXPLORE_MENU 0xA027 #define IDM_BACKSPACE 0xA032 @@ -63,6 +64,7 @@ #define IDM_BAND_MENU 269 #define IDM_BAND_TITLE 0xA200 #define IDM_BAND_CLOSE 0xA201 +#define FCIDM_BROWSER_TOGGLEFULLSCREEN 0xA21B #define IDM_POPUPMENU 2001 #define IDM_LARGE_ICONS 2002 diff --git a/dll/win32/browseui/shellbrowser.cpp b/dll/win32/browseui/shellbrowser.cpp index 00b98cd07f3..cc99d327772 100644 --- a/dll/win32/browseui/shellbrowser.cpp +++ b/dll/win32/browseui/shellbrowser.cpp @@ -129,6 +129,19 @@ BOOL createNewStuff = false; // this class is private to browseui.dll and is not registered externally? //DEFINE_GUID(CLSID_ShellFldSetExt, 0x6D5313C0, 0x8C62, 0x11D1, 0xB2, 0xCD, 0x00, 0x60, 0x97, 0xDF, 0x8C, 0x11); +static void GetWindowMonitorInfo(HWND hWnd, MONITORINFO &mi) +{ + HMONITOR hMon = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST); + mi.cbSize = sizeof(mi); + if (!hMon || !GetMonitorInfo(hMon, &mi)) + { + mi.rcMonitor.left = mi.rcMonitor.top = 0; + mi.rcMonitor.right = GetSystemMetrics(SM_CXFULLSCREEN); + mi.rcMonitor.bottom = GetSystemMetrics(SM_CYFULLSCREEN); + SystemParametersInfo(SPI_GETWORKAREA, 0, &mi.rcWork, 0); + } +} + void DeleteMenuItems(HMENU theMenu, unsigned int firstIDToDelete, unsigned int lastIDToDelete) { MENUITEMINFO menuItemInfo; @@ -197,15 +210,13 @@ private: void CToolbarProxy::Initialize(HWND parent, IUnknown *explorerToolbar) { HWND myWindow; - HRESULT hResult; myWindow = SHCreateWorkerWindowW(0, parent, 0, WS_CHILD, NULL, 0); if (myWindow != NULL) { SubclassWindow(myWindow); SetWindowPos(NULL, -32000, -32000, 0, 0, SWP_NOOWNERZORDER | SWP_NOZORDER); - hResult = explorerToolbar->QueryInterface( - IID_PPV_ARG(IExplorerToolbar, &fExplorerToolbar)); + explorerToolbar->QueryInterface(IID_PPV_ARG(IExplorerToolbar, &fExplorerToolbar)); } } @@ -217,15 +228,12 @@ void CToolbarProxy::Destroy() LRESULT CToolbarProxy::OnAddBitmap(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) { - long int result; - HRESULT hResult; - - result = 0; + long int result = 0; if (fExplorerToolbar.p != NULL) { - hResult = fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 1, (long)wParam, + fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 1, (long)wParam, reinterpret_cast(lParam), &result, RGB(192, 192, 192)); - hResult = fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 2, (long)wParam, + fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 2, (long)wParam, reinterpret_cast(lParam), &result, RGB(192, 192, 192)); } return result; @@ -233,12 +241,9 @@ LRESULT CToolbarProxy::OnAddBitmap(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL LRESULT CToolbarProxy::OnForwardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) { - LRESULT result; - HRESULT hResult; - - result = 0; + LRESULT result = 0; if (fExplorerToolbar.p != NULL) - hResult = fExplorerToolbar->SendToolbarMsg(&CGID_ShellBrowser, uMsg, wParam, lParam, &result); + fExplorerToolbar->SendToolbarMsg(&CGID_ShellBrowser, uMsg, wParam, lParam, &result); return result; } @@ -272,6 +277,7 @@ class CShellBrowser : public MyIConnectionPointImpl { private: + enum { BSF_ROS_REGBROWSER = 0x04, BSF_ROS_KIOSK = 0x08 }; // Custom values class barInfo { public: @@ -310,6 +316,7 @@ private: SBFOLDERSETTINGS m_deffoldersettings; DWORD m_BrowserSvcFlags; bool m_Destroyed; + BYTE m_NonFullscreenState; public: #if 0 ULONG InternalAddRef() @@ -341,13 +348,13 @@ public: HRESULT ShowBand(const CLSID &classID, bool vertical); HRESULT NavigateToParent(); HRESULT DoFolderOptions(); - HRESULT ApplyBrowserDefaultFolderSettings(IShellView *pvs); + HRESULT ApplyBrowserDefaultFolderSettings(IShellView *pSV); static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void RepositionBars(); HRESULT BuildExplorerBandMenu(); HRESULT BuildExplorerBandCategory(HMENU hBandsMenu, CATID category, DWORD dwPos, UINT *nbFound); BOOL IsBuiltinBand(CLSID &bandID); - virtual WNDPROC GetWindowProc() + virtual WNDPROC GetWindowProc() override { return WindowProc; } @@ -355,6 +362,7 @@ public: HRESULT FireNavigateComplete(const wchar_t *newDirectory); HRESULT FireCommandStateChange(bool newState, int commandID); HRESULT FireCommandStateChangeAll(); + HRESULT FireEvent_VBOOL(DISPID dispIdMember, VARIANT_BOOL Param1); HRESULT UpdateForwardBackState(); HRESULT UpdateUpState(); void UpdateGotoMenu(HMENU theMenu); @@ -364,6 +372,8 @@ public: void UpdateWindowTitle(); void SaveITBarLayout(); + inline HWND GetTopLevelBrowserWindow() { return m_hWnd; } + /* // *** IDockingWindowFrame methods *** STDMETHOD(AddToolbar)(IUnknown *punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) override; STDMETHOD(RemoveToolbar)(IUnknown *punkSrc, DWORD dwRemoveFlags) override; @@ -627,6 +637,7 @@ public: LRESULT OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); + LRESULT OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnToggleStatusBarVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnToggleToolbarBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); @@ -680,6 +691,7 @@ public: COMMAND_ID_HANDLER(IDM_FAVORITES_ORGANIZEFAVORITES, OnOrganizeFavorites) COMMAND_ID_HANDLER(IDM_VIEW_STATUSBAR, OnToggleStatusBarVisible) COMMAND_ID_HANDLER(IDM_VIEW_REFRESH, OnRefresh) + COMMAND_ID_HANDLER(FCIDM_BROWSER_TOGGLEFULLSCREEN, OnToggleFullscreen) COMMAND_ID_HANDLER(IDM_TOOLBARS_LOCKTOOLBARS, OnToggleToolbarLock) COMMAND_ID_HANDLER(IDM_TOOLBARS_STANDARDBUTTONS, OnToggleToolbarBandVisible) COMMAND_ID_HANDLER(IDM_TOOLBARS_ADDRESSBAR, OnToggleAddressBandVisible) @@ -814,14 +826,14 @@ HRESULT CShellBrowser::Initialize() return S_OK; } -HRESULT CShellBrowser::ApplyBrowserDefaultFolderSettings(IShellView *pvs) +HRESULT CShellBrowser::ApplyBrowserDefaultFolderSettings(IShellView *pSV) { HRESULT hr; - if (pvs) + if (pSV) { m_settings.Save(); SBFOLDERSETTINGS &sbfs = m_deffoldersettings, defsbfs; - if (FAILED(pvs->GetCurrentInfo(&sbfs.FolderSettings))) + if (FAILED(pSV->GetCurrentInfo(&sbfs.FolderSettings))) { defsbfs.InitializeDefaults(); sbfs = defsbfs; @@ -1152,14 +1164,14 @@ HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder, UpdateWindowTitle(); LPCITEMIDLIST pidlChild; - INT index, indexOpen; HIMAGELIST himlSmall, himlLarge; CComPtr sf; hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild); if (SUCCEEDED(hResult)) { - index = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen); + INT indexOpen; + SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen); Shell_GetImageLists(&himlLarge, &himlSmall); @@ -1619,9 +1631,9 @@ HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arg if (*pp != NULL) { CComPtr theDispatch; - hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch)); - hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, ¶ms, NULL, NULL, NULL); + if (SUCCEEDED(hResult)) + hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, ¶ms, NULL, NULL, NULL); } pp++; } @@ -1631,9 +1643,9 @@ HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arg if (*pp != NULL) { CComPtr theDispatch; - hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch)); - hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, ¶ms, NULL, NULL, NULL); + if (SUCCEEDED(hResult)) + hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, ¶ms, NULL, NULL, NULL); } pp++; } @@ -1676,6 +1688,14 @@ HRESULT CShellBrowser::FireCommandStateChangeAll() return FireCommandStateChange(false, -1); } +HRESULT CShellBrowser::FireEvent_VBOOL(DISPID dispIdMember, VARIANT_BOOL Param1) +{ + VARIANT vArgs[1]; + V_VT(&vArgs[0]) = VT_BOOL; + V_BOOL(&vArgs[0]) = Param1 ? VARIANT_TRUE : VARIANT_FALSE; + return FireEvent(dispIdMember, 1, vArgs); +} + HRESULT CShellBrowser::UpdateForwardBackState() { CComPtr travelLog; @@ -1709,12 +1729,10 @@ HRESULT CShellBrowser::UpdateForwardBackState() HRESULT CShellBrowser::UpdateUpState() { bool canGoUp; - HRESULT hResult; - canGoUp = true; if (_ILIsDesktop(fCurrentDirectoryPIDL)) canGoUp = false; - hResult = FireCommandStateChange(canGoUp, 3); + FireCommandStateChange(canGoUp, 3); return S_OK; } @@ -2109,8 +2127,6 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::QueryStatus(const GUID *pguidCmdGroup, HRESULT STDMETHODCALLTYPE CShellBrowser::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) { - HRESULT hResult; - if (!pguidCmdGroup) { TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID, nCmdexecopt, pvaIn, pvaOut); @@ -2132,13 +2148,13 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::Exec(const GUID *pguidCmdGroup, DWORD n if (IsEqualCLSID(*pclsid, fCurrentVertBar)) { - hResult = IUnknown_ShowDW(fClientBars[BIVerticalBaseBar].clientBar.p, FALSE); + IUnknown_ShowDW(fClientBars[BIVerticalBaseBar].clientBar.p, FALSE); memset(&fCurrentVertBar, 0, sizeof(fCurrentVertBar)); FireCommandStateChangeAll(); } else { - hResult = ShowBand(*pclsid, true); + ShowBand(*pclsid, true); } return S_OK; case 0x22: @@ -2893,7 +2909,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::InitializeTravelLog(ITravelLog *ptl, DW HRESULT STDMETHODCALLTYPE CShellBrowser::SetTopBrowser() { - m_BrowserSvcFlags |= BSF_TOPBROWSER; + SetFlags(BSF_TOPBROWSER, BSF_TOPBROWSER); return S_OK; } @@ -3294,7 +3310,8 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::get_Busy(VARIANT_BOOL *pBool) HRESULT STDMETHODCALLTYPE CShellBrowser::Quit() { - return E_NOTIMPL; + ::PostMessageW(GetTopLevelBrowserWindow(), WM_CLOSE, 0, 0); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::ClientToWindow(int *pcx, int *pcy) @@ -3319,7 +3336,8 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::get_Name(BSTR *Name) HRESULT STDMETHODCALLTYPE CShellBrowser::get_HWND(SHANDLE_PTR *pHWND) { - return E_NOTIMPL; + *pHWND = HandleToLong(GetTopLevelBrowserWindow()); + return *pHWND ? S_OK : E_UNEXPECTED; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_FullName(BSTR *FullName) @@ -3334,22 +3352,35 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::get_Path(BSTR *Path) HRESULT STDMETHODCALLTYPE CShellBrowser::get_Visible(VARIANT_BOOL *pBool) { - return E_NOTIMPL; + HWND hWnd = GetTopLevelBrowserWindow(); + *pBool = hWnd && ::IsWindowVisible(hWnd) ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_Visible(VARIANT_BOOL Value) { - return E_NOTIMPL; + if (HWND hWnd = GetTopLevelBrowserWindow()) + { + ::ShowWindow(hWnd, Value? SW_SHOW : SW_HIDE); + if (Value) + ::SetForegroundWindow(hWnd); + FireEvent_VBOOL(DISPID_ONVISIBLE, Value); + } + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_StatusBar(VARIANT_BOOL *pBool) { - return E_NOTIMPL; + *pBool = IsControlWindowShown(FCW_STATUS, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_StatusBar(VARIANT_BOOL Value) { - return E_NOTIMPL; + SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION); + HRESULT hr = ShowControlWindow(FCW_STATUS, Value != VARIANT_FALSE); + FireEvent_VBOOL(DISPID_ONSTATUSBAR, Value); + return hr; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_StatusText(BSTR *StatusText) @@ -3359,37 +3390,62 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::get_StatusText(BSTR *StatusText) HRESULT STDMETHODCALLTYPE CShellBrowser::put_StatusText(BSTR StatusText) { - return E_NOTIMPL; + SendControlMsg(FCW_STATUS, SB_SETTEXTW, 0, (LPARAM)StatusText, NULL); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_ToolBar(int *Value) { - return E_NOTIMPL; + *Value = IsControlWindowShown(FCW_INTERNETBAR, NULL) == S_OK; + if (!*Value && IsControlWindowShown(FCW_TOOLBAR, NULL) == S_OK) + *Value = FCW_TOOLBAR; + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_ToolBar(int Value) { - return E_NOTIMPL; + SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION); + ShowControlWindow(FCW_INTERNETBAR, Value != VARIANT_FALSE && Value != FCW_TOOLBAR); + ShowControlWindow(FCW_TOOLBAR, Value == FCW_TOOLBAR); + FireEvent_VBOOL(DISPID_ONTOOLBAR, Value); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_MenuBar(VARIANT_BOOL *Value) { +#ifdef FCW_MENU + *Value = IsControlWindowShown(FCW_MENU) == S_OK ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; +#else return E_NOTIMPL; +#endif } HRESULT STDMETHODCALLTYPE CShellBrowser::put_MenuBar(VARIANT_BOOL Value) { +#ifdef FCW_MENU + SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION); + HRESULT hr = ShowControlWindow(FCW_MENU, Value != VARIANT_FALSE); + FireEvent_VBOOL(DISPID_ONMENUBAR, Value); + return hr; +#else return E_NOTIMPL; +#endif } HRESULT STDMETHODCALLTYPE CShellBrowser::get_FullScreen(VARIANT_BOOL *pbFullScreen) { + *pbFullScreen = (m_BrowserSvcFlags & BSF_ROS_KIOSK) ? VARIANT_TRUE : VARIANT_FALSE; return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_FullScreen(VARIANT_BOOL bFullScreen) { - return E_NOTIMPL; + SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION); + SetFlags(bFullScreen ? BSF_ROS_KIOSK : 0, BSF_ROS_KIOSK); + put_TheaterMode(bFullScreen); + FireEvent_VBOOL(DISPID_ONFULLSCREEN, bFullScreen); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::Navigate2(VARIANT *URL, VARIANT *Flags, @@ -3419,13 +3475,21 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::Navigate2(VARIANT *URL, VARIANT *Flags, HRESULT STDMETHODCALLTYPE CShellBrowser::QueryStatusWB(OLECMDID cmdID, OLECMDF *pcmdf) { - return E_NOTIMPL; + OLECMD cmd = { (ULONG)cmdID, (DWORD)(*pcmdf) }; + HRESULT hr = QueryStatus(NULL, 1, &cmd, NULL); + *pcmdf = (OLECMDF)cmd.cmdf; + return hr; } HRESULT STDMETHODCALLTYPE CShellBrowser::ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) { - return E_NOTIMPL; + CComPtr pOCT; + IShellView *pSV = fCurrentShellView; + HRESULT hr = pSV ? pSV->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &pOCT)) : E_FAIL; + if (SUCCEEDED(hr)) + hr = pOCT->Exec(NULL, cmdID, cmdexecopt, pvaIn, pvaOut); + return hr; } HRESULT STDMETHODCALLTYPE CShellBrowser::ShowBrowserBar(VARIANT *pvaClsid, VARIANT *pvarShow, VARIANT *pvarSize) @@ -3469,52 +3533,67 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::put_Silent(VARIANT_BOOL bSilent) HRESULT STDMETHODCALLTYPE CShellBrowser::get_RegisterAsBrowser(VARIANT_BOOL *pbRegister) { - return E_NOTIMPL; + *pbRegister = (m_BrowserSvcFlags & BSF_ROS_REGBROWSER) ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_RegisterAsBrowser(VARIANT_BOOL bRegister) { - return E_NOTIMPL; + if (!bRegister) + return E_UNEXPECTED; + SetFlags(BSF_ROS_REGBROWSER, BSF_ROS_REGBROWSER); + return RegisterWindow(TRUE, SWC_3RDPARTY); } HRESULT STDMETHODCALLTYPE CShellBrowser::get_RegisterAsDropTarget(VARIANT_BOOL *pbRegister) { - return E_NOTIMPL; + *pbRegister = (m_BrowserSvcFlags & BSF_REGISTERASDROPTARGET) ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_RegisterAsDropTarget(VARIANT_BOOL bRegister) { - return E_NOTIMPL; + SetFlags(bRegister ? BSF_REGISTERASDROPTARGET : 0, BSF_REGISTERASDROPTARGET); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_TheaterMode(VARIANT_BOOL *pbRegister) { - return E_NOTIMPL; + *pbRegister = (m_BrowserSvcFlags & BSF_THEATERMODE) ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_TheaterMode(VARIANT_BOOL bRegister) { - return E_NOTIMPL; + BOOL handled; + OnToggleFullscreen(bRegister, 0, NULL, handled); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_AddressBar(VARIANT_BOOL *Value) { - return E_NOTIMPL; + *Value = IsControlWindowShown(FCW_ADDRESSBAR, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_AddressBar(VARIANT_BOOL Value) { - return E_NOTIMPL; + SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION); + HRESULT hr = ShowControlWindow(FCW_ADDRESSBAR, Value != VARIANT_FALSE); + FireEvent_VBOOL(DISPID_ONADDRESSBAR, Value); + return hr; } HRESULT STDMETHODCALLTYPE CShellBrowser::get_Resizable(VARIANT_BOOL *Value) { + *Value = (m_BrowserSvcFlags & BSF_RESIZABLE) ? VARIANT_TRUE : VARIANT_FALSE; return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CShellBrowser::put_Resizable(VARIANT_BOOL Value) { - return E_NOTIMPL; + SetFlags(Value ? (BSF_RESIZABLE | BSF_CANMAXIMIZE) : 0, (BSF_RESIZABLE | BSF_CANMAXIMIZE)); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellBrowser::FindWindowByIndex(DWORD dwID, IUnknown **ppunk) @@ -4086,6 +4165,51 @@ LRESULT CShellBrowser::OnAppCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOO return 0; } +LRESULT CShellBrowser::OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled) +{ + enum { SF_MBAR = 0x1, SF_SBAR = 0x2, SF_RESIZE = 0x4, SF_MAXIMIZED = 0x8 }; + const UINT OrgUiSetAuto = m_BrowserSvcFlags & BSF_UISETBYAUTOMATION; + const BOOL fCurrentlyFullscreen = (m_BrowserSvcFlags & BSF_THEATERMODE); + const BOOL fEnter = wID ? !fCurrentlyFullscreen : wNotifyCode; + const HWND hWnd = GetTopLevelBrowserWindow(); + if (fEnter) + { + VARIANT_BOOL varb; + m_NonFullscreenState = (m_BrowserSvcFlags & BSF_RESIZABLE) ? SF_RESIZE : 0; + m_NonFullscreenState |= (FAILED(get_MenuBar(&varb)) || varb) ? SF_MBAR : 0; + m_NonFullscreenState |= (FAILED(get_StatusBar(&varb)) || varb) ? SF_SBAR : 0; + m_NonFullscreenState |= (SHSetWindowBits(hWnd, GWL_STYLE, 0, 0) & WS_MAXIMIZE) ? SF_MAXIMIZED : 0; + SetFlags(BSF_THEATERMODE, BSF_THEATERMODE); + put_MenuBar(VARIANT_FALSE); + put_StatusBar(VARIANT_FALSE); + SHSetWindowBits(hWnd, GWL_STYLE, WS_CAPTION | WS_BORDER | WS_DLGFRAME | WS_THICKFRAME, 0); + SHSetWindowBits(hWnd, GWL_EXSTYLE, WS_EX_WINDOWEDGE, 0); + ::ShowWindow(hWnd, SW_SHOWMAXIMIZED); + MONITORINFO mi; + GetWindowMonitorInfo(hWnd, mi); + int x = mi.rcMonitor.left, w = mi.rcMonitor.right - x; + int y = mi.rcMonitor.top, h = mi.rcMonitor.bottom - y; + ::SetWindowPos(hWnd, HWND_TOPMOST, x, y, w, h, SWP_FRAMECHANGED); + ::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN); + } + else + { + SetFlags(0, BSF_THEATERMODE); + put_MenuBar((m_NonFullscreenState & SF_MBAR) ? VARIANT_TRUE : VARIANT_FALSE); + put_StatusBar((m_NonFullscreenState & SF_SBAR) ? VARIANT_TRUE : VARIANT_FALSE); + SHSetWindowBits(hWnd, GWL_EXSTYLE, WS_EX_WINDOWEDGE, WS_EX_WINDOWEDGE); + UINT styles = WS_CAPTION | WS_BORDER | WS_DLGFRAME | ((m_NonFullscreenState & SF_RESIZE) ? WS_THICKFRAME : 0); + SHSetWindowBits(hWnd, GWL_STYLE, styles | WS_THICKFRAME, styles); + ::SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); + ::ShowWindow(hWnd, SW_SHOWNOACTIVATE); + if (m_NonFullscreenState & SF_MAXIMIZED) + ::ShowWindow(hWnd, SW_SHOWMAXIMIZED); + ::RedrawWindow(hWnd, NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN); + } + SetFlags(OrgUiSetAuto, BSF_UISETBYAUTOMATION); + return 0; +} + HRESULT CShellBrowser_CreateInstance(REFIID riid, void **ppv) { return ShellObjectCreatorInit(riid, ppv);