diff options
| author | Simon Scholz | 2016-08-01 17:01:52 +0000 |
|---|---|---|
| committer | Simon Scholz | 2016-08-01 20:25:06 +0000 |
| commit | 3faaf4f807de3d0dcdec0d0626a04c58f3c95f14 (patch) | |
| tree | 6a4cd459bb66a347ed739b8f72e62755dea1942b | |
| parent | 34c072e10435c307f9c72f8e936592def816554d (diff) | |
| download | eclipse.platform.ui-3faaf4f807de3d0dcdec0d0626a04c58f3c95f14.tar.gz eclipse.platform.ui-3faaf4f807de3d0dcdec0d0626a04c58f3c95f14.tar.xz eclipse.platform.ui-3faaf4f807de3d0dcdec0d0626a04c58f3c95f14.zip | |
Bug 495917 - "Next/Previous View" commands throw NPE when editor is notI20160802-0800
in editor area
Change-Id: I80c9b5092fc17d693aed240310528cdea0a55206
Signed-off-by: Simon Scholz <simon.scholz@vogella.com>
| -rw-r--r-- | bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleViewHandler.java | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleViewHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleViewHandler.java index de732b4cb7c..e9659d0c0c6 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleViewHandler.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleViewHandler.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * Lars Vogel <Lars.Vogel@gmail.com> - Bug 440810 - * Simon Scholz <simon.scholz@vogella.com> - Bug 454143, 461063 + * Simon Scholz <simon.scholz@vogella.com> - Bug 454143, 461063, 495917 * Friederike Schertel <friederike@schertel.org> - Bug 478336 ******************************************************************************/ @@ -25,6 +25,7 @@ import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.IEditorPart; @@ -32,6 +33,7 @@ import org.eclipse.ui.IWorkbenchCommandConstants; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.commands.ICommandService; +import org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor; /** * This handler is used to switch between parts using the keyboard. @@ -70,15 +72,7 @@ public class CycleViewHandler extends CycleBaseHandler { if (part.getTags().contains("Editor")) { //$NON-NLS-1$ if (includeEditor.getAndSet(false)) { - IEditorPart activeEditor = page.getActiveEditor(); - TableItem item = new TableItem(table, SWT.NONE); - item.setText(WorkbenchMessages.CyclePartAction_editor); - item.setImage(activeEditor.getTitleImage()); - if (activeEditor.getSite() instanceof PartSite) { - item.setData(((PartSite) activeEditor.getSite()).getPartReference()); - } else { - item.setData(part); - } + createEditorItem(table, page, part); } } else { TableItem item = new TableItem(table, SWT.NONE); @@ -97,6 +91,38 @@ public class CycleViewHandler extends CycleBaseHandler { } + private void createEditorItem(Table table, WorkbenchPage page, MPart part) { + Object object = part.getObject(); + TableItem item = new TableItem(table, SWT.NONE); + item.setText(WorkbenchMessages.CyclePartAction_editor); + if (object instanceof CompatibilityEditor) { + IEditorPart editor = ((CompatibilityEditor) object).getEditor(); + item.setImage(editor.getTitleImage()); + if (editor.getSite() instanceof PartSite) { + item.setData(((PartSite) editor.getSite()).getPartReference()); + return; + } + } else { + item.setImage(getImage(page, part)); + } + item.setData(part); + } + + private Image getImage(WorkbenchPage page, MPart part) { + Object renderer = part.getRenderer(); + if (renderer instanceof SWTPartRenderer) { + SWTPartRenderer partRenderer = (SWTPartRenderer) renderer; + return partRenderer.getImage(part); + } + WorkbenchWindow wbw = (WorkbenchWindow) page.getWorkbenchWindow(); + if (wbw.getModel().getRenderer() instanceof SWTPartRenderer) { + SWTPartRenderer partRenderer = (SWTPartRenderer) wbw.getModel().getRenderer(); + return partRenderer.getImage(part); + } + + return null; + } + @Override protected ParameterizedCommand getBackwardCommand() { return getParametrizedCommand(IWorkbenchCommandConstants.WINDOW_PREVIOUS_VIEW); |
