[Xfce4-commits] r22629 - xfce4-panel/trunk/plugins/launcher

Jasper Huijsmans jasper at xfce.org
Wed Aug 2 18:46:35 UTC 2006


Author: jasper
Date: 2006-08-02 18:46:34 +0000 (Wed, 02 Aug 2006)
New Revision: 22629

Modified:
   xfce4-panel/trunk/plugins/launcher/launcher.c
Log:
Remove a gtk_events_pending() loop to try and fix a crash on NetBSD (bug #2049). Use one idle callback to fill in menu icons, instead of many.

Modified: xfce4-panel/trunk/plugins/launcher/launcher.c
===================================================================
--- xfce4-panel/trunk/plugins/launcher/launcher.c	2006-08-02 12:52:56 UTC (rev 22628)
+++ xfce4-panel/trunk/plugins/launcher/launcher.c	2006-08-02 18:46:34 UTC (rev 22629)
@@ -578,12 +578,6 @@
     launcher_entry_exec (gtk_widget_get_screen (mi), entry);
 }
 
-static void
-menu_detached (void)
-{
-    /* do nothing */
-}
-
 static gboolean
 launcher_menu_drag_leave_timeout (LauncherPlugin *launcher)
 {
@@ -615,28 +609,6 @@
 }
 
 static void
-launcher_create_menu (LauncherPlugin *launcher)
-{
-    launcher->menu = gtk_menu_new ();
-
-    g_signal_connect (launcher->menu, "button-release-event", 
-                      G_CALLBACK (launcher_button_released),
-                      launcher);
-    
-    g_signal_connect (launcher->menu, "deactivate", 
-                      G_CALLBACK (launcher_menu_deactivated), launcher);
-
-    gtk_menu_attach_to_widget (GTK_MENU (launcher->menu), 
-                               launcher->arrowbutton,
-                               (GtkMenuDetachFunc)menu_detached);
-
-    launcher_set_drag_dest (launcher->menu);
-    
-    g_signal_connect (launcher->menu, "drag-leave", 
-                      G_CALLBACK (launcher_menu_drag_leave), launcher);
-}
-
-static void
 launcher_destroy_menu (LauncherPlugin *launcher)
 {
     gtk_widget_destroy (launcher->menu);
@@ -645,14 +617,24 @@
 }
 
 static gboolean
-load_menu_icon (GtkImageMenuItem *mi)
+load_menu_icons (LauncherPlugin *launcher)
 {
-    GtkWidget *img;
+    GtkWidget *img, *mi;
     GdkPixbuf *pb;
     LauncherEntry *entry;
+    int i;
+    GList *children, *li;
     
-    if ((entry = g_object_get_data (G_OBJECT (mi), "launcher_entry")) != NULL)
+    if (!launcher->menu)
+        return FALSE;
+
+    children = gtk_container_get_children (GTK_CONTAINER (launcher->menu));
+
+    for (li = children, i = 1; li != 0; li = li->next, ++i)
     {
+        entry = g_ptr_array_index (launcher->entries, i);
+        mi = li->data;
+
         pb = launcher_icon_load_pixbuf (GTK_WIDGET (mi), &entry->icon, 
                                         MENU_ICON_SIZE);
         img = gtk_image_new_from_pixbuf (pb);
@@ -661,6 +643,8 @@
         g_object_unref (pb);
     }
 
+    g_list_free (children);
+
     return FALSE;
 }
 
@@ -678,8 +662,8 @@
         return;
     }
     
-    launcher_create_menu (launcher);
-    
+    launcher->menu = gtk_menu_new ();
+
     for (i = launcher->entries->len - 1; i > 0; --i)
     {
         GtkWidget *mi;
@@ -692,7 +676,6 @@
 
         /* delayed loading of icons */
         g_object_set_data (G_OBJECT (mi), "launcher_entry", entry);
-        g_idle_add ((GSourceFunc) load_menu_icon, mi);
         
         g_signal_connect (mi, "button-release-event", 
                           G_CALLBACK (launcher_button_released),
@@ -711,6 +694,23 @@
         g_signal_connect (mi, "drag-leave", 
                           G_CALLBACK (launcher_menu_drag_leave), launcher);
     }
+
+    g_signal_connect (launcher->menu, "button-release-event", 
+                      G_CALLBACK (launcher_button_released),
+                      launcher);
+    
+    g_signal_connect (launcher->menu, "deactivate", 
+                      G_CALLBACK (launcher_menu_deactivated), launcher);
+
+    launcher_set_drag_dest (launcher->menu);
+    
+    g_signal_connect (launcher->menu, "drag-leave", 
+                      G_CALLBACK (launcher_menu_drag_leave), launcher);
+    
+    if (launcher->entries->len > 1)
+    {
+        g_idle_add ((GSourceFunc) load_menu_icons, launcher);
+    }
 }
 
 void
@@ -1201,10 +1201,6 @@
 
     launcher_update_panel_entry (launcher);
 
-    /* improve interactivity */
-    while (gtk_events_pending ())
-        gtk_main_iteration();
-    
     launcher_recreate_menu (launcher);
 }
 



More information about the Xfce4-commits mailing list