[epiphany] ephy-bookmarks-editor: repaint the favicon on "icon-loaded"
- From: Sergio Villar Senin <svillar src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] ephy-bookmarks-editor: repaint the favicon on "icon-loaded"
- Date: Mon, 3 Sep 2012 10:25:50 +0000 (UTC)
commit b0c5be1011f5fed19c6979b63e9d12475fd381d3
Author: Sergio Villar Senin <svillar igalia com>
Date: Fri Aug 24 12:14:05 2012 +0200
ephy-bookmarks-editor: repaint the favicon on "icon-loaded"
Fixes a crash when epy is started with the bookmarks window open. The old
code was trying to set the favicon in an already released GValue. Instead of
doing that, we now force a repaint of the row once we get the favicon.
https://bugzilla.gnome.org/show_bug.cgi?id=673795
lib/widgets/ephy-node-view.c | 2 +-
src/bookmarks/ephy-bookmarks-editor.c | 42 ++++++++++++++++++++++++++------
2 files changed, 35 insertions(+), 9 deletions(-)
---
diff --git a/lib/widgets/ephy-node-view.c b/lib/widgets/ephy-node-view.c
index 1be6c93..53830e1 100644
--- a/lib/widgets/ephy-node-view.c
+++ b/lib/widgets/ephy-node-view.c
@@ -1304,7 +1304,7 @@ ephy_node_view_add_column (EphyNodeView *view,
if (icon_func)
{
icon_column = ephy_tree_model_node_add_func_column
- (view->priv->nodemodel, GDK_TYPE_PIXBUF, icon_func, NULL);
+ (view->priv->nodemodel, GDK_TYPE_PIXBUF, icon_func, view);
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (gcolumn, renderer, FALSE);
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c
index eeeecac..221ab9a 100644
--- a/src/bookmarks/ephy-bookmarks-editor.c
+++ b/src/bookmarks/ephy-bookmarks-editor.c
@@ -1474,13 +1474,25 @@ webkit_favicon_database_has_favicon (WebKitFaviconDatabase *database, const char
}
static void
-icon_loaded_cb (WebKitFaviconDatabase *database, GAsyncResult *result, GValue *value)
+icon_loaded_cb (WebKitFaviconDatabase *database, GAsyncResult *result, GtkTreeRowReference *reference)
{
GdkPixbuf *favicon = webkit_favicon_database_get_favicon_pixbuf_finish (database, result, NULL);
- if (!favicon)
- return;
- g_value_take_object (value, favicon);
+ if (favicon && gtk_tree_row_reference_valid (reference)) {
+ GtkTreeModel *model = gtk_tree_row_reference_get_model (reference);
+ GtkTreePath *path = gtk_tree_row_reference_get_path (reference);
+ GtkTreeIter iter;
+
+ /* Force repaint. */
+ if (gtk_tree_model_get_iter (model, &iter, path))
+ gtk_tree_model_row_changed (model, path, &iter);
+
+ gtk_tree_path_free (path);
+ }
+
+ gtk_tree_row_reference_free (reference);
+ if (favicon)
+ g_object_unref (favicon);
}
#endif
@@ -1506,10 +1518,24 @@ provide_favicon (EphyNode *node, GValue *value, gpointer user_data)
favicon = webkit_favicon_database_try_get_favicon_pixbuf (database, page_location,
FAVICON_SIZE, FAVICON_SIZE);
- if (!favicon && webkit_favicon_database_has_favicon (database, page_location))
- webkit_favicon_database_get_favicon_pixbuf (database, page_location,
- FAVICON_SIZE, FAVICON_SIZE, NULL,
- (GAsyncReadyCallback) icon_loaded_cb, value);
+ if (!favicon && webkit_favicon_database_has_favicon (database, page_location)) {
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (user_data));
+ GtkTreeIter iter;
+
+ if (ephy_node_view_get_iter_for_node (EPHY_NODE_VIEW (user_data), &iter, node)) {
+ GtkTreeRowReference *reference;
+ GtkTreePath *path;
+
+ path = gtk_tree_model_get_path (model, &iter);
+ reference = gtk_tree_row_reference_new (model, path);
+ gtk_tree_path_free (path);
+
+ webkit_favicon_database_get_favicon_pixbuf (database, page_location,
+ FAVICON_SIZE, FAVICON_SIZE, NULL,
+ (GAsyncReadyCallback) icon_loaded_cb,
+ reference);
+ }
+ }
}
g_value_init (value, GDK_TYPE_PIXBUF);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]