From eb458c1ad2ca270d26c924ae62db7272ad5cd1a7 Mon Sep 17 00:00:00 2001 From: utopiafallen Date: Sat, 22 Oct 2022 15:05:04 -0700 Subject: [PATCH] Remove explicit fullscreen handling Moonlight's fullscreen requests generally conflict with what ChromeOS is trying to do automatically for the app, especially when using tablet mode. Just remove it for now and let the OS handle fullscreen. --- manifest.json | 3 +-- static/js/background.js | 17 +++---------- static/js/index.js | 53 ----------------------------------------- 3 files changed, 4 insertions(+), 69 deletions(-) diff --git a/manifest.json b/manifest.json index 2a509bb..f4b9759 100644 --- a/manifest.json +++ b/manifest.json @@ -26,8 +26,7 @@ "pointerLock", "system.network", "fullscreen", - "power", - "overrideEscFullscreen", { + "power", { "socket": [ "tcp-connect", "resolve-host", diff --git a/static/js/background.js b/static/js/background.js index 664eb98..65f2de3 100644 --- a/static/js/background.js +++ b/static/js/background.js @@ -1,19 +1,8 @@ +const windowId = "1337"; function createWindow(state) { chrome.app.window.create('index.html', { - state: state, - bounds: { - width: 960, - height: 540 - } - }, function(window) { - // workaround: - // state = 'normal' in some cases not work (e.g. starting app from 'chrome://extensions' always open window in fullscreen mode) - // it requires manually restoring window state to 'normal' - if (state == 'normal') { - setTimeout(function() { - window.restore(); - }, 1000); - } + state: "normal", + id: windowId, }); } diff --git a/static/js/index.js b/static/js/index.js index e687c49..60d0e1e 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -4,7 +4,6 @@ var pairingCert; var myUniqueid = '0123456789ABCDEF'; // Use the same UID as other Moonlight clients to allow them to quit each other's games var api; // `api` should only be set if we're in a host-specific screen. on the initial screen it should always be null. var isInGame = false; // flag indicating whether the game stream started -var windowState = 'normal'; // chrome's windowState, possible values: 'normal' or 'fullscreen' // Called by the common.js module. function attachListeners() { @@ -21,49 +20,6 @@ function attachListeners() { $('#backIcon').on('click', showHostsAndSettingsMode); $('#quitCurrentApp').on('click', stopGameWithConfirmation); $(window).resize(fullscreenNaclModule); - chrome.app.window.current().onMaximized.addListener(fullscreenChromeWindow); -} - -function fullscreenChromeWindow() { - // when the user clicks the maximize button on the window, - // FIRST restore it to the previous size, then fullscreen it to the whole screen - // this prevents the previous window size from being 'maximized', - // and allows us to functionally retain two window sizes - // so that when the user hits `esc`, they go back to the "restored" size, - // instead of "maximized", which would immediately go to fullscreen - chrome.app.window.current().restore(); - chrome.app.window.current().fullscreen(); -} - -function loadWindowState() { - if (!chrome.storage) { - return; - } - - chrome.storage.sync.get('windowState', function(item) { - // load stored window state - windowState = (item && item.windowState) ? - item.windowState : - windowState; - - // subscribe to chrome's windowState events - chrome.app.window.current().onFullscreened.addListener(onFullscreened); - chrome.app.window.current().onBoundsChanged.addListener(onBoundsChanged); - }); -} - -function onFullscreened() { - if (!isInGame && windowState == 'normal') { - storeData('windowState', 'fullscreen', null); - windowState = 'fullscreen'; - } -} - -function onBoundsChanged() { - if (!isInGame && windowState == 'fullscreen') { - storeData('windowState', 'normal', null); - windowState = 'normal'; - } } function changeUiModeForNaClLoad() { @@ -625,11 +581,6 @@ function showAppsMode() { $('#loadingSpinner').css('display', 'none'); $('body').css('backgroundColor', '#282C38'); - // Restore back to a window - if (windowState == 'normal') { - chrome.app.window.current().restore(); - } - isInGame = false; // FIXME: We want to eventually poll on the app screen but we can't now @@ -770,10 +721,8 @@ function playGameMode() { $("#main-content").children().not("#listener, #loadingSpinner").hide(); $("#main-content").addClass("fullscreen"); - chrome.app.window.current().fullscreen(); fullscreenNaclModule(); $('#loadingSpinner').css('display', 'inline-block'); - } // Maximize the size of the nacl module by scaling and resizing appropriately @@ -952,8 +901,6 @@ function onWindowLoad() { // don't show the game selection div $('#gameSelection').css('display', 'none'); - loadWindowState(); - if (chrome.storage) { // load stored resolution prefs chrome.storage.sync.get('resolution', function(previousValue) {