Controller: subtitle line actions, Button Style, keyboard-only mode pause, Alt+C fixes (#316)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
YashaNoosandClaude Opus 5.5 authored and GitHub committed 2026-11-02 21:41:46 -08:00
1 parent 6d0f37ac21
commit b99409bbcd
60 files changed
+1900 -219

No files matched your search

+35
View File
@@ -76,6 +76,10 @@ function createControllerConfigFixture() {
holdSecondarySub: { kind: 'none' as const },
previousEntry: { kind: 'none' as const },
nextEntry: { kind: 'none' as const },
previousSubtitle: { kind: 'none' as const },
nextSubtitle: { kind: 'none' as const },
replaySubtitle: { kind: 'none' as const },
playNextSubtitle: { kind: 'none' as const },
leftStickHorizontal: {
kind: 'axis' as const,
axisIndex: 0,
@@ -140,6 +144,8 @@ function createRegisterIpcDeps(overrides: Partial<IpcServiceDeps> = {}): IpcServ
getOverlayNotificationPosition: () => 'top-right',
getControllerConfig: () => createControllerConfigFixture(),
saveControllerConfig: async () => {},
reportActiveController: () => {},
getActiveControllerId: () => null,
getSecondarySubMode: () => 'hover',
getCurrentSecondarySub: () => '',
focusMainWindow: () => {},
@@ -226,6 +232,31 @@ test('registerIpcHandlers maps setIgnoreMouseEvents to overlay interaction activ
assert.deepEqual(calls, ['overlay-interaction:false', 'overlay-interaction:true']);
});
test('registerIpcHandlers stores the controller the overlay reports for Alt+C to ask', async () => {
const { registrar, handlers } = createFakeIpcRegistrar();
let active: string | null = null;
registerIpcHandlers(
createRegisterIpcDeps({
reportActiveController: (gamepadId) => {
active = gamepadId;
},
getActiveControllerId: () => active,
}),
registrar,
);
const report = handlers.on.get(IPC_CHANNELS.command.reportActiveController);
report?.({}, 'pad-1');
report?.({}, 42);
assert.equal(
await handlers.handle.get(IPC_CHANNELS.request.getActiveControllerId)?.({}),
'pad-1',
);
report?.({}, null);
assert.equal(await handlers.handle.get(IPC_CHANNELS.request.getActiveControllerId)?.({}), null);
});
test('registerIpcHandlers runs AniList update after manual mark watched succeeds', async () => {
const { registrar, handlers } = createFakeIpcRegistrar();
const calls: string[] = [];
@@ -328,6 +359,8 @@ test('registerIpcHandlers rejects malformed runtime-option payloads', async () =
getOverlayNotificationPosition: () => 'top-right',
getControllerConfig: () => createControllerConfigFixture(),
saveControllerConfig: () => {},
reportActiveController: () => {},
getActiveControllerId: () => null,
getSecondarySubMode: () => 'hover',
getCurrentSecondarySub: () => '',
focusMainWindow: () => {},
@@ -609,6 +642,8 @@ test('registerIpcHandlers ignores malformed fire-and-forget payloads', () => {
getOverlayNotificationPosition: () => 'top-right',
getControllerConfig: () => createControllerConfigFixture(),
saveControllerConfig: () => {},
reportActiveController: () => {},
getActiveControllerId: () => null,
getSecondarySubMode: () => 'hover',
getCurrentSecondarySub: () => '',
focusMainWindow: () => {},