From: Danielle Madeley Date: Tue, 16 Aug 2011 03:55:56 +0000 (+1000) Subject: Reimplement scrollToRow X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=9d1f95bebe28683a23f56568539ee2c56655b80c Reimplement scrollToRow N.B. This has not been properly tested, because I'm not actually sure how to exhaust this codepath. --- diff --git a/data/empathy-log-window.html b/data/empathy-log-window.html index 4decbce6..5a94b7e0 100644 --- a/data/empathy-log-window.html +++ b/data/empathy-log-window.html @@ -237,6 +237,31 @@ function hasChildRows (path, has_children) else toggle.style.display = 'none'; } + +function getOffset (node) +{ + var y = 0; + + while (node != null && !isNaN(node.offsetTop)) + { + y += node.offsetTop - node.scrollTop; + node = node.offsetParent; + } + + return y; +} + +function scrollToRow (path) +{ + var treeview = document.getElementById('treeview'); + var node = treeview; + + // walk the tree + for (var i = 0; i < path.length; i++) + node = getNodes(node)[path[i]]; + + window.scrollTo(0, getOffset(node)); +} diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c index ac05740c..b4501af5 100644 --- a/libempathy-gtk/empathy-log-window.c +++ b/libempathy-gtk/empathy-log-window.c @@ -3049,13 +3049,12 @@ log_window_got_messages_for_date_cb (GObject *manager, gpointer user_data) { Ctx *ctx = user_data; - // GtkTreeView *view; - // GtkTreeModel *model; - // GtkTreeIter iter; + GtkTreeModel *model; + GtkTreeIter iter; GList *events; GList *l; GError *error = NULL; - // gint n; + gint n; if (log_window == NULL) { @@ -3129,18 +3128,28 @@ log_window_got_messages_for_date_cb (GObject *manager, } g_list_free (events); - // view = GTK_TREE_VIEW (log_window->priv->treeview_events); - // model = gtk_tree_view_get_model (view); - // n = gtk_tree_model_iter_n_children (model, NULL) - 1; + model = GTK_TREE_MODEL (log_window->priv->store_events); + n = gtk_tree_model_iter_n_children (model, NULL) - 1; + + if (n >= 0 && gtk_tree_model_iter_nth_child (model, &iter, NULL, n)) + { + GtkTreePath *path; + char *str, *script; + + path = gtk_tree_model_get_path (model, &iter); + str = gtk_tree_path_to_string (path); - // if (n >= 0 && gtk_tree_model_iter_nth_child (model, &iter, NULL, n)) - // { - // GtkTreePath *path; + script = g_strdup_printf ("javascript:scrollToRow([%s]);", + g_strdelimit (str, ":", ',')); - // path = gtk_tree_model_get_path (model, &iter); - // gtk_tree_view_scroll_to_cell (view, path, NULL, FALSE, 0, 0); - // gtk_tree_path_free (path); - // } + webkit_web_view_execute_script ( + WEBKIT_WEB_VIEW (log_window->priv->webview), + script); + + gtk_tree_path_free (path); + g_free (str); + g_free (script); + } out: ctx_free (ctx);