Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2021-09-23 05:26:26 +0000
committerMickael Istria2021-09-23 06:58:05 +0000
commitf9f01df39afba745eee8d5434c9ad5eb179300dd (patch)
tree1d01bc532b178608a488437f3b7428c72cde51df
parent5f3f142c7a1d42bc282f18ebeb54e3df44c16bc3 (diff)
downloadeclipse.platform.ui-f9f01df39afba745eee8d5434c9ad5eb179300dd.tar.gz
eclipse.platform.ui-f9f01df39afba745eee8d5434c9ad5eb179300dd.tar.xz
eclipse.platform.ui-f9f01df39afba745eee8d5434c9ad5eb179300dd.zip
Bug 553353 - Project Explorer hides contributed projects (EmptyWorkspaceHelper)I20210924-0200I20210923-1800
Change-Id: Icdfe657c352601283ec26c8fc5908a1ee103cc4b Signed-off-by: Eike Stepper <stepper@esc-net.de> Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.ui/+/185718 Tested-by: Platform Bot <platform-bot@eclipse.org> Reviewed-by: Matthias Becker <ma.becker@sap.com> Reviewed-by: Mickael Istria <mistria@redhat.com>
-rw-r--r--bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/helpers/EmptyWorkspaceHelper.java58
1 files changed, 18 insertions, 40 deletions
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/helpers/EmptyWorkspaceHelper.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/helpers/EmptyWorkspaceHelper.java
index 8d52b262865..f2398a1f61e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/helpers/EmptyWorkspaceHelper.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/helpers/EmptyWorkspaceHelper.java
@@ -15,12 +15,6 @@ package org.eclipse.ui.internal.views.helpers;
import java.util.ArrayList;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.layout.GridDataFactory;
@@ -39,8 +33,10 @@ import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveListener;
import org.eclipse.ui.ISharedImages;
@@ -97,7 +93,8 @@ public final class EmptyWorkspaceHelper {
private Composite parent;
private Composite emptyArea;
private StackLayout layout;
- private Control control;
+ private Tree control;
+ private boolean controlIsEmpty;
private Composite displayArea;
private ArrayList<IAction> projectWizardActions;
private IAction newProjectAction;
@@ -108,7 +105,7 @@ public final class EmptyWorkspaceHelper {
* This method should be called at the point in time when the view's controls
* are created.
*
- * @param parent The composite where the explanatory text should be put into.
+ * @param aParent The composite where the explanatory text should be put into.
* @return A new composite (a child of "parent") that has to be used by
* consumers as parent for their UI elements
*/
@@ -120,7 +117,6 @@ public final class EmptyWorkspaceHelper {
displayArea.setLayout(layout);
createEmptyArea(displayArea);
- registerListeners();
return displayArea;
}
@@ -128,12 +124,14 @@ public final class EmptyWorkspaceHelper {
* This method should be used to hand over the "original" control that is
* "normally" visible in the view.
*
- * @param control The "original" control of the view.
+ * @param control The "original" tree control of the view.
*/
public void setNonEmptyControl(Control control) {
- this.control = control;
+ this.control = (Tree) control;
+ controlIsEmpty = this.control.getItemCount() == 0;
emptyArea.setBackground(control.getBackground());
switchTopControl();
+ registerListeners();
}
private void dispose(Listener listener) {
@@ -141,9 +139,9 @@ public final class EmptyWorkspaceHelper {
if (activeWorkbenchWindow != null) {
activeWorkbenchWindow.removePerspectiveListener(listener);
}
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
JFaceResources.getColorRegistry().removeListener(listener);
parent.removeDisposeListener(listener);
+ control.removeListener(SWT.EmptinessChanged, listener);
// paranoia
parent = null;
@@ -162,7 +160,7 @@ public final class EmptyWorkspaceHelper {
if (activeWorkbenchWindow != null) {
activeWorkbenchWindow.addPerspectiveListener(listener);
}
- ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
+ control.addListener(SWT.EmptinessChanged, listener);
JFaceResources.getColorRegistry().addListener(listener);
parent.addDisposeListener(listener);
}
@@ -309,8 +307,7 @@ public final class EmptyWorkspaceHelper {
return false;
}
Control oldTop = layout.topControl;
- IProject[] projs = ResourcesPlugin.getWorkspace().getRoot().getProjects();
- if (projs.length > 0) {
+ if (!controlIsEmpty) {
layout.topControl = control;
disposeEmptyArea();
} else {
@@ -323,32 +320,14 @@ public final class EmptyWorkspaceHelper {
}
private class Listener
- implements IResourceChangeListener, IPerspectiveListener, IPropertyChangeListener, DisposeListener {
+ implements org.eclipse.swt.widgets.Listener, //
+ IPerspectiveListener, IPropertyChangeListener, DisposeListener {
- /**
- * Listener to switch between the "original" control and the empty area. If no
- * projects exist in the workspace the empty area is shown. If at least one
- * project exists in the workspace the "original" control is shown.
- *
- * @noreference This method is not intended to be referenced by clients.
- */
@Override
- public void resourceChanged(IResourceChangeEvent event) {
-
- IResourceDelta resourceDelta = event.getDelta();
- if (resourceDelta != null) {
-
- IResourceDelta[] affectedChildren = resourceDelta.getAffectedChildren();
- for (IResourceDelta affectedChildResourceDelta : affectedChildren) {
- IResource resource = affectedChildResourceDelta.getResource();
- int kind = affectedChildResourceDelta.getKind();
- if (resource instanceof IProject
- && (kind == IResourceDelta.ADDED || kind == IResourceDelta.REMOVED)) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(
- () -> PlatformUI.getWorkbench().getDisplay().timerExec(200, switchTopControlRunnable));
- return;
- }
- }
+ public void handleEvent(Event e) {
+ if (e.type == SWT.EmptinessChanged) {
+ controlIsEmpty = e.detail == 1;
+ switchTopControlRunnable.run();
}
}
@@ -390,7 +369,6 @@ public final class EmptyWorkspaceHelper {
public void widgetDisposed(DisposeEvent e) {
dispose(this);
}
-
}
private static class ImportAction extends Action {

Back to the top