### Eclipse Workspace Patch 1.0 #P org.eclipse.jface Index: src/org/eclipse/jface/viewers/TreeViewerRow.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeViewerRow.java,v retrieving revision 1.20 diff -u -r1.20 TreeViewerRow.java --- src/org/eclipse/jface/viewers/TreeViewerRow.java 25 May 2009 20:52:37 -0000 1.20 +++ src/org/eclipse/jface/viewers/TreeViewerRow.java 3 Feb 2010 06:23:51 -0000 @@ -19,6 +19,7 @@ import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Tree; @@ -395,9 +396,33 @@ } protected boolean scrollCellIntoView(int columnIndex) { - item.getParent().showItem(item); - if( hasColumns() ) { - item.getParent().showColumn(item.getParent().getColumn(columnIndex)); + Tree tree = item.getParent(); + Rectangle itemBnds = getBounds(); + Rectangle clientArea = tree.getClientArea(); + boolean reDrwTogl = false; + try { + boolean updRow = !(clientArea.contains(new Point(clientArea.x + + clientArea.width / 2/* since we check only y for rows */ + , itemBnds.y + itemBnds.height))); + if (updRow) { // only if showItem required + reDrwTogl = true; + tree.setRedraw(false); + tree.showItem(item); + } + itemBnds = getBounds(columnIndex); + boolean updColumn = !(clientArea.contains(new Point( + /* SWT sets scroll to similar value. Check only x for column */ + itemBnds.x + itemBnds.width, itemBnds.y))); + if (hasColumns() && updColumn) { // only if showColumn required + if (!reDrwTogl) { + reDrwTogl = true; + tree.setRedraw(false); + } + tree.showColumn(tree.getColumn(columnIndex)); + } + } finally { + if (reDrwTogl) + tree.setRedraw(true); } return true; }