fix: debounce on_resize to prevent audio stutter

This commit is contained in:
Username
2026-02-28 14:18:18 +01:00
parent 2e70e73086
commit 67467c846c

View File

@@ -447,6 +447,8 @@ class TuimbleApp(App):
self._device_monitor = DeviceMonitor(self._on_device_change)
self._pending_reload: Config | None = None
self._tree_refresh_timer = None
self._resize_timer = None
self._pending_width: int = 80
self._reconnect = ReconnectManager(
connect_fn=self._reconnect_connect,
on_attempt=self._reconnect_on_attempt,
@@ -1049,9 +1051,20 @@ class TuimbleApp(App):
# -- resize --------------------------------------------------------------
def on_resize(self, event: events.Resize) -> None:
"""Adapt layout to new terminal dimensions."""
"""Adapt layout to new terminal dimensions (debounced)."""
self._pending_width = event.size.width
if self._resize_timer is not None:
self._resize_timer.stop()
self._resize_timer = self.set_timer(
TREE_DEBOUNCE, self._apply_resize
)
def _apply_resize(self) -> None:
"""Apply deferred resize — keeps event loop free during drag."""
self._resize_timer = None
w = self._pending_width
sidebar = self.query_one("#sidebar", ChannelTree)
sidebar.styles.width = max(16, min(32, event.size.width // 4))
sidebar.styles.width = max(16, min(32, w // 4))
self.query_one("#status", StatusBar).refresh()
# -- lifecycle -----------------------------------------------------------