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._device_monitor = DeviceMonitor(self._on_device_change)
|
||||||
self._pending_reload: Config | None = None
|
self._pending_reload: Config | None = None
|
||||||
self._tree_refresh_timer = None
|
self._tree_refresh_timer = None
|
||||||
|
self._resize_timer = None
|
||||||
|
self._pending_width: int = 80
|
||||||
self._reconnect = ReconnectManager(
|
self._reconnect = ReconnectManager(
|
||||||
connect_fn=self._reconnect_connect,
|
connect_fn=self._reconnect_connect,
|
||||||
on_attempt=self._reconnect_on_attempt,
|
on_attempt=self._reconnect_on_attempt,
|
||||||
@@ -1049,9 +1051,20 @@ class TuimbleApp(App):
|
|||||||
# -- resize --------------------------------------------------------------
|
# -- resize --------------------------------------------------------------
|
||||||
|
|
||||||
def on_resize(self, event: events.Resize) -> None:
|
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 = 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()
|
self.query_one("#status", StatusBar).refresh()
|
||||||
|
|
||||||
# -- lifecycle -----------------------------------------------------------
|
# -- lifecycle -----------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user