FreeDesktop.org Integration

From PsiWiki

Jump to: navigation, search

Contents

[edit] Current Status

We've all noticed that Psi checks for KDE on "make install". This happens because Psi installs a special .desktop file describing the application, only if it detects KDE.

The .desktop file has become a standard for describing applications, mime-types, menus described on freedesktop.org

This means Psi needs to install the .desktop file no matter if KDE is installed or not.

[edit] Prerequisites

There are 4 specs (until now) which need to concur to make a perfect desktop integration:

  1. desktop-entry spec - describes the contents of the .desktop file (the key-value entries)
  2. menu spec - lists the registered categories an application can be added to
  3. icon-theme spec - describes where the application icons should be placed
  4. startup-notification spec - describes interaction between the application and the desktop during startup

[edit] Implementation

[edit] Support detection

I am not sure yet wether to include freedesktop.org detection or not, for the Linux version. Detection would be useful though considering that there might be *nixes (as in distributions) not compatible with the FreeDesktop.org specifications. The major desktops (KDE, GNOME, XFCE - from what I'm aware) support the freedesktop.org specifications.

FreeDesktop.org provides a package with tools, desktop-file-utils, containing desktop-file-install, a program designed to help installing .desktop files into the system.

I believe that we could consider looking for desktop-file-install as a method for checking support for FreeDesktop.org support.

[edit] The XDG internals

Once FreeDesktop.org support is detected desktop-file-install would be used as following:

desktop-file-install --vendor=psi psi.desktop

This command will place psi.desktop in a directory, in our case $XDG_DATA_DIRS/applications (only the first dir in $XDG_DATA_DIRS will be used - I think).

According to the base-dir spec, $XDG_DATA_DIRS is a list of directories where data resides. If the variable is empty, "/usr/local/share:/usr/share" would be considered the default.

Therefore, it is safe to assume that the list in $XDG_DATA_DIRS would at least contain "$PREFIX/share". We use desktop-file-install to install psi.desktop but we don't have any program to install the icons, we only have specs. We will use this assumption when installing icons.

[edit] psi.desktop

An updated psi.desktop file follows

# This file complies to
# http://standards.freedesktop.org/desktop-entry-spec ver, 0.9.4+
# http://www.freedesktop.org/Standards/menu-spec ver. 0.9+

[Desktop Entry]
Type=Application
Version=0.9.4
Encoding=UTF-8
Name=Psi
GenericName=Jabber Client
Comment=Psi Jabber Client
Icon=psi.png
TryExec=psi
Exec=psi -caption "%c" %i %m
Terminal=false
Categories=Qt;Network;InstantMessaging;
StartupNotify=true
StartupWMClass=psi

A list of internationalized GenericName/Comment pairs for the psi.desktop file is maintained in Git source code repository.

[edit] Icons

The icons should be installed no matter if the FreeDeskop.org specs are met or not.

The latest icon-theme-spec says that there is a default icon theme which is used when the current theme does not have an icon suited for your application.

The default theme (named hicolor), available here, also installable via a package in the Linux distributions, contains the hierarchy in which application icons should keep their icons. The relevant directories for an application (Psi) are the following:

$PREFIX/share/icons/hicolor/128x128/apps/
$PREFIX/share/icons/hicolor/16x16/apps/
$PREFIX/share/icons/hicolor/192x192/apps/
$PREFIX/share/icons/hicolor/22x22/apps/
$PREFIX/share/icons/hicolor/24x24/apps/
$PREFIX/share/icons/hicolor/32x32/apps/
$PREFIX/share/icons/hicolor/36x36/apps/
$PREFIX/share/icons/hicolor/48x48/apps/
$PREFIX/share/icons/hicolor/64x64/apps/
$PREFIX/share/icons/hicolor/72x72/apps/
$PREFIX/share/icons/hicolor/96x96/apps/
$PREFIX/share/icons/hicolor/scalable/apps/

The spec also says that:

Minimally you should install a 48x48 icon in the hicolor theme.
This means installing a PNG file in $prefix/share/icons/hicolor/48x48/apps.

To put it into $XDG_DATA_DIRS words, the application icons should put be their app icons into

$XDG_DATA_DIRS/icons/$theme_name/$size/apps

This means we could put in Psi icons for various sizes, including a SVG icon (see "scalable" dir) - although I have yet to see an application using that functionality.

Personal tools