## GDesktopAppInfo GDesktopAppInfo — Application information from desktop files |

## Synopsis

    #include <gio/gdesktopappinfo.h>

                        GDesktopAppInfo;
    GDesktopAppInfo *   g_desktop_app_info_new_from_filename
                                                            (const char *filename);
    GDesktopAppInfo *   g_desktop_app_info_new_from_keyfile (GKeyFile *key_file);
    GDesktopAppInfo *   g_desktop_app_info_new              (const char *desktop_id);
    const char *        g_desktop_app_info_get_filename     (GDesktopAppInfo *info);
    gboolean            g_desktop_app_info_get_is_hidden    (GDesktopAppInfo *info);
    gboolean            g_desktop_app_info_get_nodisplay    (GDesktopAppInfo *info);
    gboolean            g_desktop_app_info_get_show_in      (GDesktopAppInfo *info,
                                                             const gchar *desktop_env);
    const char *        g_desktop_app_info_get_generic_name (GDesktopAppInfo *info);
    const char *        g_desktop_app_info_get_categories   (GDesktopAppInfo *info);
    const char * const * g_desktop_app_info_get_keywords    (GDesktopAppInfo *info);
    const char *        g_desktop_app_info_get_startup_wm_class
                                                            (GDesktopAppInfo *info);
    void                g_desktop_app_info_set_desktop_env  (const char *desktop_env);
    char *              g_desktop_app_info_get_string       (GDesktopAppInfo *info,
                                                             const char *key);
    gboolean            g_desktop_app_info_get_boolean      (GDesktopAppInfo *info,
                                                             const char *key);
    gboolean            g_desktop_app_info_has_key          (GDesktopAppInfo *info,
                                                             const char *key);
    void                (*GDesktopAppLaunchCallback)        (GDesktopAppInfo *appinfo,
                                                             GPid pid,
                                                             gpointer user_data);
    gboolean            g_desktop_app_info_launch_uris_as_manager
                                                            (GDesktopAppInfo *appinfo,
                                                             GList *uris,
                                                             GAppLaunchContext *launch_context,
                                                             GSpawnFlags spawn_flags,
                                                             GSpawnChildSetupFunc user_setup,
                                                             gpointer user_setup_data,
                                                             GDesktopAppLaunchCallback pid_callback,
                                                             gpointer pid_callback_data,
                                                             GError **error);

    const gchar * const * g_desktop_app_info_list_actions   (GDesktopAppInfo *info);
    gchar *             g_desktop_app_info_get_action_name  (GDesktopAppInfo *info,
                                                             const gchar *action_name);
    void                g_desktop_app_info_launch_action    (GDesktopAppInfo *info,
                                                             const gchar *action_name,
                                                             GAppLaunchContext *launch_context);

## Object Hierarchy

      GObject
       +----GDesktopAppInfo

## Implemented Interfaces

GDesktopAppInfo implements GAppInfo.

## Properties

      "filename"                 gchar*                : Read / Write / Construct Only

## Description

GDesktopAppInfo is an implementation of GAppInfo based on desktop files.

Note that `<gio/gdesktopappinfo.h>` belongs to the UNIX-specific GIO interfaces, thus you have to use the `gio-unix-2.0.pc` pkg-config file when using it.

## Details

### GDesktopAppInfo

    typedef struct _GDesktopAppInfo GDesktopAppInfo;

Information about an installed application from a desktop file.

### g_desktop_app_info_new_from_filename ()

    GDesktopAppInfo *   g_desktop_app_info_new_from_filename
                                                            (const char *filename);

Creates a new GDesktopAppInfo.

`filename` : | the path of a desktop file, in the GLib filename encoding
Returns : | a new GDesktopAppInfo or `NULL` on error.

### g_desktop_app_info_new_from_keyfile ()

    GDesktopAppInfo *   g_desktop_app_info_new_from_keyfile (GKeyFile *key_file);

Creates a new GDesktopAppInfo.

`key_file` : | an opened GKeyFile
Returns : | a new GDesktopAppInfo or `NULL` on error.

Since 2.18

### g_desktop_app_info_new ()

    GDesktopAppInfo *   g_desktop_app_info_new              (const char *desktop_id);

Creates a new GDesktopAppInfo based on a desktop file id.

A desktop file id is the basename of the desktop file, including the .desktop extension. GIO is looking for a desktop file with this name in the `applications` subdirectories of the XDG data directories (i.e. the directories specified in the `XDG_DATA_HOME` and `XDG_DATA_DIRS` environment variables). GIO also supports the prefix-to-subdirectory mapping that is described in the Menu Spec (i.e. a desktop id of kde-foo.desktop will match `/usr/share/applications/kde/foo.desktop`).

