[Xfce4-commits] <midori:master> Harden katze_array_action_generate_menu

Christian Dywan noreply at xfce.org
Thu Feb 23 00:52:01 CET 2012


Updating branch refs/heads/master
         to 403d17400b8b7e1d33359f42d171b128854da3e7 (commit)
       from bcc6711f271249ac95235bffc43622f0c53f0e0a (commit)

commit 403d17400b8b7e1d33359f42d171b128854da3e7
Author: Christian Dywan <christian at twotoasts.de>
Date:   Thu Feb 23 00:46:59 2012 +0100

    Harden katze_array_action_generate_menu
    
    Add assertions and increase consistency.

 katze/katze-arrayaction.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/katze/katze-arrayaction.c b/katze/katze-arrayaction.c
index 1256dbd..14f30ee 100644
--- a/katze/katze-arrayaction.c
+++ b/katze/katze-arrayaction.c
@@ -358,6 +358,13 @@ katze_array_action_generate_menu (KatzeArrayAction* array_action,
     GtkWidget* image;
     GtkWidget* submenu;
 
+    g_return_if_fail (KATZE_IS_ARRAY_ACTION (array_action));
+    g_return_if_fail (KATZE_IS_ITEM (array));
+    g_return_if_fail (GTK_IS_MENU_SHELL (menu));
+    g_return_if_fail (GTK_IS_TOOL_ITEM (proxy)
+                   || GTK_IS_MENU_ITEM (proxy)
+                   || GTK_IS_WINDOW (proxy));
+
     if (!KATZE_IS_ARRAY (array))
         return;
 
@@ -393,8 +400,13 @@ katze_array_action_generate_menu (KatzeArrayAction* array_action,
         {
             submenu = gtk_menu_new ();
             gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu);
+            /* Make sure menu appears to contain items */
+            gtk_menu_shell_append (GTK_MENU_SHELL (submenu),
+                gtk_separator_menu_item_new ());
             g_signal_connect (menuitem, "select",
                 G_CALLBACK (katze_array_action_menu_item_select_cb), array_action);
+            g_signal_connect (menuitem, "activate",
+                G_CALLBACK (katze_array_action_menu_item_select_cb), array_action);
         }
         else
         {
@@ -463,14 +475,14 @@ katze_array_action_proxy_clicked_cb (GtkWidget*        proxy,
     KatzeArray* array;
     gboolean handled = FALSE;
 
+    array = (KatzeArray*)g_object_get_data (G_OBJECT (proxy), "KatzeItem");
     if (GTK_IS_MENU_ITEM (proxy))
     {
-        g_object_set_data (G_OBJECT (proxy), "KatzeItem", array_action->array);
         if (katze_array_action_menu_item_need_update (array_action, proxy))
         {
             g_signal_emit (array_action, signals[POPULATE_FOLDER], 0,
                            gtk_menu_item_get_submenu (GTK_MENU_ITEM (proxy)),
-                           array_action->array, &handled);
+                           array, &handled);
             if (!handled)
                 g_signal_emit (array_action, signals[POPULATE_POPUP], 0,
                     gtk_menu_item_get_submenu (GTK_MENU_ITEM (proxy)));
@@ -478,7 +490,6 @@ katze_array_action_proxy_clicked_cb (GtkWidget*        proxy,
         return;
     }
 
-    array = (KatzeArray*)g_object_get_data (G_OBJECT (proxy), "KatzeArray");
     if (KATZE_IS_ITEM (array) && katze_item_get_uri ((KatzeItem*)array))
     {
         katze_array_action_activate_item (array_action, KATZE_ITEM (array), 1);
@@ -720,6 +731,9 @@ static void
 katze_array_action_connect_proxy (GtkAction* action,
                                   GtkWidget* proxy)
 {
+    KatzeArrayAction* array_action = KATZE_ARRAY_ACTION (action);
+    g_object_set_data (G_OBJECT (proxy), "KatzeItem", array_action->array);
+
     GTK_ACTION_CLASS (katze_array_action_parent_class)->connect_proxy (
         action, proxy);
 


More information about the Xfce4-commits mailing list