Freedesktop XDG menu specification Raul Suarez Jul 9, 2006
License Freedesktop XDG menu specification by  Raul Suarez   is licensed under the  Creative Commons Attribution-Noncommercial-Share Alike 2.5 Canada License
Overview Understanding the specification
Implementing it in a Linux distribution
Taking advantage of this specification
What is Freedesktop's XDG menu specification? This specification defines a desktop independent way for organizing menus
How does it work? Menu structure in menu file
One .desktop file per application
One .directory file per sub-menu
Menu file (simple) <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE xfdesktop-menu PUBLIC &quot;-//freedesktop//DTD Menu 0.8//EN&quot; &quot;http://www.freedesktop.org/standards/menu-spec/menu-0.8.dtd&quot;> <Menu>      <Name>Network</Name>      <Directory>Network.directory</Directory>      <Include>        <And>          <Category>Network</Category>          <Category>System</Category>        </And>      </Include>    </Menu>    <Menu>      <Name>Internet</Name>      <Directory>Internet.directory</Directory>      <Include>        <And>          <Category>Network</Category>          <Not>            <Category>System</Category>          </Not>        </And>      </Include>    </Menu>
Desktop file [Desktop Entry] Encoding=UTF-8 Name=Firefox web browser Icon=mozicon16.xpm Comment=Firefox web browser Exec=firefox Terminal=false Type=Application Categories=Network;WebBrowser GenericName=Browser
Directory file [Desktop Entry] Encoding=UTF-8 Name=Office Icon=siag24.xpm Type=Directory
Menu file (Complex) <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE xfdesktop-menu PUBLIC &quot;-//freedesktop//DTD Menu 0.8//EN&quot; &quot;http://www.freedesktop.org/standards/menu-spec/menu-0.8.dtd&quot;> <Menu> <Name>FileSystem</Name> <DefaultAppDirs/> <DefaultDirectoryDirs/> <AppDir>/opt/kde/share/applications/kde</AppDir> <Directory>Puppy-FileSystem.directory</Directory> <Layout> <Filename>ROX-Filer-file-manager.desktop</Filename> <Menuname inline=&quot;true&quot; inline_limit=&quot;0&quot;>FileManagers</Menuname> <Separator/> <Filename>MUT-Media-Utility-Tool.desktop</Filename> <Filename>Pmount-mount-unmount-drives.desktop</Filename> <Filename>LinNeighborhood-Samba-client.desktop</Filename> <Separator/> <Menuname inline=&quot;true&quot; inline_limit=&quot;0&quot;>FileSystemUtilities</Menuname> <Merge type=&quot;all&quot; /> </Layout> Continues in next slide...
Menu file (Complex.. continues) <Include> <Filename>ROX-Filer-file-manager.desktop</Filename> <Filename>MUT-Media-Utility-Tool.desktop</Filename> <Filename>Pmount-mount-unmount-drives.desktop</Filename> <Filename>LinNeighborhood-Samba-client.desktop</Filename> </Include> <Menu> <Name>FileManagers</Name> <Directory>Puppy-FileManagers.directory</Directory> <OnlyUnallocated/> <Include> <Category>FileManager</Category> </Include> </Menu> <Menu> <Name>FileSystemUtilities</Name> <Directory>Puppy-FileSystemUtilities.directory</Directory> <OnlyUnallocated/> <Include> <Category>FileSystem</Category> </Include> </Menu> </Menu> Continued from previous slide
Where are the files? $XDG_CONFIG_DIRS/menus/applications.menu

