fix: debounce on_resize to prevent audio stutter
This commit is contained in:
@@ -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 -----------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user