[Goodies-commits] r2653 - in xfce4-places-plugin/branches/volumes: . panel-plugin

Diego Ongaro ongardie at xfce.org
Mon Apr 2 21:58:04 CEST 2007


Author: ongardie
Date: 2007-04-02 19:58:04 +0000 (Mon, 02 Apr 2007)
New Revision: 2653

Modified:
   xfce4-places-plugin/branches/volumes/ChangeLog
   xfce4-places-plugin/branches/volumes/panel-plugin/places.c
   xfce4-places-plugin/branches/volumes/panel-plugin/places.h
Log:
2007-04-02  Diego Ongaro  ongardie at gmail.com

* Added dumb signal-listening for volume changes 
  (reloads volumes, rebuilds menu when anything changes)


Modified: xfce4-places-plugin/branches/volumes/ChangeLog
===================================================================
--- xfce4-places-plugin/branches/volumes/ChangeLog	2007-04-02 18:58:16 UTC (rev 2652)
+++ xfce4-places-plugin/branches/volumes/ChangeLog	2007-04-02 19:58:04 UTC (rev 2653)
@@ -1,6 +1,8 @@
 2007-04-02  Diego Ongaro  ongardie at gmail.com
 
-	* Added volumes as static items in menu (w/o updates)
+	* Added volumes as items in menu
+	* Added dumb signal-listening for volume changes 
+	  (reloads volumes, rebuilds menu when anything changes)
 
 2007-04-01  Diego Ongaro  ongardie at gmail.com
 

