Index: launcher.c =================================================================== --- launcher.c (revision 23119) +++ launcher.c (working copy) @@ -651,14 +651,21 @@ void launcher_recreate_menu (LauncherPlugin *launcher) { + static gboolean protect = FALSE; int i; - + + if (G_UNLIKELY(protect)) + return; + + protect = TRUE; + if (launcher->menu) launcher_destroy_menu (launcher); if (launcher->entries->len <= 1) { gtk_widget_hide (launcher->arrowbutton); + protect = FALSE; return; } @@ -669,6 +676,11 @@ GtkWidget *mi; LauncherEntry *entry = g_ptr_array_index (launcher->entries, i); + if (G_UNLIKELY(entry == NULL)) + { + g_critical ("List of entries seems to be corrupt."); + break; + } mi = gtk_image_menu_item_new_with_label (entry->name ? entry->name : _("New Item")); gtk_widget_show (mi); @@ -711,6 +723,8 @@ { g_idle_add ((GSourceFunc) load_menu_icons, launcher); } + + protect = FALSE; } void @@ -1248,6 +1262,25 @@ gtk_button_set_focus_on_click (GTK_BUTTON (launcher->arrowbutton), FALSE); launcher_set_screen_position (launcher, screen_position); + /* configuration */ + launcher_read_rc_file (plugin, launcher); + + if (launcher->entries->len == 0) + { + LauncherEntry *entry = entry = panel_slice_new0 (LauncherEntry); + + entry->name = g_strdup (_("New Item")); + entry->comment = g_strdup (_("This item has not yet been configured")); + + g_ptr_array_add (launcher->entries, entry); + + launcher_update_panel_entry (launcher); + } + else if (launcher->entries->len > 1) + { + gtk_widget_show (launcher->arrowbutton); + } + /* signals */ launcher->style_id = g_signal_connect (launcher->image, "style-set", @@ -1290,25 +1323,6 @@ g_signal_connect (launcher->arrowbutton, "drag-leave", G_CALLBACK (launcher_menu_drag_leave), launcher); - /* configuration */ - launcher_read_rc_file (plugin, launcher); - - if (launcher->entries->len == 0) - { - LauncherEntry *entry = entry = panel_slice_new0 (LauncherEntry); - - entry->name = g_strdup (_("New Item")); - entry->comment = g_strdup (_("This item has not yet been configured")); - - g_ptr_array_add (launcher->entries, entry); - - launcher_update_panel_entry (launcher); - } - else if (launcher->entries->len > 1) - { - gtk_widget_show (launcher->arrowbutton); - } - launcher_set_drag_dest (launcher->iconbutton); launcher_set_drag_dest (launcher->arrowbutton);