From 85085345007421b23d0df6697265c11c8fa4d6a5 Mon Sep 17 00:00:00 2001 From: Vincent Sennedot Date: Mon, 9 Mar 2026 15:46:45 +0100 Subject: [PATCH] ExpandableComposite does not resize upon collapse Pulled up the reflow method from Section to his parent ExpandableComposite and changed the internalSetExpanded method to call reflow() instead of layout() to reflow the composite and all the parents up the hierarchy until a SharedScrolledComposite is reached. --- .../src/org/eclipse/swt/widgets/Shell.java | 5 +++ .../ui/forms/widgets/ExpandableComposite.java | 31 ++++++++++++++++++- .../org/eclipse/ui/forms/widgets/Section.java | 26 +--------------- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java index 1436011d96..24bcc9dcbb 100644 --- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Shell.java @@ -985,6 +985,11 @@ public void removeShellListener( ShellListener listener ) { removeListener( SWT.Activate, listener ); removeListener( SWT.Deactivate, listener ); } + + @Override + public void requestLayout () { + layout (null, SWT.DEFER); + } /////////// // Disposal diff --git a/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java b/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java index 9674fc593b..a490a7688e 100644 --- a/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java +++ b/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/ExpandableComposite.java @@ -38,6 +38,7 @@ import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; @@ -880,7 +881,7 @@ protected void internalSetExpanded(boolean expanded) { getDescriptionControl().setVisible(expanded); if (client != null) client.setVisible(expanded); - layout(); + reflow(); } } @@ -1117,4 +1118,32 @@ private void programmaticToggleState() { // if (toggle.isFocusControl()) // gc.drawFocus(0, 0, size.x, size.y); // } + + void reflow() { + Composite c = this; + while (c != null) { + c.setRedraw(false); + c = c.getParent(); + if (c instanceof SharedScrolledComposite || c instanceof Shell) { + break; + } + } + c = this; + while (c != null) { + c.requestLayout(); + c = c.getParent(); + if (c instanceof SharedScrolledComposite) { + ((SharedScrolledComposite) c).reflow(true); + break; + } + } + c = this; + while (c != null) { + c.setRedraw(true); + c = c.getParent(); + if (c instanceof SharedScrolledComposite || c instanceof Shell) { + break; + } + } + } } diff --git a/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java b/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java index a4a0423424..5dbd6bdf4f 100644 --- a/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java +++ b/bundles/org.eclipse.rap.ui.forms/src/org/eclipse/ui/forms/widgets/Section.java @@ -125,31 +125,7 @@ protected void internalSetExpanded(boolean expanded) { * SharedScrolledComposite is reached. */ protected void reflow() { - Composite c = this; - while (c != null) { - c.setRedraw(false); - c = c.getParent(); - if (c instanceof SharedScrolledComposite || c instanceof Shell) { - break; - } - } - c = this; - while (c != null) { - c.layout(true); - c = c.getParent(); - if (c instanceof SharedScrolledComposite) { - ((SharedScrolledComposite) c).reflow(true); - break; - } - } - c = this; - while (c != null) { - c.setRedraw(true); - c = c.getParent(); - if (c instanceof SharedScrolledComposite || c instanceof Shell) { - break; - } - } + super.reflow(); } /**