[Goodies-commits] r2950 - in xfce4-places-plugin/trunk: . panel-plugin

Diego Ongaro ongardie at xfce.org
Mon Aug 6 00:30:33 CEST 2007


Author: ongardie
Date: 2007-08-05 22:30:33 +0000 (Sun, 05 Aug 2007)
New Revision: 2950

Modified:
   xfce4-places-plugin/trunk/ChangeLog
   xfce4-places-plugin/trunk/panel-plugin/model.c
   xfce4-places-plugin/trunk/panel-plugin/model.h
   xfce4-places-plugin/trunk/panel-plugin/model_volumes.c
   xfce4-places-plugin/trunk/panel-plugin/view.c
Log:
2007-08-05	Diego Ongaro <ongardie at gmail.com>

* Improved BookmarkAction concept.
* Fixed bad mount points bug.



Modified: xfce4-places-plugin/trunk/ChangeLog
===================================================================
--- xfce4-places-plugin/trunk/ChangeLog	2007-08-05 22:20:24 UTC (rev 2949)
+++ xfce4-places-plugin/trunk/ChangeLog	2007-08-05 22:30:33 UTC (rev 2950)
@@ -1,3 +1,8 @@
+2007-08-05	Diego Ongaro <ongardie at gmail.com>
+
+	* Improved BookmarkAction concept.
+	* Fixed bad mount points bug.
+
 2007-07-28	Diego Ongaro <ongardie at gmail.com>
 
 	* Handle alternate menu actions better.

