[Goodies-commits] r3700 - in xfce4-places-plugin/trunk: . panel-plugin
Diego Ongaro
ongardie at xfce.org
Fri Dec 14 02:19:29 CET 2007
Author: ongardie
Date: 2007-12-14 01:19:29 +0000 (Fri, 14 Dec 2007)
New Revision: 3700
Modified:
xfce4-places-plugin/trunk/ChangeLog
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-12-13 Diego Ongaro <ongardie at gmail.com>
* model.h, model_volumes.c, view.c: Provide visual feedback on
actions that could take a long time to return
Modified: xfce4-places-plugin/trunk/ChangeLog
===================================================================
--- xfce4-places-plugin/trunk/ChangeLog 2007-12-14 00:47:35 UTC (rev 3699)
+++ xfce4-places-plugin/trunk/ChangeLog 2007-12-14 01:19:29 UTC (rev 3700)
@@ -1,3 +1,8 @@
+2007-12-13 Diego Ongaro <ongardie at gmail.com>
+
+ * model.h, model_volumes.c, view.c: Provide visual feedback on
+ actions that could take a long time to return
+
2007-12-10 Diego Ongaro <ongardie at gmail.com>
* view.c: Bug: label didn't change when already shown
Modified: xfce4-places-plugin/trunk/panel-plugin/model.h
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model.h 2007-12-14 00:47:35 UTC (rev 3699)
+++ xfce4-places-plugin/trunk/panel-plugin/model.h 2007-12-14 01:19:29 UTC (rev 3700)
@@ -29,10 +29,10 @@
struct _PlacesBookmarkAction
{
gchar *label; /* must not be NULL */
+ gboolean may_block;
gpointer priv;
void (*action) (PlacesBookmarkAction *self);
void (*free) (PlacesBookmarkAction *self);
-
};
inline void
Modified: xfce4-places-plugin/trunk/panel-plugin/model_volumes.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_volumes.c 2007-12-14 00:47:35 UTC (rev 3699)
+++ xfce4-places-plugin/trunk/panel-plugin/model_volumes.c 2007-12-14 01:19:29 UTC (rev 3700)
@@ -226,6 +226,7 @@
g_object_ref(volume);
action = g_new0(PlacesBookmarkAction, 1);
action->label = _("Mount and Open");
+ action->may_block = TRUE;
action->priv = volume;
action->action = pbvol_mount_and_open;
action->free = pbvol_bookmark_action_free;
@@ -239,6 +240,7 @@
g_object_ref(volume);
action = g_new0(PlacesBookmarkAction, 1);
action->label = _("Mount");
+ action->may_block = TRUE;
action->priv = volume;
action->action = pbvol_mount;
action->free = pbvol_bookmark_action_free;
@@ -260,6 +262,7 @@
g_object_ref(volume);
action = g_new0(PlacesBookmarkAction, 1);
action->label = _("Eject");
+ action->may_block = TRUE;
action->priv = volume;
action->action = pbvol_eject;
action->free = pbvol_bookmark_action_free;
@@ -272,6 +275,7 @@
g_object_ref(volume);
action = g_new0(PlacesBookmarkAction, 1);
action->label = _("Unmount");
+ action->may_block = TRUE;
action->priv = volume;
action->action = pbvol_unmount;
action->free = pbvol_bookmark_action_free;
Modified: xfce4-places-plugin/trunk/panel-plugin/view.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.c 2007-12-14 00:47:35 UTC (rev 3699)
+++ xfce4-places-plugin/trunk/panel-plugin/view.c 2007-12-14 01:19:29 UTC (rev 3700)
@@ -226,6 +226,27 @@
}
+static void
+pview_bookmark_action_call_wrapper(PlacesView *view, PlacesBookmarkAction *action)
+{
+ g_assert(action != NULL);
+
+ if(action->may_block){
+
+ gtk_widget_set_sensitive(view->button, FALSE);
+
+ while(gtk_events_pending())
+ gtk_main_iteration();
+
+ places_bookmark_action_call(action);
+
+ gtk_widget_set_sensitive(view->button, TRUE);
+
+ }else{
+ places_bookmark_action_call(action);
+ }
+}
+
/********** Gtk Callbacks **********/
/* Panel callbacks */
@@ -392,13 +413,13 @@
/* we want the menu gone - now - since it prevents mouse grabs */
gtk_menu_shell_deactivate(GTK_MENU_SHELL(pd->menu));
- while(g_main_context_iteration(NULL, FALSE))
- /* no op */;
+ while(gtk_events_pending())
+ gtk_main_iteration();
action = (PlacesBookmarkAction*) g_object_get_data(G_OBJECT(item), "action");
DBG("Calling action %s", action->label);
- places_bookmark_action_call(action);
-
+ pview_bookmark_action_call_wrapper(pd, action);
+
}
static gboolean
@@ -457,6 +478,14 @@
return FALSE;
}
+static void
+pview_cb_menu_item_activate(GtkWidget *menu_item, PlacesView *view)
+{
+ PlacesBookmark *bookmark = (PlacesBookmark*) g_object_get_data(G_OBJECT(menu_item), "bookmark");
+
+ pview_bookmark_action_call_wrapper(view, bookmark->primary_action);
+}
+
/* Recent Documents */
#if USE_RECENT_DOCUMENTS
@@ -534,9 +563,9 @@
if(bookmark->primary_action != NULL){
- g_signal_connect_swapped(item, "activate",
- G_CALLBACK(places_bookmark_action_call),
- bookmark->primary_action);
+ g_signal_connect(item, "activate",
+ G_CALLBACK(pview_cb_menu_item_activate),
+ view);
}
if(bookmark->force_gray || bookmark->primary_action == NULL){
More information about the Goodies-commits
mailing list