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 202605 Details for
Bug 356307
Unable to delete user saved perspectives
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
Patch for delete perspecitve
bug356307.txt (text/plain), 11.67 KB, created by
Dean Roberts
on 2011-09-01 09:49:50 EDT
(
hide
)
Description:
Patch for delete perspecitve
Filename:
MIME Type:
Creator:
Dean Roberts
Created:
2011-09-01 09:49:50 EDT
Size:
11.67 KB
patch
obsolete
>diff --git Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java >index 246cc7d..df3786b 100644 >--- Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java >+++ Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java >@@ -1274,9 +1274,7 @@ > } > > /** >- * Closes the specified perspective. This method is purely intended to >- * manipulate the model and will not perform other actions such as the >- * saving of parts. >+ * Closes the specified perspective. > * > * @param desc > * the perspective to close >@@ -1384,11 +1382,11 @@ > > public void closePerspective(IPerspectiveDescriptor desc, String perspectiveId, > boolean saveParts, boolean closePage) { >- MPerspectiveStack perspectiveStack = modelService.findElements(window, null, >- MPerspectiveStack.class, null).get(0); > MPerspective persp = (MPerspective) modelService.find(perspectiveId, window); > // check to ensure this perspective actually exists in this window > if (persp != null) { >+ MPerspectiveStack perspectiveStack = modelService.findElements(window, null, >+ MPerspectiveStack.class, null).get(0); > if (perspectiveStack.getChildren().size() == 1) { > closeAllPerspectives(saveParts, closePage); > } else { >diff --git Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java >index 22a5b12..0773e63 100644 >--- Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java >+++ Eclipse UI/org/eclipse/ui/internal/dialogs/PerspectivesPreferencePage.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2009 IBM Corporation and others. >+ * Copyright (c) 2000, 2011 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 >@@ -16,7 +16,11 @@ > import java.util.ArrayList; > import java.util.Collections; > import java.util.Comparator; >+import org.eclipse.e4.ui.model.application.MApplication; >+import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; >+import org.eclipse.e4.ui.workbench.modeling.EModelService; > import org.eclipse.jface.dialogs.IDialogConstants; >+import org.eclipse.jface.dialogs.MessageDialog; > import org.eclipse.jface.preference.IPreferenceStore; > import org.eclipse.jface.preference.PreferencePage; > import org.eclipse.jface.resource.ImageDescriptor; >@@ -38,11 +42,14 @@ > import org.eclipse.swt.widgets.Widget; > import org.eclipse.ui.IPerspectiveDescriptor; > import org.eclipse.ui.IWorkbench; >+import org.eclipse.ui.IWorkbenchPage; > import org.eclipse.ui.IWorkbenchPreferenceConstants; > import org.eclipse.ui.IWorkbenchPreferencePage; >+import org.eclipse.ui.IWorkbenchWindow; > import org.eclipse.ui.PlatformUI; > import org.eclipse.ui.internal.IPreferenceConstants; > import org.eclipse.ui.internal.IWorkbenchHelpContextIds; >+import org.eclipse.ui.internal.Workbench; > import org.eclipse.ui.internal.WorkbenchMessages; > import org.eclipse.ui.internal.WorkbenchPlugin; > import org.eclipse.ui.internal.WorkbenchWindow; >@@ -61,13 +68,14 @@ > > private PerspectiveRegistry perspectiveRegistry; > >- private ArrayList perspectives; >+ // List of perspectives to populate preference page >+ private ArrayList<IPerspectiveDescriptor> perspectives; > > private String defaultPerspectiveId; > >- private ArrayList perspToDelete = new ArrayList(); >+ private ArrayList<IPerspectiveDescriptor> perspToDelete = new ArrayList<IPerspectiveDescriptor>(); > >- private ArrayList perspToRevert = new ArrayList(); >+ private ArrayList<IPerspectiveDescriptor> perspToRevert = new ArrayList<IPerspectiveDescriptor>(); > > private Table perspectivesTable; > >@@ -117,12 +125,12 @@ > /** > * <code>Comparator</code> to compare two perspective descriptors > */ >- private Comparator comparator = new Comparator() { >+ private Comparator<IPerspectiveDescriptor> comparator = new Comparator<IPerspectiveDescriptor>() { > private Collator collator = Collator.getInstance(); > >- public int compare(Object ob1, Object ob2) { >- IPerspectiveDescriptor d1 = (IPerspectiveDescriptor) ob1; >- IPerspectiveDescriptor d2 = (IPerspectiveDescriptor) ob2; >+ public int compare(IPerspectiveDescriptor ob1, IPerspectiveDescriptor ob2) { >+ IPerspectiveDescriptor d1 = ob1; >+ IPerspectiveDescriptor d2 = ob2; > return collator.compare(d1.getLabel(), d2.getLabel()); > } > }; >@@ -327,7 +335,7 @@ > > // Populate the perspectivesTable > IPerspectiveDescriptor[] persps = perspectiveRegistry.getPerspectives(); >- perspectives = new ArrayList(persps.length); >+ perspectives = new ArrayList<IPerspectiveDescriptor>(persps.length); > for (int i = 0; i < persps.length; i++) { > perspectives.add(i, persps[i]); > } >@@ -524,34 +532,28 @@ > } > > /** >- * Deletes the perspectives selected by the user if there is no opened >- * instance of that perspective. >+ * Return true if there are no open instances of the perspective. If there are open >+ * instances of the perspective prompt the user and return true if the user answers "yes" >+ * to the delete prompt. > * >- * @return boolean <code>true</code> if all of the perspectives could be >- * deleted. >+ * @return boolean <code>true</code> if it is OK to delete the perspective >+ * either because there are no open instances or the user has >+ * confirmed the deletion. > */ >- private boolean findOpenInstance(IPerspectiveDescriptor desc) { >- // IWorkbenchWindow windows[] = workbench.getWorkbenchWindows(); >+ private boolean canDeletePerspective(IPerspectiveDescriptor desc) { >+ >+ MApplication application = ((Workbench) workbench).getApplication(); >+ EModelService modelService = application.getContext().get(EModelService.class); > >- //find all active perspectives currently >- // for (int i = 0; i < windows.length; i++) { >- // IWorkbenchPage pages[] = windows[i].getPages(); >- // for (int j = 0; j < pages.length; j++) { >- // WorkbenchPage page = (WorkbenchPage) pages[j]; >- // if (page.findPerspective(desc) != null) { >- // if (!MessageDialog >- // .openQuestion( >- // getShell(), >- // WorkbenchMessages.PerspectivesPreference_perspectiveopen_title, >- // NLS.bind(WorkbenchMessages.PerspectivesPreference_perspectiveopen_message, >- // desc.getLabel()))) { >- // return true; >- // } >- // } >- // } >- // } >+ if (modelService.findElements(application, desc.getId(), MPerspective.class, null) >+ .isEmpty()) >+ return true; > >- return false; >+ return MessageDialog.openQuestion( >+ getShell(), >+ WorkbenchMessages.PerspectivesPreference_perspectiveopen_title, >+ NLS.bind(WorkbenchMessages.PerspectivesPreference_perspectiveopen_message, >+ desc.getLabel())); > } > > /** >@@ -562,30 +564,25 @@ > if (!Util.equals(defaultPerspectiveId, perspectiveRegistry.getDefaultPerspective())) { > perspectiveRegistry.setDefaultPerspective(defaultPerspectiveId); > } >+ >+ // Don't bother figuring out which window a perspective may be open in, >+ // the number of windows will be small. > >- //Delete the perspective >- if(perspectives.size()<perspectiveRegistry.getPerspectives().length) { >- // IWorkbenchWindow windows[] = workbench.getWorkbenchWindows(); >- >- // close any perspectives that are about to be deleted >- // for (int i = 0; i < windows.length; i++) { >- // IWorkbenchPage pages[] = windows[i].getPages(); >- // for (int j = 0; j < pages.length; j++) { >- // WorkbenchPage page = (WorkbenchPage) pages[j]; >- // for (int k = 0; k < perspToDelete.size(); k++) { >- // IPerspectiveDescriptor desc = (IPerspectiveDescriptor) >- // perspToDelete.get(k); >- // if (page.findPerspective(desc) != null) { >- // page.closePerspective(desc, true, true); >- // } >- // } >- // } >- // } >+ for (IPerspectiveDescriptor perspective : perspToDelete) { >+ IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); >+ for (IWorkbenchWindow window : windows) { >+ IWorkbenchPage[] pages = window.getPages(); >+ for (IWorkbenchPage page : pages) { >+ page.closePerspective(perspective, true, false); >+ } >+ } > perspectiveRegistry.deletePerspectives(perspToDelete); >+ } >+ >+ // Revert perspectives >+ for (IPerspectiveDescriptor perspective : perspToRevert) { >+ perspectiveRegistry.revertPerspective(perspective); > } >- >- // Revert the perspectives >- // perspectiveRegistry.revertPerspectives(perspToRevert); > > IPreferenceStore store = getPreferenceStore(); > >@@ -629,8 +626,9 @@ > > // Do enable. > if (desc != null) { >- revertButton.setEnabled(!perspToRevert.contains(desc)); >- deleteButton.setEnabled(true); >+ revertButton.setEnabled(desc.isPredefined() && desc.hasCustomDefinition() >+ && !perspToRevert.contains(desc)); >+ deleteButton.setEnabled(!desc.isPredefined()); > setDefaultButton.setEnabled(true); > } else { > revertButton.setEnabled(false); >@@ -702,7 +700,7 @@ > } > } else if (button == deleteButton) { > if (!perspToDelete.contains(desc)) { >- if(!findOpenInstance(desc)){ >+ if (canDeletePerspective(desc)) { > perspToDelete.add(desc); > perspToRevert.remove(desc); > perspectives.remove(desc); >diff --git Eclipse UI/org/eclipse/ui/internal/registry/PerspectiveRegistry.java Eclipse UI/org/eclipse/ui/internal/registry/PerspectiveRegistry.java >index 2d6d43e..f4e2309 100644 >--- Eclipse UI/org/eclipse/ui/internal/registry/PerspectiveRegistry.java >+++ Eclipse UI/org/eclipse/ui/internal/registry/PerspectiveRegistry.java >@@ -25,6 +25,7 @@ > import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker; > import org.eclipse.e4.ui.model.application.MApplication; > import org.eclipse.e4.ui.model.application.MApplicationElement; >+import org.eclipse.e4.ui.model.application.ui.MUIElement; > import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective; > import org.eclipse.e4.ui.workbench.modeling.EModelService; > import org.eclipse.ui.IPerspectiveDescriptor; >@@ -56,7 +57,6 @@ > for (IConfigurationElement element : point.getConfigurationElements()) { > String id = element.getAttribute(IWorkbenchRegistryConstants.ATT_ID); > String label = element.getAttribute(IWorkbenchRegistryConstants.ATT_NAME); >- > descriptors.put(id, new PerspectiveDescriptor(id, label, element)); > } > >@@ -107,11 +107,24 @@ > * org.eclipse.ui.IPerspectiveRegistry#deletePerspective(org.eclipse.ui. > * IPerspectiveDescriptor) > */ >- public void deletePerspective(IPerspectiveDescriptor persp) { >- // FIXME: compat deletePerspective >- E4Util.unsupported("deletePerspective"); //$NON-NLS-1$ >+ public void deletePerspective(IPerspectiveDescriptor toDelete) { >+ PerspectiveDescriptor perspective = (PerspectiveDescriptor) toDelete; >+ if (perspective.isPredefined()) >+ return; >+ >+ descriptors.remove(perspective.getId()); >+ removeSnippet(application, perspective.getId()); > } > >+ private MUIElement removeSnippet(MUIElement snippetContainer, String id) { >+ List<MApplicationElement> snippets = snippetContainer.getClonableSnippets(); >+ for (int i = 0; i < snippets.size(); i++) { >+ if (snippets.get(i).getElementId().equals(id)) { >+ return (MUIElement) snippets.remove(i); >+ } >+ } >+ return null; >+ } > > /** > * Deletes a list of perspectives >@@ -211,9 +224,12 @@ > * IPerspectiveDescriptor) > */ > public void revertPerspective(IPerspectiveDescriptor perspToRevert) { >- if (perspToRevert instanceof PerspectiveDescriptor) { >- ((PerspectiveDescriptor) perspToRevert).setHasCustomDefinition(false); >- } >+ PerspectiveDescriptor perspective = (PerspectiveDescriptor) perspToRevert; >+ if (!perspective.isPredefined()) >+ return; >+ >+ perspective.setHasCustomDefinition(false); >+ removeSnippet(application, perspective.getId()); > } > > /**
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 Raw
Actions:
View
Attachments on
bug 356307
: 202605