fix(overlay): prevent Windows mouse lag during click-through tracking (#201)

This commit is contained in:
2026-08-16 01:34:51 -07:00
committed by GitHub
parent 82f6b4705a
commit 2938e7a32a
12 changed files with 206 additions and 65 deletions
+4 -3
View File
@@ -2,6 +2,7 @@ import type { BrowserWindow } from 'electron';
import type { OverlayHostedModal } from '../shared/ipc/contracts';
import type { WindowGeometry } from '../types';
import type { HyprlandPlacementStatus } from '../core/services/hyprland-window-placement';
import { applyOverlayClickThrough } from '../core/services/overlay-click-through';
import {
OVERLAY_WINDOW_CONTENT_READY_FLAG,
OVERLAY_WINDOW_DOCUMENT_LOADED_FLAG,
@@ -299,7 +300,7 @@ export function createOverlayModalRuntimeService(
}
elevateModalWindow(window);
if (options.passThroughMouseEvents) {
window.setIgnoreMouseEvents(true, { forward: true });
applyOverlayClickThrough(window, platform === 'win32');
} else {
window.setIgnoreMouseEvents(false);
}
@@ -360,7 +361,7 @@ export function createOverlayModalRuntimeService(
mainWindowMousePassthroughForcedByModal = false;
return;
}
mainWindow.setIgnoreMouseEvents(true, { forward: true });
applyOverlayClickThrough(mainWindow, platform === 'win32');
mainWindowMousePassthroughForcedByModal = true;
return;
}
@@ -517,7 +518,7 @@ export function createOverlayModalRuntimeService(
clearPendingModalWindowReveal();
if (modalWindow && !modalWindow.isDestroyed()) {
if (reuseModalWindowAfterClose) {
modalWindow.setIgnoreMouseEvents(true, { forward: true });
applyOverlayClickThrough(modalWindow, false);
modalWindow.hide();
markModalWindowPrimed(modalWindow);
} else {
+3 -1
View File
@@ -1,3 +1,5 @@
import { applyOverlayClickThrough } from '../../core/services/overlay-click-through';
type StatsOverlayVisibilityWindow = {
isDestroyed: () => boolean;
isVisible: () => boolean;
@@ -8,7 +10,7 @@ function makeOverlayMousePassive(window: StatsOverlayVisibilityWindow | null): v
if (!window || window.isDestroyed() || !window.isVisible()) {
return;
}
window.setIgnoreMouseEvents(true, { forward: true });
applyOverlayClickThrough(window);
}
export function createStatsOverlayVisibilityChangeHandler(deps: {
@@ -1,6 +1,7 @@
import { type BrowserWindow, screen } from 'electron';
import { execFile } from 'node:child_process';
import { startOverlayWindowTracker as startOverlayWindowTrackerCore } from '../../core/services';
import { applyOverlayClickThrough } from '../../core/services/overlay-click-through';
import { isHeadlessInitialCommand, type CliArgs } from '../../cli/args';
import type { OverlayContentMeasurement, WindowGeometry } from '../../types';
import { createWindowTracker as createWindowTrackerCore } from '../../window-trackers';
@@ -603,7 +604,7 @@ export function createVisibleOverlayInteractionRuntime(deps: VisibleOverlayInter
if (active) {
mainWindow.setIgnoreMouseEvents(false);
} else {
mainWindow.setIgnoreMouseEvents(true, { forward: true });
applyOverlayClickThrough(mainWindow);
}
}