[evolution] Bug #593700 - Opens folder on top
- From: Milan Crha <mcrha src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution] Bug #593700 - Opens folder on top
- Date: Wed, 10 Feb 2010 17:28:13 +0000 (UTC)
commit 62a56d5d8f66fe0e47b6a2cda9be8e227922a29a
Author: Milan Crha <mcrha redhat com>
Date: Wed Feb 10 18:27:35 2010 +0100
Bug #593700 - Opens folder on top
mail/message-list.c | 2 +
widgets/table/e-tree.c | 60 +++++++++++++++++++++++++++++++++++------------
widgets/table/e-tree.h | 2 +
3 files changed, 48 insertions(+), 16 deletions(-)
---
diff --git a/mail/message-list.c b/mail/message-list.c
index 78709e1..277b116 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -4645,6 +4645,8 @@ regen_list_done (struct _regen_list_msg *m)
tree = E_TREE (m->ml);
+ e_tree_show_cursor_after_reflow (tree);
+
g_signal_handlers_block_by_func (e_tree_get_table_adapter (tree), ml_tree_sorting_changed, m->ml);
e_profile_event_emit("list.buildtree", m->folder->full_name, 0);
diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c
index 3d5c604..5e17390 100644
--- a/widgets/table/e-tree.c
+++ b/widgets/table/e-tree.c
@@ -137,6 +137,8 @@ struct ETreePriv {
gint scroll_idle_id;
gint hover_idle_id;
+ gboolean show_cursor_after_reflow;
+
gint table_model_change_id;
gint table_row_change_id;
gint table_cell_change_id;
@@ -561,6 +563,8 @@ e_tree_init (ETree *e_tree)
e_tree->priv->scroll_idle_id = 0;
e_tree->priv->hover_idle_id = 0;
+ e_tree->priv->show_cursor_after_reflow = FALSE;
+
e_tree->priv->table_model_change_id = 0;
e_tree->priv->table_row_change_id = 0;
e_tree->priv->table_cell_change_id = 0;
@@ -729,6 +733,29 @@ e_tree_setup_header (ETree *e_tree)
E_TABLE_HEADER_ITEM (e_tree->priv->header_item)->height);
}
+static void
+scroll_to_cursor (ETree *e_tree)
+{
+ ETreePath path;
+ GtkAdjustment *adj;
+ gint x, y, w, h;
+
+ path = e_tree_get_cursor (e_tree);
+ adj = GTK_LAYOUT (e_tree->priv->table_canvas)->vadjustment;
+ x = y = w = h = 0;
+ if (path) {
+ gint row = e_tree_row_of_node(e_tree, path);
+ gint col = 0;
+
+ if (row >= 0)
+ e_table_item_get_cell_geometry (E_TABLE_ITEM (e_tree->priv->item),
+ &row, &col, &x, &y, &w, &h);
+ }
+
+ if (y < adj->value || y + h > adj->value + adj->page_size)
+ gtk_adjustment_set_value(adj, CLAMP(y - adj->page_size / 2, adj->lower, adj->upper - adj->page_size));
+}
+
static gboolean
tree_canvas_reflow_idle (ETree *e_tree)
{
@@ -753,6 +780,12 @@ tree_canvas_reflow_idle (ETree *e_tree)
set_header_canvas_width (e_tree);
}
e_tree->priv->reflow_idle_id = 0;
+
+ if (e_tree->priv->show_cursor_after_reflow) {
+ e_tree->priv->show_cursor_after_reflow = FALSE;
+ scroll_to_cursor (e_tree);
+ }
+
return FALSE;
}
@@ -762,9 +795,6 @@ tree_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc,
{
gdouble width;
gdouble height;
- GtkAdjustment *adj = GTK_LAYOUT(e_tree->priv->table_canvas)->vadjustment;
- ETreePath path = e_tree_get_cursor (e_tree);
- gint x, y, w, h;
GValue *val = g_new0 (GValue, 1);
g_value_init (val, G_TYPE_DOUBLE);
@@ -784,19 +814,7 @@ tree_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc,
if (e_tree->priv->reflow_idle_id)
g_source_remove(e_tree->priv->reflow_idle_id);
tree_canvas_reflow_idle(e_tree);
-
- x = y = w = h = 0;
- if (path) {
- gint row = e_tree_row_of_node(e_tree, path);
- gint col = 0;
-
- if (row >= 0)
- e_table_item_get_cell_geometry (E_TABLE_ITEM (e_tree->priv->item),
- &row, &col, &x, &y, &w, &h);
- }
-
- if (y < adj->value || y + h > adj->value + adj->page_size)
- gtk_adjustment_set_value(adj, CLAMP(y - adj->page_size / 2, adj->lower, adj->upper - adj->page_size));
+ scroll_to_cursor (e_tree);
}
static void
@@ -1684,6 +1702,16 @@ e_tree_new_from_spec_file (ETreeModel *etm, ETableExtras *ete, const gchar *spec
}
void
+e_tree_show_cursor_after_reflow (ETree *e_tree)
+{
+ g_return_if_fail (e_tree != NULL);
+ g_return_if_fail (E_IS_TREE (e_tree));
+
+ e_tree->priv->show_cursor_after_reflow = TRUE;
+}
+
+
+void
e_tree_set_cursor (ETree *e_tree, ETreePath path)
{
#ifndef E_TREE_USE_TREE_SELECTION
diff --git a/widgets/table/e-tree.h b/widgets/table/e-tree.h
index b746156..5657751 100644
--- a/widgets/table/e-tree.h
+++ b/widgets/table/e-tree.h
@@ -173,6 +173,8 @@ void e_tree_set_state_object (ETree *e_tree,
ETableState *state);
void e_tree_load_state (ETree *e_tree,
const gchar *filename);
+void e_tree_show_cursor_after_reflow (ETree *e_tree);
+
void e_tree_set_cursor (ETree *e_tree,
ETreePath path);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]