Skip to content

Commit 1d3f284

Browse files
show diff in "replace with local history" dialog on selection change
- disallow multi selection in "replace with local history" dialog - fix layouting issue on MacOS when loading the compare viewers on selection change
1 parent 6dd6732 commit 1d3f284

File tree

4 files changed

+96
-7
lines changed

4 files changed

+96
-7
lines changed

team/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/LocalHistoryPage.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,7 @@ private IWorkbenchPartSite getWorkbenchSite(IHistoryPageSite parentSite) {
336336
return null;
337337
}
338338

339-
@Override
340-
public void createControl(Composite parent) {
341-
339+
public final void createControl(Composite parent, boolean allowMultiSelection) {
342340
localComposite = new Composite(parent, SWT.NONE);
343341
GridLayout layout = new GridLayout();
344342
layout.marginHeight = 0;
@@ -348,7 +346,7 @@ public void createControl(Composite parent) {
348346
data.grabExcessVerticalSpace = true;
349347
localComposite.setLayoutData(data);
350348

351-
treeViewer = createTree(localComposite);
349+
treeViewer = createTree(localComposite, allowMultiSelection);
352350

353351
contributeActions();
354352

@@ -362,6 +360,11 @@ public void createControl(Composite parent) {
362360
PlatformUI.getWorkbench().getHelpSystem().setHelp(localComposite, IHelpContextIds.LOCAL_HISTORY_PAGE);
363361
}
364362

363+
@Override
364+
public void createControl(Composite parent) {
365+
createControl(parent, true);
366+
}
367+
365368
private void contributeActions() {
366369
final IPreferenceStore store = TeamUIPlugin.getPlugin().getPreferenceStore();
367370
//Group by Date
@@ -599,8 +602,12 @@ private boolean showGetContentsAction(ITreeSelection sel) {
599602
* @return the group control
600603
*/
601604
protected TreeViewer createTree(Composite parent) {
605+
return createTree(parent, true);
606+
}
607+
608+
protected final TreeViewer createTree(Composite parent, boolean allowMultiSelection) {
602609
historyTableProvider = new LocalFileHistoryTableProvider();
603-
TreeViewer viewer = historyTableProvider.createTree(parent);
610+
TreeViewer viewer = historyTableProvider.createTree(parent, allowMultiSelection);
604611
viewer.setContentProvider(new LocalHistoryContentProvider());
605612
return viewer;
606613
}

team/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/LocalHistoryTableProvider.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,15 @@ public void widgetSelected(SelectionEvent e) {
291291
* @return TableViewer
292292
*/
293293
public TreeViewer createTree(Composite parent) {
294-
Tree tree = new Tree(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION);
294+
return createTree(parent, true);
295+
}
296+
297+
public TreeViewer createTree(Composite parent, boolean allowMultiSelection) {
298+
int style = SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION;
299+
if (allowMultiSelection) {
300+
style = style | SWT.MULTI;
301+
}
302+
Tree tree = new Tree(parent, style);
295303
tree.setHeaderVisible(true);
296304
tree.setLinesVisible(false);
297305

team/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/history/ReplaceLocalHistory.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,33 @@
1313
*******************************************************************************/
1414
package org.eclipse.team.internal.ui.history;
1515

16+
import java.lang.reflect.InvocationTargetException;
17+
1618
import org.eclipse.compare.CompareConfiguration;
1719
import org.eclipse.compare.CompareUI;
20+
import org.eclipse.compare.CompareViewerPane;
1821
import org.eclipse.compare.structuremergeviewer.ICompareInput;
1922
import org.eclipse.core.resources.IFile;
2023
import org.eclipse.core.resources.IFileState;
2124
import org.eclipse.core.runtime.CoreException;
25+
import org.eclipse.core.runtime.NullProgressMonitor;
2226
import org.eclipse.jface.action.IAction;
27+
import org.eclipse.jface.action.IToolBarManager;
28+
import org.eclipse.jface.operation.IRunnableWithProgress;
29+
import org.eclipse.swt.SWT;
30+
import org.eclipse.swt.events.SelectionAdapter;
31+
import org.eclipse.swt.events.SelectionEvent;
32+
import org.eclipse.swt.widgets.Composite;
33+
import org.eclipse.swt.widgets.Control;
34+
import org.eclipse.swt.widgets.Event;
2335
import org.eclipse.swt.widgets.Shell;
36+
import org.eclipse.swt.widgets.Tree;
2437
import org.eclipse.team.internal.ui.TeamUIMessages;
2538
import org.eclipse.team.internal.ui.TeamUIPlugin;
2639
import org.eclipse.team.internal.ui.Utils;
2740
import org.eclipse.team.ui.history.HistoryPageCompareEditorInput;
2841
import org.eclipse.team.ui.history.IHistoryPageSource;
42+
import org.eclipse.ui.part.IPage;
2943

3044
public class ReplaceLocalHistory extends ShowLocalHistory {
3145

@@ -46,6 +60,14 @@ private void showCompareInDialog(Shell shell, Object object){
4660
cc.setLeftEditable(false);
4761
cc.setRightEditable(false);
4862
HistoryPageCompareEditorInput input = new HistoryPageCompareEditorInput(cc, pageSource, object) {
63+
@Override
64+
public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable)
65+
throws InvocationTargetException, InterruptedException {
66+
// Avoid using super.run() on macOS as it causes layout issues.
67+
// The compare viewer controls appear small and do not fill the entire dialog.
68+
runnable.run(new NullProgressMonitor());
69+
}
70+
4971
@Override
5072
public boolean isEditionSelectionDialog() {
5173
return true;
@@ -54,6 +76,48 @@ public boolean isEditionSelectionDialog() {
5476
public String getOKButtonLabel() {
5577
return TeamUIMessages.ReplaceLocalHistory_0;
5678
}
79+
80+
@Override
81+
protected IPage createPage(CompareViewerPane parent, IToolBarManager toolBarManager) {
82+
var page = super.createPage(parent, toolBarManager, false);
83+
Tree tree = getTree(page);
84+
runDefaultSelectionEventOnSelectionChange(tree);
85+
return page;
86+
}
87+
88+
private void runDefaultSelectionEventOnSelectionChange(Tree tree) {
89+
if (tree == null) {
90+
return;
91+
}
92+
tree.addSelectionListener(new SelectionAdapter() {
93+
94+
@Override
95+
public void widgetSelected(SelectionEvent e) {
96+
if (tree.getSelectionCount() != 1) {
97+
return;
98+
}
99+
Event event = new Event();
100+
event.item = e.item;
101+
tree.notifyListeners(SWT.DefaultSelection, event);
102+
}
103+
});
104+
}
105+
private Tree getTree(IPage page) {
106+
Control control = page.getControl();
107+
if (!(control instanceof Composite composite)) {
108+
return null;
109+
}
110+
Control[] children = composite.getChildren();
111+
if (children == null) {
112+
return null;
113+
}
114+
for (Control child : children) {
115+
if (child instanceof Tree t) {
116+
return t;
117+
}
118+
}
119+
return null;
120+
}
57121
@Override
58122
public boolean okPressed() {
59123
try {

team/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/HistoryPageCompareEditorInput.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.eclipse.team.internal.ui.TeamUIMessages;
3232
import org.eclipse.team.internal.ui.Utils;
3333
import org.eclipse.team.internal.ui.history.DialogHistoryPageSite;
34+
import org.eclipse.team.internal.ui.history.LocalHistoryPage;
3435
import org.eclipse.team.ui.PageCompareEditorInput;
3536
import org.eclipse.ui.part.IPage;
3637
import org.eclipse.ui.part.Page;
@@ -79,11 +80,20 @@ protected void handleDispose() {
7980

8081
@Override
8182
protected IPage createPage(CompareViewerPane parent, IToolBarManager toolBarManager) {
83+
return createPage(parent, toolBarManager, true);
84+
}
85+
86+
protected final IPage createPage(CompareViewerPane parent, IToolBarManager toolBarManager,
87+
boolean allowMultiSelection) {
8288
site = new DialogHistoryPageSite(parent.getShell());
8389
historyPage = (IHistoryPage)pageSource.createPage(object);
8490
historyPage.setSite(site);
8591
site.setToolBarManager(toolBarManager);
86-
((Page) historyPage).createControl(parent);
92+
if (historyPage instanceof LocalHistoryPage localHistoryPage) {
93+
localHistoryPage.createControl(parent, allowMultiSelection);
94+
} else {
95+
((Page) historyPage).createControl(parent);
96+
}
8797
historyPage.setInput(object);
8898
String description = historyPage.getDescription();
8999
if (description == null)

0 commit comments

Comments
 (0)