diff options
-rw-r--r-- | client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java b/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java index ad7a192d14..fc230c2425 100644 --- a/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java @@ -142,6 +142,8 @@ public class UIConnector extends AbstractSingleComponentContainerConnector } }; + private boolean firstSizeReported; + @Override protected void init() { super.init(); @@ -200,11 +202,25 @@ public class UIConnector extends AbstractSingleComponentContainerConnector }-*/; }); + // Used to avoid choking server with hundreds of resize events when user + // changes the window size + Timer lazyFlusher = new Timer() { + @Override + public void run() { + getConnection().getServerRpcQueue().flush(); + } + }; + getWidget().addResizeHandler(event -> { getRpcProxy(UIServerRpc.class).resize(event.getWidth(), event.getHeight(), Window.getClientWidth(), Window.getClientHeight()); - getConnection().getServerRpcQueue().flush(); + if(!firstSizeReported) { + firstSizeReported = true; + getConnection().getServerRpcQueue().flush(); + } else { + lazyFlusher.schedule(100); + } }); getWidget().addScrollHandler(new ScrollHandler() { private int lastSentScrollTop = Integer.MAX_VALUE; @@ -415,8 +431,7 @@ public class UIConnector extends AbstractSingleComponentContainerConnector if (firstPaint) { // Queue the initial window size to be sent with the following // request. - Scheduler.get() - .scheduleDeferred(() -> ui.sendClientResized()); + Scheduler.get().scheduleDeferred(() -> ui.sendClientResized()); } } @@ -1189,4 +1204,4 @@ public class UIConnector extends AbstractSingleComponentContainerConnector conf['dragImageCenterOnTouch'] = true; $wnd.DragDropPolyfill.Initialize(conf); }-*/; -}
\ No newline at end of file +} |