Remove the Windows 7 (7.css) skin
The win7 skin is dropped. Everything else the branch built stays: Linux support and the HTML context menus, the workspace-tab menu, the continuous interface scale (rem everywhere, stepper, Ctrl/Cmd +/-/0) and the core/ service layer. The modern tree already carried all of them, and nothing outside skins/7like/ imported the win7 tree except main.ts and styles.css. Removed: the skins/7like/ tree (5.1k lines, fonts), the 7.css dependency, the skin setting and its options row + strings in all 7 locales, the frameless-window plumbing (window-control RPCs, windowState push, trackMaximizeState, the synthesized resize grip and its postinstall watchdog), the session-skin pinning in buildPreload/chromeOptions, the skin/skinfix cascade layers, and the win7-only probes and screenshot harness (the harness cannot render the modern tree: plain Firefox has no RPC bridge). chromeOptions() stays as the one shared frame decision. Fixed on the way out: - index.html's per-theme pre-paint background is restored. The branch had replaced it with a win7-only transparent rule, so modern dark windows had silently lost one of the three flash guards. - editor-windows.ts wrote its window-key separator as a literal NUL byte, which made git and grep treat the file as binary; it is `\0` now (same string at runtime). No settings migration: a stale "skin" key is carried harmlessly by the store's spread-merge and dropped on the next save. UI bundle: 616.7 kB -> 405.4 kB, back under the 500 kB budget. Docs: architecture, gotchas and platform-notes lose the win7 material but keep what stays true (construction-time preloads/frames, drag regions ignoring preventDefault, electrobun's missing resize/maximize primitives); flash-prevention, dev-URL and Bun-panic notes move back under Electrobun; stale context-menu/tab-bar links fixed; README documents the scale keys. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -33,12 +33,6 @@ export const de = {
|
||||
title: "Optionen",
|
||||
language: "Sprache",
|
||||
system: "System",
|
||||
skin: {
|
||||
label: "Optik",
|
||||
modern: "Modern",
|
||||
win7: "Windows 7",
|
||||
restartHint: "Wird beim nächsten Start von miniSCP übernommen",
|
||||
},
|
||||
theme: { label: "Design", system: "System", light: "Hell", dark: "Dunkel" },
|
||||
tone: { label: "Ton", dark: "Dunkel", darker: "Dunkler" },
|
||||
accent: { label: "Akzent" },
|
||||
|
||||
@@ -37,12 +37,6 @@ export const en = {
|
||||
title: "Options",
|
||||
language: "Language",
|
||||
system: "System",
|
||||
skin: {
|
||||
label: "Skin",
|
||||
modern: "Modern",
|
||||
win7: "Windows 7",
|
||||
restartHint: "Applies next time you start miniSCP",
|
||||
},
|
||||
theme: { label: "Theme", system: "System", light: "Light", dark: "Dark" },
|
||||
tone: { label: "Tone", dark: "Dark", darker: "Darker" },
|
||||
accent: { label: "Accent" },
|
||||
|
||||
@@ -33,12 +33,6 @@ export const es = {
|
||||
title: "Opciones",
|
||||
language: "Idioma",
|
||||
system: "Sistema",
|
||||
skin: {
|
||||
label: "Aspecto",
|
||||
modern: "Moderno",
|
||||
win7: "Windows 7",
|
||||
restartHint: "Se aplica la próxima vez que abras miniSCP",
|
||||
},
|
||||
theme: { label: "Tema", system: "Sistema", light: "Claro", dark: "Oscuro" },
|
||||
tone: { label: "Tono", dark: "Oscuro", darker: "Más oscuro" },
|
||||
accent: { label: "Acento" },
|
||||
|
||||
@@ -35,12 +35,6 @@ export const eu = {
|
||||
title: "Aukerak",
|
||||
language: "Hizkuntza",
|
||||
system: "Sistema",
|
||||
skin: {
|
||||
label: "Itxura",
|
||||
modern: "Modernoa",
|
||||
win7: "Windows 7",
|
||||
restartHint: "Hurrengoan miniSCP abiaraztean aplikatuko da",
|
||||
},
|
||||
theme: { label: "Gaia", system: "Sistema", light: "Argia", dark: "Iluna" },
|
||||
tone: { label: "Tonua", dark: "Iluna", darker: "Ilunagoa" },
|
||||
accent: { label: "Azentua" },
|
||||
|
||||
@@ -33,12 +33,6 @@ export const fr = {
|
||||
title: "Options",
|
||||
language: "Langue",
|
||||
system: "Système",
|
||||
skin: {
|
||||
label: "Apparence",
|
||||
modern: "Moderne",
|
||||
win7: "Windows 7",
|
||||
restartHint: "Prend effet au prochain démarrage de miniSCP",
|
||||
},
|
||||
theme: { label: "Thème", system: "Système", light: "Clair", dark: "Sombre" },
|
||||
tone: { label: "Ton", dark: "Sombre", darker: "Plus sombre" },
|
||||
accent: { label: "Accent" },
|
||||
|
||||
@@ -34,12 +34,6 @@ export const ja = {
|
||||
title: "オプション",
|
||||
language: "言語",
|
||||
system: "システム",
|
||||
skin: {
|
||||
label: "外観",
|
||||
modern: "モダン",
|
||||
win7: "Windows 7",
|
||||
restartHint: "次回 miniSCP を起動したときに適用されます",
|
||||
},
|
||||
theme: { label: "テーマ", system: "システム", light: "ライト", dark: "ダーク" },
|
||||
tone: { label: "トーン", dark: "ダーク", darker: "より暗く" },
|
||||
accent: { label: "アクセント" },
|
||||
|
||||
@@ -34,12 +34,6 @@ export const zh = {
|
||||
title: "选项",
|
||||
language: "语言",
|
||||
system: "系统",
|
||||
skin: {
|
||||
label: "外观",
|
||||
modern: "现代",
|
||||
win7: "Windows 7",
|
||||
restartHint: "下次启动 miniSCP 时生效",
|
||||
},
|
||||
theme: { label: "主题", system: "系统", light: "浅色", dark: "深色" },
|
||||
tone: { label: "色调", dark: "深色", darker: "更深" },
|
||||
accent: { label: "强调色" },
|
||||
|
||||
+1
-37
@@ -128,7 +128,7 @@ export type AppRPC = {
|
||||
// local shell integration
|
||||
/**
|
||||
* Shell actions the context menu triggers on a LOCAL path. The menu
|
||||
* itself is HTML (ui/src/app/context-menu.ts) — electrobun's native
|
||||
* itself is HTML (ui/src/app/core/context-menu.service.ts) — electrobun's native
|
||||
* context menu is a no-op on Linux — but these three still need the
|
||||
* bun side's Utils.
|
||||
*/
|
||||
@@ -154,35 +154,6 @@ export type AppRPC = {
|
||||
managerConnect: { params: { id: string }; response: Result };
|
||||
managerOpenStack: { params: { id: string }; response: Result };
|
||||
managerClose: { params: Record<string, never>; response: Result };
|
||||
// custom window chrome (win7 skin — the window is frameless, so the
|
||||
// webview's title bar owns the controls). Served by every window kind.
|
||||
windowMinimize: { params: Record<string, never>; response: Result };
|
||||
/** Maximize/restore in one call; responds with the resulting state. */
|
||||
windowToggleMaximize: {
|
||||
params: Record<string, never>;
|
||||
response: Result<{ maximized: boolean }>;
|
||||
};
|
||||
windowClose: { params: Record<string, never>; response: Result };
|
||||
/** First paint: the title bar needs the state before any resize fires. */
|
||||
windowIsMaximized: {
|
||||
params: Record<string, never>;
|
||||
response: Result<{ maximized: boolean }>;
|
||||
};
|
||||
/**
|
||||
* STOPGAP — the two halves of the synthesized resize. A frameless GTK
|
||||
* window has no resize borders and electrobun exposes no native resize
|
||||
* gesture, so the webview drags its own handles and moves the frame
|
||||
* itself. Delete both with the rest of the hack; see the removal
|
||||
* checklist in ui/src/app/skins/7like/window-resize/window-resize.ts.
|
||||
*/
|
||||
windowGetFrame: {
|
||||
params: Record<string, never>;
|
||||
response: Result<{ x: number; y: number; width: number; height: number }>;
|
||||
};
|
||||
windowSetFrame: {
|
||||
params: { x: number; y: number; width: number; height: number };
|
||||
response: Result;
|
||||
};
|
||||
// auto-updater (electrobun Updater)
|
||||
/** Main window: re-run the update check on demand (menu item). */
|
||||
checkForUpdate: {
|
||||
@@ -213,13 +184,6 @@ export type AppRPC = {
|
||||
editorCloseRequest: Record<string, never>;
|
||||
/** bun → main: the modal connection manager opened/closed. */
|
||||
managerState: { open: boolean };
|
||||
/**
|
||||
* bun → any window: maximize state changed, so the custom title bar can
|
||||
* swap its maximize/restore glyph. electrobun has no maximize event —
|
||||
* this is derived from the window's `resize` event (see windows.ts
|
||||
* trackMaximizeState), which also covers OS-initiated Aero Snap.
|
||||
*/
|
||||
windowState: { maximized: boolean };
|
||||
/** bun → main: the manager window changed the connection store. */
|
||||
connectionsChanged: Record<string, never>;
|
||||
/**
|
||||
|
||||
+1
-14
@@ -78,18 +78,6 @@ export type AccentTone =
|
||||
export interface AppSettings {
|
||||
/** UI language; "system" resolves to the OS locale (fallback English). */
|
||||
locale: "system" | SupportedLocale;
|
||||
/**
|
||||
* Visual skin. "modern" is the shadcn-style look; "win7" swaps in 7.css
|
||||
* (Windows 7 Aero) and switches the window to custom frameless chrome.
|
||||
* Each skin is a whole component tree under ui/src/app/skins/ — "modern" is
|
||||
* shadlike/, "win7" is 7like/ — selected at bootstrap in ui/src/main.ts.
|
||||
* The value is NOT named after its folder on purpose: it is persisted in
|
||||
* user settings, and "win7" is also the literal class 7.scoped.css is
|
||||
* precompiled to require, so neither can be renamed freely.
|
||||
* Changing this needs a window reopen to take effect on the frame itself —
|
||||
* the CSS half applies live.
|
||||
*/
|
||||
skin: "modern" | "win7";
|
||||
theme: "system" | "light" | "dark";
|
||||
/** Dark appearance: grey ("dark") or near-black AMOLED ("darker"). */
|
||||
darkTone: "dark" | "darker";
|
||||
@@ -103,7 +91,7 @@ export interface AppSettings {
|
||||
/**
|
||||
* Interface scale factor, 0.5–4 in 0.1 steps (shown as 50%–400%). Works by
|
||||
* setting the root font-size — every size in the UI is rem, so one lever
|
||||
* scales BOTH skins whole. Replaced the 3-tier `textSize`
|
||||
* scales the whole UI. Replaced the 3-tier `textSize`
|
||||
* (compact|default|large); SettingsStore.load migrates old files.
|
||||
*/
|
||||
uiScale: number;
|
||||
@@ -125,7 +113,6 @@ export interface AppSettings {
|
||||
|
||||
export const DEFAULT_SETTINGS: AppSettings = {
|
||||
locale: "system",
|
||||
skin: "modern",
|
||||
theme: "system",
|
||||
darkTone: "dark",
|
||||
accent: "blue",
|
||||
|
||||
Reference in New Issue
Block a user