Modified: xfce4-places-plugin/branches/volumes/panel-plugin/places.c
===================================================================
--- xfce4-places-plugin/branches/volumes/panel-plugin/places.c	2007-04-02 18:58:16 UTC (rev 2652)
+++ xfce4-places-plugin/branches/volumes/panel-plugin/places.c	2007-04-02 19:58:04 UTC (rev 2653)
@@ -57,6 +57,8 @@
 {
     DBG ("Construct: %s", PLUGIN_NAME);
 
+    thunar_vfs_init();
+    
     PlacesData *pd = panel_slice_new0(PlacesData);
     pd->plugin = plugin;
     places_init_bookmarks(pd);
@@ -64,6 +66,12 @@
 
     //xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8"); 
 
+    g_signal_connect (pd->bookmarks_volumes_manager, "volumes-added",
+                      G_CALLBACK (places_cb_volumes_changed), pd);
+
+    g_signal_connect (pd->bookmarks_volumes_manager, "volumes-removed",
+                      G_CALLBACK (places_cb_volumes_changed), pd);
+
     g_signal_connect (pd->panel_button, "button-release-event",
                       G_CALLBACK (places_cb_button_act), NULL);
    
@@ -90,6 +98,8 @@
     places_init_bookmarks_system(pd);
 
     pd->bookmarks_volumes = g_ptr_array_new();
+    pd->bookmarks_volumes_changed = FALSE;
+    pd->bookmarks_volumes_manager = thunar_vfs_volume_manager_get_default();
     places_init_bookmarks_volumes(pd);
 
     pd->bookmarks_user_filename = g_build_filename(xfce_get_homedir(), ".gtk-bookmarks", NULL);
@@ -130,15 +140,15 @@
 {
     DBG("initializing");
 
-    thunar_vfs_init();
-
     ThunarVfsVolume* volume;
-    ThunarVfsVolumeManager* volume_man = thunar_vfs_volume_manager_get_default();
-    const GList* volumes = thunar_vfs_volume_manager_get_volumes(volume_man);
+    const GList* volumes = thunar_vfs_volume_manager_get_volumes(pd->bookmarks_volumes_manager);
     
     while(volumes){
         volume = THUNAR_VFS_VOLUME(volumes->data);
         
+        g_signal_connect (volume, "changed",
+                      G_CALLBACK (places_cb_volume_changed), pd);
+
         if(thunar_vfs_volume_is_mounted(volume)){ // is this the criteria Thunar uses?
             g_ptr_array_add(pd->bookmarks_volumes, places_construct_BookmarkInfo(
                         g_strdup(thunar_vfs_volume_get_name(volume)),
@@ -149,10 +159,6 @@
         volumes = volumes->next;
     }
     
-    g_object_unref(volume_man);
-
-    thunar_vfs_shutdown();
-  
 }
 
 
@@ -415,6 +421,18 @@
 
 }
 
+/********** ThunarVFS Callbacks **********/
+
+static void
+places_cb_volume_changed(ThunarVfsVolume *volume, PlacesData *pd){
+    pd->bookmarks_volumes_changed = TRUE;
+}
+
+static void
+places_cb_volumes_changed(ThunarVfsVolumeManager *volume_manager, ThunarVfsVolume *volume, PlacesData *pd){
+    pd->bookmarks_volumes_changed = TRUE;
+}
+
 /********** Gtk Callbacks **********/
 
 static gboolean
@@ -513,16 +531,30 @@
     }else{
         // This will make it behave like a mouse release when it's really a mouse press
         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(arrow), TRUE);
-
-        if(places_get_bookmarks_user_mtime(pd) > pd->bookmarks_user_loaded){
-            DBG("bookmarks file changed");
-
+    
+        gboolean volumes_changed = pd->bookmarks_volumes_changed;
+        gboolean user_changed = places_get_bookmarks_user_mtime(pd) > pd->bookmarks_user_loaded;
+        
+        if(volumes_changed || user_changed){
+            
             gtk_widget_destroy(pd->panel_menu);
             
-            g_ptr_array_free(pd->bookmarks_user, TRUE);
-            pd->bookmarks_user = g_ptr_array_new();
-            places_init_bookmarks_user(pd);
+            if(volumes_changed){
+                DBG("volumes changed");
+                g_ptr_array_free(pd->bookmarks_volumes, TRUE);
+                pd->bookmarks_volumes = g_ptr_array_new();
+                places_init_bookmarks_volumes(pd);
+                pd->bookmarks_volumes_changed = FALSE;
+            }
 
+            if(user_changed){
+                DBG("bookmarks file changed");
+
+                g_ptr_array_free(pd->bookmarks_user, TRUE);
+                pd->bookmarks_user = g_ptr_array_new();
+                places_init_bookmarks_user(pd);
+            }
+
             places_init_panel_menu(pd);
             g_signal_connect (pd->panel_menu, "deactivate", 
                       G_CALLBACK(places_cb_menu_close), pd);
@@ -568,7 +600,8 @@
     g_assert(pd != NULL);
     
     thunar_vfs_shutdown();
-
+    g_object_unref(pd->bookmarks_volumes_manager);
+    
     g_ptr_array_free(pd->bookmarks_system, TRUE);
     g_ptr_array_free(pd->bookmarks_volumes, TRUE);
     g_ptr_array_free(pd->bookmarks_user, TRUE);

Modified: xfce4-places-plugin/branches/volumes/panel-plugin/places.h
===================================================================
--- xfce4-places-plugin/branches/volumes/panel-plugin/places.h	2007-04-02 18:58:16 UTC (rev 2652)
+++ xfce4-places-plugin/branches/volumes/panel-plugin/places.h	2007-04-02 19:58:04 UTC (rev 2653)
@@ -36,6 +36,8 @@
   // bookmarks
   GPtrArray *bookmarks_system;
   GPtrArray *bookmarks_volumes;
+  gboolean   bookmarks_volumes_changed;
+  ThunarVfsVolumeManager* bookmarks_volumes_manager;
   GPtrArray *bookmarks_user;
   gchar     *bookmarks_user_filename;
   time_t     bookmarks_user_loaded;
@@ -73,6 +75,10 @@
 static GtkWidget* places_bookmark_info_to_gtk_menu_item(BookmarkInfo*);
 static void places_ui_redraw(PlacesData*);
 
+// ThunarVFS Callbacks
+static void places_cb_volume_changed(ThunarVfsVolume*, PlacesData*);
+static void places_cb_volumes_changed(ThunarVfsVolumeManager*, ThunarVfsVolume*, PlacesData*);
+
 // GTK Callbacks
 static gboolean places_cb_size_changed(XfcePanelPlugin*, int, PlacesData*);
 static void places_cb_menu_position(GtkMenu*, int*, int*, gboolean*, PlacesData*);




More information about the Goodies-commits mailing list