aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--data/empathy-log-window.html25
-rw-r--r--libempathy-gtk/empathy-log-window.c37
2 files changed, 48 insertions, 14 deletions
diff --git a/data/empathy-log-window.html b/data/empathy-log-window.html
index 4decbce6b..5a94b7e09 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));
+}
</script>
</head>
diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c
index ac05740cf..b4501af57 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);