Author: kelnos
Date: 2006-07-14 18:49:46 +0000 (Fri, 14 Jul 2006)
New Revision: 22448
Modified:
xfdesktop/trunk/src/xfdesktop-file-icon.c
xfdesktop/trunk/src/xfdesktop-icon-view.c
Log:
fix pixbuf not being updated if the file's icon is changed, and simplify
some code in the process (bug 2033)
Modified: xfdesktop/trunk/src/xfdesktop-file-icon.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-icon.c 2006-07-14 14:49:33 UTC (rev
22447)
+++ xfdesktop/trunk/src/xfdesktop-file-icon.c 2006-07-14 18:49:46 UTC (rev
22448)
@@ -776,13 +776,26 @@
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 *
Modified: xfdesktop/trunk/src/xfdesktop-icon-view.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-icon-view.c 2006-07-14 14:49:33 UTC (rev
22447)
+++ xfdesktop/trunk/src/xfdesktop-icon-view.c 2006-07-14 18:49:46 UTC (rev
22448)
@@ -2359,32 +2359,8 @@
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 @@
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,11 +2448,8 @@
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),
+
G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
icon_view);
- g_signal_handlers_disconnect_by_func(G_OBJECT(icon),
-
G_CALLBACK(xfdesktop_icon_view_icon_label_changed),
- icon_view);
if(xfdesktop_icon_get_position(icon, &row, &col)) {
xfdesktop_icon_view_clear_icon_extents(icon_view, icon);
@@ -2511,11 +2484,8 @@
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),
+
G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
icon_view);
- g_signal_handlers_disconnect_by_func(G_OBJECT(l->data),
-
G_CALLBACK(xfdesktop_icon_view_icon_label_changed),
- icon_view);
g_object_set_data(G_OBJECT(l->data), "--xfdesktop-icon-view", NULL);
}
g_list_free(icon_view->priv->icons);
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits