Skip to content

Commit ab9e5b7

Browse files
tobias-melcherBeckerWdf
authored andcommitted
fix UI on MacOS in refactoring wizard
Fixes: 1173
1 parent 5334e3c commit ab9e5b7

File tree

2 files changed

+134
-3
lines changed

2 files changed

+134
-3
lines changed

bundles/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/PreviewWizardPage.java

Lines changed: 126 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*******************************************************************************/
1414
package org.eclipse.ltk.internal.ui.refactoring;
1515

16+
import java.lang.reflect.InvocationTargetException;
1617
import java.text.Collator;
1718
import java.text.MessageFormat;
1819
import java.util.ArrayList;
@@ -29,6 +30,8 @@
2930
import org.eclipse.swt.accessibility.AccessibleEvent;
3031
import org.eclipse.swt.custom.BusyIndicator;
3132
import org.eclipse.swt.custom.SashForm;
33+
import org.eclipse.swt.events.MouseEvent;
34+
import org.eclipse.swt.events.MouseListener;
3235
import org.eclipse.swt.graphics.Point;
3336
import org.eclipse.swt.graphics.Rectangle;
3437
import org.eclipse.swt.layout.GridData;
@@ -43,31 +46,45 @@
4346
import org.eclipse.swt.widgets.ToolItem;
4447

4548
import org.eclipse.core.runtime.CoreException;
49+
import org.eclipse.core.runtime.IAdaptable;
4650

4751
import org.eclipse.jface.action.Action;
4852
import org.eclipse.jface.action.ActionContributionItem;
4953
import org.eclipse.jface.action.IAction;
5054
import org.eclipse.jface.action.IMenuCreator;
55+
import org.eclipse.jface.action.MenuManager;
5156
import org.eclipse.jface.action.Separator;
5257
import org.eclipse.jface.action.ToolBarManager;
5358
import org.eclipse.jface.dialogs.Dialog;
5459
import org.eclipse.jface.dialogs.IDialogConstants;
5560
import org.eclipse.jface.dialogs.IDialogSettings;
5661
import org.eclipse.jface.dialogs.MessageDialog;
62+
import org.eclipse.jface.operation.IRunnableContext;
63+
import org.eclipse.jface.operation.IRunnableWithProgress;
5764
import org.eclipse.jface.viewers.CheckStateChangedEvent;
5865
import org.eclipse.jface.viewers.ICheckStateListener;
5966
import org.eclipse.jface.viewers.ILabelProvider;
6067
import org.eclipse.jface.viewers.ISelectionChangedListener;
68+
import org.eclipse.jface.viewers.ISelectionProvider;
6169
import org.eclipse.jface.viewers.IStructuredSelection;
6270
import org.eclipse.jface.viewers.ITreeContentProvider;
6371
import org.eclipse.jface.viewers.StructuredSelection;
6472
import org.eclipse.jface.viewers.Viewer;
6573
import org.eclipse.jface.viewers.ViewerComparator;
74+
import org.eclipse.jface.wizard.IWizardContainer;
6675

76+
import org.eclipse.ui.IActionBars;
77+
import org.eclipse.ui.IWorkbenchPart;
6778
import org.eclipse.ui.PlatformUI;
6879
import org.eclipse.ui.part.PageBook;
80+
import org.eclipse.ui.services.IServiceLocator;
6981

82+
import org.eclipse.compare.CompareConfiguration;
7083
import org.eclipse.compare.CompareUI;
84+
import org.eclipse.compare.ICompareContainer;
85+
import org.eclipse.compare.ICompareNavigator;
86+
import org.eclipse.compare.structuremergeviewer.ICompareInput;
87+
import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener;
7188

7289
import org.eclipse.ltk.core.refactoring.Change;
7390
import org.eclipse.ltk.core.refactoring.CompositeChange;
@@ -461,7 +478,7 @@ public void getName(AccessibleEvent e) {
461478
fTreeViewer.setContentProvider(createTreeContentProvider());
462479
fTreeViewer.setLabelProvider(createTreeLabelProvider());
463480
fTreeViewer.setComparator(createTreeComparator());
464-
fTreeViewer.addSelectionChangedListener(createSelectionChangedListener());
481+
fTreeViewer.addSelectionChangedListener(createSelectionChangedListener(fTreeViewer));
465482
fTreeViewer.addCheckStateListener(createCheckStateListener());
466483
fTreeViewerPane.setContent(fTreeViewer.getControl());
467484
fTreeViewer.getControl().getAccessible().addAccessibleListener(new AccessibleAdapter() {
@@ -596,14 +613,47 @@ private boolean isChild(PreviewNode element, PreviewNode child) {
596613
};
597614
}
598615

599-
private ISelectionChangedListener createSelectionChangedListener() {
616+
private ISelectionChangedListener createSelectionChangedListener(ChangeElementTreeViewer treeViewer) {
617+
Runnable[] runOnMouseUp=new Runnable[] {null};
618+
boolean[] mouseDownPressed = new boolean[] {false};
619+
treeViewer.getTree().addMouseListener(new MouseListener() {
620+
621+
@Override
622+
public void mouseUp(MouseEvent e) {
623+
mouseDownPressed[0] = false;
624+
if (runOnMouseUp[0] != null) {
625+
runOnMouseUp[0].run();
626+
runOnMouseUp[0] = null;
627+
}
628+
}
629+
630+
@Override
631+
public void mouseDown(MouseEvent e) {
632+
mouseDownPressed[0] = true;
633+
}
634+
635+
@Override
636+
public void mouseDoubleClick(MouseEvent e) {
637+
}
638+
});
600639
return event -> {
601640
IStructuredSelection sel= (IStructuredSelection) event.getSelection();
602641
if (sel.size() == 1) {
603642
PreviewNode newSelection= (PreviewNode)sel.getFirstElement();
604643
if (newSelection != fCurrentSelection) {
605644
fCurrentSelection= newSelection;
606-
showPreview(newSelection);
645+
Runnable r = new Runnable() {
646+
647+
@Override
648+
public void run() {
649+
showPreview(newSelection);
650+
}
651+
};
652+
if (mouseDownPressed[0]) {
653+
runOnMouseUp[0] = r;
654+
}else {
655+
r.run();
656+
}
607657
}
608658
} else {
609659
showPreview(null);
@@ -622,6 +672,13 @@ private void showPreview(PreviewNode element) {
622672
if (descriptor != null) {
623673
newViewer= descriptor.createViewer();
624674
newViewer.createControl(fPreviewContainer);
675+
IWizardContainer container = getContainer();
676+
if (container != null) {
677+
if (newViewer.getControl() instanceof IAdaptable adaptable) {
678+
CompareConfiguration config = adaptable.getAdapter(CompareConfiguration.class);
679+
config.setContainer(new WizardCompareContainer(container));
680+
}
681+
}
625682
} else {
626683
newViewer= fNullPreviewer;
627684
}
@@ -761,4 +818,70 @@ private void setHideDerived(boolean hide) {
761818
public Change getChange() {
762819
return fChange;
763820
}
821+
822+
private static final class WizardCompareContainer implements ICompareContainer {
823+
824+
private IRunnableContext context;
825+
826+
public WizardCompareContainer(IRunnableContext context) {
827+
this.context=context;
828+
}
829+
830+
@Override
831+
public void setStatusMessage(String message) {
832+
}
833+
834+
@Override
835+
public void addCompareInputChangeListener(ICompareInput input,
836+
ICompareInputChangeListener listener) {
837+
input.addCompareInputChangeListener(listener);
838+
}
839+
840+
@Override
841+
public void removeCompareInputChangeListener(ICompareInput input,
842+
ICompareInputChangeListener listener) {
843+
input.removeCompareInputChangeListener(listener);
844+
}
845+
846+
@Override
847+
public void registerContextMenu(MenuManager menu,
848+
ISelectionProvider selectionProvider) {
849+
}
850+
851+
@Override
852+
public IServiceLocator getServiceLocator() {
853+
return null;
854+
}
855+
856+
@Override
857+
public IActionBars getActionBars() {
858+
return null;
859+
}
860+
861+
@Override
862+
public void run(boolean fork, boolean cancelable,
863+
IRunnableWithProgress runnable)
864+
throws InvocationTargetException, InterruptedException {
865+
context.run(fork, cancelable, runnable);
866+
}
867+
868+
@Override
869+
public ICompareNavigator getNavigator() {
870+
return null;
871+
}
872+
873+
@Override
874+
public synchronized void runAsynchronously(IRunnableWithProgress runnable) {
875+
try {
876+
context.run(true, false, runnable);
877+
} catch (InvocationTargetException | InterruptedException e) {
878+
RefactoringUIPlugin.log(e);
879+
}
880+
}
881+
882+
@Override
883+
public IWorkbenchPart getWorkbenchPart() {
884+
return null;
885+
}
886+
}
764887
}

bundles/org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/TextEditChangePreviewViewer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ public void setText(String text) {
118118
current.dispose();
119119
}
120120
}
121+
@SuppressWarnings("unchecked")
122+
@Override
123+
public <T> T getAdapter(Class<T> adapter) {
124+
if (CompareConfiguration.class.equals(adapter)) {
125+
return (T) fCompareConfiguration;
126+
}
127+
return super.getAdapter(adapter);
128+
}
121129
}
122130

123131
private static class CompareElement implements ITypedElement, IEncodedStreamContentAccessor, IResourceProvider {

0 commit comments

Comments
 (0)