`desktop_id` : | the desktop file id
Returns : | a new GDesktopAppInfo, or `NULL` if no desktop file with that id

### g_desktop_app_info_get_filename ()

    const char *        g_desktop_app_info_get_filename     (GDesktopAppInfo *info);

When `info` was created from a known filename, return it. In some situations such as the GDesktopAppInfo returned from `g_desktop_app_info_new_from_keyfile()`, this function will return `NULL`.

`info` : | a GDesktopAppInfo
Returns : | The full path to the file for `info`, or `NULL` if not known.

Since 2.24

### g_desktop_app_info_get_is_hidden ()

    gboolean            g_desktop_app_info_get_is_hidden    (GDesktopAppInfo *info);

A desktop file is hidden if the Hidden key in it is set to True.

`info` : | a GDesktopAppInfo.
Returns : | `TRUE` if hidden, `FALSE` otherwise.

### g_desktop_app_info_get_nodisplay ()

    gboolean            g_desktop_app_info_get_nodisplay    (GDesktopAppInfo *info);

Gets the value of the NoDisplay key, which helps determine if the application info should be shown in menus. See G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY and `g_app_info_should_show()`.

`info` : | a GDesktopAppInfo
Returns : | The value of the NoDisplay key

Since 2.30

### g_desktop_app_info_get_show_in ()

    gboolean            g_desktop_app_info_get_show_in      (GDesktopAppInfo *info,
                                                             const gchar *desktop_env);

Checks if the application info should be shown in menus that list available applications for a specific name of the desktop, based on the `OnlyShowIn` and `NotShowIn` keys.

If `desktop_env` is `NULL`, then the name of the desktop set with `g_desktop_app_info_set_desktop_env()` is used.

Note that `g_app_info_should_show()` for `info` will include this check (with `NULL` for `desktop_env`) as well as additional checks.

`info` : | a GDesktopAppInfo
`desktop_env` : | a string specifying a desktop name
Returns : | `TRUE` if the `info` should be shown in `desktop_env` according to the `OnlyShowIn` and `NotShowIn` keys, `FALSE` otherwise.

Since 2.30

### g_desktop_app_info_get_generic_name ()

    const char *        g_desktop_app_info_get_generic_name (GDesktopAppInfo *info);

Gets the generic name from the destkop file.

`info` : | a GDesktopAppInfo
Returns : | The value of the GenericName key

### g_desktop_app_info_get_categories ()

    const char *        g_desktop_app_info_get_categories   (GDesktopAppInfo *info);

Gets the categories from the desktop file.

`info` : | a GDesktopAppInfo
Returns : | The unparsed Categories key from the desktop file; i.e. no attempt is made to split it by ';' or validate it.

### g_desktop_app_info_get_keywords ()

    const char * const * g_desktop_app_info_get_keywords    (GDesktopAppInfo *info);

Gets the keywords from the desktop file.

`info` : | a GDesktopAppInfo
Returns : | The value of the Keywords key. [transfer none]

Since 2.32

### g_desktop_app_info_get_startup_wm_class ()

    const char *        g_desktop_app_info_get_startup_wm_class
                                                            (GDesktopAppInfo *info);

Retrieves the StartupWMClass field from `info`. This represents the WM_CLASS property of the main window of the application, if launched through `info`.

`info` : | a GDesktopAppInfo that supports startup notify
Returns : | the startup WM class, or `NULL` if none is set in the desktop file. [transfer none]

Since 2.34

### g_desktop_app_info_set_desktop_env ()

    void                g_desktop_app_info_set_desktop_env  (const char *desktop_env);

Sets the name of the desktop that the application is running in. This is used by `g_app_info_should_show()` and `g_desktop_app_info_get_show_in()` to evaluate the `OnlyShowIn` and `NotShowIn` desktop entry fields.

The Desktop Menu specification recognizes the following:

GNOME
KDE
ROX
XFCE
LXDE
Unity
Old

Should be called only once; subsequent calls are ignored.

`desktop_env` : | a string specifying what desktop this is

### g_desktop_app_info_get_string ()

    char *              g_desktop_app_info_get_string       (GDesktopAppInfo *info,
                                                             const char *key);

Looks up a string value in the keyfile backing `info`.

The `key` is looked up in the "Desktop Entry" group.

`info` : | a GDesktopAppInfo
`key` : | the key to look up
Returns : | a newly allocated string, or `NULL` if the key is not found

Since 2.36

### g_desktop_app_info_get_boolean ()

    gboolean            g_desktop_app_info_get_boolean      (GDesktopAppInfo *info,
                                                             const char *key);

Looks up a boolean value in the keyfile backing `info`.

The `key` is looked up in the "Desktop Entry" group.

`info` : | a GDesktopAppInfo
`key` : | the key to look up
Returns : | the boolean value, or `FALSE` if the key is not found

