diff options
author | Stefan Dirix | 2015-07-30 09:01:36 +0000 |
---|---|---|
committer | Mickael Istria | 2020-01-17 22:37:03 +0000 |
commit | 91927cb3b3916b6ea17b8ba234ae55a03d94b839 (patch) | |
tree | 558636781ee6f1dca40e9c279a987d3d29069023 | |
parent | e8832328f3e127882d9fa3c66c0d20e8bdf92989 (diff) | |
download | eclipse.platform.team-91927cb3b3916b6ea17b8ba234ae55a03d94b839.tar.gz eclipse.platform.team-91927cb3b3916b6ea17b8ba234ae55a03d94b839.tar.xz eclipse.platform.team-91927cb3b3916b6ea17b8ba234ae55a03d94b839.zip |
Bug 473847 - Support DialogCompare for pure E4 applicationsY20200126-2245Y20200121-0055Y20200120-2315Y20200120-0020I20200126-1800I20200126-0250I20200125-1805I20200124-1800I20200123-1800I20200123-0525I20200123-0430I20200122-1805I20200121-2225I20200121-1805I20200120-1800I20200120-0715I20200120-0530I20200120-0445I20200120-0355I20200120-0115I20200119-2330I20200119-1800I20200118-1800I20200117-1800
Removes runtime dependencies to the workbench which allows pure E4
applications to execute comparisons within dialogs without exceptions.
Bug: 473847
Signed-off-by: Stefan Dirix <sdirix@eclipsesource.com>
Change-Id: I51851b0cab6dace0bc44bc9b6d30dfad32eeff39
23 files changed, 184 insertions, 62 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java index 0d5ff3fa2..1f5d74475 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java @@ -10,6 +10,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare; @@ -562,7 +563,7 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit } control.addDisposeListener(ev -> handleDispose()); }); - if (fHelpContextId != null) + if (fHelpContextId != null && PlatformUI.isWorkbenchRunning()) PlatformUI.getWorkbench().getHelpSystem().setHelp(fComposite, fHelpContextId); contentsCreated(); return fComposite; @@ -1459,7 +1460,7 @@ public abstract class CompareEditorInput extends PlatformObject implements IEdit private boolean saveChanges() { try { - PlatformUI.getWorkbench().getProgressService().run(true, true, monitor -> { + Utilities.executeRunnable(monitor -> { try { saveChanges(monitor); } catch (CoreException e) { diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java index 47d7ce017..63ae28658 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java @@ -20,6 +20,7 @@ * Robin Stocker (robin@nibor.org) - Bug 398594: [Edit] Enable center arrow buttons when editable and for both sides * Robin Stocker (robin@nibor.org) - Bug 399960: [Edit] Make merge arrow buttons easier to hit * John Hendrikx (hjohn@xs4all.nl) - Bug 541401 - [regression] Vertical scrollbar thumb size is wrong in compare view + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.contentmergeviewer; @@ -2036,7 +2037,9 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable { */ @Override protected void createControls(Composite composite) { - PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.TEXT_MERGE_VIEW); + if (PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.TEXT_MERGE_VIEW); + } // 1st row if (fMarginWidth > 0) { diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java index ede59b1ba..1643acfeb 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java @@ -51,7 +51,9 @@ public class BinaryCompareViewer extends AbstractViewer { public BinaryCompareViewer(Composite parent, final CompareConfiguration cc) { - PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.BINARY_COMPARE_VIEW); + if(PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.BINARY_COMPARE_VIEW); + } fBundle= ResourceBundle.getBundle(BUNDLE_NAME); diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java index 31d5f28d4..5b03a63e2 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java @@ -24,7 +24,6 @@ import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.PlatformUI; import org.eclipse.ui.services.IServiceLocator; public class CompareContainer implements ICompareContainer { @@ -68,7 +67,7 @@ public class CompareContainer implements ICompareContainer { public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - PlatformUI.getWorkbench().getProgressService().run(fork, cancelable, runnable); + Utilities.executeRunnable(runnable, fork, cancelable); } @Override diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContentViewerSwitchingPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContentViewerSwitchingPane.java index 3026cc907..c0fe6851b 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContentViewerSwitchingPane.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContentViewerSwitchingPane.java @@ -1,8 +1,7 @@ /******************************************************************************* * Copyright (c) 2009, 2017 IBM Corporation and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 + * 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 * https://www.eclipse.org/legal/epl-2.0/ * @@ -10,6 +9,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.internal; @@ -47,7 +47,6 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; -import org.eclipse.ui.PlatformUI; public class CompareContentViewerSwitchingPane extends CompareViewerSwitchingPane { private static final String OPTIMIZED_INFO_IMAGE_NAME = "obj16/message_info.png"; //$NON-NLS-1$ @@ -122,8 +121,7 @@ public class CompareContentViewerSwitchingPane extends CompareViewerSwitchingPan toolBar = new ToolBar(composite, SWT.FLAT); toolBar.setVisible(false); // hide by default final ToolItem toolItem = new ToolItem(toolBar, SWT.PUSH, 0); - toolItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage( - /* IWorkbenchGraphicConstants */"IMG_LCL_VIEW_MENU")); //$NON-NLS-1$ + Utilities.setMenuImage(toolItem); toolItem.setToolTipText(CompareMessages.CompareContentViewerSwitchingPane_switchButtonTooltip); toolItem.addSelectionListener(new SelectionAdapter() { @Override diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java index ed303baf1..6dc96d2da 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2011 IBM Corporation and others. + * Copyright (c) 2000, 2016 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -10,6 +10,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.internal; @@ -211,7 +212,7 @@ public class CompareDialog extends TrayDialog implements IPropertyChangeListener @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); - if (getHelpContextId() != null) + if (PlatformUI.isWorkbenchRunning() && getHelpContextId() != null) PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, getHelpContextId()); } diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java index 7da9a8eed..c02f3a56b 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java @@ -454,7 +454,11 @@ public class CompareEditor extends EditorPart } } fPageBook.showPage(fControl); - PlatformUI.getWorkbench().getHelpSystem().setHelp(fControl, ICompareContextIds.COMPARE_EDITOR); + + if (PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(fControl, ICompareContextIds.COMPARE_EDITOR); + } + if (isActive()) { setFocus(); } diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java index 1d54e91c2..870e8385c 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java @@ -53,22 +53,20 @@ public class CompareEditorContributor extends EditorActionBarContributor { public CompareEditorContributor() { ResourceBundle bundle= CompareUI.getResourceBundle(); - IWorkbenchHelpSystem helpSystem= PlatformUI.getWorkbench().getHelpSystem(); - fIgnoreWhitespace= ChangePropertyAction.createIgnoreWhiteSpaceAction(bundle, null); - helpSystem.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION); - fNext= new NavigationAction(bundle, true); - helpSystem.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION); - fPrevious= new NavigationAction(bundle, false); - helpSystem.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION); - fToolbarNext= new NavigationAction(bundle, true); - helpSystem.setHelp(fToolbarNext, ICompareContextIds.NEXT_DIFF_ACTION); - fToolbarPrevious= new NavigationAction(bundle, false); - helpSystem.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION); + + if (PlatformUI.isWorkbenchRunning()) { + IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem(); + helpSystem.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION); + helpSystem.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION); + helpSystem.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION); + helpSystem.setHelp(fToolbarNext, ICompareContextIds.NEXT_DIFF_ACTION); + helpSystem.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION); + } } @Override diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java index 564726cdb..a25353e7f 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java @@ -10,6 +10,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.internal; @@ -44,6 +45,10 @@ public class CompareHandlerService { if (service != null) return new CompareHandlerService(container, null); } + if (!PlatformUI.isWorkbenchRunning() && shell != null) { + Expression e = new ActiveShellExpression(shell); + return new CompareHandlerService(container, e); + } if (container.getWorkbenchPart() == null && shell != null) { // We're in a dialog so we can use an active shell expression IHandlerService service = PlatformUI.getWorkbench().getService(IHandlerService.class); @@ -92,7 +97,7 @@ public class CompareHandlerService { if (service != null) fHandlerService = service; } - if (fHandlerService == null && fContainer.getWorkbenchPart() == null && fExpression != null) { + if (PlatformUI.isWorkbenchRunning() && fHandlerService == null && fContainer.getWorkbenchPart() == null && fExpression != null) { // We're in a dialog so we can use an active shell expression IHandlerService service = PlatformUI.getWorkbench().getService(IHandlerService.class); if (service != null) { diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java index 133adb208..caa454ed1 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java @@ -249,8 +249,9 @@ public class ComparePreferencePage extends PreferencePage implements IWorkbenchP @Override protected Control createContents(Composite parent) { - - PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.COMPARE_PREFERENCE_PAGE); + if (PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.COMPARE_PREFERENCE_PAGE); + } fOverlayStore.load(); fOverlayStore.start(); diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java index 1593d8577..4f4d79936 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java @@ -10,6 +10,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.internal; @@ -43,7 +44,6 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; -import org.eclipse.ui.PlatformUI; public class CompareStructureViewerSwitchingPane extends CompareViewerSwitchingPane { @@ -111,8 +111,7 @@ public class CompareStructureViewerSwitchingPane extends toolBar = new ToolBar(composite, SWT.FLAT); toolBar.setVisible(false); // hide by default final ToolItem toolItem = new ToolItem(toolBar, SWT.PUSH, 0); - toolItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage( - /* IWorkbenchGraphicConstants */"IMG_LCL_VIEW_MENU")); //$NON-NLS-1$ + Utilities.setMenuImage(toolItem); toolItem .setToolTipText(CompareMessages.CompareStructureViewerSwitchingPane_switchButtonTooltip); toolItem.addSelectionListener(new SelectionAdapter() { diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java index 693ca3d1e..384504d9d 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java @@ -12,6 +12,7 @@ * IBM Corporation - initial API and implementation * Carsten Pfeiffer <carsten.pfeiffer@gebit.de> - CompareUIPlugin.getCommonType() returns null if left or right side is not available - https://bugs.eclipse.org/311843 * Stefan Xenos <sxenos@gmail.com> (Google) - bug 448968 - Add diagnostic logging + * Stefan Dirix <sdirix@eclipsesource.com> - bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.internal; @@ -475,17 +476,23 @@ public final class CompareUIPlugin extends AbstractUIPlugin { } /** - * Returns the SWT Shell of the active workbench window or <code>null</code> if + * If the workbench is running returns the SWT Shell of the active workbench window or <code>null</code> if * no workbench window is active. * - * @return the SWT Shell of the active workbench window, or <code>null</code> if - * no workbench window is active + * If the workbench is not running, returns the shell of the default display. + * + * @return If the workbench is running, returns the SWT Shell of the active workbench window, or <code>null</code> if + * no workbench window is active. Otherwise returns the shell of the default display. */ public static Shell getShell() { - IWorkbenchWindow window = getActiveWorkbenchWindow(); - if (window == null) - return null; - return window.getShell(); + if(PlatformUI.isWorkbenchRunning()){ + IWorkbenchWindow window = getActiveWorkbenchWindow(); + if (window == null) + return null; + return window.getShell(); + } + + return Display.getDefault().getActiveShell(); } /** @@ -606,10 +613,12 @@ public final class CompareUIPlugin extends AbstractUIPlugin { public boolean compareResultOK(CompareEditorInput input, IRunnableContext context) { final Shell shell= getShell(); try { - // run operation in separate thread and make it cancelable - if (context == null) - context = PlatformUI.getWorkbench().getProgressService(); - context.run(true, true, input); + // run operation in context if possible + if (context != null) { + context.run(true, true, input); + } else { + Utilities.executeRunnable(input); + } String message= input.getMessage(); if (message != null) { @@ -1377,13 +1386,16 @@ public final class CompareUIPlugin extends AbstractUIPlugin { } private void internalOpenDialog(final CompareEditorInput input) { - Runnable runnable = () -> { - CompareDialog dialog = new CompareDialog(PlatformUI - .getWorkbench().getModalDialogShellProvider() - .getShell(), input); + syncExec(() -> { + Shell shell; + if (PlatformUI.isWorkbenchRunning()) { + shell = PlatformUI.getWorkbench().getModalDialogShellProvider().getShell(); + } else { + shell = Display.getDefault().getActiveShell(); + } + CompareDialog dialog = new CompareDialog(shell, input); dialog.open(); - }; - syncExec(runnable); + }); } private void syncExec(Runnable runnable) { diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java index b6612c7b1..5619280a9 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java @@ -24,6 +24,10 @@ import org.eclipse.compare.IEncodedStreamContentAccessor; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.ResourceNode; +import org.eclipse.core.filebuffers.FileBuffers; +import org.eclipse.core.filebuffers.ITextFileBuffer; +import org.eclipse.core.filebuffers.ITextFileBufferManager; +import org.eclipse.core.filebuffers.LocationKind; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFileState; import org.eclipse.core.runtime.CoreException; @@ -218,6 +222,24 @@ public class EditionAction extends BaseCompareAction { } private IDocument getDocument(IFile file) { + if (file == null) { + return null; + } + + // first try FileBuffer API + ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); + ITextFileBuffer buffer = bufferManager.getTextFileBuffer(file.getFullPath(), LocationKind.IFILE); + if (buffer != null) { + IDocument document = buffer.getDocument(); + if (document != null) { + return document; + } + } + + // if unsuccessful, try open editors + if (!PlatformUI.isWorkbenchRunning()) { + return null; + } IWorkbench wb= PlatformUI.getWorkbench(); if (wb == null) return null; diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java index 50d8da27a..bc0ec4cbe 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java @@ -44,7 +44,9 @@ public class ImageMergeViewer extends ContentMergeViewer { public ImageMergeViewer(Composite parent, int styles, CompareConfiguration mp) { super(styles, ResourceBundle.getBundle(BUNDLE_NAME), mp); - PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.IMAGE_COMPARE_VIEW); + if (PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.IMAGE_COMPARE_VIEW); + } buildControl(parent); String title= Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$ diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java index 1728df9f1..f44b6ef84 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java @@ -12,6 +12,7 @@ * IBM Corporation - initial API and implementation * Max Weninger (max.weninger@windriver.com) - Bug 131895 [Edit] Undo in compare * Max Weninger (max.weninger@windriver.com) - Bug 72936 [Viewers] Show line numbers in comparision + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.internal; @@ -1040,7 +1041,7 @@ public class MergeSourceViewer implements ISelectionChangedListener, } private IOperationHistory getHistory() { - if (PlatformUI.getWorkbench() == null) { + if (!PlatformUI.isWorkbenchRunning()) { return null; } return PlatformUI.getWorkbench().getOperationSupport() diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java index d1e65e45a..4ee2b924b 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java @@ -61,7 +61,7 @@ public abstract class ResizableDialog extends Dialog { @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); - if (fContextId != null) + if (fContextId != null && PlatformUI.isWorkbenchRunning()) PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, fContextId); } diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java index 2f2bc3b74..78d22a874 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java @@ -1,8 +1,14 @@ /******************************************************************************* +<<<<<<< HEAD * Copyright (c) 2000, 2017 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 +======= + * Copyright (c) 2000, 2016 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 +>>>>>>> Bug 473847 - Support DialogCompare for pure E4 applications * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * @@ -10,6 +16,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stefan Dirix (sdirix@eclipsesource.com) - Bug 473847: Minimum E4 Compatibility of Compare *******************************************************************************/ package org.eclipse.compare.internal; @@ -60,6 +67,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.MultiStatus; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SafeRunner; @@ -69,6 +77,7 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.operation.IRunnableContext; +import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; @@ -77,9 +86,13 @@ import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.IActionBars; @@ -88,6 +101,7 @@ import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.IWorkbenchSite; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.IWorkbenchSiteProgressService; import org.eclipse.ui.texteditor.IDocumentProvider; @@ -911,4 +925,64 @@ public class Utilities { } return buffer.toString(); } + + /** + * Executes the given runnable. Uses the {@link org.eclipse.ui.progress.IProgressService IProgressService} + * if available. + * + * @param runnable + * The {@link IRunnableWithProgress} to execute. + * @throws InvocationTargetException + * @throws InterruptedException + */ + public static void executeRunnable(IRunnableWithProgress runnable) throws InvocationTargetException, + InterruptedException { + executeRunnable(runnable, true, true); + } + + /** + * Executes the given runnable. Uses the {@link org.eclipse.ui.progress.IProgressService IProgressService} + * if available. + * + * @param runnable + * The {@link IRunnableWithProgress} to execute. + * @param fork indicates whether to run within a separate thread. + * @param cancelable indicates whether the operation shall be cancelable + * @throws InvocationTargetException + * @throws InterruptedException + */ + public static void executeRunnable(IRunnableWithProgress runnable, boolean fork, boolean cancelable) throws InvocationTargetException, + InterruptedException { + if (PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getProgressService().run(fork, cancelable, runnable); + } else { + runnable.run(new NullProgressMonitor()); + } + } + + /** + * Sets the menu image for the given {@link Item}. Uses the workbench shared image if available, otherwise + * creates a new image and adds a dispose listener. + * + * @param item + * The {@link Item} for which the menu image is to be set. + */ + public static void setMenuImage(final Item item) { + final Image image; + if (PlatformUI.isWorkbenchRunning()) { + image = PlatformUI.getWorkbench().getSharedImages().getImage( + /* IWorkbenchGraphicConstants */"IMG_LCL_VIEW_MENU"); //$NON-NLS-1$ + } else { + image = CompareUIPlugin.getImageDescriptor("elcl16/view_menu.png").createImage(); //$NON-NLS-1$ + item.addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + Image img = item.getImage(); + if ((img != null) && (!img.isDisposed())) { + img.dispose(); + } + } + }); + } + item.setImage(image); + } } diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java index e7d47260d..1398708a9 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java @@ -48,8 +48,6 @@ import org.eclipse.jface.text.Region; import org.eclipse.jface.text.TextUtilities; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressService; /** * A document merger manages the differences between two documents @@ -574,11 +572,10 @@ public class DocumentMerger { } monitor.done(); }; - IProgressService progressService= PlatformUI.getWorkbench().getProgressService(); RangeDifference[] e= null; try { - progressService.run(true, true, runnable); + Utilities.executeRunnable(runnable); e= (RangeDifference[]) result[0]; } catch (InvocationTargetException ex) { throw new CoreException(new Status(IStatus.ERROR, CompareUIPlugin.PLUGIN_ID, 0, CompareMessages.DocumentMerger_3, ex.getTargetException())); diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java index 1d1cf7442..9d95f6896 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java @@ -181,7 +181,10 @@ public class InputPatchPage extends WizardPage { shell.addShellListener(fActivationListener); Dialog.applyDialogFont(composite); - PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE); + + if(PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE); + } } /** diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java index 2c0e878b1..7bd7b4dce 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java @@ -88,7 +88,9 @@ public class PatchTargetPage extends WizardPage { updateWidgetEnablements(); Dialog.applyDialogFont(composite); - PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE); + if (PlatformUI.isWorkbenchRunning()) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE); + } useWorkspaceAsTarget.addListener(SWT.Selection, event -> { fShowError = true; diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java index b3a969ce8..54797a874 100644 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java +++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java @@ -58,7 +58,6 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.ExpandableComposite; @@ -651,9 +650,8 @@ public class PreviewPatchPage2 extends WizardPage { private int guessFuzzFactor(final WorkspacePatcher patcher) { final int[] result= new int[] { -1 }; try { - PlatformUI.getWorkbench().getProgressService().run(true, true, - monitor -> result[0]= patcher.guessFuzzFactor(monitor) - ); + org.eclipse.compare.internal.Utilities + .executeRunnable(monitor -> result[0] = patcher.guessFuzzFactor(monitor)); } catch (InvocationTargetException | InterruptedException ex) { // NeedWork } diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/view_menu.png b/bundles/org.eclipse.compare/icons/full/elcl16/view_menu.png Binary files differnew file mode 100644 index 000000000..d8dc2f8fb --- /dev/null +++ b/bundles/org.eclipse.compare/icons/full/elcl16/view_menu.png diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/view_menu@2x.png b/bundles/org.eclipse.compare/icons/full/elcl16/view_menu@2x.png Binary files differnew file mode 100644 index 000000000..0774bdfdf --- /dev/null +++ b/bundles/org.eclipse.compare/icons/full/elcl16/view_menu@2x.png |