From 170dbbb74ccce502498014d57c018b376f2ef10f Mon Sep 17 00:00:00 2001 From: sudacode Date: Sun, 4 Oct 2026 00:59:04 -0700 Subject: [PATCH] fix(overlay): treat Hachidori popup host as a lookup target for keys - Match the Hachidori shadow-root host alongside the Yomitan popup host when routing keyboard events - Update the keyboard test stub to use HACHIDORI_HOST_SELECTOR --- src/renderer/handlers/keyboard.test.ts | 4 ++-- src/renderer/handlers/keyboard.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/handlers/keyboard.test.ts b/src/renderer/handlers/keyboard.test.ts index 2e5ea9ba..ab1b1ea0 100644 --- a/src/renderer/handlers/keyboard.test.ts +++ b/src/renderer/handlers/keyboard.test.ts @@ -5,7 +5,7 @@ import test from 'node:test'; import { createKeyboardHandlers } from './keyboard.js'; import { createRendererState } from '../state.js'; -import { YOMITAN_POPUP_HOST_SELECTOR } from '../yomitan-popup.js'; +import { HACHIDORI_HOST_SELECTOR } from '../yomitan-popup.js'; import type { CompiledSessionBinding } from '../../types'; import type { MpvInputBindingsSnapshot } from '../../types/session-bindings'; import { DEFAULT_KEYBINDINGS, SPECIAL_COMMANDS } from '../../config/definitions'; @@ -482,7 +482,7 @@ function installKeyboardTestGlobals() { selector .split(',') .map((part) => part.trim()) - .includes(YOMITAN_POPUP_HOST_SELECTOR) + .includes(HACHIDORI_HOST_SELECTOR) ? target : null; return target; diff --git a/src/renderer/handlers/keyboard.ts b/src/renderer/handlers/keyboard.ts index 0406c748..3785b878 100644 --- a/src/renderer/handlers/keyboard.ts +++ b/src/renderer/handlers/keyboard.ts @@ -83,7 +83,7 @@ export function createKeyboardHandlers( if (ctx.dom.subtitleContainer.contains(target)) return true; if (isYomitanPopupIframe(target)) return true; // Hachidori's popup lives in a shadow root, so its events arrive retargeted to the host. - if (target.closest(YOMITAN_POPUP_HOST_SELECTOR)) return true; + if (target.closest(`${YOMITAN_POPUP_HOST_SELECTOR}, ${HACHIDORI_HOST_SELECTOR}`)) return true; if (target.closest && target.closest('iframe.yomitan-popup, iframe[id^="yomitan-popup"]')) return true; return false;