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

Diego Ongaro ongardie at xfce.org
Tue Sep 25 03:02:45 CEST 2007


Author: ongardie
Date: 2007-09-25 01:02:44 +0000 (Tue, 25 Sep 2007)
New Revision: 3245

Modified:
   xfce4-places-plugin/trunk/ChangeLog
   xfce4-places-plugin/trunk/panel-plugin/model.c
   xfce4-places-plugin/trunk/panel-plugin/model_system.c
   xfce4-places-plugin/trunk/panel-plugin/model_user.c
   xfce4-places-plugin/trunk/panel-plugin/model_volumes.c
   xfce4-places-plugin/trunk/panel-plugin/view.c
Log:
2007-09-24	Diego Ongaro <ongardie at gmail.com>

* view.c, model*.c: Model now defines all bookmark actions


Modified: xfce4-places-plugin/trunk/ChangeLog
===================================================================
--- xfce4-places-plugin/trunk/ChangeLog	2007-09-24 23:54:16 UTC (rev 3244)
+++ xfce4-places-plugin/trunk/ChangeLog	2007-09-25 01:02:44 UTC (rev 3245)
@@ -5,6 +5,7 @@
 	* view.c, support.{c,h}: Moved "Open" and "Open Terminal Here"
 	action creation into support.
 	* view.c, model.h: Added primary action to bookmarks
+	* view.c, model*.c: Model now defines all bookmark actions
 
 2007-09-20	Diego Ongaro <ongardie at gmail.com>
 

