Plantage de pcmanfm et bookmark

Bonjour,

Lorsque je mets en bookmark des dossiers avec pcmanfm, celui quitte tout seul.
Cela se passe quelque soit le dossier que je veux mettre dans la barre latérale, que celui se trouve dans mon $home, dossier système où dossier se trouvant sur un autre disque dur interne.
Même si je ne fais pas cette manipulation tous les jours, c’est assez étrange d’autant qu’une fois que je relance pcmanfm mon bookmark est bien présent dans la barre.
Y a t’il un moyen de remédier à ce léger souci ?

Par avance merci.

Bizarre en effet. J’ai testé. Ça a planté la première fois. Au lancement suivant, le signet est bien là. Juste après le crash,

donne

EDIT
L’erreur se reproduit mais sous certaines conditions. Si pcmanfm n’est pas utilisé pour gérer le bureau, il n’y a pas de problème. S’il gère le bureau, on trouve pcmanfm --desktop dans la liste des processus en cours. J’ai remarqué aussi que le problème se produit quand je lance pcmanfm mais que la fenêtre ne se met pas au premier plan (couleur de bordure pour fenêtre inactive, gris au lieu de bleu par exemple).

pas de solution claire…

Bonjour,

Merci beaucoup d’avoir pris le temps de voir ce souci.
En espérant peut être une mise à jour corrective.

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);

}

Bonjour,

Houlà bien trop technique pour moi…
Ce que j’ai compris c’est que pcmanfm n’utilise qu’une instance, ça tombe bien je n’ouvre bien souvent qu’une seule fenêtre.
Et merci encore d’essayer de debusquer le problème :slightly_smiling:.

Une instance et une fenêtre, c’est pas exactement la même chose. D’ailleurs, pour la gestion des signets, quand il y a plusieurs fenêtres ouvertes, la mise à jour des signets après modification s’effectue sur chacune d’entre elles (enfin, quand ça marche).

EDIT
Quand l’erreur se produit, GTK_CONTAINER(win->bookmarks_menu) vaut 0x1 ce qui n’est pas un emplacement mémoire approprié d’où l’erreur de segmentation.

Solution palliative
Dans un terminal, tuer pcmanfm avec

ou désactiver la gestion du bureau avec

On perd la gestion du bureau mais le gestionnaire de fenêtres (openbox ou compiz) en reprend une partie.