Fixed bug 375576: Controls are not fully realized when partOpened(...)
and partActivated(...) are called
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
index e0e289c..3f5a8e7 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
@@ -4285,6 +4285,7 @@
}
private void firePartActivated(MPart part) {
+
Object client = part.getObject();
if (client instanceof CompatibilityPart) {
final IWorkbenchPart workbenchPart = ((CompatibilityPart) client).getPart();
@@ -4294,6 +4295,16 @@
return;
}
+ if (partListenerList.size() + partListener2List.size() == 0)
+ return;
+
+ // Flush deferred layouts if needed, see bug 375576 for details
+ Object widget = part.getWidget();
+ if (widget instanceof Composite) {
+ Composite parent = (Composite) widget;
+ parent.getDisplay().readAndDispatch();
+ }
+
for (final Object listener : partListenerList.getListeners()) {
SafeRunner.run(new SafeRunnable() {
public void run() throws Exception {
@@ -4343,6 +4354,16 @@
SaveablesList saveablesList = (SaveablesList) getWorkbenchWindow().getService(
ISaveablesLifecycleListener.class);
saveablesList.postOpen(part);
+
+ if (partListenerList.size() + partListener2List.size() == 0)
+ return;
+
+ // Flush deferred layouts if needed, see bug 375576 for details
+ MPart model = compatibilityPart.getModel();
+ if (model != null && (model.getWidget() instanceof Composite)) {
+ Composite parent = (Composite) model.getWidget();
+ parent.getDisplay().readAndDispatch();
+ }
for (final Object listener : partListenerList.getListeners()) {
SafeRunner.run(new SafeRunnable() {
@@ -4433,6 +4454,16 @@
final IWorkbenchPart workbenchPart = ((CompatibilityPart) client).getPart();
final IWorkbenchPartReference partReference = getReference(workbenchPart);
+ if (partListenerList.size() + partListener2List.size() == 0)
+ return;
+
+ // Flush deferred layouts if needed, see bug 375576 for details
+ Object widget = part.getWidget();
+ if (widget instanceof Composite) {
+ Composite parent = (Composite) widget;
+ parent.getDisplay().readAndDispatch();
+ }
+
for (final Object listener : partListenerList.getListeners()) {
SafeRunner.run(new SafeRunnable() {
public void run() throws Exception {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
index f0d3108..c5455cf 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityEditor.java
@@ -127,10 +127,6 @@
}
}
- // Flush ant deferred layouts and do an explicit one...see bug 375576
- parent.getDisplay().readAndDispatch();
- parent.layout(true, true);
-
return true;
}