En ce moment, je découvre la bibliothèque [garcon|https://people.freebsd.org/~olivierd/docs-xfce/garcon/index.html] $$C’est un portage des [spécifications|http://www.freedesktop.org/wiki/Specifications/menu-spec/] définit par le consortium Freedesktop.org pour définir l’agencement d’un menu.$$ du projet [Xfce|http://www.xfce.org/].

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|https://developer.gnome.org/glib/stable/] 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|https://developer.gnome.org/gtk2/2.24/GtkTreeView.html] pour afficher le tout dans une fenêtre.