Since 2.36

### g_desktop_app_info_has_key ()

    gboolean            g_desktop_app_info_has_key          (GDesktopAppInfo *info,
                                                             const char *key);

Returns whether `key` exists in the "Desktop Entry" group of the keyfile backing `info`.

`info` : | a GDesktopAppInfo
`key` : | the key to look up
Returns : | `TRUE` if the `key` exists

Since 2.26

### GDesktopAppLaunchCallback ()

    void                (*GDesktopAppLaunchCallback)        (GDesktopAppInfo *appinfo,
                                                             GPid pid,
                                                             gpointer user_data);

During invocation, `g_desktop_app_info_launch_uris_as_manager()` may create one or more child processes. This callback is invoked once for each, providing the process ID.

`appinfo` : | a GDesktopAppInfo
`pid` : | Process identifier
`user_data` : | User data

### g_desktop_app_info_launch_uris_as_manager ()

    gboolean            g_desktop_app_info_launch_uris_as_manager
                                                            (GDesktopAppInfo *appinfo,
                                                             GList *uris,
                                                             GAppLaunchContext *launch_context,
                                                             GSpawnFlags spawn_flags,
                                                             GSpawnChildSetupFunc user_setup,
                                                             gpointer user_setup_data,
                                                             GDesktopAppLaunchCallback pid_callback,
                                                             gpointer pid_callback_data,
                                                             GError **error);

This function performs the equivalent of `g_app_info_launch_uris()`, but is intended primarily for operating system components that launch applications. Ordinary applications should use `g_app_info_launch_uris()`.

If the application is launched via traditional UNIX `fork()`/`exec()` then `spawn_flags`, `user_setup` and `user_setup_data` are used for the call to `g_spawn_async()`. Additionally, `pid_callback` (with `pid_callback_data`) will be called to inform about the PID of the created process.

If application launching occurs via some other mechanism (eg: D-Bus activation) then `spawn_flags`, `user_setup`, `user_setup_data`, `pid_callback` and `pid_callback_data` are ignored.

`appinfo` : | a GDesktopAppInfo
`uris` : | List of URIs. [element-type utf8]
`launch_context` : | a GAppLaunchContext
`spawn_flags` : | GSpawnFlags, used for each process
`user_setup` : | a GSpawnChildSetupFunc, used once for each process. [scope call]
`user_setup_data` : | User data for `user_setup`. [closure user_setup]
`pid_callback` : | Callback for child processes. [scope call]
`pid_callback_data` : | User data for `callback`. [closure pid_callback]
`error` : | return location for a GError, or `NULL`
Returns : | `TRUE` on successful launch, `FALSE` otherwise.

### g_desktop_app_info_list_actions ()

    const gchar * const * g_desktop_app_info_list_actions   (GDesktopAppInfo *info);

Returns the list of "additional application actions" supported on the desktop file, as per the desktop file specification.

As per the specification, this is the list of actions that are explicitly listed in the "Actions" key of the [Desktop Entry] group.

`info` : | a GDesktopAppInfo
Returns : | a list of strings, always non-`NULL`. [array zero-terminated=1][element-type utf8][transfer none]

Since 2.38

### g_desktop_app_info_get_action_name ()

    gchar *             g_desktop_app_info_get_action_name  (GDesktopAppInfo *info,
                                                             const gchar *action_name);

Gets the user-visible display name of the "additional application action" specified by `action_name`.

This corresponds to the "Name" key within the keyfile group for the action.

`info` : | a GDesktopAppInfo
`action_name` : | the name of the action as from `g_desktop_app_info_list_actions()`
Returns : | the locale-specific action name. [transfer full]

Since 2.38

### g_desktop_app_info_launch_action ()

    void                g_desktop_app_info_launch_action    (GDesktopAppInfo *info,
                                                             const gchar *action_name,
                                                             GAppLaunchContext *launch_context);

Activates the named application action.

You may only call this function on action names that were returned from `g_desktop_app_info_list_actions()`.

Note that if the main entry of the desktop file indicates that the application supports startup notification, and `launch_context` is non-`NULL`, then startup notification will be used when activating the action (and as such, invocation of the action on the receiving side must signal the end of startup notification when it is completed). This is the expected behaviour of applications declaring additional actions, as per the desktop file specification.

As with `g_app_info_launch()` there is no way to detect failures that occur while using this function.

`info` : | a GDesktopAppInfo
`action_name` : | the name of the action as from `g_desktop_app_info_list_actions()`
`launch_context` : | a GAppLaunchContext. [allow-none]

Since 2.38

## Property Details

### The `"filename"` property

      "filename"                 gchar*                : Read / Write / Construct Only

The origin filename of this GDesktopAppInfo

Default value: NULL