From b3ebbae66ddabb366bcc70246c5ef12d3a0ee6dc Mon Sep 17 00:00:00 2001 From: Jakob Pinterits Date: Tue, 28 May 2024 21:01:25 +0200 Subject: [PATCH] window resize event bugfix --- frontend/code/app.ts | 9 +++++---- frontend/code/eventRateLimiter.ts | 3 ++- rio/session.py | 13 ++++++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/frontend/code/app.ts b/frontend/code/app.ts index 9278ecb3..9bf9cc5b 100644 --- a/frontend/code/app.ts +++ b/frontend/code/app.ts @@ -1,4 +1,5 @@ import { getComponentByElement } from './componentManagement'; +import { eventRateLimiter } from './eventRateLimiter'; import { updateLayout } from './layouting'; import { callRemoteMethodDiscardResponse, initWebsocket } from './rpc'; import { scrollToUrlFragment } from './utils'; @@ -55,17 +56,17 @@ export let pixelsPerRem = 16; export let scrollBarSize = SCROLL_BAR_SIZE_IN_PIXELS / pixelsPerRem; let notifyBackendOfWindowSizeChange = eventRateLimiter( - (newWidth: number, newHeight: number) => { + (newWidthPx: number, newHeightPx: number) => { try { callRemoteMethodDiscardResponse('onWindowSizeChange', { - newWidth: newWidth, - newHeight: newHeight, + newWidth: newWidthPx / pixelsPerRem, + newHeight: newHeightPx / pixelsPerRem, }); } catch (e) { console.warn(`Couldn't notify backend of window resize: ${e}`); } }, - 250 + 500 ); function main(): void { diff --git a/frontend/code/eventRateLimiter.ts b/frontend/code/eventRateLimiter.ts index ba941e49..42daf241 100644 --- a/frontend/code/eventRateLimiter.ts +++ b/frontend/code/eventRateLimiter.ts @@ -8,7 +8,7 @@ * @param delay - The delay in milliseconds between function calls. * @returns A function that removes the event listener. */ -function eventRateLimiter( +export function eventRateLimiter( callback: (...args: any[]) => void, delay: number ): (...args: any[]) => void { @@ -22,6 +22,7 @@ function eventRateLimiter( // If a timeout is already set, do nothing if (timeout) { + console.trace('Eating'); return; } diff --git a/rio/session.py b/rio/session.py index e3090908..88b895c5 100644 --- a/rio/session.py +++ b/rio/session.py @@ -800,13 +800,20 @@ window.history.{method}(null, "", {json.dumps(str(active_page_url))}) ) # Trigger the `on_page_change` event + # async def worker(): for component, callbacks in self._page_change_callbacks.items(): for callback in callbacks: + print(f"Starting with current url {self.active_page_url}") self.create_task( self._call_event_handler(callback, component, refresh=True), name="`on_page_change` event handler", ) + # self.create_task( + # worker(), + # name="Trigger `on_page_change` event", + # ) + def _register_dirty_component( self, component: rio.Component, @@ -2431,8 +2438,8 @@ a.remove(); Called by the client when the window is resized. """ # Update the stored window size - self._window_width = new_width - self._window_height = new_height + self.window_width = new_width + self.window_height = new_height # Trigger the `on_page_size_change` event for ( @@ -2442,5 +2449,5 @@ a.remove(); for callback in callbacks: self.create_task( self._call_event_handler(callback, component, refresh=True), - name="`on_on_window_size_change_change` event handler", + name="`on_on_window_size_change` event handler", )