Add shell_app_system_get_app_for_path

Allows looking up an app given an absolute path to its
desktop file; will be used for startup-notification.

https://bugzilla.gnome.org/show_bug.cgi?id=612833
This commit is contained in:
Colin Walters 2010-03-25 17:45:28 -04:00
parent 1a25cd98ea
commit fe52a9e1a1
2 changed files with 44 additions and 0 deletions

View File

@ -484,6 +484,49 @@ shell_app_system_get_app (ShellAppSystem *self,
return app;
}
/**
* shell_app_system_get_app_for_path:
* @system: a #ShellAppSystem
* @desktop_path: (utf8): UTF-8 encoded absolute file name
*
* Find or create a #ShellApp corresponding to a given absolute
* file name which must be in the standard paths (XDG_DATA_DIRS).
* For files outside the datadirs, this function returns %NULL.
*
* If already cached elsewhere in memory, return that instance.
* Otherwise, create a new one.
*
* Return value: (transfer full): The #ShellApp for id, or %NULL if none
*/
ShellApp *
shell_app_system_get_app_for_path (ShellAppSystem *system,
const char *desktop_path)
{
const char *basename;
ShellAppInfo *info;
basename = g_strrstr (desktop_path, "/");
if (basename)
basename += 1;
else
basename = desktop_path;
info = g_hash_table_lookup (system->priv->app_id_to_info, basename);
if (!info)
return NULL;
if (info->type == SHELL_APP_INFO_TYPE_ENTRY)
{
const char *full_path = gmenu_tree_entry_get_desktop_file_path ((GMenuTreeEntry*) info->entry);
if (strcmp (desktop_path, full_path) != 0)
return NULL;
}
else
return NULL;
return shell_app_system_get_app (system, basename);
}
/**
* shell_app_system_get_app_for_window:
* @self: A #ShellAppSystem

View File

@ -70,6 +70,7 @@ gboolean shell_app_info_launch (ShellAppInfo *info,
ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system, const char *filename, GError **error);
ShellApp *shell_app_system_get_app (ShellAppSystem *system, const char *id);
ShellApp *shell_app_system_get_app_for_path (ShellAppSystem *system, const char *desktop_path);
ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *self, MetaWindow *window);
void _shell_app_system_register_app (ShellAppSystem *self, ShellApp *app);