Bug 394157 - [EditorMgmt] List of CTRL+F6 editors is no longer is "most
recently used" order
use MRU to fill in editor list
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java
index 9db91a3..20108c7 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java
@@ -11,12 +11,12 @@
package org.eclipse.ui.internal;
+import java.util.List;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.commands.ICommandService;
@@ -35,18 +35,17 @@
* @see org.eclipse.ui.internal.CycleBaseHandler#addItems(org.eclipse.swt.widgets.Table, org.eclipse.ui.internal.WorkbenchPage)
*/
protected void addItems(Table table, WorkbenchPage page) {
- // TODO Auto-generated method stub
- IEditorReference refs[] = page.getEditorReferences();
- for (int i = 0; i < refs.length; i++) {
+ List<EditorReference> refs = page.getSortedEditorReferences();
+ for (EditorReference ref : refs) {
TableItem item = null;
item = new TableItem(table, SWT.NONE);
- if (refs[i].isDirty()) {
- item.setText("*" + refs[i].getTitle()); //$NON-NLS-1$
+ if (ref.isDirty()) {
+ item.setText("*" + ref.getTitle()); //$NON-NLS-1$
} else {
- item.setText(refs[i].getTitle());
+ item.setText(ref.getTitle());
}
- item.setImage(refs[i].getTitleImage());
- item.setData(refs[i]);
+ item.setImage(ref.getTitleImage());
+ item.setData(ref);
}
}
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 2b813cb..41380c3 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
@@ -978,7 +978,8 @@
return ref;
}
- private List<EditorReference> getCurrentEditorReferences() {
+ private List<EditorReference> getOrderedEditorReferences() {
+
List<EditorReference> editorRefs = new ArrayList<EditorReference>();
List<MPart> visibleEditors = modelService.findElements(window,
CompatibilityEditor.MODEL_ELEMENT_ID, MPart.class, null);
@@ -994,6 +995,44 @@
return editorRefs;
}
+ List<EditorReference> getSortedEditorReferences() {
+ List<EditorReference> sortedReferences = new ArrayList<EditorReference>();
+ for (MPart part : activationList) {
+ for (EditorReference ref : editorReferences) {
+ if (ref.getModel() == part) {
+ sortedReferences.add(ref);
+ break;
+ }
+ }
+ }
+
+ for (EditorReference ref : editorReferences) {
+ if (!sortedReferences.contains(ref)) {
+ sortedReferences.add(ref);
+ }
+ }
+
+ MPerspective currentPerspective = getCurrentPerspective();
+ if (currentPerspective != null) {
+ List<MPart> placeholders = modelService.findElements(window,
+ CompatibilityEditor.MODEL_ELEMENT_ID, MPart.class, null,
+ EModelService.PRESENTATION);
+ List<EditorReference> visibleReferences = new ArrayList<EditorReference>();
+ for (EditorReference reference : sortedReferences) {
+ for (MPart placeholder : placeholders) {
+ if (reference.getModel() == placeholder && placeholder.isToBeRendered()) {
+ // only rendered placeholders are valid references
+ visibleReferences.add(reference);
+ }
+ }
+ }
+
+ return visibleReferences;
+ }
+
+ return sortedReferences;
+ }
+
public List<EditorReference> getInternalEditorReferences() {
return editorReferences;
}
@@ -2197,7 +2236,7 @@
* java.lang.String, int)
*/
public IEditorReference[] findEditors(IEditorInput input, String editorId, int matchFlags) {
- List<EditorReference> filteredReferences = getCurrentEditorReferences();
+ List<EditorReference> filteredReferences = getSortedEditorReferences();
switch (matchFlags) {
case MATCH_INPUT:
@@ -2283,7 +2322,7 @@
* @see org.eclipse.ui.IWorkbenchPage#getEditorReferences()
*/
public IEditorReference[] getEditorReferences() {
- List<EditorReference> references = getCurrentEditorReferences();
+ List<EditorReference> references = getOrderedEditorReferences();
return references.toArray(new IEditorReference[references.size()]);
}
@@ -2305,7 +2344,7 @@
List<IWorkbenchPartReference> sortedReferences = new ArrayList<IWorkbenchPartReference>();
IViewReference[] viewReferences = getViewReferences();
- List<EditorReference> editorReferences = getCurrentEditorReferences();
+ List<EditorReference> editorReferences = getSortedEditorReferences();
activationLoop: for (MPart part : activationList) {
if (views) {