### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.ui Index: ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java,v retrieving revision 1.16 diff -u -r1.16 JavaStructureDiffViewer.java --- ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java 16 Dec 2008 10:20:24 -0000 1.16 +++ ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java 27 Mar 2009 10:15:36 -0000 @@ -26,6 +26,7 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareViewerPane; @@ -198,7 +199,13 @@ protected void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(SMART)) diff(); - else + else if (event.getProperty().equals("RESET_DIFF_TREE_VIEWER_SELECTION")) { + setSelection(new ISelection() { + public boolean isEmpty() { + return true; + } + }); + } else super.propertyChange(event); } #P org.eclipse.compare Index: compare/org/eclipse/compare/internal/CompareEditor.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java,v retrieving revision 1.78 diff -u -r1.78 CompareEditor.java --- compare/org/eclipse/compare/internal/CompareEditor.java 23 Mar 2009 09:35:35 -0000 1.78 +++ compare/org/eclipse/compare/internal/CompareEditor.java 27 Mar 2009 10:15:37 -0000 @@ -421,7 +421,7 @@ CompareEditorInput ci = (CompareEditorInput) input; if (ci.getCompareResult() == null) { if (getState() == INITIALIZING) { - getSite().setSelectionProvider(new CompareEditorSelectionProvider()); + getSite().setSelectionProvider(new CompareEditorSelectionProvider(getCompareConfiguration())); setPageLater(); } else if (getState() == STILL_INITIALIZING) { if (initializingPage == null) { @@ -445,7 +445,7 @@ // Set the state in case this method gets called again setState(CREATING_CONTROL); if (getSite().getSelectionProvider() == null) - getSite().setSelectionProvider(new CompareEditorSelectionProvider()); + getSite().setSelectionProvider(new CompareEditorSelectionProvider(getCompareConfiguration())); fControl= ci.createContents(fPageBook); fPageBook.showPage(fControl); PlatformUI.getWorkbench().getHelpSystem().setHelp(fControl, ICompareContextIds.COMPARE_EDITOR); Index: compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java,v retrieving revision 1.2 diff -u -r1.2 CompareEditorSelectionProvider.java --- compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java 27 Jan 2009 15:43:57 -0000 1.2 +++ compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java 27 Mar 2009 10:15:37 -0000 @@ -10,8 +10,11 @@ *******************************************************************************/ package org.eclipse.compare.internal; +import org.eclipse.compare.CompareConfiguration; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.ListenerList; +import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.TextSelection; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.viewers.IPostSelectionProvider; @@ -66,12 +69,13 @@ } private TextViewer[] fViewers; - private TextViewer fViewerInFocus; private ListenerList fSelectionChangedListeners; private ListenerList fPostSelectionChangedListeners; + private CompareConfiguration fCompareConfiguration; - public CompareEditorSelectionProvider() { + public CompareEditorSelectionProvider(CompareConfiguration cc) { + fCompareConfiguration = cc; fSelectionChangedListeners = new ListenerList(); fPostSelectionChangedListeners = new ListenerList(); // nothing more to do here, Compare Editor is initializing @@ -199,6 +203,16 @@ public void setSelection(ISelection selection, boolean reveal) { if (fViewerInFocus != null) { + if (reveal) { + IRegion visible = fViewerInFocus.getVisibleRegion(); + if (selection instanceof ITextSelection) { + ITextSelection s= (ITextSelection) selection; + if (s.getOffset() < visible.getOffset() + || s.getOffset() + s.getLength() > visible.getOffset() + visible.getLength()) { + fCompareConfiguration.setProperty("RESET_DIFF_TREE_VIEWER_SELECTION", null); + } + } + } fViewerInFocus.setSelection(selection, reveal); } }