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.