/**
 * 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;
}
Example #4
0
/**
 * 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;
}