Index: Eclipse UI/org/eclipse/ui/internal/EditorManager.java =================================================================== RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorManager.java,v retrieving revision 1.88 diff -u -r1.88 EditorManager.java --- Eclipse UI/org/eclipse/ui/internal/EditorManager.java 2 Aug 2005 17:40:40 -0000 1.88 +++ Eclipse UI/org/eclipse/ui/internal/EditorManager.java 15 Aug 2005 15:26:27 -0000 @@ -713,12 +713,17 @@ return null; } - /* - * Create the site and action bars for each inner editor. - */ - private IEditorReference[] openMultiEditor(final IEditorReference ref, - final MultiEditor part, final EditorDescriptor desc, - final MultiEditorInput input, final boolean setVisible) + /** + * Create the part and reference for each inner editor. + * + * @param ref the MultiEditor ref + * @param part the part + * @param input the MultiEditor input + * @return the array of inner references to store in the MultiEditor ref + */ + IEditorReference[] openMultiEditor(final IEditorReference ref, + final MultiEditor part, + final MultiEditorInput input) throws PartInitException { String[] editorArray = input.getEditors(); Index: Eclipse UI/org/eclipse/ui/internal/EditorReference.java =================================================================== RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/EditorReference.java,v retrieving revision 1.7 diff -u -r1.7 EditorReference.java --- Eclipse UI/org/eclipse/ui/internal/EditorReference.java 2 Aug 2005 17:40:40 -0000 1.7 +++ Eclipse UI/org/eclipse/ui/internal/EditorReference.java 15 Aug 2005 15:26:27 -0000 @@ -43,6 +43,8 @@ import org.eclipse.ui.internal.registry.EditorDescriptor; import org.eclipse.ui.internal.util.Util; import org.eclipse.ui.part.IWorkbenchPartOrientation; +import org.eclipse.ui.part.MultiEditor; +import org.eclipse.ui.part.MultiEditorInput; public class EditorReference extends WorkbenchPartReference implements IEditorReference { @@ -78,6 +80,13 @@ IEditorInput restoredInput; + /** + * If the reference is instantiated as a MultiEditor, we need to dispose the + * inner references correctly. + */ + private IEditorReference[] multiEditorChildren = null; + + public EditorReference(EditorManager manager, IEditorInput input, EditorDescriptor desc) { this.manager = manager; initListenersAndHandlers(); @@ -231,7 +240,17 @@ } protected void doDisposePart() { - if (part != null) { + if (multiEditorChildren!=null) { + for (int i=0; inull for no active editor */ private void makeActiveEditor(IEditorReference ref) { - if (ref == getActiveEditor()) { + if (ref == getActiveEditorReference()) { return; } @@ -1115,7 +1122,7 @@ actionSwitcher.updateTopEditor(part); if (ref != null) { - activationList.bringToTop(ref); + activationList.bringToTop(getReference(part)); } partList.setActiveEditor(ref); @@ -1473,6 +1480,7 @@ if (isZoomed()) zoomOut(); + makeActiveEditor(null); makeActive(null); // Close and dispose the editors. @@ -2171,6 +2179,7 @@ * This method is called when the page is deactivated. */ protected void onDeactivate() { + makeActiveEditor(null); makeActive(null); if (getActivePerspective() != null) getActivePerspective().onDeactivate(); @@ -2467,6 +2476,10 @@ if (!certifyPart(part)) return; + if (part instanceof MultiEditor) { + part = ((MultiEditor) part).getActiveEditor(); + } + // Real work. setActivePart(part); } @@ -2829,8 +2842,17 @@ label = newPart != null ? newPart.getTitle() : "none"; //$NON-NLS-1$ } try { - IWorkbenchPartReference partref = getReference(newPart); - partBeingActivated = partref; + IWorkbenchPartReference partref = getReference(newPart); + IWorkbenchPartReference realPartRef = null; + if (newPart != null) { + IWorkbenchPartSite site = newPart.getSite(); + if (site instanceof PartSite) { + realPartRef = ((PartSite) site).getPane() + .getPartReference(); + } + } + + partBeingActivated = realPartRef; UIStats.start(UIStats.ACTIVATE_PART, label); // Notify perspective. It may deactivate fast view. @@ -2848,9 +2870,8 @@ if (newPart != null) { activationList.setActive(newPart); if (newPart instanceof IEditorPart) { - IEditorReference ref = (IEditorReference) getReference(newPart); - makeActiveEditor(ref); - } + makeActiveEditor((IEditorReference)realPartRef); + } } activatePart(newPart); @@ -3470,27 +3491,20 @@ */ void setActive(IWorkbenchPart part) { if (parts.size() <= 0) - return; - PartPane pane = ((PartSite) part.getSite()).getPane(); - if (pane instanceof MultiEditorInnerPane) { - MultiEditorInnerPane innerPane = (MultiEditorInnerPane) pane; - setActive(innerPane.getParentPane().getPartReference().getPart( - true)); - } else { - IWorkbenchPartReference ref = getReference(part); - if (ref != null) { - if (ref == parts.get(parts.size() - 1)) - return; - parts.remove(ref); - parts.add(ref); - } - } + return; + IWorkbenchPartReference ref = getReference(part); + if (ref != null) { + if (ref == parts.get(parts.size() - 1)) + return; + parts.remove(ref); + parts.add(ref); + } } /* - * Ensures that the given part appears AFTER any other part in the same - * container. - */ + * Ensures that the given part appears AFTER any other part in the same + * container. + */ void bringToTop(IWorkbenchPartReference ref) { ILayoutContainer targetContainer = getContainer(ref); Index: Eclipse UI/org/eclipse/ui/part/MultiEditor.java =================================================================== RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/MultiEditor.java,v retrieving revision 1.15 diff -u -r1.15 MultiEditor.java --- Eclipse UI/org/eclipse/ui/part/MultiEditor.java 25 Feb 2005 20:52:16 -0000 1.15 +++ Eclipse UI/org/eclipse/ui/part/MultiEditor.java 15 Aug 2005 15:26:28 -0000 @@ -77,21 +77,6 @@ return content; } - /** - * The MultiEditor implementation of this - * method extends the EditorPart implementation, - * and disposes any inner editors. Subclasses may extend. - * - * @since 3.0 - */ - public void dispose() { - super.dispose(); - IEditorPart[] editors = getInnerEditors(); - for (int i = 0; i < editors.length; i++) { - editors[i].dispose(); - } - } - /* * @see IEditorPart#doSaveAs() */