app-system: Remove known_vendor_prefixes
This does remove support for legacy prefixed app infos with subdirs, but since we want to remove support for the menu spec, let's not even bother. https://bugzilla.gnome.org/show_bug.cgi?id=698486
This commit is contained in:
parent
03b0f4b16b
commit
d9245598a4
@ -44,8 +44,6 @@ struct _ShellAppSystemPrivate {
|
|||||||
GHashTable *visible_id_to_app;
|
GHashTable *visible_id_to_app;
|
||||||
GHashTable *id_to_app;
|
GHashTable *id_to_app;
|
||||||
GHashTable *startup_wm_class_to_id;
|
GHashTable *startup_wm_class_to_id;
|
||||||
|
|
||||||
GSList *known_vendor_prefixes;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void shell_app_system_finalize (GObject *object);
|
static void shell_app_system_finalize (GObject *object);
|
||||||
@ -117,118 +115,9 @@ shell_app_system_finalize (GObject *object)
|
|||||||
g_hash_table_destroy (priv->visible_id_to_app);
|
g_hash_table_destroy (priv->visible_id_to_app);
|
||||||
g_hash_table_destroy (priv->startup_wm_class_to_id);
|
g_hash_table_destroy (priv->startup_wm_class_to_id);
|
||||||
|
|
||||||
g_slist_free_full (priv->known_vendor_prefixes, g_free);
|
|
||||||
priv->known_vendor_prefixes = NULL;
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (shell_app_system_parent_class)->finalize (object);
|
G_OBJECT_CLASS (shell_app_system_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
|
||||||
get_prefix_for_entry (GMenuTreeEntry *entry)
|
|
||||||
{
|
|
||||||
char *prefix = NULL, *file_prefix = NULL;
|
|
||||||
const char *id;
|
|
||||||
GFile *file;
|
|
||||||
char *name;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
id = gmenu_tree_entry_get_desktop_file_id (entry);
|
|
||||||
file = g_file_new_for_path (gmenu_tree_entry_get_desktop_file_path (entry));
|
|
||||||
name = g_file_get_basename (file);
|
|
||||||
|
|
||||||
if (!name)
|
|
||||||
{
|
|
||||||
g_object_unref (file);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (i = 0; vendor_prefixes[i]; i++)
|
|
||||||
{
|
|
||||||
if (g_str_has_prefix (name, vendor_prefixes[i]))
|
|
||||||
{
|
|
||||||
file_prefix = g_strdup (vendor_prefixes[i]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (strcmp (name, id) != 0)
|
|
||||||
{
|
|
||||||
char *t;
|
|
||||||
char *pname;
|
|
||||||
GFile *parent = g_file_get_parent (file);
|
|
||||||
|
|
||||||
if (!parent)
|
|
||||||
{
|
|
||||||
g_warn_if_reached ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pname = g_file_get_basename (parent);
|
|
||||||
if (!pname)
|
|
||||||
{
|
|
||||||
g_object_unref (parent);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!g_strstr_len (id, -1, pname))
|
|
||||||
{
|
|
||||||
/* handle <LegacyDir prefix="..."> */
|
|
||||||
char *t;
|
|
||||||
size_t name_len = strlen (name);
|
|
||||||
size_t id_len = strlen (id);
|
|
||||||
char *t_id = g_strdup (id);
|
|
||||||
|
|
||||||
t_id[id_len - name_len] = '\0';
|
|
||||||
t = g_strdup(t_id);
|
|
||||||
g_free (prefix);
|
|
||||||
g_free (t_id);
|
|
||||||
g_free (name);
|
|
||||||
name = g_strdup (id);
|
|
||||||
prefix = t;
|
|
||||||
|
|
||||||
g_object_unref (file);
|
|
||||||
file = parent;
|
|
||||||
g_free (pname);
|
|
||||||
g_free (file_prefix);
|
|
||||||
file_prefix = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
t = g_strconcat (pname, "-", name, NULL);
|
|
||||||
g_free (name);
|
|
||||||
name = t;
|
|
||||||
|
|
||||||
t = g_strconcat (pname, "-", prefix, NULL);
|
|
||||||
g_free (prefix);
|
|
||||||
prefix = t;
|
|
||||||
|
|
||||||
g_object_unref (file);
|
|
||||||
file = parent;
|
|
||||||
g_free (pname);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (file)
|
|
||||||
g_object_unref (file);
|
|
||||||
|
|
||||||
if (strcmp (name, id) == 0)
|
|
||||||
{
|
|
||||||
g_free (name);
|
|
||||||
if (file_prefix && !prefix)
|
|
||||||
return file_prefix;
|
|
||||||
if (file_prefix)
|
|
||||||
{
|
|
||||||
char *t = g_strconcat (prefix, "-", file_prefix, NULL);
|
|
||||||
g_free (prefix);
|
|
||||||
g_free (file_prefix);
|
|
||||||
prefix = t;
|
|
||||||
}
|
|
||||||
return prefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (name);
|
|
||||||
g_free (prefix);
|
|
||||||
g_free (file_prefix);
|
|
||||||
g_return_val_if_reached (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
get_flattened_entries_recurse (GMenuTreeDirectory *dir,
|
get_flattened_entries_recurse (GMenuTreeDirectory *dir,
|
||||||
GHashTable *entry_set)
|
GHashTable *entry_set)
|
||||||
@ -301,8 +190,6 @@ on_apps_tree_changed_cb (GMenuTree *tree,
|
|||||||
g_assert (tree == self->priv->apps_tree);
|
g_assert (tree == self->priv->apps_tree);
|
||||||
|
|
||||||
g_hash_table_remove_all (self->priv->visible_id_to_app);
|
g_hash_table_remove_all (self->priv->visible_id_to_app);
|
||||||
g_slist_free_full (self->priv->known_vendor_prefixes, g_free);
|
|
||||||
self->priv->known_vendor_prefixes = NULL;
|
|
||||||
|
|
||||||
if (!gmenu_tree_load_sync (self->priv->apps_tree, &error))
|
if (!gmenu_tree_load_sync (self->priv->apps_tree, &error))
|
||||||
{
|
{
|
||||||
@ -324,21 +211,10 @@ on_apps_tree_changed_cb (GMenuTree *tree,
|
|||||||
{
|
{
|
||||||
const char *id = key;
|
const char *id = key;
|
||||||
GMenuTreeEntry *entry = value;
|
GMenuTreeEntry *entry = value;
|
||||||
char *prefix;
|
|
||||||
ShellApp *app;
|
ShellApp *app;
|
||||||
GDesktopAppInfo *info;
|
GDesktopAppInfo *info;
|
||||||
const char *startup_wm_class;
|
const char *startup_wm_class;
|
||||||
|
|
||||||
prefix = get_prefix_for_entry (entry);
|
|
||||||
|
|
||||||
if (prefix != NULL
|
|
||||||
&& !g_slist_find_custom (self->priv->known_vendor_prefixes, prefix,
|
|
||||||
(GCompareFunc)g_strcmp0))
|
|
||||||
self->priv->known_vendor_prefixes = g_slist_append (self->priv->known_vendor_prefixes,
|
|
||||||
prefix);
|
|
||||||
else
|
|
||||||
g_free (prefix);
|
|
||||||
|
|
||||||
info = g_desktop_app_info_new (gmenu_tree_entry_get_desktop_file_id (entry));
|
info = g_desktop_app_info_new (gmenu_tree_entry_get_desktop_file_id (entry));
|
||||||
|
|
||||||
app = g_hash_table_lookup (self->priv->id_to_app, id);
|
app = g_hash_table_lookup (self->priv->id_to_app, id);
|
||||||
@ -472,15 +348,15 @@ shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
|
|||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
ShellApp *result;
|
ShellApp *result;
|
||||||
GSList *prefix;
|
const char *const *prefix;
|
||||||
|
|
||||||
result = shell_app_system_lookup_app (system, name);
|
result = shell_app_system_lookup_app (system, name);
|
||||||
if (result != NULL)
|
if (result != NULL)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
for (prefix = system->priv->known_vendor_prefixes; prefix; prefix = g_slist_next (prefix))
|
for (prefix = vendor_prefixes; *prefix != NULL; prefix++)
|
||||||
{
|
{
|
||||||
char *tmpid = g_strconcat ((char*)prefix->data, name, NULL);
|
char *tmpid = g_strconcat (*prefix, name, NULL);
|
||||||
result = shell_app_system_lookup_app (system, tmpid);
|
result = shell_app_system_lookup_app (system, tmpid);
|
||||||
g_free (tmpid);
|
g_free (tmpid);
|
||||||
if (result != NULL)
|
if (result != NULL)
|
||||||
|
Loading…
Reference in New Issue
Block a user