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

Reply via email to