summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Tarricone <brian@tarricone.org>2006-07-14 18:49:46 +0000
committerBrian Tarricone <brian@tarricone.org>2006-07-14 18:49:46 +0000
commit72044bf9644f1b04f488822414f6455a251cd6cf (patch)
treee740137d89de0627cc9998c32c419b4803cc4453
parent9e83473bb546fe912def73b5acbd2edbabc7f95a (diff)
downloadxfdesktop-72044bf9644f1b04f488822414f6455a251cd6cf.tar.gz
fix pixbuf not being updated if the file's icon is changed, and simplify
some code in the process (bug 2033) (Old svn revision: 22448)
-rw-r--r--src/xfdesktop-file-icon.c17
-rw-r--r--src/xfdesktop-icon-view.c46
2 files changed, 23 insertions, 40 deletions
diff --git a/src/xfdesktop-file-icon.c b/src/xfdesktop-file-icon.c
index a27d6942..d2bea9de 100644
--- a/src/xfdesktop-file-icon.c
+++ b/src/xfdesktop-file-icon.c
@@ -776,13 +776,26 @@ void
xfdesktop_file_icon_update_info(XfdesktopFileIcon *icon,
ThunarVfsInfo *info)
{
+ gboolean label_changed = TRUE;
+
g_return_if_fail(XFDESKTOP_IS_ICON(icon) && info);
- if(icon->priv->info)
+ if(icon->priv->info) {
+ if(!strcmp(icon->priv->info->display_name, info->display_name))
+ label_changed = FALSE;
thunar_vfs_info_unref(icon->priv->info);
+ }
icon->priv->info = thunar_vfs_info_ref(info);
- xfdesktop_icon_label_changed(XFDESKTOP_ICON(icon));
+ if(label_changed)
+ xfdesktop_icon_label_changed(XFDESKTOP_ICON(icon));
+
+ /* not really easy to check if this changed or not, so just invalidate it */
+ if(icon->priv->pix) {
+ g_object_unref(G_OBJECT(icon->priv->pix));
+ icon->priv->pix = NULL;
+ }
+ xfdesktop_icon_pixbuf_changed(XFDESKTOP_ICON(icon));
}
GList *
diff --git a/src/xfdesktop-icon-view.c b/src/xfdesktop-icon-view.c
index ac6ba670..17093782 100644
--- a/src/xfdesktop-icon-view.c
+++ b/src/xfdesktop-icon-view.c
@@ -2359,30 +2359,6 @@ xfdesktop_icon_view_modify_font_size(XfdesktopIconView *icon_view,
pango_font_description_free(pfd_new);
}
-static void
-xfdesktop_icon_view_icon_pixbuf_changed(XfdesktopIcon *icon,
- gpointer user_data)
-{
- GdkRectangle extents;
-
- if(xfdesktop_icon_get_extents(icon, &extents)) {
- gtk_widget_queue_draw_area(GTK_WIDGET(user_data), extents.x, extents.y,
- extents.width, extents.height);
- }
-}
-
-static void
-xfdesktop_icon_view_icon_label_changed(XfdesktopIcon *icon,
- gpointer user_data)
-{
- GdkRectangle extents;
-
- if(xfdesktop_icon_get_extents(icon, &extents)) {
- gtk_widget_queue_draw_area(GTK_WIDGET(user_data), extents.x, extents.y,
- extents.width, extents.height);
- }
-}
-
/* public api */
@@ -2442,12 +2418,12 @@ xfdesktop_icon_view_add_item(XfdesktopIconView *icon_view,
g_object_set_data(G_OBJECT(icon), "--xfdesktop-icon-view", icon_view);
- g_signal_connect(G_OBJECT(icon), "pixbuf-changed",
- G_CALLBACK(xfdesktop_icon_view_icon_pixbuf_changed),
- icon_view);
- g_signal_connect(G_OBJECT(icon), "label-changed",
- G_CALLBACK(xfdesktop_icon_view_icon_label_changed),
- icon_view);
+ g_signal_connect_swapped(G_OBJECT(icon), "pixbuf-changed",
+ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
+ icon_view);
+ g_signal_connect_swapped(G_OBJECT(icon), "label-changed",
+ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
+ icon_view);
fake_area.x = SCREEN_MARGIN + icon_view->priv->xorigin + col * CELL_SIZE;
fake_area.y = SCREEN_MARGIN + icon_view->priv->yorigin + row * CELL_SIZE;
@@ -2472,10 +2448,7 @@ xfdesktop_icon_view_remove_item(XfdesktopIconView *icon_view,
if(g_list_find(icon_view->priv->icons, icon)) {
g_signal_handlers_disconnect_by_func(G_OBJECT(icon),
- G_CALLBACK(xfdesktop_icon_view_icon_pixbuf_changed),
- icon_view);
- g_signal_handlers_disconnect_by_func(G_OBJECT(icon),
- G_CALLBACK(xfdesktop_icon_view_icon_label_changed),
+ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
icon_view);
if(xfdesktop_icon_get_position(icon, &row, &col)) {
@@ -2511,10 +2484,7 @@ xfdesktop_icon_view_remove_all(XfdesktopIconView *icon_view)
for(l = icon_view->priv->icons; l; l = l->next) {
g_signal_handlers_disconnect_by_func(G_OBJECT(l->data),
- G_CALLBACK(xfdesktop_icon_view_icon_pixbuf_changed),
- icon_view);
- g_signal_handlers_disconnect_by_func(G_OBJECT(l->data),
- G_CALLBACK(xfdesktop_icon_view_icon_label_changed),
+ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
icon_view);
g_object_set_data(G_OBJECT(l->data), "--xfdesktop-icon-view", NULL);
}