Handle Menu key presses without crash. (#385637, Christian Persch)
authorMatthias Clasen <mclasen@redhat.com>
Mon, 12 Mar 2007 03:13:51 +0000 (03:13 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 12 Mar 2007 03:13:51 +0000 (03:13 +0000)
2007-03-11  Matthias Clasen  <mclasen@redhat.com>

        * tests/testiconview.c: Handle Menu key presses without
        crash.  (#385637, Christian Persch)

svn path=/trunk/; revision=17485

ChangeLog
tests/testiconview.c

index 42f2353ee1b6ea458e4f02e6625bb084f2fde0f3..74d7989e74abd4d9d68af48be06f4af68569f093 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-11  Matthias Clasen  <mclasen@redhat.com>
+
+       * tests/testiconview.c: Handle Menu key presses without
+       crash.  (#385637, Christian Persch)
+
 2007-03-11  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtktooltips.c (gtk_tooltips_get_info_from_tip_window):
index 1ef1464cfef832072b8b89fbd691e245398571a6..42d49a8fa47367b69046607cae17c89d67484d3b 100644 (file)
@@ -329,14 +329,27 @@ static void
 do_popup_menu (GtkWidget      *icon_list, 
               GdkEventButton *event)
 {
+  GtkIconView *icon_view = GTK_ICON_VIEW (icon_list); 
   GtkWidget *menu;
   GtkWidget *menuitem;
-  GtkTreePath *path;
+  GtkTreePath *path = NULL;
   int button, event_time;
   ItemData *data;
+  GList *list;
 
-  path = gtk_icon_view_get_path_at_pos (GTK_ICON_VIEW (icon_list), 
-                                        event->x, event->y);
+  if (event)
+    path = gtk_icon_view_get_path_at_pos (icon_view, event->x, event->y);
+  else
+    {
+      list = gtk_icon_view_get_selected_items (icon_view);
+
+      if (list)
+        {
+          path = (GtkTreePath*)list->data;
+          g_list_foreach (list->next, gtk_tree_path_free, NULL);
+          g_list_free (list);
+        }
+    }
 
   if (!path)
     return;
@@ -344,7 +357,7 @@ do_popup_menu (GtkWidget      *icon_list,
   menu = gtk_menu_new ();
 
   data = g_new0 (ItemData, 1);
-  data->icon_list = GTK_ICON_VIEW (icon_list);
+  data->icon_list = icon_view;
   data->path = path;
   g_object_set_data_full (G_OBJECT (menu), "item-path", data, (GDestroyNotify)free_item_data);