Modified: xfce4-places-plugin/trunk/panel-plugin/model.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model.c	2007-08-05 22:20:24 UTC (rev 2949)
+++ xfce4-places-plugin/trunk/panel-plugin/model.c	2007-08-05 22:30:33 UTC (rev 2950)
@@ -49,6 +49,8 @@
 void
 places_bookmarks_enable(Bookmarks *b, gint enable_mask)
 {
+    g_assert(b != NULL);
+
     gboolean enable_volumes, enable_user;
     
     // Enable/disable volumes
@@ -79,6 +81,9 @@
 places_bookmarks_visit(Bookmarks *b,
                        BookmarksVisitor *visitor)
 {
+    g_assert(b != NULL);
+    g_assert(visitor != NULL);
+
     places_bookmarks_system_visit  (b->system,  visitor);
 
     if(b->volumes != NULL)
@@ -93,6 +98,8 @@
 gboolean
 places_bookmarks_changed(Bookmarks *b)
 {
+    g_assert(b != NULL);
+
     // try to avoid short-circuit of || since changed() has side-effects
     gboolean changed = FALSE;
 
@@ -110,6 +117,8 @@
 void
 places_bookmarks_finalize(Bookmarks *b)
 {
+    g_assert(b != NULL);
+
     places_bookmarks_system_finalize(b->system);
     b->system = NULL;
     
@@ -121,6 +130,8 @@
 void
 places_bookmark_info_free(BookmarkInfo *bi)
 {
+    g_assert(bi != NULL);
+
     if(bi->label != NULL){
         g_free(bi->label);
         bi->label = NULL;
@@ -141,13 +152,32 @@
     g_free(bi);
 }
 
+
+void places_bookmark_action_call(BookmarkAction *act)
+{
+    g_assert(act != NULL);
+
+    if(act->action != NULL)
+        act->action(act);
+}
+
+void places_bookmark_action_free(BookmarkAction *act)
+{
+    g_assert(act != NULL);
+
+    if(act->free != NULL)
+        act->free(act);
+    else
+        g_free(act);
+}
+
 void
 places_bookmark_actions_list_destroy(GSList *actions)
 {
-    if(actions != NULL){
-        g_slist_foreach(actions, (GFunc) g_free, NULL);
-        g_slist_free(actions);
-    }
+    g_assert(actions != NULL);
+
+    g_slist_foreach(actions, (GFunc) places_bookmark_action_free, NULL);
+    g_slist_free(actions);
 }
 
 // vim: ai et tabstop=4

Modified: xfce4-places-plugin/trunk/panel-plugin/model.h
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model.h	2007-08-05 22:20:24 UTC (rev 2949)
+++ xfce4-places-plugin/trunk/panel-plugin/model.h	2007-08-05 22:30:33 UTC (rev 2950)
@@ -36,16 +36,18 @@
 void
 places_bookmark_info_free(BookmarkInfo*);
 
-
-typedef struct
+typedef struct _BookmarkAction BookmarkAction;
+struct _BookmarkAction
 {
     gchar       *label;
-    gpointer    pass_thru;
-    void        (*action)   (gpointer);
-} BookmarkAction;
+    gpointer    priv;
+    void        (*action)   (BookmarkAction *self);
+    void        (*free)     (BookmarkAction *self);
 
-#define places_bookmark_action_call(act)   (act->action(act->pass_thru))
+};
 
+void places_bookmark_action_call(BookmarkAction *act);
+void places_bookmark_action_free(BookmarkAction *act);
 void places_bookmark_actions_list_destroy(GSList *actions);
 
 typedef struct

Modified: xfce4-places-plugin/trunk/panel-plugin/model_volumes.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_volumes.c	2007-08-05 22:20:24 UTC (rev 2949)
+++ xfce4-places-plugin/trunk/panel-plugin/model_volumes.c	2007-08-05 22:30:33 UTC (rev 2950)
@@ -29,6 +29,8 @@
 
 #include <libxfce4util/libxfce4util.h>
 
+#include <string.h>
+
 struct _BookmarksVolumes
 {
     GPtrArray *bookmarks;
@@ -36,6 +38,11 @@
     ThunarVfsVolumeManager *volume_manager;
 };
 
+typedef struct {
+    BookmarksVolumes    *b;
+    ThunarVfsVolume     *volume;
+} BookmarksVolumes_Volume;
+
 static gboolean 
 places_bookmarks_volumes_show_volume(ThunarVfsVolume *volume);
 
@@ -55,7 +62,8 @@
     BookmarkInfo *bi;
     GList *volumes;
     guint k;
-    b->changed = FALSE;
+    
+    b->changed = TRUE;
 
     if(places_bookmarks_volumes_show_volume(volume)){
 
@@ -72,7 +80,6 @@
             volumes = g_list_prepend(NULL, volume);
             places_bookmarks_volumes_add(b, volumes);
             g_list_free(volumes);
-            b->changed = TRUE;
         }else{
             DBG("volume already in array");
         }
@@ -88,7 +95,6 @@
                 g_object_unref(bi->data); // unref the volume
                 bi->data = NULL;
                 places_bookmark_info_free(bi);
-                b->changed = TRUE;
             }
         }
     }
@@ -146,21 +152,45 @@
 /********** Actions Callbacks **********/
 
 static void
-places_bookmarks_volumes_unmount(gpointer _volume)
+places_bookmarks_volumes_unmount(BookmarkAction *act)
 {
     DBG("Unmount");
-    ThunarVfsVolume *volume = THUNAR_VFS_VOLUME(_volume);
+    BookmarksVolumes_Volume *priv = (BookmarksVolumes_Volume*) act->priv;
+    ThunarVfsVolume *volume = priv->volume;
     if(thunar_vfs_volume_is_mounted(volume))
         thunar_vfs_volume_unmount(volume, NULL, NULL);
 }
 
 static void
-places_bookmarks_volumes_mount(gpointer _volume)
+places_bookmarks_volumes_mount(BookmarkAction *act)
 {
     DBG("Mount");
-    ThunarVfsVolume *volume = THUNAR_VFS_VOLUME(_volume);
-    if(!thunar_vfs_volume_is_mounted(volume))
+    BookmarksVolumes_Volume *priv = (BookmarksVolumes_Volume*) act->priv;
+    ThunarVfsVolume *volume = priv->volume;
+    BookmarksVolumes *b = priv->b;
+    BookmarkInfo *bi;
+    guint k;
+
+    if(!thunar_vfs_volume_is_mounted(volume)){
+
         thunar_vfs_volume_mount(volume, NULL, NULL);
+    
+        /* it sometimes wouldn't get the mount point right otherwise */
+        for(k = 0; k < b->bookmarks->len; k++){
+            bi = g_ptr_array_index(b->bookmarks, k);
+            if(volume == bi->data){
+
+                if(bi->uri != NULL)
+                    g_free(bi->uri);
+
+                bi->uri = thunar_vfs_path_dup_uri(thunar_vfs_volume_get_mount_point(volume));
+
+                b->changed = TRUE;
+
+                break;
+            }
+        }
+    }
 }
 
 /********** Internal **********/
@@ -271,7 +301,16 @@
     }
 }
 
