[Xfce4-commits] r23647 - xfdesktop/trunk/src

Brian Tarricone kelnos at xfce.org
Sat Nov 4 13:53:22 CET 2006


Author: kelnos
Date: 2006-11-04 12:53:21 +0000 (Sat, 04 Nov 2006)
New Revision: 23647

Modified:
   xfdesktop/trunk/src/xfdesktop-volume-icon.c
Log:
be sure to catch mount point changes if the volume is updated (e.g. mounted
or unmounted) outside of xfdesktop (bug 2489)


Modified: xfdesktop/trunk/src/xfdesktop-volume-icon.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-volume-icon.c	2006-11-04 12:48:49 UTC (rev 23646)
+++ xfdesktop/trunk/src/xfdesktop-volume-icon.c	2006-11-04 12:53:21 UTC (rev 23647)
@@ -81,6 +81,8 @@
 static void xfdesktop_volume_icon_tfi_init(ThunarxFileInfoIface *iface);
 #endif
 
+static void xfdesktop_volume_icon_volume_changed_cb(ThunarVfsVolume *volume,
+                                                    gpointer user_data);
 static inline void xfdesktop_volume_icon_invalidate_pixbuf(XfdesktopVolumeIcon *icon);
 
 
@@ -140,6 +142,10 @@
                                          G_CALLBACK(xfdesktop_volume_icon_invalidate_pixbuf),
                                          icon);
     
+    g_signal_handlers_disconnect_by_func(G_OBJECT(icon->priv->volume),
+                                         G_CALLBACK(xfdesktop_volume_icon_volume_changed_cb),
+                                         icon);
+    
     if(icon->priv->pix)
         g_object_unref(G_OBJECT(icon->priv->pix));
     
@@ -170,6 +176,31 @@
 }
 #endif  /* HAVE_THUNARX */
 
+
+static void
+xfdesktop_volume_icon_volume_changed_cb(ThunarVfsVolume *volume,
+                                        gpointer user_data)
+{
+    XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(user_data);
+    ThunarVfsPath *new_path;
+    
+    new_path = thunar_vfs_volume_get_mount_point(volume);
+    if(new_path) {
+        ThunarVfsInfo *new_info = thunar_vfs_info_new_for_path(new_path, NULL);
+        
+        if(new_info) {
+            xfdesktop_file_icon_update_info(file_icon, new_info);
+            thunar_vfs_info_unref(new_info);
+            return;
+        }
+        
+        /* |new_path| is owned by |volume| */
+    }
+    
+    /* both new and old info is NULL or stale */
+    xfdesktop_file_icon_update_info(file_icon, NULL);
+}
+
 static inline void
 xfdesktop_volume_icon_invalidate_pixbuf(XfdesktopVolumeIcon *icon)
 {
@@ -453,22 +484,8 @@
     
     if(!is_mount)
         thunar_vfs_volume_unmount(icon->priv->volume, toplevel, &error);
-    else {
-        if(thunar_vfs_volume_mount(icon->priv->volume, toplevel, &error)) {
-            const ThunarVfsInfo *info = icon->priv->info;
-            ThunarVfsPath *new_path = thunar_vfs_volume_get_mount_point(icon->priv->volume);
-            
-            if(!info || !thunar_vfs_path_equal(info->path, new_path)) {
-                ThunarVfsInfo *new_info = thunar_vfs_info_new_for_path(new_path,
-                                                                       NULL);
-                if(new_info) {
-                    xfdesktop_file_icon_update_info(XFDESKTOP_FILE_ICON(icon),
-                                                    new_info);
-                    thunar_vfs_info_unref(new_info);
-                }
-            }
-        }
-    }
+    else
+        thunar_vfs_volume_mount(icon->priv->volume, toplevel, &error);
     
     if(error) {
         gchar *primary = g_markup_printf_escaped(is_mount ? _("Unable to mount \"%s\":")
@@ -664,6 +681,10 @@
         /* |path| is owned by |volume|, do not free */
     }
     
+    g_signal_connect(G_OBJECT(volume), "changed",
+                     G_CALLBACK(xfdesktop_volume_icon_volume_changed_cb),
+                     volume_icon);
+    
     return volume_icon;
 }
 



More information about the Xfce4-commits mailing list