Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -346,16 +346,13 @@ private void subscribeRenderingChanged(
int visCount = modelService.countRenderableChildren(container);

// Remove stacks with no visible children from the display (but not the
// model)
final MElementContainer<MUIElement> theContainer = container;
if (visCount == 0) {
Display.getCurrent().asyncExec(() -> {
int visCount1 = modelService.countRenderableChildren(theContainer);
if (!isLastEditorStack(theContainer) && visCount1 == 0) {
theContainer.setToBeRendered(false);
transferPrimaryDataStackIfRemoved(theContainer);
}
});
// model). Since event delivery is synchronous (EventBroker.send via
// EventAdmin.sendEvent and Display.syncExec), the visCount reflects
// the actual state at the time of this event and can be acted upon
// immediately without deferring via asyncExec.
if (visCount == 0 && !isLastEditorStack(container)) {
container.setToBeRendered(false);
transferPrimaryDataStackIfRemoved(container);
} else if (container.getParent() != null) { // omit detached windows
// if there are rendered elements but none are 'visible' we should
// make the container invisible as well
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.tests.harness.util.DisplayHelper;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
Expand Down Expand Up @@ -2447,12 +2446,9 @@ public void ensureCleanUpAddonCleansUp() {
assertTrue(partStackForPartBPartC.isToBeRendered(), " PartStack with children should be rendered");
partService.hidePart(partB);
partService.hidePart(partC);
// DisplayHelper.waitForCondition() handles event processing via Display.sleep()
// and retries. Calling spinEventLoop() here creates a race condition where
// events may be processed before CleanupAddon's asyncExec() is queued (line 352).
assertTrue(
DisplayHelper.waitForCondition(Display.getDefault(), 30_000,
() -> !partStackForPartBPartC.isToBeRendered()), "CleanupAddon should ensure that partStack is not rendered anymore, as all childs have been removed");
contextRule.spinEventLoop();
assertFalse(partStackForPartBPartC.isToBeRendered(),
"CleanupAddon should ensure that partStack is not rendered anymore, as all childs have been removed");
// PartStack with IPresentationEngine.NO_AUTO_COLLAPSE should not be removed
// even if children are removed
partService.hidePart(editor, true);
Expand Down
Loading