Jouons un peu avec la bibliothèque garcon (Xfce)

En ce moment, je découvre la bibliothèque garcon [1] du projet Xfce.

Comme je débute, le premier programme est relativement simple. Il affiche les applications présentes dans le menu. Il va analyser le fichier xfce-applications.menu présent dans $XDG_MENU_PREFIX pour rechercher les fichiers .desktop. Le résultat peut être différent en fonction des logiciels installés sur votre système.

Pour pouvoir l'utiliser il vous faut les fichiers d'en-tête pour GLib et bien évidemment garcon.

La ligne de commande que j'utilise sous FreeBSD (j'utilise encore gcc comme compilateur).

$ gcc -Wall xfce-menu.c -o xfce-menu `pkgconf --cflags --libs glib-2.0 garcon-1` -lc
$ ./xfce-menu

 * xfce4-run.desktop
----
 * exo-terminal-emulator.desktop
 * exo-file-manager.desktop
 * exo-mail-reader.desktop
 * exo-web-browser.desktop
----
Settings
 * xfce-settings-manager.desktop
----
 * xfce4-accessibility-settings.desktop
[...]
System
 * Thunar-bulk-rename.desktop
 * xfce4-taskmanager.desktop
 * Thunar.desktop
 * xterm.desktop
 * xfce4-terminal.desktop
----
 * xfce4-about.desktop
 * xfce4-session-logout.desktop

Si l'on souhaite utiliser la fonction xfce_menu_items2 () la sortie est différente, les fichiers .desktop sont suivis des catégories.

$ ./xfce-menu

xfce4-run.desktop X-Xfce-Toplevel;X-XFCE;Utility;
exo-terminal-emulator.desktop X-Xfce-Toplevel;X-XFCE;Utility;
exo-file-manager.desktop X-Xfce-Toplevel;X-XFCE;Utility;
exo-mail-reader.desktop X-Xfce-Toplevel;X-XFCE;Network;
exo-web-browser.desktop X-Xfce-Toplevel;X-XFCE;Network;
xfce-settings-manager.desktop DesktopSettings;Settings;X-XFCE;
xfce4-accessibility-settings.desktop X-XFCE-SystemSettings;X-XFCE-SettingsDialog;DesktopSettings;Settings;GTK;XFCE;
xfce-ui-settings.desktop X-XFCE-PersonalSettings;X-XFCE-SettingsDialog;DesktopSettings;Settings;GTK;XFCE;
[...]
Thunar.desktop FileManager;FileTools;GTK;Core;Utility;System;
xterm.desktop TerminalEmulator;System;
xfce4-terminal.desktop TerminalEmulator;System;GTK;
xfce4-about.desktop X-Xfce-Toplevel;X-XFCE;Utility;
xfce4-session-logout.desktop X-Xfce-Toplevel;X-XFCE;System;

Maintenant, il nous reste plus qu'à utiliser un GtkTreeView widget pour afficher le tout dans une fenêtre.

Note

[1] C'est un portage des spécifications définit par le consortium Freedesktop.org pour définir l'agencement d'un menu.