Fix CodeRabbit review feedback

This commit is contained in:
2026-05-23 22:22:22 -07:00
parent afe1731514
commit dc9d7b77bb
13 changed files with 198 additions and 36 deletions
+29
View File
@@ -0,0 +1,29 @@
export type StatsWindowLayerSuspensionState = {
count: number;
};
export function createStatsWindowLayerSuspensionState(): StatsWindowLayerSuspensionState {
return { count: 0 };
}
export function isStatsWindowLayerSuspended(state: StatsWindowLayerSuspensionState): boolean {
return state.count > 0;
}
export function suspendStatsWindowLayer(state: StatsWindowLayerSuspensionState): boolean {
state.count += 1;
return state.count === 1;
}
export function restoreStatsWindowLayer(state: StatsWindowLayerSuspensionState): boolean {
if (state.count <= 0) {
return false;
}
state.count -= 1;
return state.count === 0;
}
export function resetStatsWindowLayerSuspension(state: StatsWindowLayerSuspensionState): void {
state.count = 0;
}
@@ -0,0 +1,23 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import {
createStatsWindowLayerSuspensionState,
isStatsWindowLayerSuspended,
resetStatsWindowLayerSuspension,
restoreStatsWindowLayer,
suspendStatsWindowLayer,
} from './stats-window-layer';
test('stats window layer suspension reset clears missed native dialog closes', () => {
const state = createStatsWindowLayerSuspensionState();
assert.equal(suspendStatsWindowLayer(state), true);
assert.equal(suspendStatsWindowLayer(state), false);
assert.equal(isStatsWindowLayerSuspended(state), true);
resetStatsWindowLayerSuspension(state);
assert.equal(isStatsWindowLayerSuspended(state), false);
assert.equal(restoreStatsWindowLayer(state), false);
assert.equal(suspendStatsWindowLayer(state), true);
});
+17 -10
View File
@@ -15,11 +15,18 @@ import {
STATS_WINDOW_TITLE,
} from './stats-window-runtime.js';
import { ensureHyprlandWindowFloatingByTitle } from './hyprland-window-placement.js';
import {
createStatsWindowLayerSuspensionState,
isStatsWindowLayerSuspended,
resetStatsWindowLayerSuspension,
restoreStatsWindowLayer,
suspendStatsWindowLayer,
} from './stats-window-layer.js';
let statsWindow: BrowserWindow | null = null;
let toggleRegistered = false;
let nativeDialogLayerRegistered = false;
let nativeDialogLayerSuspensionCount = 0;
const nativeDialogLayerSuspension = createStatsWindowLayerSuspensionState();
export interface StatsWindowOptions {
/** Absolute path to stats/dist/ directory */
@@ -67,7 +74,7 @@ function showStatsWindow(window: BrowserWindow, options: StatsWindowOptions): vo
}
export function promoteStatsOverlayAbovePlayback(): boolean {
if (nativeDialogLayerSuspensionCount > 0) {
if (isStatsWindowLayerSuspended(nativeDialogLayerSuspension)) {
return false;
}
@@ -91,8 +98,7 @@ export function demoteStatsOverlayBelowDialogs(): boolean {
}
export function suspendStatsWindowLayerForNativeDialog(): void {
nativeDialogLayerSuspensionCount += 1;
if (nativeDialogLayerSuspensionCount !== 1) {
if (!suspendStatsWindowLayer(nativeDialogLayerSuspension)) {
return;
}
@@ -100,16 +106,15 @@ export function suspendStatsWindowLayerForNativeDialog(): void {
}
export function restoreStatsWindowLayerAfterNativeDialog(): void {
if (nativeDialogLayerSuspensionCount <= 0) {
return;
}
nativeDialogLayerSuspensionCount -= 1;
if (nativeDialogLayerSuspensionCount === 0) {
if (restoreStatsWindowLayer(nativeDialogLayerSuspension)) {
promoteStatsOverlayAbovePlayback();
}
}
function resetStatsWindowLayerAfterLifecycleEnd(): void {
resetStatsWindowLayerSuspension(nativeDialogLayerSuspension);
}
export async function withStatsWindowLayerSuspendedForNativeDialog<T>(
showDialog: () => Promise<T>,
): Promise<T> {
@@ -172,6 +177,7 @@ export function toggleStatsOverlay(options: StatsWindowOptions): void {
statsWindow.on('closed', () => {
options.onVisibilityChanged?.(false);
statsWindow = null;
resetStatsWindowLayerAfterLifecycleEnd();
});
statsWindow.webContents.on('before-input-event', (event, input) => {
@@ -222,4 +228,5 @@ export function destroyStatsWindow(): void {
statsWindow.destroy();
statsWindow = null;
}
resetStatsWindowLayerAfterLifecycleEnd();
}