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

Diego Ongaro ongardie at xfce.org
Thu May 1 19:35:58 CEST 2008


Author: ongardie
Date: 2008-05-01 17:35:57 +0000 (Thu, 01 May 2008)
New Revision: 4697

Modified:
   xfce4-places-plugin/trunk/ChangeLog
   xfce4-places-plugin/trunk/panel-plugin/view.c
Log:
2008-05-01	Diego Ongaro <ongardie at gmail.com>

* view.c: Disable the Recent Docs menu item if there are none.


Modified: xfce4-places-plugin/trunk/ChangeLog
===================================================================
--- xfce4-places-plugin/trunk/ChangeLog	2008-05-01 16:58:59 UTC (rev 4696)
+++ xfce4-places-plugin/trunk/ChangeLog	2008-05-01 17:35:57 UTC (rev 4697)
@@ -1,3 +1,7 @@
+2008-05-01	Diego Ongaro <ongardie at gmail.com>
+
+	* view.c: Disable the Recent Docs menu item if there are none.
+
 2008-04-06	Diego Ongaro <ongardie at gmail.com>
 
 	* view.c: Reposition Recent Docs submenu after "changed" signal.

Modified: xfce4-places-plugin/trunk/panel-plugin/view.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/view.c	2008-05-01 16:58:59 UTC (rev 4696)
+++ xfce4-places-plugin/trunk/panel-plugin/view.c	2008-05-01 17:35:57 UTC (rev 4697)
@@ -96,7 +96,7 @@
 #endif
 
 #if USE_RECENT_DOCUMENTS
-    gulong                     recent_manager_changed_handler[3];
+    gulong                     recent_manager_changed_handler;
 #endif
 
     gboolean                   needs_separator;
@@ -468,12 +468,28 @@
 }
 
 static void
-pview_cb_recent_changed_position(GtkRecentManager *recent_manager, GtkWidget *recent_menu)
+pview_cb_recent_changed(GtkRecentManager *recent_manager, GtkWidget *recent_menu)
 {
-    while(gtk_events_pending())
-        gtk_main_iteration();
+    GtkWidget *recent_item;
+    int recent_count = 0;
+    
+    g_object_get(recent_manager,
+                 "size", &recent_count,
+                 NULL);
 
-    gtk_menu_reposition(GTK_MENU(recent_menu));
+    recent_item = gtk_menu_get_attach_widget(GTK_MENU(recent_menu));
+    if (GTK_IS_WIDGET(recent_item))
+        gtk_widget_set_sensitive(recent_item, recent_count > 0);
+
+    if (recent_count == 0) {
+        gtk_menu_popdown(GTK_MENU(recent_menu));
+    }
+    else {
+        while (gtk_events_pending())
+            gtk_main_iteration();
+
+        gtk_menu_reposition(GTK_MENU(recent_menu));
+    }
 }
 
 static gboolean
@@ -484,7 +500,7 @@
     gint removed = gtk_recent_manager_purge_items(manager, NULL);
     DBG("Cleared %d recent items", removed);
 
-    pview_cb_recent_changed_position(manager, recent_menu);
+    pview_cb_recent_changed(manager, recent_menu);
     
     return TRUE;
 }
@@ -495,21 +511,6 @@
     return pview_cb_recent_items_clear(clear_item, recent_menu);
 }
 
-static void
-pview_cb_recent_changed_hide(GtkRecentManager *recent_manager, GtkWidget *widget)
-{
-    int recent_count;
-    
-    g_object_get(recent_manager,
-                 "size", &recent_count,
-                 NULL);
-
-    if (recent_count > 0)
-        gtk_widget_show(widget);
-    else
-        gtk_widget_hide(widget);
-}
-
 #endif
 
 
@@ -520,19 +521,16 @@
 {
 #ifdef USE_RECENT_DOCUMENTS
     GtkRecentManager *recent_manager = gtk_recent_manager_get_default();
-    int i;
 #endif
 
     if(view->menu != NULL) {
         gtk_menu_shell_deactivate(GTK_MENU_SHELL(view->menu));
 
 #ifdef USE_RECENT_DOCUMENTS
-        for (i = 0; i < 3; i++) {
-            if (view->recent_manager_changed_handler[i]) {
-                g_signal_handler_disconnect(recent_manager,
-                                            view->recent_manager_changed_handler[i]);
-                view->recent_manager_changed_handler[i] = 0;
-            }
+        if (view->recent_manager_changed_handler) {
+            g_signal_handler_disconnect(recent_manager,
+                                        view->recent_manager_changed_handler);
+            view->recent_manager_changed_handler = 0;
         }
 #endif
 
@@ -704,16 +702,11 @@
         g_signal_connect(recent_menu, "item-activated", 
                          G_CALLBACK(pview_cb_recent_item_open), pd);
             
-        pd->recent_manager_changed_handler[0] = g_signal_connect(recent_manager, "changed",
-                                                                 G_CALLBACK(pview_cb_recent_changed_position), recent_menu);
-    
         if(pd->cfg->show_recent_clear){
 
             separator = gtk_separator_menu_item_new();
             gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), separator);
-            pview_cb_recent_changed_hide(recent_manager, separator);
-            pd->recent_manager_changed_handler[1] = g_signal_connect(recent_manager, "changed",
-                                                                     G_CALLBACK(pview_cb_recent_changed_hide), separator);
+            gtk_widget_show(separator);
    
             if(pd->cfg->show_icons){
                 clear_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLEAR, NULL);
@@ -724,9 +717,7 @@
             }
 
             gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), clear_item);
-            pview_cb_recent_changed_hide(recent_manager, clear_item);
-            pd->recent_manager_changed_handler[2] = g_signal_connect(recent_manager, "changed",
-                                                                     G_CALLBACK(pview_cb_recent_changed_hide), clear_item);
+            gtk_widget_show(clear_item);
 
             /* try button-release-event to catch mouse clicks and not hide the menu after */
             g_signal_connect(clear_item, "button-release-event",
@@ -742,12 +733,16 @@
             gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(recent_item), 
                                           gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU));
         }
-
+        
         gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent_item), recent_menu);
         gtk_widget_show(recent_menu);
         
         gtk_menu_shell_append(GTK_MENU_SHELL(pd->menu), recent_item);
         gtk_widget_show(recent_item);
+
+        pd->recent_manager_changed_handler = g_signal_connect(recent_manager, "changed",
+                                                              G_CALLBACK(pview_cb_recent_changed), recent_menu);
+        pview_cb_recent_changed(recent_manager, recent_menu);
     }
 #endif
 




More information about the Goodies-commits mailing list