Modified: xfce4-places-plugin/trunk/panel-plugin/model.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model.c	2007-09-24 23:54:16 UTC (rev 3244)
+++ xfce4-places-plugin/trunk/panel-plugin/model.c	2007-09-25 01:02:44 UTC (rev 3245)
@@ -63,6 +63,15 @@
 {
     g_assert(bookmark != NULL);
 
+    if(bookmark->primary_action != NULL){
+
+        /* don't double-free */
+        if(g_list_find(bookmark->actions, bookmark->primary_action) == NULL)
+            places_bookmark_action_free(bookmark->primary_action);
+
+        bookmark->primary_action = NULL;
+    }
+
     if(bookmark->actions != NULL){
         places_bookmark_actions_free(bookmark->actions);
         bookmark->actions = NULL;

Modified: xfce4-places-plugin/trunk/panel-plugin/model_system.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_system.c	2007-09-24 23:54:16 UTC (rev 3244)
+++ xfce4-places-plugin/trunk/panel-plugin/model_system.c	2007-09-25 01:02:44 UTC (rev 3245)
@@ -25,6 +25,7 @@
 
 #include "model_system.h"
 #include "model.h"
+#include "support.h"
 
 #include <string.h>
 
@@ -76,6 +77,7 @@
 {
     GList *bookmarks = NULL;           /* we'll return this */
     PlacesBookmark *bookmark;
+    PlacesBookmarkAction *open, *terminal;
     ThunarVfsInfo *trash_info;
     const gchar *home_dir = xfce_get_homedir();
 
@@ -88,6 +90,13 @@
     bookmark->label         = (gchar*) g_get_user_name();
     bookmark->uri           = (gchar*) home_dir;
     bookmark->icon          = "gnome-fs-home";
+
+    terminal                 = places_create_open_terminal_action(bookmark);
+    bookmark->actions        = g_list_prepend(bookmark->actions, terminal);
+    open                     = places_create_open_action(bookmark);
+    bookmark->actions        = g_list_prepend(bookmark->actions, open);
+    bookmark->primary_action = open;
+
     bookmarks = g_list_append(bookmarks, bookmark);
 
     /* Trash */
@@ -109,6 +118,10 @@
     }
     thunar_vfs_info_unref(trash_info);
 
+    open                     = places_create_open_action(bookmark);
+    bookmark->actions        = g_list_prepend(bookmark->actions, open);
+    bookmark->primary_action = open;
+
     bookmarks = g_list_append(bookmarks, bookmark);
 
     /* Desktop */
@@ -119,11 +132,21 @@
     bookmark->free          = pbsys_free_desktop_bookmark;
 
     if(g_file_test(bookmark->uri, G_FILE_TEST_IS_DIR)){
+    
+        terminal                 = places_create_open_terminal_action(bookmark);
+        bookmark->actions        = g_list_prepend(bookmark->actions, terminal);
+        open                     = places_create_open_action(bookmark);
+        bookmark->actions        = g_list_prepend(bookmark->actions, open);
+        bookmark->primary_action = open;
+
         pbg_priv(bookmark_group)->desktop_exists = TRUE;
         bookmarks = g_list_append(bookmarks, bookmark);
+
     }else{
+
         pbg_priv(bookmark_group)->desktop_exists = FALSE;
         places_bookmark_free(bookmark);
+
     }
     
     /* File System (/) */
@@ -131,6 +154,13 @@
     bookmark->label         = _("File System");
     bookmark->uri           = "/";
     bookmark->icon          = "gnome-dev-harddisk";
+
+    terminal                 = places_create_open_terminal_action(bookmark);
+    bookmark->actions        = g_list_prepend(bookmark->actions, terminal);
+    open                     = places_create_open_action(bookmark);
+    bookmark->actions        = g_list_prepend(bookmark->actions, open);
+    bookmark->primary_action = open;
+
     bookmarks = g_list_append(bookmarks, bookmark);
 
     return bookmarks;

Modified: xfce4-places-plugin/trunk/panel-plugin/model_user.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_user.c	2007-09-24 23:54:16 UTC (rev 3244)
+++ xfce4-places-plugin/trunk/panel-plugin/model_user.c	2007-09-25 01:02:44 UTC (rev 3245)
@@ -25,6 +25,7 @@
 
 #include "model_user.h"
 #include "model.h"
+#include "support.h"
 
 #include <libxfce4util/libxfce4util.h>
 #include <glib.h>
@@ -156,27 +157,44 @@
 static GList*
 pbuser_get_bookmarks(PlacesBookmarkGroup *bookmark_group)
 {
-    GList *bookmarks    = pbg_priv(bookmark_group)->bookmarks;
-    GList *clone        = NULL;
-    PlacesBookmark *bookmark;
+    const GList *orig_ls      = pbg_priv(bookmark_group)->bookmarks;
+    const PlacesBookmark *orig;
+    
+    GList *clone_ls           = NULL;
+    PlacesBookmark *clone;
 
-    if(bookmarks == NULL){
+    PlacesBookmarkAction *open, *terminal;
+
+
+    if(orig_ls == NULL){
         pbuser_build_bookmarks(bookmark_group);
-        bookmarks = pbg_priv(bookmark_group)->bookmarks;
+        orig_ls         = pbg_priv(bookmark_group)->bookmarks;
     }
 
-    bookmarks = g_list_last(bookmarks);
+    orig_ls = g_list_last((GList*) orig_ls);
 
-    while(bookmarks != NULL){
-        bookmark        = g_memdup(bookmarks->data, sizeof(PlacesBookmark));
-        bookmark->uri   = g_strdup(bookmark->uri);
-        bookmark->label = g_strdup(bookmark->label);
+    while(orig_ls != NULL){
 
-        clone = g_list_prepend(clone, bookmark);
-        bookmarks = bookmarks->prev;
+        orig = (PlacesBookmark*) orig_ls->data;
+
+        clone                 = g_new0(PlacesBookmark, 1);
+        clone->uri            = g_strdup(orig->uri);
+        clone->uri_scheme     = orig->uri_scheme;
+        clone->label          = g_strdup(orig->label);
+        clone->icon           = orig->icon;
+        clone->free           = pbuser_free_bookmark;
+
+        terminal              = places_create_open_terminal_action(clone);
+        clone->actions        = g_list_prepend(clone->actions, terminal);
+        open                  = places_create_open_action(clone);
+        clone->actions        = g_list_prepend(clone->actions, open);
+        clone->primary_action = open;
+
+        clone_ls = g_list_prepend(clone_ls, clone);
+        orig_ls  = orig_ls->prev;
     }
 
-    return clone;
+    return clone_ls;
 
 }
 

Modified: xfce4-places-plugin/trunk/panel-plugin/model_volumes.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_volumes.c	2007-09-24 23:54:16 UTC (rev 3244)
+++ xfce4-places-plugin/trunk/panel-plugin/model_volumes.c	2007-09-25 01:02:44 UTC (rev 3245)
@@ -25,6 +25,7 @@
 
 #include "model.h"
 #include "model_volumes.h"
+#include "support.h"
 
 #define EXO_API_SUBJECT_TO_CHANGE
 #include <thunar-vfs/thunar-vfs.h>
@@ -93,6 +94,7 @@
 static void
 pbvol_set_changed(PlacesBookmarkGroup *bookmark_group)
 {
+    DBG("-");
     pbg_priv(bookmark_group)->changed = TRUE;
 }
 
@@ -100,6 +102,8 @@
 static void
 pbvol_volumes_added(ThunarVfsVolumeManager *volman, GList *volumes, PlacesBookmarkGroup *bookmark_group)
 {
+    DBG("-");
+
     pbg_priv(bookmark_group)->changed = TRUE;
     while(volumes != NULL){
         g_signal_connect_swapped(THUNAR_VFS_VOLUME(volumes->data), "changed",
@@ -111,6 +115,8 @@
 static void
 pbvol_volumes_removed(ThunarVfsVolumeManager *volman, GList *volumes, PlacesBookmarkGroup *bookmark_group)
 {
+    DBG("-");
+
     pbg_priv(bookmark_group)->changed = TRUE;
     while(volumes != NULL){
         g_signal_handlers_disconnect_by_func(THUNAR_VFS_VOLUME(volumes->data),
@@ -143,7 +149,7 @@
 {
     GList *bookmarks = NULL;
     PlacesBookmark *bookmark;
-    PlacesBookmarkAction *action;
+    PlacesBookmarkAction *action, *terminal, *open;
     const GList *volumes;
     ThunarVfsVolume *volume;
     GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
@@ -164,6 +170,7 @@
             bookmark->free  = pbvol_bookmark_free;
 
             if(!thunar_vfs_volume_is_mounted(volume)){
+
                 g_object_ref(volume);
                 action          = g_new0(PlacesBookmarkAction, 1);
                 action->label   = _("Mount");
@@ -171,10 +178,20 @@
                 action->action  = pbvol_mount;
                 action->free    = pbvol_bookmark_action_free;
                 bookmark->actions = g_list_append(bookmark->actions, action);
+
+            }else{
+
+                terminal                 = places_create_open_terminal_action(bookmark);
+                bookmark->actions        = g_list_prepend(bookmark->actions, terminal);
+                open                     = places_create_open_action(bookmark);
+                bookmark->actions        = g_list_prepend(bookmark->actions, open);
+                bookmark->primary_action = open;
+
             }
 
             if(thunar_vfs_volume_is_disc(volume)){
                 if(thunar_vfs_volume_is_ejectable(volume)){
+
                     g_object_ref(volume);
                     action          = g_new0(PlacesBookmarkAction, 1);
                     action->label   = _("Eject");
@@ -182,9 +199,11 @@
                     action->action  = pbvol_eject;
                     action->free    = pbvol_bookmark_action_free;
                     bookmark->actions = g_list_append(bookmark->actions, action);
+
                 }
             }else{
                 if(thunar_vfs_volume_is_mounted(volume)){
+
                     g_object_ref(volume);
                     action          = g_new0(PlacesBookmarkAction, 1);
                     action->label   = _("Unmount");
@@ -192,6 +211,7 @@
                     action->action  = pbvol_unmount;
                     action->free    = pbvol_bookmark_action_free;
                     bookmark->actions = g_list_append(bookmark->actions, action);
+
                 }
             }
 

Modified: xfce4-places-plugin/trunk/panel-plugin/view.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.c	2007-09-24 23:54:16 UTC (rev 3244)
+++ xfce4-places-plugin/trunk/panel-plugin/view.c	2007-09-25 01:02:44 UTC (rev 3245)
@@ -483,7 +483,6 @@
     GtkWidget *item;
     GdkPixbuf *pb;
     GtkWidget *image;
-    PlacesBookmarkAction *terminal, *open;
 
     if(view->needs_separator){
         gtk_menu_shell_append(GTK_MENU_SHELL(view->menu),
@@ -503,28 +502,13 @@
         }
     }
 
-    if(bookmark->uri != NULL){
-        
-        if(bookmark->uri_scheme != PLACES_URI_SCHEME_TRASH){
-            terminal            = places_create_open_terminal_action(bookmark);
-            bookmark->actions   = g_list_prepend(bookmark->actions, terminal);
-        }
-
-        open                = places_create_open_action(bookmark);
-        bookmark->actions   = g_list_prepend(bookmark->actions, open);
-        bookmark->primary_action = open;
-
-    }
-
-    if(bookmark->actions != NULL){
-
+    if(bookmark->actions != NULL)
         g_object_set_data(G_OBJECT(item), "actions", bookmark->actions);
-        
-        g_signal_connect(item, "button-release-event",
+
+    /* do this always so that the menu doesn't close on right-clicks */
+    g_signal_connect(item, "button-release-event",
                      G_CALLBACK(pview_cb_menu_item_press), view);
 
-    }
-
     if(bookmark->primary_action != NULL){
 
         g_signal_connect_swapped(item, "activate",
@@ -560,9 +544,13 @@
     GtkWidget *recent_item;
 #endif
 
+    DBG("destroy menu");
+
     /* destroy the old menu, if it exists */
     pview_destroy_menu(pd);
 
+    DBG("building new menu");
+
     /* Create a new menu */
     pd->menu = gtk_menu_new();
     




More information about the Goodies-commits mailing list