[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