diff options
author | Brian Tarricone <brian@tarricone.org> | 2006-07-14 18:49:46 +0000 |
---|---|---|
committer | Brian Tarricone <brian@tarricone.org> | 2006-07-14 18:49:46 +0000 |
commit | 72044bf9644f1b04f488822414f6455a251cd6cf (patch) | |
tree | e740137d89de0627cc9998c32c419b4803cc4453 | |
parent | 9e83473bb546fe912def73b5acbd2edbabc7f95a (diff) | |
download | xfdesktop-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.c | 17 | ||||
-rw-r--r-- | src/xfdesktop-icon-view.c | 46 |
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); } |