[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