[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