From 66f3bc6dc70e999f3a35b238dd26de4106bd25b6 Mon Sep 17 00:00:00 2001 From: Andreas Koch Date: Fri, 26 Sep 2025 15:15:03 +0200 Subject: [PATCH] Scale IBF on shell:resize after async ZoomChanged This commit adapts ImageBasedFrame scaling to be triggered when it's Shell recieves a resize event after ZoomChanged event on its wrapped control. This will correct an inconsistent refresh when the ZoomChanged events are handled asynchronously. --- .../src/org/eclipse/e4/ui/widgets/ImageBasedFrame.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.e4.ui.widgets/src/org/eclipse/e4/ui/widgets/ImageBasedFrame.java b/bundles/org.eclipse.e4.ui.widgets/src/org/eclipse/e4/ui/widgets/ImageBasedFrame.java index 90907b67dd1..f1fc548bcc3 100644 --- a/bundles/org.eclipse.e4.ui.widgets/src/org/eclipse/e4/ui/widgets/ImageBasedFrame.java +++ b/bundles/org.eclipse.e4.ui.widgets/src/org/eclipse/e4/ui/widgets/ImageBasedFrame.java @@ -27,6 +27,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; @@ -71,6 +72,7 @@ public ImageBasedFrame(Composite parent, Control toWrap, boolean vertical, }); toWrap.addListener(SWT.ZoomChanged, event -> { + Shell shell = parent.getShell(); final AtomicReference scaleOnParentResize = new AtomicReference<>(); scaleOnParentResize.set(e -> { if (isDisposed()) { @@ -79,9 +81,9 @@ public ImageBasedFrame(Composite parent, Control toWrap, boolean vertical, toWrap.pack(true); setFramedControlLocation(); parent.layout(); - parent.removeListener(SWT.Resize, scaleOnParentResize.get()); + shell.removeListener(SWT.Resize, scaleOnParentResize.get()); }); - parent.addListener(SWT.Resize, scaleOnParentResize.get()); + shell.addListener(SWT.Resize, scaleOnParentResize.get()); }); addMouseMoveListener(e -> {