Improve startup dictionary progress and fix overlay/plugin input handlin

- show a dedicated startup OSD "building" phase for character dictionary sync
- forward bare `Tab` from visible overlay to mpv so AniSkip works while focused
- fix Windows plugin env override resolution for `SUBMINER_BINARY_PATH`
This commit is contained in:
2026-03-09 02:35:03 -07:00
parent e0f82d28f0
commit e59192bbe1
28 changed files with 577 additions and 104 deletions

View File

@@ -0,0 +1,84 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import {
handleOverlayWindowBeforeInputEvent,
isTabInputForMpvForwarding,
} from './overlay-window-input';
test('isTabInputForMpvForwarding matches bare Tab keydown only', () => {
assert.equal(
isTabInputForMpvForwarding({
type: 'keyDown',
key: 'Tab',
code: 'Tab',
} as Electron.Input),
true,
);
assert.equal(
isTabInputForMpvForwarding({
type: 'keyDown',
key: 'Tab',
code: 'Tab',
shift: true,
} as Electron.Input),
false,
);
assert.equal(
isTabInputForMpvForwarding({
type: 'keyUp',
key: 'Tab',
code: 'Tab',
} as Electron.Input),
false,
);
});
test('handleOverlayWindowBeforeInputEvent forwards Tab to mpv for visible overlays', () => {
const calls: string[] = [];
const handled = handleOverlayWindowBeforeInputEvent({
kind: 'visible',
windowVisible: true,
input: {
type: 'keyDown',
key: 'Tab',
code: 'Tab',
} as Electron.Input,
preventDefault: () => calls.push('prevent-default'),
sendKeyboardModeToggleRequested: () => calls.push('keyboard-mode'),
sendLookupWindowToggleRequested: () => calls.push('lookup-toggle'),
tryHandleOverlayShortcutLocalFallback: () => {
calls.push('fallback');
return false;
},
forwardTabToMpv: () => calls.push('forward-tab'),
});
assert.equal(handled, true);
assert.deepEqual(calls, ['prevent-default', 'forward-tab']);
});
test('handleOverlayWindowBeforeInputEvent leaves modal Tab handling alone', () => {
const calls: string[] = [];
const handled = handleOverlayWindowBeforeInputEvent({
kind: 'modal',
windowVisible: true,
input: {
type: 'keyDown',
key: 'Tab',
code: 'Tab',
} as Electron.Input,
preventDefault: () => calls.push('prevent-default'),
sendKeyboardModeToggleRequested: () => calls.push('keyboard-mode'),
sendLookupWindowToggleRequested: () => calls.push('lookup-toggle'),
tryHandleOverlayShortcutLocalFallback: () => {
calls.push('fallback');
return false;
},
forwardTabToMpv: () => calls.push('forward-tab'),
});
assert.equal(handled, false);
assert.deepEqual(calls, []);
});