mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-07-07 13:08:54 -07:00
fix(overlay): prevent field grouping modal from freezing overlay on Hyprland (#138)
This commit is contained in:
@@ -36,3 +36,50 @@ test('field grouping overlay main deps builder maps window visibility and resolv
|
||||
assert.equal(deps.sendToVisibleOverlay('kiku:open', 1), true);
|
||||
assert.deepEqual(calls, ['visible:true', 'set-resolver:null', 'send:kiku:open:1']);
|
||||
});
|
||||
|
||||
test('field grouping overlay main deps builder forwards modal open/teardown/prereq wiring', () => {
|
||||
// Regression: these are optional on the runtime options, so a missing forward compiled
|
||||
// silently and left the field grouping modal with no ack/retry, no teardown, and no prereqs —
|
||||
// the reason the earlier recovery fixes never took effect.
|
||||
const calls: string[] = [];
|
||||
const waitForModalOpen = async (modal: 'kiku', timeoutMs: number): Promise<boolean> => {
|
||||
calls.push(`wait:${modal}:${timeoutMs}`);
|
||||
return true;
|
||||
};
|
||||
const handleOverlayModalClosed = (modal: 'kiku'): void => {
|
||||
calls.push(`closed:${modal}`);
|
||||
};
|
||||
const logWarn = (message: string): void => {
|
||||
calls.push(`warn:${message}`);
|
||||
};
|
||||
const ensureOverlayStartupPrereqs = (): void => {
|
||||
calls.push('prereqs');
|
||||
};
|
||||
const ensureOverlayWindowsReadyForVisibilityActions = (): void => {
|
||||
calls.push('windows-ready');
|
||||
};
|
||||
|
||||
const deps = createBuildFieldGroupingOverlayMainDepsHandler<'kiku'>({
|
||||
getMainWindow: () => null,
|
||||
getVisibleOverlayVisible: () => false,
|
||||
setVisibleOverlayVisible: () => {},
|
||||
getResolver: () => null,
|
||||
setResolver: () => {},
|
||||
getRestoreVisibleOverlayOnModalClose: () => new Set<'kiku'>(),
|
||||
waitForModalOpen,
|
||||
handleOverlayModalClosed,
|
||||
logWarn,
|
||||
ensureOverlayStartupPrereqs,
|
||||
ensureOverlayWindowsReadyForVisibilityActions,
|
||||
sendToActiveOverlayWindow: () => true,
|
||||
})();
|
||||
|
||||
assert.equal(deps.waitForModalOpen, waitForModalOpen);
|
||||
assert.equal(deps.handleOverlayModalClosed, handleOverlayModalClosed);
|
||||
assert.equal(deps.logWarn, logWarn);
|
||||
assert.equal(deps.ensureOverlayStartupPrereqs, ensureOverlayStartupPrereqs);
|
||||
assert.equal(
|
||||
deps.ensureOverlayWindowsReadyForVisibilityActions,
|
||||
ensureOverlayWindowsReadyForVisibilityActions,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -28,6 +28,15 @@ export function createBuildFieldGroupingOverlayMainDepsHandler<TModal extends st
|
||||
getResolver: () => deps.getResolver(),
|
||||
setResolver: (resolver) => deps.setResolver(resolver),
|
||||
getRestoreVisibleOverlayOnModalClose: () => deps.getRestoreVisibleOverlayOnModalClose(),
|
||||
// These are optional on the runtime options, so a missing forward compiles silently — but
|
||||
// dropping them left the field grouping modal with no modal-open ack/retry, no teardown on
|
||||
// failure, and no warn logging, which is why the earlier recovery fixes never took effect.
|
||||
waitForModalOpen: deps.waitForModalOpen,
|
||||
handleOverlayModalClosed: deps.handleOverlayModalClosed,
|
||||
logWarn: deps.logWarn,
|
||||
ensureOverlayStartupPrereqs: deps.ensureOverlayStartupPrereqs,
|
||||
ensureOverlayWindowsReadyForVisibilityActions:
|
||||
deps.ensureOverlayWindowsReadyForVisibilityActions,
|
||||
sendToVisibleOverlay: (
|
||||
channel: string,
|
||||
payload?: unknown,
|
||||
|
||||
@@ -26,8 +26,9 @@ test('overlay modal runtime main deps builder maps window resolvers', () => {
|
||||
getModalWindow: () => modalWindow as never,
|
||||
createModalWindow: () => modalWindow as never,
|
||||
getModalGeometry: () => ({ x: 1, y: 2, width: 3, height: 4 }),
|
||||
setModalWindowBounds: (geometry) =>
|
||||
calls.push(`modal-bounds:${geometry.x},${geometry.y},${geometry.width},${geometry.height}`),
|
||||
setModalWindowBounds: (geometry) => {
|
||||
calls.push(`modal-bounds:${geometry.x},${geometry.y},${geometry.width},${geometry.height}`);
|
||||
},
|
||||
})();
|
||||
|
||||
assert.equal(deps.getMainWindow(), mainWindow);
|
||||
|
||||
Reference in New Issue
Block a user