+static void
+free_toggle_mount_action(BookmarkAction *act)
+{
+    g_assert(act != NULL);
+    g_assert(act->priv != NULL);
 
+    g_free(act->priv);
+    g_free(act);
+}
+
 void
 places_bookmarks_volumes_visit(BookmarksVolumes *b, BookmarksVisitor *visitor)
 {
@@ -281,13 +320,20 @@
     ThunarVfsVolume *volume;
     gchar *uri;
     BookmarkAction *toggle_mount;
+    BookmarksVolumes_Volume *toggle_mount_priv;
 
     for(k=0; k < b->bookmarks->len; k++){
         bi = g_ptr_array_index(b->bookmarks, k);
         volume = THUNAR_VFS_VOLUME(bi->data);
 
+        toggle_mount_priv = g_new0(BookmarksVolumes_Volume, 1);
+        toggle_mount_priv->b = b;
+        toggle_mount_priv->volume = volume;
+
         toggle_mount = g_new0(BookmarkAction, 1); /* visitor will free */
-        toggle_mount->pass_thru = volume;
+        toggle_mount->priv = toggle_mount_priv;
+        toggle_mount->free = free_toggle_mount_action;
+        
         actions = g_slist_prepend(NULL, toggle_mount);
     
         if(thunar_vfs_volume_is_mounted(volume)){

Modified: xfce4-places-plugin/trunk/panel-plugin/view.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.c	2007-08-05 22:20:24 UTC (rev 2949)
+++ xfce4-places-plugin/trunk/panel-plugin/view.c	2007-08-05 22:30:33 UTC (rev 2950)
@@ -518,12 +518,19 @@
 void
 places_view_cb_menu_item_context_act(GtkWidget *item, PlacesData *pd)
 {
-    // we want the menu gone - now - since it prevents mouse grabs
-    places_view_destroy_menu(pd);
-    g_main_context_iteration(NULL, FALSE);
+    BookmarkAction *action;
+    g_assert(pd != NULL);
+    g_assert(pd->view_menu != NULL && GTK_IS_WIDGET(pd->view_menu));
 
-    BookmarkAction *action = (BookmarkAction*) g_object_get_data(G_OBJECT(item), "action");
-    places_bookmark_action_call(action);   
+    /* we want the menu gone - now - since it prevents mouse grabs */
+    gtk_widget_hide(pd->view_menu);
+    while(g_main_context_iteration(NULL, FALSE))
+        /* no op */;
+
+    action = (BookmarkAction*) g_object_get_data(G_OBJECT(item), "action");
+    DBG("Calling action %s", action->label);
+    places_bookmark_action_call(action);
+
 }
 
 gboolean
@@ -605,9 +612,10 @@
 /********** Model Visitor Callbacks **********/
 
 static void
-places_view_load_terminal_wrapper(gpointer path)
+places_view_load_terminal_wrapper(BookmarkAction *act)
 {
-    places_load_terminal((gchar*) path);
+    g_assert(act != NULL);
+    places_load_terminal((gchar*) act->priv);
 }
 
 static void
@@ -644,8 +652,9 @@
         if(strncmp(uri, "trash://", 8) != 0){
             BookmarkAction *terminal = g_new0(BookmarkAction, 1);
             terminal->label = "Open Terminal Here";
-            terminal->pass_thru = (gchar*) uri;
+            terminal->priv = (gchar*) uri;
             terminal->action = places_view_load_terminal_wrapper;
+            terminal->free = NULL;
             actions = g_slist_append(actions, terminal);
         }
 




More information about the Goodies-commits mailing list