fix: menu bar visibility when exiting full screen (#38599)

This commit is contained in:
wgsheng 2023-06-08 18:19:34 +08:00 committed by GitHub
parent 5ee890fb6f
commit c8bdd014c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 3 deletions

View file

@ -731,10 +731,14 @@ void NativeWindowViews::SetFullScreen(bool fullscreen) {
gfx::Rect()); gfx::Rect());
// Auto-hide menubar when in fullscreen. // Auto-hide menubar when in fullscreen.
if (fullscreen) if (fullscreen) {
menu_bar_visible_before_fullscreen_ = IsMenuBarVisible();
SetMenuBarVisibility(false); SetMenuBarVisibility(false);
else } else {
SetMenuBarVisibility(!IsMenuBarAutoHide()); SetMenuBarVisibility(!IsMenuBarAutoHide() &&
menu_bar_visible_before_fullscreen_);
menu_bar_visible_before_fullscreen_ = false;
}
#endif #endif
} }

View file

@ -321,6 +321,9 @@ class NativeWindowViews : public NativeWindow,
// Handles unhandled keyboard messages coming back from the renderer process. // Handles unhandled keyboard messages coming back from the renderer process.
views::UnhandledKeyboardEventHandler keyboard_event_handler_; views::UnhandledKeyboardEventHandler keyboard_event_handler_;
// Whether the menubar is visible before the window enters fullscreen
bool menu_bar_visible_before_fullscreen_ = false;
// Whether the window should be enabled based on user calls to SetEnabled() // Whether the window should be enabled based on user calls to SetEnabled()
bool is_enabled_ = true; bool is_enabled_ = true;
// How many modal children this window has; // How many modal children this window has;

View file

@ -5353,6 +5353,48 @@ describe('BrowserWindow module', () => {
}); });
}); });
ifdescribe(process.platform !== 'darwin')('when fullscreen state is changed', () => {
it('correctly remembers state prior to fullscreen change', async () => {
const w = new BrowserWindow({ show: false });
expect(w.isMenuBarVisible()).to.be.true('isMenuBarVisible');
w.setMenuBarVisibility(false);
expect(w.isMenuBarVisible()).to.be.false('isMenuBarVisible');
const enterFS = once(w, 'enter-full-screen');
w.setFullScreen(true);
await enterFS;
expect(w.fullScreen).to.be.true('not fullscreen');
const exitFS = once(w, 'leave-full-screen');
w.setFullScreen(false);
await exitFS;
expect(w.fullScreen).to.be.false('not fullscreen');
expect(w.isMenuBarVisible()).to.be.false('isMenuBarVisible');
});
it('correctly remembers state prior to fullscreen change with autoHide', async () => {
const w = new BrowserWindow({ show: false });
expect(w.autoHideMenuBar).to.be.false('autoHideMenuBar');
w.autoHideMenuBar = true;
expect(w.autoHideMenuBar).to.be.true('autoHideMenuBar');
w.setMenuBarVisibility(false);
expect(w.isMenuBarVisible()).to.be.false('isMenuBarVisible');
const enterFS = once(w, 'enter-full-screen');
w.setFullScreen(true);
await enterFS;
expect(w.fullScreen).to.be.true('not fullscreen');
const exitFS = once(w, 'leave-full-screen');
w.setFullScreen(false);
await exitFS;
expect(w.fullScreen).to.be.false('not fullscreen');
expect(w.isMenuBarVisible()).to.be.false('isMenuBarVisible');
});
});
ifdescribe(process.platform === 'darwin')('fullscreenable state', () => { ifdescribe(process.platform === 'darwin')('fullscreenable state', () => {
it('with functions', () => { it('with functions', () => {
it('can be set with fullscreenable constructor option', () => { it('can be set with fullscreenable constructor option', () => {