mirror of
https://github.com/tuxdotrs/tpanel.git
synced 2025-10-10 04:41:55 +05:30
51 lines
1016 B
TypeScript
51 lines
1016 B
TypeScript
import GLib from "gi://GLib";
|
|
|
|
type TimeoutManager = {
|
|
setupTimeout: () => void;
|
|
clearTimeout: () => void;
|
|
handleHover: () => void;
|
|
handleHoverLost: () => void;
|
|
cleanup: () => void;
|
|
};
|
|
|
|
export const createTimeoutManager = (
|
|
dismissCallback: () => void,
|
|
timeoutDelay: number,
|
|
): TimeoutManager => {
|
|
let isHovered = false;
|
|
let timeoutId: number | null = null;
|
|
|
|
const clearTimeout = () => {
|
|
if (timeoutId !== null) {
|
|
GLib.source_remove(timeoutId);
|
|
timeoutId = null;
|
|
}
|
|
};
|
|
|
|
const setupTimeout = () => {
|
|
clearTimeout();
|
|
|
|
if (!isHovered) {
|
|
timeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, timeoutDelay, () => {
|
|
clearTimeout();
|
|
dismissCallback();
|
|
return GLib.SOURCE_REMOVE;
|
|
});
|
|
}
|
|
};
|
|
|
|
return {
|
|
setupTimeout,
|
|
clearTimeout,
|
|
handleHover: () => {
|
|
isHovered = true;
|
|
clearTimeout();
|
|
},
|
|
handleHoverLost: () => {
|
|
isHovered = false;
|
|
setupTimeout();
|
|
},
|
|
cleanup: clearTimeout,
|
|
};
|
|
};
|