/** * cinnamon_app_system_lookup_heuristic_basename: * @system: a #CinnamonAppSystem * @id: Probable application identifier * * Find a valid application corresponding to a given * heuristically determined application identifier * string, or %NULL if none. * * Returns: (transfer none): A #CinnamonApp for @name */ CinnamonApp * cinnamon_app_system_lookup_heuristic_basename (CinnamonAppSystem *system, const char *name) { CinnamonApp *result; GSList *prefix; result = cinnamon_app_system_lookup_app (system, name); if (result != NULL) return result; result = cinnamon_app_system_lookup_settings_app (system, name); if (result != NULL) return result; for (prefix = system->priv->known_vendor_prefixes; prefix; prefix = g_slist_next (prefix)) { char *tmpid = g_strconcat ((char*)prefix->data, name, NULL); result = cinnamon_app_system_lookup_app (system, tmpid); g_free (tmpid); if (result != NULL) return result; } return NULL; }
/** * cinnamon_app_system_lookup_app_by_tree_entry: * @system: a #CinnamonAppSystem * @entry: a #GMenuTreeEntry * * Find a #CinnamonApp corresponding to a #GMenuTreeEntry. * * Return value: (transfer none): The #CinnamonApp for @entry, or %NULL if none */ CinnamonApp * cinnamon_app_system_lookup_app_by_tree_entry (CinnamonAppSystem *self, GMenuTreeEntry *entry) { /* If we looked up directly in ->entry_to_app, we'd lose the * override of running apps. Thus, indirect through the id. */ return cinnamon_app_system_lookup_app (self, gmenu_tree_entry_get_desktop_file_id (entry)); }
/** * cinnamon_app_system_lookup_setting: * * Returns: (transfer none): Application in gnomecc.menu, or %NULL if none * OBSOLETE - ONLY LEFT IN FOR COMPATIBILITY * RETURNS NULL IF NOT FOUND IN STANDARD APPS * */ CinnamonApp * cinnamon_app_system_lookup_setting (CinnamonAppSystem *self, const char *id) { CinnamonApp *app; /* Actually defer to the main app set if there's overlap */ app = cinnamon_app_system_lookup_app (self, id); if (app != NULL) return app; return NULL; }
/** * cinnamon_app_system_lookup_setting: * @system: * @id: desktop file id * * Returns: (transfer none): Application in gnomecc.menu, or %NULL if none */ CinnamonApp * cinnamon_app_system_lookup_setting (CinnamonAppSystem *self, const char *id) { CinnamonApp *app; /* Actually defer to the main app set if there's overlap */ app = cinnamon_app_system_lookup_app (self, id); if (app != NULL) return app; return g_hash_table_lookup (self->priv->setting_id_to_app, id); }
/** * get_app_from_gapplication_id: * @monitor: a #CinnamonWindowTracker * @window: a #MetaWindow * * Looks only at the given window, and attempts to determine * an application based on _GTK_APPLICATION_ID. If one can't be determined, * return %NULL. * * Return value: (transfer full): A newly-referenced #CinnamonApp, or %NULL */ static CinnamonApp * get_app_from_gapplication_id (MetaWindow *window) { CinnamonApp *app; CinnamonAppSystem *appsys; const char *id; char *desktop_file; appsys = cinnamon_app_system_get_default (); id = meta_window_get_gtk_application_id (window); if (!id) return NULL; desktop_file = g_strconcat (id, ".desktop", NULL); app = cinnamon_app_system_lookup_app (appsys, desktop_file); if (app) g_object_ref (app); g_free (desktop_file); return app; }
/** * cinnamon_app_system_lookup_app_for_path: * @system: a #CinnamonAppSystem * @desktop_path: (type utf8): UTF-8 encoded absolute file name * * Find or create a #CinnamonApp 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. * * Return value: (transfer none): The #CinnamonApp for id, or %NULL if none */ CinnamonApp * cinnamon_app_system_lookup_app_for_path (CinnamonAppSystem *system, const char *desktop_path) { const char *basename; const char *app_path; CinnamonApp *app; basename = g_strrstr (desktop_path, "/"); if (basename) basename += 1; else basename = desktop_path; app = cinnamon_app_system_lookup_app (system, basename); if (!app) return NULL; app_path = gmenu_tree_entry_get_desktop_file_path (cinnamon_app_get_tree_entry (app)); if (strcmp (desktop_path, app_path) != 0) return NULL; return app; }