From 8a762e70d9384f35cb574065018564bf690c77e6 Mon Sep 17 00:00:00 2001 From: Luka Leer Date: Tue, 2 Jan 2024 23:34:26 +0100 Subject: [PATCH 1/5] =?UTF-8?q?=E2=9C=A8=20Add=20ability=20to=20use=20nati?= =?UTF-8?q?ve=20OS=20frame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luka Leer --- assets/locales/en-us.json | 6 ++++- injector/src/modules/browserwindow.js | 11 +++++++-- renderer/src/builtins/builtins.js | 1 + renderer/src/builtins/window/frame.js | 33 +++++++++++++++++++++++++++ renderer/src/data/settings.js | 4 ++-- 5 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 renderer/src/builtins/window/frame.js diff --git a/assets/locales/en-us.json b/assets/locales/en-us.json index c3c30397..63128c4b 100644 --- a/assets/locales/en-us.json +++ b/assets/locales/en-us.json @@ -39,7 +39,7 @@ }, "frame": { "name": "Window Frame", - "note": "Adds the native os window frame to the main window" + "note": "Adds the native OS window frame to the main window (requires restart)" } }, "addons": { @@ -237,6 +237,10 @@ "enabledInfo": "This option requires a transparent theme in order to work properly. On Windows this may break your aero snapping and maximizing.\n\nIn order to take effect, Discord needs to be restarted. Do you want to restart now?", "disabledInfo": "In order to take effect, Discord needs to be restarted. Do you want to restart now?" }, + "NativeFrame": { + "enabledInfo": "In order to take effect, Discord needs to be restarted. Do you want to restart now?", + "disabledInfo": "In order to take effect, Discord needs to be restarted. Do you want to restart now?" + }, "Notices": { "moreInfo": "More Info" }, diff --git a/injector/src/modules/browserwindow.js b/injector/src/modules/browserwindow.js index 7dd207d4..a6dd9bcb 100644 --- a/injector/src/modules/browserwindow.js +++ b/injector/src/modules/browserwindow.js @@ -17,10 +17,17 @@ class BrowserWindow extends electron.BrowserWindow { } // Only affect frame if it is *explicitly* set - // const shouldHaveFrame = BetterDiscord.getSetting("window", "frame"); - // if (typeof(shouldHaveFrame) === "boolean") options.frame = shouldHaveFrame; + const shouldHaveFrame = BetterDiscord.getSetting("window", "frame"); + if (typeof(shouldHaveFrame) === "boolean") options.frame = shouldHaveFrame; super(options); + + if (typeof(shouldHaveFrame) === "boolean" && shouldHaveFrame) { + this.webContents.insertCSS(`div[class*="titleBar_"] { + display: none !important; + }`); + } + this.__originalPreload = originalPreload; BetterDiscord.setup(this); } diff --git a/renderer/src/builtins/builtins.js b/renderer/src/builtins/builtins.js index bcbebef5..e86d51ee 100644 --- a/renderer/src/builtins/builtins.js +++ b/renderer/src/builtins/builtins.js @@ -18,4 +18,5 @@ export {default as StopDevToolsWarning} from "./developer/devtoolswarning"; export {default as DebugLogs} from "./developer/debuglogs"; export {default as WindowPrefs} from "./window/transparency"; +export {default as NativeFrame} from "./window/frame"; export {default as RemoveMinimumSize} from "./window/removeminimumsize"; \ No newline at end of file diff --git a/renderer/src/builtins/window/frame.js b/renderer/src/builtins/window/frame.js new file mode 100644 index 00000000..0dff6c7e --- /dev/null +++ b/renderer/src/builtins/window/frame.js @@ -0,0 +1,33 @@ +import Builtin from "@structs/builtin"; + +import Strings from "@modules/strings"; +import IPC from "@modules/ipc"; + +import Modals from "@ui/modals"; + + +export default new class NativeFrame extends Builtin { + get name() {return "NativeFrame";} + get category() {return "window";} + get id() {return "frame";} + + enabled() { + this.showModal(Strings.NativeFrame.enabledInfo); + document.body.classList.add("bd-frame"); + } + + disabled() { + this.showModal(Strings.NativeFrame.disabledInfo); + document.body.classList.remove("bd-frame"); + } + + showModal(info) { + if (!this.initialized) return; + Modals.showConfirmationModal(Strings.Modals.additionalInfo, info, { + confirmText: Strings.Modals.restartNow, + cancelText: Strings.Modals.restartLater, + danger: true, + onConfirm: () => IPC.relaunch() + }); + } +}; \ No newline at end of file diff --git a/renderer/src/data/settings.js b/renderer/src/data/settings.js index 96a1dfdc..b04b5fb7 100644 --- a/renderer/src/data/settings.js +++ b/renderer/src/data/settings.js @@ -52,8 +52,8 @@ export default [ shown: false, settings: [ {type: "switch", id: "transparency", value: false}, - {type: "switch", id: "removeMinimumSize", value: false}, - {type: "switch", id: "frame", value: false, hidden: true} + {type: "switch", id: "frame", value: false}, + {type: "switch", id: "removeMinimumSize", value: false} ] }, { From 587bb8a1f45156aada94c5f0485dbbeafb8b3264 Mon Sep 17 00:00:00 2001 From: Luka Leer Date: Mon, 12 Feb 2024 17:18:45 +0100 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=90=9B=20Improve=20the=20normal=20tit?= =?UTF-8?q?le=20bar=20hiding=20selector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luka Leer --- injector/src/modules/browserwindow.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/injector/src/modules/browserwindow.js b/injector/src/modules/browserwindow.js index a6dd9bcb..7c8c71b0 100644 --- a/injector/src/modules/browserwindow.js +++ b/injector/src/modules/browserwindow.js @@ -23,7 +23,7 @@ class BrowserWindow extends electron.BrowserWindow { super(options); if (typeof(shouldHaveFrame) === "boolean" && shouldHaveFrame) { - this.webContents.insertCSS(`div[class*="titleBar_"] { + this.webContents.insertCSS(`div[class^="titleBar_"], div[class*=" titleBar_"] { display: none !important; }`); } From d736b6860a1b0de2c7de310d1a6e3bc296a1c33e Mon Sep 17 00:00:00 2001 From: Luka Leer Date: Wed, 28 Feb 2024 23:25:34 +0100 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=90=9B=20Inject=20the=20CSS=20the=20p?= =?UTF-8?q?roper=20way?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luka Leer --- injector/src/modules/browserwindow.js | 7 ------- renderer/src/modules/core.js | 7 +++++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/injector/src/modules/browserwindow.js b/injector/src/modules/browserwindow.js index 7c8c71b0..f8618754 100644 --- a/injector/src/modules/browserwindow.js +++ b/injector/src/modules/browserwindow.js @@ -21,13 +21,6 @@ class BrowserWindow extends electron.BrowserWindow { if (typeof(shouldHaveFrame) === "boolean") options.frame = shouldHaveFrame; super(options); - - if (typeof(shouldHaveFrame) === "boolean" && shouldHaveFrame) { - this.webContents.insertCSS(`div[class^="titleBar_"], div[class*=" titleBar_"] { - display: none !important; - }`); - } - this.__originalPreload = originalPreload; BetterDiscord.setup(this); } diff --git a/renderer/src/modules/core.js b/renderer/src/modules/core.js index 59a8400d..c34f0df7 100644 --- a/renderer/src/modules/core.js +++ b/renderer/src/modules/core.js @@ -49,6 +49,13 @@ export default new class Core { Logger.log("Startup", "Initializing Settings"); Settings.initialize(); + Logger.log("Startup", "Injecting Setting-dependent BD Styles"); + if (Settings.get("settings", "window", "frame", false)) { + DOMManager.injectStyle("bd-frame", `div[class^="titleBar_"], div[class*=" titleBar_"] { + display: none !important; + }`); + } + Logger.log("Startup", "Initializing DOMManager"); DOMManager.initialize(); From c50895837e26e87ba6f0a40a3029f1d25b6d61ba Mon Sep 17 00:00:00 2001 From: Luka Leer Date: Thu, 29 Feb 2024 01:09:00 +0100 Subject: [PATCH 4/5] =?UTF-8?q?=E2=9C=A8=20Add=20native=20frame=20to=20pop?= =?UTF-8?q?-out=20windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luka Leer --- injector/src/modules/browserwindow.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/injector/src/modules/browserwindow.js b/injector/src/modules/browserwindow.js index f8618754..8202155a 100644 --- a/injector/src/modules/browserwindow.js +++ b/injector/src/modules/browserwindow.js @@ -23,6 +23,27 @@ class BrowserWindow extends electron.BrowserWindow { super(options); this.__originalPreload = originalPreload; BetterDiscord.setup(this); + + if (typeof(shouldHaveFrame) === "boolean" && shouldHaveFrame) { + // Override the window open handler to force new windows (such as pop-outs) to have frames + this.webContents.on("did-finish-load", () => { + const originalWindowOpenHandler = this.webContents._windowOpenHandler; + + this.webContents.setWindowOpenHandler((details) => { + const originalResponse = originalWindowOpenHandler(details); + originalResponse.overrideBrowserWindowOptions.frame = true; + return originalResponse; + }); + }); + + // Remove the title bar and menu from new windows + this.webContents.on("did-create-window", (window) => { + window.removeMenu(); + window.webContents.insertCSS(`div[class^="titleBar_"], div[class*=" titleBar_"] { + display: none !important; + }`); + }); + } } } From 837831b6e9337ad422eeebe1f38e1391b228d71b Mon Sep 17 00:00:00 2001 From: Luka Leer Date: Thu, 14 Mar 2024 00:01:06 +0100 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=90=9B=20Only=20add=20a=20frame=20on?= =?UTF-8?q?=20pop-out=20frames?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luka Leer --- injector/src/modules/browserwindow.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/injector/src/modules/browserwindow.js b/injector/src/modules/browserwindow.js index 8202155a..bcda8ec5 100644 --- a/injector/src/modules/browserwindow.js +++ b/injector/src/modules/browserwindow.js @@ -31,7 +31,10 @@ class BrowserWindow extends electron.BrowserWindow { this.webContents.setWindowOpenHandler((details) => { const originalResponse = originalWindowOpenHandler(details); - originalResponse.overrideBrowserWindowOptions.frame = true; + // Only set the frame option if it's a pop-out + if (details.frameName === "DISCORD_CHANNEL_CALL_POPOUT") { + originalResponse.overrideBrowserWindowOptions.frame = true; + } return originalResponse; }); });