From a170bec3dbf9dea1458264510b8ad523b5f352e6 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 8 Mar 2025 11:39:04 +0200 Subject: [PATCH] feat(touch_bar): basic integration --- src/public/app/components/app_context.ts | 5 ++++ src/public/app/widgets/touch_bar.ts | 37 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/public/app/widgets/touch_bar.ts diff --git a/src/public/app/components/app_context.ts b/src/public/app/components/app_context.ts index 8c62a5586..8cbe6b527 100644 --- a/src/public/app/components/app_context.ts +++ b/src/public/app/components/app_context.ts @@ -25,6 +25,7 @@ import type { default as NoteContext, GetTextEditorCallback } from "./note_conte import type { ContextMenuEvent } from "../menus/context_menu.js"; import type TypeWidget from "../widgets/type_widgets/type_widget.js"; import type EditableTextTypeWidget from "../widgets/type_widgets/editable_text.js"; +import TouchBarWidget from "../widgets/touch_bar.js"; interface Layout { getRootWidget: (appContext: AppContext) => RootWidget; @@ -444,6 +445,10 @@ class AppContext extends Component { this.components = [this.tabManager, new RootCommandExecutor(), new Entrypoints(), new MainTreeExecutors(), new ShortcutComponent()]; + if (utils.isElectron() && utils.isMac()) { + this.components.push(new TouchBarWidget()); + } + if (utils.isMobile()) { this.components.push(new MobileScreenSwitcherExecutor()); } diff --git a/src/public/app/widgets/touch_bar.ts b/src/public/app/widgets/touch_bar.ts new file mode 100644 index 000000000..48ab23688 --- /dev/null +++ b/src/public/app/widgets/touch_bar.ts @@ -0,0 +1,37 @@ +import utils from "../services/utils.js"; +import Component from "../components/component.js"; + +export default class TouchBarWidget extends Component { + + remote: typeof import("@electron/remote"); + + constructor() { + super(); + this.remote = utils.dynamicRequire("@electron/remote") as typeof import("@electron/remote"); + this.#setTouchBar(); + } + + #setTouchBar() { + const touchBarData = this.#buildTouchBar(); + this.remote.getCurrentWindow().setTouchBar(touchBarData); + console.log("Setting touch bar", touchBarData); + } + + #buildTouchBar() { + const { TouchBarButton } = this.remote.TouchBar; + + const items = [ + new TouchBarButton({ + label: "New note", + click: () => { + console.log("New note pressed."); + } + }) + ]; + + return new this.remote.TouchBar({ + items + }); + } + +}