En essayant de debugger avec gdb dans un terminal. Je tue tous les pcmanfm en cours. Je lance un gdb pcmanfm avec run --desktop, puis un deuxième gdb pcmanfm pour tester les signets. Dans le premier gdb (celui correspondant à pcmanfm --desktop, j’obtiens l’erreur suivante :
Program received signal SIGSEGV, Segmentation fault.
0xb7b46fe6 in gtk_container_foreach () from /usr/lib/libgtk-x11-2.0.so.0
Peut-être essaie-t-il d’actualiser les signets dans toutes les instances de pcmanfm mais celle avec l’option --desktop n’a pas vraiment de fenêtre…
EDIT
En fait, d’après son code source, pcmanfm ne gère qu’une seule instance. Le deuxième lancement permet juste d’avoir l’interface graphique pour tester les signets. Le seul appel à gtk_container_foreach est effectué par on_show_history_menu (fichier main-win.c). Là je bloque.
La commande bt (backtrace) de gdb donne
#0 0xb7b46fe6 in gtk_container_foreach () from /usr/lib/libgtk-x11-2.0.so.0
#1 0xb7b470a5 in gtk_container_get_children ()
from /usr/lib/libgtk-x11-2.0.so.0
#2 0x080562fd in on_bookmarks_changed (bm=0x8065898, win=0x811f300)
at main-win.c:381
En particulier, la ligne #2 fait référence au fichier main-win.c, ligne 381 que voici
static void on_bookmarks_changed(FmBookmarks* bm, FmMainWin* win)
{
/* delete old items first. /
[color=#FF00FF]GList mis = gtk_container_get_children(GTK_CONTAINER(win->bookmarks_menu))[/color]
GList* l;
for(l = mis;l;l=l->next)
{
GtkWidget* item = (GtkWidget*)l->data;
if( g_object_get_data(G_OBJECT(item), “path”) )
gtk_widget_destroy(item);
else
{
if(GTK_IS_SEPARATOR_MENU_ITEM(item))
gtk_widget_destroy(item);
break;
}
}
g_list_free(mis);
create_bookmarks_menu(win);
}