diff --git a/addons/api/mirage/scenarios/ipc.js b/addons/api/mirage/scenarios/ipc.js index 971da832e..f8fdf6fde 100644 --- a/addons/api/mirage/scenarios/ipc.js +++ b/addons/api/mirage/scenarios/ipc.js @@ -62,7 +62,14 @@ export default function initializeMockIPC(server) { } /** - * Check for browser running on windows OS + * Check for browsers running on mac OS + */ + isMacOS() { + return Boolean(window.navigator.userAgent.match(/(macintosh)/i)); + } + + /** + * Check for browsers running on windows OS */ isWindowsOS() { return Boolean(window.navigator.userAgent.match(/(windows)/i)); diff --git a/ui/desktop/app/routes/application.js b/ui/desktop/app/routes/application.js index 979684714..c80f5873e 100644 --- a/ui/desktop/app/routes/application.js +++ b/ui/desktop/app/routes/application.js @@ -44,12 +44,11 @@ export default class ApplicationRoute extends Route { } /** - * Add windows OS config on controller + * Add OS config on controller */ - async setupController(controller, model) { - super.setupController(controller, model); - const isWindowsOS = await this.ipc.invoke('isWindowsOS'); - this.controllerFor('application').set('isWindowsOS', isWindowsOS); + async setupController(controller, ...args) { + controller.set('isMacOS', await this.ipc.invoke('isMacOS')); + controller.set('isWindowsOS', await this.ipc.invoke('isWindowsOS')); } // =actions diff --git a/ui/desktop/app/styles/app.scss b/ui/desktop/app/styles/app.scss index e1c78ae11..4cf316805 100644 --- a/ui/desktop/app/styles/app.scss +++ b/ui/desktop/app/styles/app.scss @@ -29,13 +29,34 @@ .rose-layout-global-body { max-height: 100vh; - overflow: hidden; + overflow: auto; + + main { + flex-grow: 1; + overflow: auto; + } } .rose-layout-sidebar-sidebar, .rose-layout-sidebar-body { overflow-y: scroll; } + + // Windows OS specific overflow. + &.layout-scroll { + .rose-layout-global-body { + overflow-y: auto; + + main { + overflow: unset; + } + } + + .rose-layout-sidebar-sidebar, + .rose-layout-sidebar-body { + overflow-y: unset; + } + } } .rose-nav-sidebar { @@ -122,7 +143,6 @@ -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, @@ -131,8 +151,20 @@ -webkit-app-region: no-drag; } - &.header-shrink { - padding-left: 0; + &.header-cushion { + padding-left: sizing.rems(l) * 3; + } + + .utilities-actions { + display: flex; + justify-content: center; + + button { + background: transparent; + border: transparent; + color: var(--white); + margin: sizing.rems(xs); + } } .logotype { @@ -225,13 +257,6 @@ white-space: nowrap; } -.rose-layout-global .rose-layout-global-body { - main { - flex-grow: 1; - overflow: auto; - } -} - .branded-card { border: 1px solid var(--ui-border-subtler-1); border-radius: sizing.rems(xxxs); diff --git a/ui/desktop/app/templates/application.hbs b/ui/desktop/app/templates/application.hbs index b7728f596..c57d7a85f 100644 --- a/ui/desktop/app/templates/application.hbs +++ b/ui/desktop/app/templates/application.hbs @@ -1,9 +1,9 @@ {{page-title (app-name)}} - + - + {{#if this.session.isAuthenticated}} @@ -13,15 +13,17 @@ {{#if this.isWindowsOS}} - - - + + + + + {{/if}} {{#if this.session.isAuthenticated}} diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index a251097a5..3e84acb11 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -197,16 +197,19 @@ app.on('before-quit', (event) => { detail: 'Close sessions before quitting?', }; - dialog.showMessageBox(dialogOpts).then((returnValue) => { - switch (returnValue.response) { - case 0: - sessionManager.stopAll(); - break; - default: - event.preventDefault(); - break; - } - }); + const buttonId = dialog.showMessageBoxSync(null, dialogOpts); + buttonId === 0 ? sessionManager.stopAll() : event.preventDefault(); + + // console.log(returnValue.response); + // switch (returnValue.response) { + // case 0: + // sessionManager.stopAll(); + // break; + // default: + // event.preventDefault(); + // break; + // } + // }); } }); diff --git a/ui/desktop/electron-app/src/ipc/handlers.js b/ui/desktop/electron-app/src/ipc/handlers.js index 5fef2534b..d5aac6fb4 100644 --- a/ui/desktop/electron-app/src/ipc/handlers.js +++ b/ui/desktop/electron-app/src/ipc/handlers.js @@ -1,11 +1,11 @@ -const { shell, BrowserWindow } = require('electron'); +const { app, shell, BrowserWindow } = require('electron'); const isDev = require('electron-is-dev'); const handle = require('./ipc-handler.js'); const boundaryCli = require('../cli/index.js'); const sessionManager = require('../services/session-manager.js'); const runtimeSettings = require('../services/runtime-settings.js'); const sanitizer = require('../utils/sanitizer.js'); -const { isWindows } = require('../helpers/platform.js'); +const { isMac, isWindows } = require('../helpers/platform.js'); /** * Returns the current runtime origin, which is used by the main thread to @@ -67,7 +67,12 @@ handle('connect', ({ target_id, token, host_id }) => handle('stop', ({ session_id }) => sessionManager.stopById(session_id)); /** - * Check whether platform is windows + * Check for MacOS OS + */ +handle('isMacOS', () => isMac()); + +/** + * Check for Windows OS */ handle('isWindowsOS', () => isWindows()); @@ -85,6 +90,6 @@ handle('toggleFullscreenWindow', () => { }); /** - * Close window + * Quit app */ -handle('closeWindow', () => BrowserWindow.getFocusedWindow().close()); +handle('closeWindow', () => app.quit());