fix(applauncher): throttle inactivity timer resets in menus, optimize sound slider updates, and adjust keyboard layout/keys

This commit is contained in:
2026-01-06 09:58:40 +00:00
parent dcc3e18474
commit 79f41a6001
6 changed files with 64 additions and 9 deletions

View File

@@ -249,6 +249,7 @@ export class EcoApplauncherSoundmenu extends DeesElement {
private isDragging = false;
private inactivityTimeout: ReturnType<typeof setTimeout> | null = null;
private readonly INACTIVITY_TIMEOUT = 60000; // 1 minute
private lastActivityTime = 0;
public render(): TemplateResult {
const volumeIcon = this.getVolumeIcon();
@@ -256,7 +257,6 @@ export class EcoApplauncherSoundmenu extends DeesElement {
return html`
<div class="menu-container"
@click=${(e: MouseEvent) => e.stopPropagation()}
@mousemove=${this.resetInactivityTimer}
@mousedown=${this.resetInactivityTimer}
>
<div class="menu-header">
@@ -368,16 +368,34 @@ export class EcoApplauncherSoundmenu extends DeesElement {
private handleSliderMouseDown(e: MouseEvent): void {
this.isDragging = true;
const slider = e.currentTarget as HTMLElement;
let rafId: number | null = null;
let pendingPercentage: number | null = null;
const updateVolume = () => {
if (pendingPercentage !== null) {
this.setVolume(pendingPercentage);
pendingPercentage = null;
}
rafId = null;
};
const handleMouseMove = (moveEvent: MouseEvent) => {
if (!this.isDragging) return;
const rect = slider.getBoundingClientRect();
const percentage = Math.round(((moveEvent.clientX - rect.left) / rect.width) * 100);
this.setVolume(Math.max(0, Math.min(100, percentage)));
pendingPercentage = Math.max(0, Math.min(100, Math.round(((moveEvent.clientX - rect.left) / rect.width) * 100)));
if (!rafId) {
rafId = requestAnimationFrame(updateVolume);
}
};
const handleMouseUp = () => {
this.isDragging = false;
if (rafId) {
cancelAnimationFrame(rafId);
}
if (pendingPercentage !== null) {
this.setVolume(pendingPercentage);
}
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseup', handleMouseUp);
};
@@ -421,6 +439,12 @@ export class EcoApplauncherSoundmenu extends DeesElement {
}
private resetInactivityTimer(): void {
const now = Date.now();
// Throttle: only reset if 5+ seconds since last reset
if (now - this.lastActivityTime < 5000) {
return;
}
this.lastActivityTime = now;
this.clearInactivityTimer();
if (this.open) {
this.inactivityTimeout = setTimeout(() => {