GdkRectangle visibleRect = new GdkRectangle (); OS.gtk_tree_view_get_visible_rect (handle, visibleRect); OS.gtk_tree_view_scroll_to_cell (handle, path, 0, false, 0f, 0f); int height = Math.min (visibleRect.height, cellRect.height); if (cellRect.y + height > visibleRect.y + visibleRect.height) { int tree_y = visibleRect.y + cellRect.y - visibleRect.height + cellRect.height; OS.gtk_tree_view_scroll_to_point (handle, -1, tree_y);
int[] tx = new int[1], ty = new int[1]; OS.gtk_tree_view_widget_to_tree_coords(handle, cellRect.x, cellRect.y, tx, ty); if (ty[0] < visibleRect.y ) { OS.gtk_tree_view_scroll_to_cell (handle, path, 0, true, 0f, 0f); OS.gtk_tree_view_scroll_to_point (handle, -1, ty[0]); } else { int height = Math.min (visibleRect.height, cellRect.height); if (ty[0] + height > visibleRect.y + visibleRect.height) { OS.gtk_tree_view_scroll_to_cell (handle, path, 0, true, 1f, 0f); ty[0] += cellRect.height - visibleRect.height; OS.gtk_tree_view_scroll_to_point (handle, -1, ty[0]); }
public void showSelection () {	checkWidget();	int index = getSelectionIndex ();	if (index == -1) return;	int /*long*/ iter = OS.g_malloc (OS.GtkTreeIter_sizeof ());	OS.gtk_tree_model_iter_nth_child (modelHandle, iter, 0, index);	int /*long*/ path = OS.gtk_tree_model_get_path (modelHandle, iter);	/*	* This code intentionally commented.	* Bug in GTK.  According to the documentation, gtk_tree_view_scroll_to_cell	* should scroll the minimum amount to show the cell if use_align is false.	* However, what actually happens is the cell is scrolled to the top.	* The fix is to determine the new location and use gtk_tree_view_scroll_to_point.	* If the widget is a pinhead, calling gtk_tree_view_scroll_to_point	* will have no effect. Therefore, it is still neccessary to 	* call gtk_tree_view_scroll_to_cell.	*///	OS.gtk_tree_view_scroll_to_cell (handle, path, 0, false, 0, 0);	OS.gtk_widget_realize (handle);	GdkRectangle cellRect = new GdkRectangle ();	OS.gtk_tree_view_get_cell_area (handle, path, 0, cellRect);	GdkRectangle visibleRect = new GdkRectangle ();	OS.gtk_tree_view_get_visible_rect (handle, visibleRect);	OS.gtk_tree_view_scroll_to_cell (handle, path, 0, false, 0f, 0f);	int height = Math.min (visibleRect.height, cellRect.height);	if (cellRect.y + height > visibleRect.y + visibleRect.height) {		int tree_y = visibleRect.y + cellRect.y - visibleRect.height + cellRect.height;		OS.gtk_tree_view_scroll_to_point (handle, -1, tree_y);	}	OS.gtk_tree_path_free (path);	OS.g_free (iter);}