jeffchannell.com

Recreating Wine Menus in Gnome

Posted in Linux
2009-10-21 09:25:46 +0000 UTC

I did a complete overhaul of my Linux box not too long ago, and in the process decided to start fresh with my /home directory, only porting configuration for things I knew I wanted to keep. One of those was my .wine folder. Everything went smoothly, but afterwards I was missing all of my Gnome menu entries for my Wine apps. Here's how I recovered them.

Wine stores its menu items in a number of different locations, and yours may differ slightly from mine. The four locations on my Ubuntu install were in ~/.config/menus/applications-merged, ~/.local/share/applications/wine, ~/.local/share/desktop-directories and ~/.local/share/icons.

Inside ~/.config/menus/applications-merged are the main Wine .menu file and a .menu file for each subfolder. For example:

~/.config/menus/applications-merged/wine-Programs.menu

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<Menu>
  <Name>Applications</Name>
  <Menu>
    <Name>wine-wine</Name>
    <Directory>wine-wine.directory</Directory>
  <Menu>
    <Name>wine-Programs</Name>
    <Directory>wine-Programs.directory</Directory>
  </Menu>
  </Menu>
</Menu>

~/.config/menus/applications-merged/wine-Programs-Mozilla Firefox.menu

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<Menu>
  <Name>Applications</Name>
  <Menu>
    <Name>wine-wine</Name>
    <Directory>wine-wine.directory</Directory>
  <Menu>
    <Name>wine-Programs</Name>
    <Directory>wine-Programs.directory</Directory>
  <Menu>
    <Name>wine-Programs-Mozilla Firefox</Name>
    <Directory>wine-Programs-Mozilla Firefox.directory</Directory>
    <Include>
      <Filename>wine-Programs-Mozilla Firefox-Mozilla Firefox.desktop</Filename>
      <Filename>wine-Programs-Mozilla Firefox-Mozilla Firefox (Safe Mode).desktop</Filename>
    </Include>
  </Menu>
  </Menu>
  </Menu>
</Menu>

These files reference data that can be found in ~/.local/share, in applications/wine/ and desktop-directories/. ~/.local/share/applications/wine/ contains a folder structure that is basically folders and .desktop launchers that emulate the same structure you will see in your menu. So, in my case, I had:

The two .desktop files are very similar, and follow the Gnome .desktop standard.

~/.local/share/applications/wine/Programs/Mozilla Firefox.desktop

[Desktop Entry]
Name=Mozilla Firefox
Exec=wine "C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe" 
Type=Application
StartupWMClass=Wine
Path=~/.wine/dosdevices/c:/Program Files/Mozilla Firefox
Icon=90c5_firefox.0

Notice that this file references the icon file to be used with the menu item. This icon should be located in ~/.local/share/icons

Finally, Wine needs a little more information about the structure of the menu directories, and gets this info from .directory files located in ~/.local/share/desktop-directories. These .directory files have a struture very similar to the .desktop files, and a file is required for each directory level. This means that for "Wine > Programs > Mozilla Firefox", I end up having 3 .directory files: wine-wine.directory, wine-Programs.directory, and wine-Programs-Mozilla Firefox.directory.

~/.local/share/desktop-directories/wine-wine.directory

[Desktop Entry]
Type=Directory
Name=Wine
Icon=wine

~/.local/share/desktop-directories/wine-Programs.directory

[Desktop Entry]
Type=Directory
Name=Programs
Icon=folder

~/.local/share/desktop-directories/wine-Programs-Mozilla Firefox.directory

[Desktop Entry]
Type=Directory
Name=Mozilla Firefox
Icon=folder

Fortunately for me, I was only migrating data from an old ~, so these files were all still intact in their original locations, and I didn't actually have to recreate any of them (although I did have to tweak a couple). As of now I know of no way to automatically populate these files, though such a utility would be a welcome addition to every Wine user's toolkit.