[evolution-patches] [Fwd: 42126: etree scroll adjustment]



Sent from the wrong account again.  damnit.
--- Begin Message ---
ETree only ever really adjusted it's scroll position on user input,
which would lead to trees being shown with the cursor out of view
occasionally.  This patch causes the cursor to be centered in the canvas
view whenever the canvas is reflown, ie whenever it changes size and on
initial display.

Mike
Index: gal/e-table/ChangeLog
===================================================================
RCS file: /cvs/gnome/gal/gal/e-table/ChangeLog,v
retrieving revision 1.893
diff -u -p -r1.893 ChangeLog
--- gal/e-table/ChangeLog	6 May 2003 18:19:15 -0000	1.893
+++ gal/e-table/ChangeLog	8 May 2003 20:43:33 -0000
@@ -1,3 +1,9 @@
+2003-05-08  Mike Kestner  <mkestner ximian com>
+
+	* e-tree.c (tree_canvas_reflow_idle): update the adjustment to center
+	the cursor.
+	(hover_timeout): remove unused variable to fix warning
+
 2003-05-06  Mike Kestner  <mkestner ximian com>
 
 	* e-tree-table-adapter.c (insert_node): add missing model_changed
Index: gal/e-table/e-tree.c
===================================================================
RCS file: /cvs/gnome/gal/gal/e-table/e-tree.c,v
retrieving revision 1.97
diff -u -p -r1.97 e-tree.c
--- gal/e-table/e-tree.c	2 Apr 2003 23:34:36 -0000	1.97
+++ gal/e-table/e-tree.c	8 May 2003 20:43:36 -0000
@@ -718,6 +718,9 @@ tree_canvas_reflow_idle (ETree *e_tree)
 	gdouble item_height;
 	gdouble oldheight, oldwidth;
 	GtkAllocation *alloc = &(GTK_WIDGET (e_tree->priv->table_canvas)->allocation);
+	GtkAdjustment *adj = GTK_LAYOUT(e_tree->priv->table_canvas)->vadjustment;
+	ETreePath path = e_tree_get_cursor (e_tree);
+	gint x, y, w, h;
 
 	g_object_get (e_tree->priv->item,
 		      "height", &height,
@@ -736,6 +739,13 @@ tree_canvas_reflow_idle (ETree *e_tree)
 						0, 0, width - 1, height - 1);
 		set_header_canvas_width (e_tree);
 	}
+
+	if (path) {
+		e_tree_get_cell_geometry (e_tree, e_tree_row_of_node(e_tree, path), 0, &x, &y, &w, &h);
+		if (y < adj->value || y > adj->value + adj->page_size)
+			gtk_adjustment_set_value(adj, CLAMP(y - adj->page_size / 2, adj->lower, adj->upper - adj->page_size));
+	}
+
 	e_tree->priv->reflow_idle_id = 0;
 	return FALSE;
 }
@@ -2716,7 +2726,6 @@ static gboolean
 hover_timeout (gpointer data)
 {
 	ETree *et = data;
-	GtkWidget *widget = data;
 	int x = et->priv->hover_x;
 	int y = et->priv->hover_y;
 	int row, col;

--- End Message ---


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]