Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemy Suen2010-07-22 19:22:17 +0000
committerRemy Suen2010-07-22 19:22:17 +0000
commite83268c806f686d7fe0066558bd72913c0b96945 (patch)
tree21a8660c9d9deb89e10ffbbc4b0a6ebd0e0b0087 /bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess
parent36d9f282a335bf1d4ebb0e3797591b87cb8e97e5 (diff)
downloadeclipse.platform.ui-e83268c806f686d7fe0066558bd72913c0b96945.tar.gz
eclipse.platform.ui-e83268c806f686d7fe0066558bd72913c0b96945.tar.xz
eclipse.platform.ui-e83268c806f686d7fe0066558bd72913c0b96945.zip
Bug 318211 [Compatibility] QuickAccess will execute commands in an incorrect context
Diffstat (limited to 'bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess')
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ActionProvider.java5
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandElement.java2
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandProvider.java31
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/EditorProvider.java5
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java6
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java6
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PropertiesProvider.java5
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java9
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java3
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java7
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java59
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java6
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java6
13 files changed, 123 insertions, 27 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ActionProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ActionProvider.java
index f36706f389e..1c70e8a224d 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ActionProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ActionProvider.java
@@ -15,7 +15,6 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
@@ -90,4 +89,8 @@ public class ActionProvider extends QuickAccessProvider {
public String getName() {
return QuickAccessMessages.QuickAccess_Menus;
}
+
+ protected void doReset() {
+ idToElement = null;
+ }
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandElement.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandElement.java
index 36feb01efbb..3437edc89ac 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandElement.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandElement.java
@@ -48,7 +48,7 @@ public class CommandElement extends QuickAccessElement {
Object o = getProvider();
if (o instanceof CommandProvider) {
CommandProvider provider = (CommandProvider) o;
- if (provider.getHandlerService()!=null) {
+ if (provider.getHandlerService() != null && provider.getContextSnapshot() != null) {
try {
provider.getHandlerService().executeCommandInContext(
command, null, provider.getContextSnapshot());
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandProvider.java
index a01bb5776f3..2ab99ae8bab 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/CommandProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,12 +10,10 @@
*******************************************************************************/
package org.eclipse.ui.internal.quickaccess;
-
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.core.commands.common.NotDefinedException;
@@ -33,14 +31,17 @@ import org.eclipse.ui.internal.WorkbenchImages;
*/
public class CommandProvider extends QuickAccessProvider {
+ private IEvaluationContext currentSnapshot;
+
+ void setSnapshot(IEvaluationContext c) {
+ reset();
+ currentSnapshot = c;
+ }
+
private Map idToElement;
- private IEvaluationContext contextSnapshot;
private IHandlerService handlerService;
public CommandProvider() {
- // initialize eagerly
- saveApplicationContext();
- getElements();
}
public String getId() {
@@ -94,16 +95,20 @@ public class CommandProvider extends QuickAccessProvider {
return QuickAccessMessages.QuickAccess_Commands;
}
- private void saveApplicationContext() {
- handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
- contextSnapshot = handlerService.createContextSnapshot(true);
- }
-
IHandlerService getHandlerService() {
+ if (handlerService == null) {
+ handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(
+ IHandlerService.class);
+ }
return handlerService;
}
IEvaluationContext getContextSnapshot() {
- return contextSnapshot;
+ return currentSnapshot;
+ }
+
+ protected void doReset() {
+ idToElement = null;
+ currentSnapshot = null;
}
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/EditorProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/EditorProvider.java
index c5cb8be3994..bacddedf2f5 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/EditorProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/EditorProvider.java
@@ -13,7 +13,6 @@ package org.eclipse.ui.internal.quickaccess;
import java.util.HashMap;
import java.util.Map;
-
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
@@ -65,4 +64,8 @@ public class EditorProvider extends QuickAccessProvider {
public String getName() {
return QuickAccessMessages.QuickAccess_Editors;
}
+
+ protected void doReset() {
+ idToElement = null;
+ }
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java
index 64db59c784c..8c260f94159 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PerspectiveProvider.java
@@ -13,7 +13,6 @@ package org.eclipse.ui.internal.quickaccess;
import java.util.HashMap;
import java.util.Map;
-
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.ISharedImages;
@@ -61,4 +60,9 @@ public class PerspectiveProvider extends QuickAccessProvider {
public String getName() {
return QuickAccessMessages.QuickAccess_Perspectives;
}
+
+ protected void doReset() {
+ cachedElements = null;
+ idToElement = new HashMap();
+ }
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java
index 68dc070ee65..dba5e0547d2 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreferenceProvider.java
@@ -15,7 +15,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import org.eclipse.jface.preference.IPreferenceNode;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.PlatformUI;
@@ -76,4 +75,9 @@ public class PreferenceProvider extends QuickAccessProvider {
public String getName() {
return QuickAccessMessages.QuickAccess_Preferences;
}
+
+ protected void doReset() {
+ cachedElements = null;
+ idToElement = new HashMap();
+ }
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PropertiesProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PropertiesProvider.java
index 81b6f0134e2..ec541ab5bcb 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PropertiesProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PropertiesProvider.java
@@ -14,7 +14,6 @@ package org.eclipse.ui.internal.quickaccess;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import org.eclipse.jface.preference.IPreferenceNode;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.resource.ImageDescriptor;
@@ -83,4 +82,8 @@ public class PropertiesProvider extends QuickAccessProvider {
public String getName() {
return QuickAccessMessages.QuickAccess_Properties;
}
+
+ protected void doReset() {
+ idToElement = null;
+ }
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java
index 6deb5bfd67f..9a40bf446d9 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java
@@ -504,4 +504,13 @@ public abstract class QuickAccessContents {
return table;
}
+ /**
+ *
+ */
+ public void resetProviders() {
+ for (QuickAccessProvider provider : providers) {
+ provider.reset();
+ }
+ }
+
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java
index cb84bb268e4..d3771e44675 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java
@@ -414,6 +414,9 @@ public class QuickAccessDialog extends PopupDialog {
// TODO Auto-generated method stub
return true;
}
+
+ protected void doReset() {
+ }
}
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java
index c2598a4a824..921b6a1af87 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java
@@ -78,4 +78,11 @@ public abstract class QuickAccessProvider {
public boolean isAlwaysPresent() {
return false;
}
+
+ public void reset() {
+ sortedElements = null;
+ doReset();
+ }
+
+ protected abstract void doReset();
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
index d00aadcd026..3b0eaec26c7 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/SearchField.java
@@ -8,14 +8,16 @@
* Contributors:
* IBM Corporation - initial API and implementation
******************************************************************************/
-
package org.eclipse.ui.internal.quickaccess;
import javax.annotation.PostConstruct;
+import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.ModifyEvent;
@@ -26,13 +28,18 @@ import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.handlers.IHandlerService;
public class SearchField {
Shell shell;
+ private QuickAccessContents quickAccessContents;
+ private MWindow window;
@PostConstruct
- void createWidget(final Composite parent) {
+ void createWidget(final Composite parent, MWindow window) {
+ this.window = window;
// borderColor = new Color(parent.getDisplay(), 170, 176, 191);
final Composite comp = new Composite(parent, SWT.NONE);
comp.setLayout(new GridLayout());
@@ -40,11 +47,12 @@ public class SearchField {
GridDataFactory.fillDefaults().hint(100, SWT.DEFAULT).applyTo(text);
text.setMessage(QuickAccessMessages.QuickAccess_EnterSearch);
+ final CommandProvider commandProvider = new CommandProvider();
QuickAccessProvider[] providers = new QuickAccessProvider[] { new EditorProvider(),
- new ViewProvider(), new PerspectiveProvider(), new CommandProvider(),
+ new ViewProvider(), new PerspectiveProvider(), commandProvider,
new ActionProvider(), new WizardProvider(), new PreferenceProvider(),
new PropertiesProvider() };
- QuickAccessContents quickAccessContents = new QuickAccessContents(providers) {
+ quickAccessContents = new QuickAccessContents(providers) {
void updateFeedback(boolean filterTextEmpty, boolean showAllMatches) {
}
@@ -74,7 +82,28 @@ public class SearchField {
}
});
GridLayoutFactory.fillDefaults().applyTo(shell);
- quickAccessContents.createTable(shell, Window.getDefaultOrientation());
+ final Table table = quickAccessContents.createTable(shell, Window.getDefaultOrientation());
+ text.addFocusListener(new FocusListener() {
+ public void focusLost(FocusEvent e) {
+ checkFocusLost(table, text);
+ }
+
+ public void focusGained(FocusEvent e) {
+ IHandlerService hs = SearchField.this.window.getContext()
+ .get(IHandlerService.class);
+ if (commandProvider.getContextSnapshot() == null) {
+ commandProvider.setSnapshot(hs.createContextSnapshot(true));
+ }
+ }
+ });
+ shell.addFocusListener(new FocusListener() {
+ public void focusLost(FocusEvent e) {
+ checkFocusLost(table, text);
+ }
+
+ public void focusGained(FocusEvent e) {
+ }
+ });
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
boolean wasVisible = shell.getVisible();
@@ -109,6 +138,24 @@ public class SearchField {
}
});
+
}
-}
+ /**
+ * @param table
+ * @param text
+ */
+ protected void checkFocusLost(final Table table, final Text text) {
+ table.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ if (!table.isDisposed() && !text.isDisposed()) {
+ if (!table.isFocusControl() && !text.isFocusControl()) {
+ text.setText(""); //$NON-NLS-1$
+ quickAccessContents.resetProviders();
+ }
+ }
+ }
+ });
+ }
+
+}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java
index b1aa68614af..6d201fbce68 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/ViewProvider.java
@@ -13,7 +13,6 @@ package org.eclipse.ui.internal.quickaccess;
import java.util.HashMap;
import java.util.Map;
-
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
@@ -65,4 +64,9 @@ public class ViewProvider extends QuickAccessProvider {
public String getName() {
return QuickAccessMessages.QuickAccess_Views;
}
+
+ protected void doReset() {
+ cachedElements = null;
+ idToElement = new HashMap();
+ }
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java
index 1d6e8ff1ac7..b10101a4868 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/WizardProvider.java
@@ -16,7 +16,6 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
import org.eclipse.ui.internal.WorkbenchImages;
@@ -76,4 +75,9 @@ public class WizardProvider extends QuickAccessProvider {
public String getName() {
return QuickAccessMessages.QuickAccess_New;
}
+
+ protected void doReset() {
+ cachedElements = null;
+ idToElement = new HashMap();
+ }
}

Back to the top