fix(applauncher): throttle inactivity timer resets in menus, optimize sound slider updates, and adjust keyboard layout/keys
This commit is contained in:
@@ -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(() => {
|
||||
|
||||
Reference in New Issue
Block a user