fix(window): force dark native title bar

Apply Electron nativeTheme dark mode before creating the main window so the Windows title bar remains dark across local, server, and RDP user profiles. Add focused coverage for the native theme contract.
This commit is contained in:
Sucukdeluxe
2026-08-22 19:27:33 +02:00
parent 0d73f7e074
commit 50673717aa
3 changed files with 25 additions and 3 deletions
+6 -3
View File
@@ -1,7 +1,7 @@
import fs from "node:fs";
import path from "node:path";
import { pathToFileURL } from "node:url";
import { app, BrowserWindow, clipboard, dialog, ipcMain, Menu, powerMonitor, safeStorage, shell, Tray, type IpcMainEvent, type IpcMainInvokeEvent } from "electron";
import { app, BrowserWindow, clipboard, dialog, ipcMain, Menu, nativeTheme, powerMonitor, safeStorage, shell, Tray, type IpcMainEvent, type IpcMainInvokeEvent } from "electron";
import { AddLinksPayload, AppSettings, DebridProvider, EnableRemoteDiagnosticsInput, RendererSettingsUpdate, UpdateInstallProgress } from "../shared/types";
import { AppController } from "./app-controller";
import { IPC_CHANNELS } from "../shared/ipc";
@@ -25,8 +25,11 @@ import { validateRealDebridLoginRequest } from "../shared/preload-api";
import { migrateProductUserDataDirectory } from "./storage";
import { validateCollectorContainerInspectionRequest, validateCollectorInspectionRequest } from "../shared/collector";
import { DailyStartScheduler, hasDailyStartRulePatch, prepareDailyStartSettingsPatch } from "./daily-start-scheduler";
function validateString(value: unknown, name: string): string {
import { forceDarkNativeTheme } from "./native-theme";
forceDarkNativeTheme(nativeTheme);
function validateString(value: unknown, name: string): string {
if (typeof value !== "string") {
throw new Error(`${name} muss ein String sein`);
}
+7
View File
@@ -0,0 +1,7 @@
export interface NativeThemeTarget {
themeSource: string;
}
export function forceDarkNativeTheme(theme: NativeThemeTarget): void {
theme.themeSource = "dark";
}
+12
View File
@@ -0,0 +1,12 @@
import { describe, expect, it } from "vitest";
import { forceDarkNativeTheme } from "../src/main/native-theme";
describe("native window theme", () => {
it("forces the native Windows title bar to use the dark theme", () => {
const theme = { themeSource: "system" };
forceDarkNativeTheme(theme);
expect(theme.themeSource).toBe("dark");
});
});