From 6e9f0a420f61dbb046754bf2aaa7ed92a24fc6c4 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 24 Jan 2024 14:46:52 +1100 Subject: [PATCH] feat(titlebar): handle window button clicks --- src/extensions/titlebar/buttons.mjs | 17 ++++++++++++++++- src/extensions/titlebar/electron.cjs | 15 +++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/extensions/titlebar/buttons.mjs b/src/extensions/titlebar/buttons.mjs index 9786d93..cefa051 100644 --- a/src/extensions/titlebar/buttons.mjs +++ b/src/extensions/titlebar/buttons.mjs @@ -15,20 +15,24 @@ const minimizeLabel = "Minimize window", closeLabel = "Close window"; const createWindowButtons = () => { - const { html } = globalThis.__enhancerApi, + const { html, sendMessage, invokeInWorker } = globalThis.__enhancerApi, $minimize = html`<${TopbarButton} + onclick=${() => sendMessage("notion-enhancer:titlebar", "minimize")} aria-label="${minimizeLabel}" icon="minus" />`, $maximize = html`<${TopbarButton} + onclick=${() => sendMessage("notion-enhancer:titlebar", "maximize")} aria-label="${maximizeLabel}" icon="maximize" />`, $unmaximize = html`<${TopbarButton} + onclick=${() => sendMessage("notion-enhancer:titlebar", "unmaximize")} aria-label="${unmaximizeLabel}" icon="minimize" />`, $close = html`<${TopbarButton} + onclick=${() => sendMessage("notion-enhancer:titlebar", "close")} class="!hover:(bg-red-600 text-white)" aria-label="${closeLabel}" icon="x" @@ -37,6 +41,17 @@ const createWindowButtons = () => { html`<${Tooltip}>${maximizeLabel}`.attach($maximize, "bottom"); html`<${Tooltip}>${unmaximizeLabel}`.attach($unmaximize, "bottom"); html`<${Tooltip}>${closeLabel}`.attach($close, "bottom"); + + const resizeWindow = async () => { + const isMaximized = await invokeInWorker("notion-enhancer:titlebar", { + query: "is-maximized", + }); + $maximize.style.display = isMaximized ? "none" : ""; + $unmaximize.style.display = isMaximized ? "" : "none"; + }; + window.addEventListener("resize", resizeWindow); + resizeWindow(); + return html`
${$minimize}${$maximize}${$unmaximize}${$close}
`; }; diff --git a/src/extensions/titlebar/electron.cjs b/src/extensions/titlebar/electron.cjs index e2c97a2..e8ff19a 100644 --- a/src/extensions/titlebar/electron.cjs +++ b/src/extensions/titlebar/electron.cjs @@ -10,4 +10,19 @@ module.exports = async ({}, db) => { Object.assign((globalThis.__notionConfig ??= {}), { titlebarStyle: "hidden", }); + + const { ipcMain, BrowserWindow } = require("electron"); + ipcMain.on("notion-enhancer:titlebar", ({ sender }, message) => { + const window = BrowserWindow.fromWebContents(sender); + if (message === "minimize") window.minimize(); + if (message === "maximize") window.maximize(); + if (message === "unmaximize") window.unmaximize(); + if (message === "close") window.close(); + }); + + ipcMain.handle("notion-enhancer:titlebar", ({ sender }, message) => { + if (message?.query !== "is-maximized") return; + const window = BrowserWindow.fromWebContents(sender); + return window.isMaximized(); + }); };