Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 26109 Details for
Bug 96129
[MPE] (regression) MultiEditor.getInnerEditors() returns null.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
MultiEditor 3.2 fix
bug96129-ui.workbench-HEAD.txt (text/plain), 11.85 KB, created by
Paul Webster
on 2005-08-15 11:31:46 EDT
(
hide
)
Description:
MultiEditor 3.2 fix
Filename:
MIME Type:
Creator:
Paul Webster
Created:
2005-08-15 11:31:46 EDT
Size:
11.85 KB
patch
obsolete
>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; i<multiEditorChildren.length; ++i) { >+ EditorReference ref = (EditorReference)multiEditorChildren[i]; >+ if (ref!=null) { >+ ref.dispose(); >+ } >+ } >+ multiEditorChildren = null; >+ } >+ >+ if (part != null) { > EditorSite site = (EditorSite) ((IEditorPart)part).getEditorSite(); > manager.disposeEditorActionBars((EditorActionBars) site.getActionBars()); > site.dispose(); >@@ -524,13 +543,18 @@ > throw new PartInitException(NLS.bind(WorkbenchMessages.EditorManager_missing_editor_descriptor, editorID)); > } > >- IEditorPart part; >+ IEditorPart part = null; > > if (desc.isInternal()) { > // Create an editor instance. > try { > UIStats.start(UIStats.CREATE_PART, editorID); > part = manager.createPart(desc); >+ >+ if (part != null && part instanceof MultiEditor) { >+ multiEditorChildren = manager.openMultiEditor(this, >+ (MultiEditor) part, (MultiEditorInput) editorInput); >+ } > } finally { > UIStats.end(UIStats.CREATE_PART, this, editorID); > } >@@ -625,4 +649,16 @@ > > } > >-} >\ No newline at end of file >+ /** >+ * A quick way of finding out if this reference points to a MultiEditor. >+ * It depends on the fact that a MultiEditor does not lazily >+ * instantiate it's child editors. >+ * >+ * @return true if it has inner editor reference or the input is >+ * MultiEditorInput. >+ */ >+ public boolean isMultiReference() { >+ return multiEditorChildren!=null || restoredInput instanceof MultiEditorInput; >+ } >+} >+ >Index: Eclipse UI/org/eclipse/ui/internal/PartList.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PartList.java,v >retrieving revision 1.2 >diff -u -r1.2 PartList.java >--- Eclipse UI/org/eclipse/ui/internal/PartList.java 16 May 2005 16:26:55 -0000 1.2 >+++ Eclipse UI/org/eclipse/ui/internal/PartList.java 15 Aug 2005 15:26:27 -0000 >@@ -17,6 +17,8 @@ > import org.eclipse.ui.IWorkbenchPart; > import org.eclipse.ui.IWorkbenchPartConstants; > import org.eclipse.ui.IWorkbenchPartReference; >+import org.eclipse.ui.IWorkbenchPartSite; >+import org.eclipse.ui.part.MultiEditor; > > public abstract class PartList { > private IWorkbenchPartReference activePartReference; >@@ -101,6 +103,13 @@ > if (ref != null) { > IWorkbenchPart part = ref.getPart(true); > Assert.isNotNull(part); >+ if (part instanceof MultiEditor) { >+ IWorkbenchPartSite site = ((MultiEditor) part) >+ .getActiveEditor().getSite(); >+ if (site instanceof PartSite) { >+ ref = ((PartSite) site).getPane().getPartReference(); >+ } >+ } > } > > activePartReference = ref; >@@ -119,6 +128,14 @@ > if (ref != null) { > IWorkbenchPart part = ref.getPart(true); > Assert.isNotNull(part); >+ if (part instanceof MultiEditor) { >+ IWorkbenchPartSite site = ((MultiEditor) part) >+ .getActiveEditor().getSite(); >+ if (site instanceof PartSite) { >+ ref = (IEditorReference) ((PartSite) site).getPane() >+ .getPartReference(); >+ } >+ } > } > > activeEditorReference = ref; >Index: Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java,v >retrieving revision 1.228 >diff -u -r1.228 WorkbenchPage.java >--- Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java 9 Aug 2005 15:19:47 -0000 1.228 >+++ Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java 15 Aug 2005 15:26:27 -0000 >@@ -760,6 +760,13 @@ > makeActive(ref); > } else if (newPartContainer == activeEditorContainer) { > if (ref instanceof IEditorReference) { >+ if (part!=null) { >+ IWorkbenchPartSite site = part.getSite(); >+ if (site instanceof PartSite) { >+ ref = ((PartSite) site).getPane() >+ .getPartReference(); >+ } >+ } > makeActiveEditor((IEditorReference)ref); > } else { > makeActiveEditor(null); >@@ -1101,7 +1108,7 @@ > * @param ref the editor to make active, or <code>null</code> 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 <code>MultiEditor</code> implementation of this >- * method extends the <code>EditorPart</code> 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() > */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 96129
:
22644
|
22931
|
23457
|
24032
|
24096
|
24227
|
24358
|
24437
|
25128
|
25262
|
25425
|
25426
|
25620
|
25735
|
25831
|
25832
|
25834
|
25890
|
25923
|
25936
|
25937
|
25990
| 26109 |
26111
|
26121