@@ -256,6 +256,8 @@ struct MenuBandInfo {
256256 BOOL fVertical ;
257257};
258258
259+ #define BWM_ONDISPLAYCHANGEDELAYED (WM_APP)
260+
259261class CShellBrowser :
260262 public CWindowImpl<CShellBrowser, CWindow, CFrameWinTraits>,
261263 public CComObjectRootEx<CComMultiThreadModelNoCS>,
@@ -276,6 +278,7 @@ class CShellBrowser :
276278{
277279private:
278280 enum { BSF_ROS_REGBROWSER = 0x04 , BSF_ROS_KIOSK = 0x08 }; // Custom values
281+
279282 class barInfo
280283 {
281284 public:
@@ -315,6 +318,9 @@ class CShellBrowser :
315318 DWORD m_BrowserSvcFlags;
316319 bool m_Destroyed;
317320 BYTE m_NonFullscreenState;
321+
322+ enum { FSF_MBAR = 0x1 , FSF_SBAR = 0x2 , FSF_RESIZE = 0x4 , FSF_MAXIMIZED = 0x8 };
323+
318324public:
319325#if 0
320326 ULONG InternalAddRef()
@@ -623,6 +629,8 @@ class CShellBrowser :
623629 LRESULT RelayMsgToShellView (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
624630 LRESULT OnSettingChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
625631 LRESULT OnSysColorChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
632+ LRESULT OnDisplayChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
633+ LRESULT OnDisplayChangeDelayed (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
626634 LRESULT OnClose (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
627635 LRESULT OnFolderOptions (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
628636 LRESULT OnMapNetworkDrive (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
@@ -676,6 +684,8 @@ class CShellBrowser :
676684 MESSAGE_HANDLER (WM_MENUSELECT, RelayMsgToShellView)
677685 MESSAGE_HANDLER (WM_SETTINGCHANGE, OnSettingChange)
678686 MESSAGE_HANDLER (WM_SYSCOLORCHANGE, OnSysColorChange)
687+ MESSAGE_HANDLER (WM_DISPLAYCHANGE, OnDisplayChange)
688+ MESSAGE_HANDLER (BWM_ONDISPLAYCHANGEDELAYED, OnDisplayChangeDelayed)
679689 COMMAND_ID_HANDLER (IDM_FILE_CLOSE, OnClose)
680690 COMMAND_ID_HANDLER (IDM_TOOLS_FOLDEROPTIONS, OnFolderOptions)
681691 COMMAND_ID_HANDLER (IDM_TOOLS_MAPNETWORKDRIVE, OnMapNetworkDrive)
@@ -3715,6 +3725,13 @@ LRESULT CShellBrowser::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &b
37153725LRESULT CShellBrowser::OnDestroy (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
37163726{
37173727 HRESULT hr;
3728+ if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK))
3729+ {
3730+ if (m_NonFullscreenState & FSF_MBAR)
3731+ put_MenuBar (VARIANT_TRUE);
3732+ if (m_NonFullscreenState & FSF_SBAR)
3733+ put_StatusBar (VARIANT_TRUE);
3734+ }
37183735 SaveViewState ();
37193736
37203737 /* The current thread is about to go down so render any IDataObject that may be left in the clipboard */
@@ -4159,18 +4176,17 @@ LRESULT CShellBrowser::OnAppCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOO
41594176
41604177LRESULT CShellBrowser::OnToggleFullscreen (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
41614178{
4162- enum { SF_MBAR = 0x1 , SF_SBAR = 0x2 , SF_RESIZE = 0x4 , SF_MAXIMIZED = 0x8 };
41634179 const UINT OrgUiSetAuto = m_BrowserSvcFlags & BSF_UISETBYAUTOMATION;
41644180 const BOOL fCurrentlyFullscreen = (m_BrowserSvcFlags & BSF_THEATERMODE);
41654181 const BOOL fEnter = wID ? !fCurrentlyFullscreen : wNotifyCode;
41664182 const HWND hWnd = GetTopLevelBrowserWindow ();
41674183 if (fEnter )
41684184 {
41694185 VARIANT_BOOL varb;
4170- m_NonFullscreenState = (m_BrowserSvcFlags & BSF_RESIZABLE) ? SF_RESIZE : 0 ;
4171- m_NonFullscreenState |= (FAILED (get_MenuBar (&varb)) || varb) ? SF_MBAR : 0 ;
4172- m_NonFullscreenState |= (FAILED (get_StatusBar (&varb)) || varb) ? SF_SBAR : 0 ;
4173- m_NonFullscreenState |= (SHSetWindowBits (hWnd, GWL_STYLE, 0 , 0 ) & WS_MAXIMIZE) ? SF_MAXIMIZED : 0 ;
4186+ m_NonFullscreenState = (m_BrowserSvcFlags & BSF_RESIZABLE) ? FSF_RESIZE : 0 ;
4187+ m_NonFullscreenState |= (FAILED (get_MenuBar (&varb)) || varb) ? FSF_MBAR : 0 ;
4188+ m_NonFullscreenState |= (FAILED (get_StatusBar (&varb)) || varb) ? FSF_SBAR : 0 ;
4189+ m_NonFullscreenState |= (SHSetWindowBits (hWnd, GWL_STYLE, 0 , 0 ) & WS_MAXIMIZE) ? FSF_MAXIMIZED : 0 ;
41744190 SetFlags (BSF_THEATERMODE, BSF_THEATERMODE);
41754191 put_MenuBar (VARIANT_FALSE);
41764192 put_StatusBar (VARIANT_FALSE);
@@ -4186,21 +4202,41 @@ LRESULT CShellBrowser::OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndC
41864202 else
41874203 {
41884204 SetFlags (0 , BSF_THEATERMODE);
4189- put_MenuBar ((m_NonFullscreenState & SF_MBAR ) ? VARIANT_TRUE : VARIANT_FALSE);
4190- put_StatusBar ((m_NonFullscreenState & SF_SBAR ) ? VARIANT_TRUE : VARIANT_FALSE);
4205+ put_MenuBar ((m_NonFullscreenState & FSF_MBAR ) ? VARIANT_TRUE : VARIANT_FALSE);
4206+ put_StatusBar ((m_NonFullscreenState & FSF_SBAR ) ? VARIANT_TRUE : VARIANT_FALSE);
41914207 SHSetWindowBits (hWnd, GWL_EXSTYLE, WS_EX_WINDOWEDGE, WS_EX_WINDOWEDGE);
4192- UINT styles = WS_CAPTION | WS_BORDER | WS_DLGFRAME | ((m_NonFullscreenState & SF_RESIZE ) ? WS_THICKFRAME : 0 );
4208+ UINT styles = WS_CAPTION | WS_BORDER | WS_DLGFRAME | ((m_NonFullscreenState & FSF_RESIZE ) ? WS_THICKFRAME : 0 );
41934209 SHSetWindowBits (hWnd, GWL_STYLE, styles | WS_THICKFRAME, styles);
41944210 ::SetWindowPos (hWnd, HWND_TOP, 0 , 0 , 0 , 0 , SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
41954211 ::ShowWindow (hWnd, SW_SHOWNOACTIVATE);
4196- if (m_NonFullscreenState & SF_MAXIMIZED )
4212+ if (m_NonFullscreenState & FSF_MAXIMIZED )
41974213 ::ShowWindow (hWnd, SW_SHOWMAXIMIZED);
41984214 }
41994215 SetFlags (OrgUiSetAuto, BSF_UISETBYAUTOMATION);
42004216 ::RedrawWindow (hWnd, NULL , NULL , RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN);
42014217 return 0 ;
42024218}
42034219
4220+ LRESULT CShellBrowser::OnDisplayChange (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
4221+ {
4222+ PostMessage (BWM_ONDISPLAYCHANGEDELAYED, wParam, lParam);
4223+ return 0 ;
4224+ }
4225+
4226+ LRESULT CShellBrowser::OnDisplayChangeDelayed (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
4227+ {
4228+ if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK)) // Resize fullscreen on resolution change (CORE-20072)
4229+ {
4230+ const HWND hWnd = GetTopLevelBrowserWindow ();
4231+ MONITORINFO mi;
4232+ GetWindowMonitorInfo (hWnd, mi);
4233+ int x = mi.rcMonitor .left , w = mi.rcMonitor .right - x;
4234+ int y = mi.rcMonitor .top , h = mi.rcMonitor .bottom - y;
4235+ ::SetWindowPos (hWnd, HWND_TOPMOST, x, y, w, h, SWP_NOZORDER | SWP_NOCOPYBITS);
4236+ }
4237+ return 0 ;
4238+ }
4239+
42044240HRESULT CShellBrowser_CreateInstance (REFIID riid, void **ppv)
42054241{
42064242 return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
0 commit comments