From b270ad52b41b9c790cb18ba65071f1e061185b76 Mon Sep 17 00:00:00 2001 From: antelle Date: Thu, 27 May 2021 12:09:21 +0200 Subject: [PATCH] titlebar --- .../comp/launcher/launcher-electron.ts | 1 + app/scripts/ui-old/titlebar-view.js | 62 ------------------- app/scripts/ui/titlebar.ts | 28 +++++++++ app/scripts/views/app-view.tsx | 3 +- app/scripts/views/titlebar-view.tsx | 28 +++++++++ app/templates/titlebar.hbs | 15 ----- desktop/desktop-ipc.d.ts | 3 + 7 files changed, 62 insertions(+), 78 deletions(-) delete mode 100644 app/scripts/ui-old/titlebar-view.js create mode 100644 app/scripts/ui/titlebar.ts create mode 100644 app/scripts/views/titlebar-view.tsx delete mode 100644 app/templates/titlebar.hbs diff --git a/app/scripts/comp/launcher/launcher-electron.ts b/app/scripts/comp/launcher/launcher-electron.ts index 48099351..4c73c81e 100644 --- a/app/scripts/comp/launcher/launcher-electron.ts +++ b/app/scripts/comp/launcher/launcher-electron.ts @@ -32,6 +32,7 @@ export class LauncherElectron { name = 'electron'; version = process.versions.electron; pendingUpdateFile?: string; + mainWindowMaximized?: boolean; constructor() { this.ipcRenderer.on('log', (e, name, level, ...args) => { diff --git a/app/scripts/ui-old/titlebar-view.js b/app/scripts/ui-old/titlebar-view.js deleted file mode 100644 index 72b379e8..00000000 --- a/app/scripts/ui-old/titlebar-view.js +++ /dev/null @@ -1,62 +0,0 @@ -import { View } from 'framework/views/view'; -import { Events } from 'framework/events'; -import { Launcher } from 'comp/launcher'; -import { KeeWebLogo } from 'const/inline-images'; -import template from 'templates/titlebar.hbs'; - -class TitlebarView extends View { - parent = '.app__titlebar'; - - template = template; - - events = { - 'click .titlebar__minimize': 'clickMinimize', - 'click .titlebar__maximize': 'clickMaximize', - 'click .titlebar__restore': 'clickRestore', - 'click .titlebar__close': 'clickClose' - }; - - constructor() { - super(); - - this.maximized = Launcher.mainWindowMaximized(); - - this.listenTo(Events, 'app-maximized', this.appMaximized); - this.listenTo(Events, 'app-unmaximized', this.appUnmaximized); - } - - render() { - super.render({ - maximized: this.maximized, - iconSrc: KeeWebLogo - }); - } - - clickMinimize() { - Launcher.minimizeMainWindow(); - } - - clickMaximize() { - Launcher.maximizeMainWindow(); - } - - clickRestore() { - Launcher.restoreMainWindow(); - } - - clickClose() { - window.close(); - } - - appMaximized() { - this.maximized = true; - this.render(); - } - - appUnmaximized() { - this.maximized = false; - this.render(); - } -} - -export { TitlebarView }; diff --git a/app/scripts/ui/titlebar.ts b/app/scripts/ui/titlebar.ts new file mode 100644 index 00000000..9981b1e4 --- /dev/null +++ b/app/scripts/ui/titlebar.ts @@ -0,0 +1,28 @@ +import { h, FunctionComponent } from 'preact'; +import { TitlebarView } from 'views/titlebar-view'; +import { Launcher } from 'comp/launcher'; +import { Events } from 'util/events'; +import { useState } from 'preact/hooks'; + +export const Titlebar: FunctionComponent = () => { + const [maximized, setMaximized] = useState(Launcher?.mainWindowMaximized ?? false); + + Events.on('app-maximized', () => setMaximized(true)); + Events.on('app-minimized', () => setMaximized(false)); + + const onMinimize = () => Launcher?.ipcRenderer.invoke('minimize-main-window'); + + const onRestore = () => Launcher?.ipcRenderer.invoke('restore-main-window'); + + const onMaximize = () => Launcher?.ipcRenderer.invoke('maximize-main-window'); + + const onClose = () => window.close(); + + return h(TitlebarView, { + maximized, + onMinimize, + onRestore, + onMaximize, + onClose + }); +}; diff --git a/app/scripts/views/app-view.tsx b/app/scripts/views/app-view.tsx index 7ec514c9..cc5634e4 100644 --- a/app/scripts/views/app-view.tsx +++ b/app/scripts/views/app-view.tsx @@ -1,6 +1,7 @@ import { FunctionComponent } from 'preact'; import { Locale } from 'util/locale'; import { AppSettingsTitlebarStyle } from 'models/app-settings'; +import { Titlebar } from 'ui/titlebar'; export const AppView: FunctionComponent<{ beta: boolean; @@ -15,7 +16,7 @@ export const AppView: FunctionComponent<{ ) : null} {customTitlebar ? ( -
+ ) : titlebarStyle === 'hidden' ? (
) : null} diff --git a/app/scripts/views/titlebar-view.tsx b/app/scripts/views/titlebar-view.tsx new file mode 100644 index 00000000..3386de06 --- /dev/null +++ b/app/scripts/views/titlebar-view.tsx @@ -0,0 +1,28 @@ +import { FunctionComponent } from 'preact'; +import { KeeWebLogo } from 'const/inline-images'; + +export const TitlebarView: FunctionComponent<{ + maximized: boolean; + onMinimize: () => void; + onRestore: () => void; + onMaximize: () => void; + onClose: () => void; +}> = ({ maximized, onMinimize, onRestore, onMaximize, onClose }) => { + return ( +
+
+ +
+ +
+ + + {maximized ? ( + + ) : ( + + )} + +
+ ); +}; diff --git a/app/templates/titlebar.hbs b/app/templates/titlebar.hbs deleted file mode 100644 index ba4f3797..00000000 --- a/app/templates/titlebar.hbs +++ /dev/null @@ -1,15 +0,0 @@ -
-
- -
- -
- - - {{#if maximized}} - - {{else}} - - {{/if}} - -
diff --git a/desktop/desktop-ipc.d.ts b/desktop/desktop-ipc.d.ts index 276cd8b0..78e1a02e 100644 --- a/desktop/desktop-ipc.d.ts +++ b/desktop/desktop-ipc.d.ts @@ -116,4 +116,7 @@ export interface DesktopIpcMainCalls { 'kill-process': (name: string) => void; 'http-request': (arg: HttpRequestConfig) => HttpResponse; 'show-main-window': () => void; + 'minimize-main-window': () => void; + 'maximize-main-window': () => void; + 'restore-main-window': () => void; }