diff --git a/src/main/constants.ts b/src/main/constants.ts index 1a02d5e..1bce303 100644 --- a/src/main/constants.ts +++ b/src/main/constants.ts @@ -5,11 +5,22 @@ */ import { app } from "electron"; -import { existsSync, readdirSync, renameSync, rmdirSync } from "fs"; -import { join } from "path"; +import { existsSync, mkdirSync, readdirSync, renameSync, rmdirSync } from "fs"; +import { dirname, join } from "path"; + +const vesktopDir = dirname(process.execPath); + +export const PORTABLE = + process.platform === "win32" && + !process.execPath.toLowerCase().endsWith("electron.exe") && + !existsSync(join(vesktopDir, "Uninstall Vesktop.exe")); const LEGACY_DATA_DIR = join(app.getPath("appData"), "VencordDesktop", "VencordDesktop"); -export const DATA_DIR = process.env.VENCORD_USER_DATA_DIR || join(app.getPath("userData")); +export const DATA_DIR = + process.env.VENCORD_USER_DATA_DIR || (PORTABLE ? join(vesktopDir, "Data") : join(app.getPath("userData"))); + +mkdirSync(DATA_DIR, { recursive: true }); + // TODO: remove eventually if (existsSync(LEGACY_DATA_DIR)) { try { diff --git a/src/main/index.ts b/src/main/index.ts index 87ef60c..29010c4 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -42,7 +42,13 @@ function init() { // disable renderer backgrounding to prevent the app from unloading when in the background // https://github.com/electron/electron/issues/2822 + // https://github.com/GoogleChrome/chrome-launcher/blob/5a27dd574d47a75fec0fb50f7b774ebf8a9791ba/docs/chrome-flags-for-tools.md#task-throttling app.commandLine.appendSwitch("disable-renderer-backgrounding"); + app.commandLine.appendSwitch("disable-background-timer-throttling"); + app.commandLine.appendSwitch("disable-backgrounding-occluded-windows"); + if (process.platform === "win32") { + disabledFeatures.push("CalculateNativeWinOcclusion"); + } // work around chrome 66 disabling autoplay by default app.commandLine.appendSwitch("autoplay-policy", "no-user-gesture-required"); @@ -50,12 +56,7 @@ function init() { // HardwareMediaKeyHandling,MediaSessionService: Prevent Discord from registering as a media service. // // WidgetLayering (Vencord Added): Fix DevTools context menus https://github.com/electron/electron/issues/38790 - disabledFeatures.push( - "WinRetrieveSuggestionsOnlyOnDemand", - "HardwareMediaKeyHandling", - "MediaSessionService", - "WidgetLayering" - ); + disabledFeatures.push("WinRetrieveSuggestionsOnlyOnDemand", "HardwareMediaKeyHandling", "MediaSessionService"); app.commandLine.appendSwitch("enable-features", [...new Set(enabledFeatures)].filter(Boolean).join(",")); app.commandLine.appendSwitch("disable-features", [...new Set(disabledFeatures)].filter(Boolean).join(",")); diff --git a/src/main/mainWindow.ts b/src/main/mainWindow.ts index a3675d8..5bbbb61 100644 --- a/src/main/mainWindow.ts +++ b/src/main/mainWindow.ts @@ -403,7 +403,9 @@ function createMainWindow() { contextIsolation: true, devTools: true, preload: join(__dirname, "preload.js"), - spellcheck: true + spellcheck: true, + // disable renderer backgrounding to prevent the app from unloading when in the background + backgroundThrottling: false }, icon: ICON_PATH, frame: !noFrame, @@ -428,6 +430,7 @@ function createMainWindow() { autoHideMenuBar: enableMenu })); win.setMenuBarVisibility(false); + if (process.platform === "darwin" && customTitleBar) win.setWindowButtonVisibility(false); win.on("close", e => { const useTray = !isDeckGameMode && Settings.store.minimizeToTray !== false && Settings.store.tray !== false; diff --git a/src/renderer/components/screenSharePicker.css b/src/renderer/components/screenSharePicker.css index c2586a1..645f73c 100644 --- a/src/renderer/components/screenSharePicker.css +++ b/src/renderer/components/screenSharePicker.css @@ -38,7 +38,7 @@ } .vcd-screen-picker-selected img { - border: 2px solid var(--brand-experiment); + border: 2px solid var(--brand-500); border-radius: 3px; } @@ -49,7 +49,7 @@ } .vcd-screen-picker-grid label:hover { - outline: 2px solid var(--brand-experiment); + outline: 2px solid var(--brand-500); } @@ -101,8 +101,8 @@ } .vcd-screen-picker-radio[data-checked="true"] { - background-color: var(--brand-experiment); - border-color: var(--brand-experiment); + background-color: var(--brand-500); + border-color: var(--brand-500); } .vcd-screen-picker-radio[data-checked="true"] h2 { diff --git a/src/updater/main.ts b/src/updater/main.ts index 207687e..4c19ffd 100644 --- a/src/updater/main.ts +++ b/src/updater/main.ts @@ -5,6 +5,7 @@ */ import { app, BrowserWindow, shell } from "electron"; +import { PORTABLE } from "main/constants"; import { Settings, State } from "main/settings"; import { handle } from "main/utils/ipcWrappers"; import { makeLinksOpenExternally } from "main/utils/makeLinksOpenExternally"; @@ -23,17 +24,12 @@ let updateData: UpdateData; handle(IpcEvents.UPDATER_GET_DATA, () => updateData); handle(IpcEvents.UPDATER_DOWNLOAD, () => { - const portable = !!process.env.PORTABLE_EXECUTABLE_FILE; - const { assets } = updateData.release; const url = (() => { switch (process.platform) { case "win32": return assets.find(a => { - if (!a.name.endsWith(".exe")) return false; - - const isSetup = a.name.includes("Setup"); - return portable ? !isSetup : isSetup; + return a.name.endsWith(PORTABLE ? "win.zip" : ".exe"); })!.browser_download_url; case "darwin": return assets.find(a =>