Free desktop XDG menu Specification

  • 1.
    Freedesktop XDG menuspecification Raul Suarez Jul 9, 2006
  • 2.
    License Freedesktop XDGmenu specification by Raul Suarez is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 Canada License
  • 3.
  • 4.
    Implementing it ina Linux distribution
  • 5.
    Taking advantage ofthis specification
  • 6.
    What is Freedesktop'sXDG menu specification? This specification defines a desktop independent way for organizing menus
  • 7.
    How does itwork? Menu structure in menu file
  • 8.
    One .desktop fileper application
  • 9.
    One .directory fileper sub-menu
  • 10.
    Menu file (simple)<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE xfdesktop-menu PUBLIC &quot;-//freedesktop//DTD Menu 0.8//EN&quot; &quot;http://www.freedesktop.org/standards/menu-spec/menu-0.8.dtd&quot;> <Menu>     <Name>Network</Name>     <Directory>Network.directory</Directory>     <Include>       <And>         <Category>Network</Category>         <Category>System</Category>       </And>     </Include>   </Menu>   <Menu>     <Name>Internet</Name>     <Directory>Internet.directory</Directory>     <Include>       <And>         <Category>Network</Category>         <Not>           <Category>System</Category>         </Not>       </And>     </Include>   </Menu>
  • 11.
    Desktop file [DesktopEntry] Encoding=UTF-8 Name=Firefox web browser Icon=mozicon16.xpm Comment=Firefox web browser Exec=firefox Terminal=false Type=Application Categories=Network;WebBrowser GenericName=Browser
  • 12.
    Directory file [DesktopEntry] Encoding=UTF-8 Name=Office Icon=siag24.xpm Type=Directory
  • 13.
    Menu file (Complex)<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE xfdesktop-menu PUBLIC &quot;-//freedesktop//DTD Menu 0.8//EN&quot; &quot;http://www.freedesktop.org/standards/menu-spec/menu-0.8.dtd&quot;> <Menu> <Name>FileSystem</Name> <DefaultAppDirs/> <DefaultDirectoryDirs/> <AppDir>/opt/kde/share/applications/kde</AppDir> <Directory>Puppy-FileSystem.directory</Directory> <Layout> <Filename>ROX-Filer-file-manager.desktop</Filename> <Menuname inline=&quot;true&quot; inline_limit=&quot;0&quot;>FileManagers</Menuname> <Separator/> <Filename>MUT-Media-Utility-Tool.desktop</Filename> <Filename>Pmount-mount-unmount-drives.desktop</Filename> <Filename>LinNeighborhood-Samba-client.desktop</Filename> <Separator/> <Menuname inline=&quot;true&quot; inline_limit=&quot;0&quot;>FileSystemUtilities</Menuname> <Merge type=&quot;all&quot; /> </Layout> Continues in next slide...
  • 14.
    Menu file (Complex..continues) <Include> <Filename>ROX-Filer-file-manager.desktop</Filename> <Filename>MUT-Media-Utility-Tool.desktop</Filename> <Filename>Pmount-mount-unmount-drives.desktop</Filename> <Filename>LinNeighborhood-Samba-client.desktop</Filename> </Include> <Menu> <Name>FileManagers</Name> <Directory>Puppy-FileManagers.directory</Directory> <OnlyUnallocated/> <Include> <Category>FileManager</Category> </Include> </Menu> <Menu> <Name>FileSystemUtilities</Name> <Directory>Puppy-FileSystemUtilities.directory</Directory> <OnlyUnallocated/> <Include> <Category>FileSystem</Category> </Include> </Menu> </Menu> Continued from previous slide
  • 15.
    Where are thefiles? $XDG_CONFIG_DIRS/menus/applications.menu

Editor's Notes

  • #4 Actually the XDG menu standard is not too difficult. The devil is in the particular implementation details. The concept is very simple.
  • #5 So it actually solves two problems: Different menu managers (panels, window managers, desktops, etc) have their own way for defining their menu structure. Different users and distributions like their menus organized differently. Application installations &amp;quot;desktop agnostic&amp;quot;. This is, package installations that comply with the standard, just need to include one file and all compliant window managers and desktop managers will show it in the menu in the right place. The user can change the menu structure. Previously the installers must know the menu structure to know where to insert the new entry.
  • #6 The menu creation is non-deterministic. i.e. You don&apos;t know what applications will be under what menu when you create the menu structure.
  • #7 The menu describes what categories of entries should go under what menu Categorization is based on a combination of categories, not on a single category. How does the menu system know were to put the entry? This is done by assigning each application specific categories, e.g. Office;TextEditor;WordProcessor and organizing the menu based on those categories so applications with the same categories will end up under the same submenu. It is possible to have the same package under two different entries based on the rules.
  • #8 If you want to add an application to the menu, just create a .desktop file under $XDG_DATA_DIRS/applications/ assigning the appropriate categories. You can use any of the existing .desktop files as an example.
  • #14 Installations just need to include a .desktop file The menu generators can be used in any other desktop/distro The library is mean for Gnome so OnlyShowIn only works for Gnome All the applications must be repackaged There isn&apos;t a menu editor