34 lines
948 B
TypeScript
34 lines
948 B
TypeScript
|
|
import { useEffect } from "react";
|
||
|
|
import { netcattyBridge } from "../../infrastructure/services/netcattyBridge";
|
||
|
|
import { installTerminalKeyboardFocusTracking } from "./terminalKeyboardFocus";
|
||
|
|
|
||
|
|
export function useTerminalKeyboardFocus(enabled = true): void {
|
||
|
|
useEffect(() => {
|
||
|
|
if (!enabled) return undefined;
|
||
|
|
const bridge = netcattyBridge.get();
|
||
|
|
if (!bridge?.setTerminalKeyboardFocus) return undefined;
|
||
|
|
|
||
|
|
let lastPublished: boolean | undefined;
|
||
|
|
const publish = (focused: boolean) => {
|
||
|
|
if (focused === lastPublished) return;
|
||
|
|
lastPublished = focused;
|
||
|
|
try {
|
||
|
|
bridge.setTerminalKeyboardFocus?.(focused);
|
||
|
|
} catch {
|
||
|
|
// Browser preview or a disposed Electron bridge.
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const cleanupTracking = installTerminalKeyboardFocusTracking(
|
||
|
|
document,
|
||
|
|
window,
|
||
|
|
publish,
|
||
|
|
);
|
||
|
|
|
||
|
|
return () => {
|
||
|
|
cleanupTracking();
|
||
|
|
publish(false);
|
||
|
|
};
|
||
|
|
}, [enabled]);
|
||
|
|
}
|