[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