From 873965d7b71d3e9d7dab26bc33808da7b3a01ddf Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Fri, 4 Jun 2021 12:21:08 -0400 Subject: [PATCH] feat: Hook in browser actions into electon's BrowserWindow --- addons/api/mirage/scenarios/ipc.js | 8 ++++++++ ui/desktop/app/routes/application.js | 15 +++++++++++++++ ui/desktop/app/styles/app.scss | 7 +++++++ ui/desktop/app/templates/application.hbs | 12 +++++++++--- ui/desktop/electron-app/src/ipc/handlers.js | 20 +++++++++++++++++++- 5 files changed, 58 insertions(+), 4 deletions(-) diff --git a/addons/api/mirage/scenarios/ipc.js b/addons/api/mirage/scenarios/ipc.js index 7e20ddaa1..971da832e 100644 --- a/addons/api/mirage/scenarios/ipc.js +++ b/addons/api/mirage/scenarios/ipc.js @@ -67,6 +67,14 @@ export default function initializeMockIPC(server) { isWindowsOS() { return Boolean(window.navigator.userAgent.match(/(windows)/i)); } + + /** + * Do nothing when attempting to minimize, toggle fullscreen, + * and close a browser window + */ + minimizeWindow() {} + closeWindow() {} + toggleFullScreenWindow() {} } /** diff --git a/ui/desktop/app/routes/application.js b/ui/desktop/app/routes/application.js index 14ee34db3..979684714 100644 --- a/ui/desktop/app/routes/application.js +++ b/ui/desktop/app/routes/application.js @@ -125,4 +125,19 @@ export default class ApplicationRoute extends Route { rootEl.classList.remove('rose-theme-light'); } } + + @action + minimize() { + this.ipc.invoke('minimizeWindow'); + } + + @action + toggleFullScreen() { + this.ipc.invoke('toggleFullscreenWindow'); + } + + @action + close() { + this.ipc.invoke('closeWindow'); + } } diff --git a/ui/desktop/app/styles/app.scss b/ui/desktop/app/styles/app.scss index f504cf50a..e1c78ae11 100644 --- a/ui/desktop/app/styles/app.scss +++ b/ui/desktop/app/styles/app.scss @@ -120,10 +120,17 @@ .rose-header { -webkit-app-region: drag; + -webkit-user-select: none; min-height: sizing.rems(l) * 2; padding-left: sizing.rems(l) * 3; position: relative; + .rose-header-brand, .rose-header-nav, + .rose-header-utilities .rose-dropdown, + .rose-header-utilities button { + -webkit-app-region: no-drag; + } + &.header-shrink { padding-left: 0; } diff --git a/ui/desktop/app/templates/application.hbs b/ui/desktop/app/templates/application.hbs index eca93a021..b7728f596 100644 --- a/ui/desktop/app/templates/application.hbs +++ b/ui/desktop/app/templates/application.hbs @@ -13,9 +13,15 @@ {{#if this.isWindowsOS}} - - - + + + {{/if}} {{#if this.session.isAuthenticated}} diff --git a/ui/desktop/electron-app/src/ipc/handlers.js b/ui/desktop/electron-app/src/ipc/handlers.js index ebc4074d7..5fef2534b 100644 --- a/ui/desktop/electron-app/src/ipc/handlers.js +++ b/ui/desktop/electron-app/src/ipc/handlers.js @@ -1,4 +1,4 @@ -const { shell } = require('electron'); +const { shell, BrowserWindow } = require('electron'); const isDev = require('electron-is-dev'); const handle = require('./ipc-handler.js'); const boundaryCli = require('../cli/index.js'); @@ -70,3 +70,21 @@ handle('stop', ({ session_id }) => sessionManager.stopById(session_id)); * Check whether platform is windows */ handle('isWindowsOS', () => isWindows()); + +/** + * Minimize window + */ +handle('minimizeWindow', () => BrowserWindow.getFocusedWindow().minimize()); + +/** + * Toggle fullscreen window + */ +handle('toggleFullscreenWindow', () => { + const window = BrowserWindow.getFocusedWindow(); + window.isMaximized() ? window.unmaximize() : window.maximize(); +}); + +/** + * Close window + */ +handle('closeWindow', () => BrowserWindow.getFocusedWindow().close());