Use XDG paths in addition to the defaults when looking for icons and applications
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
/* http://standards.freedesktop.org/desktop-entry-spec/ */
|
||||
|
||||
#include "apps-common.h"
|
||||
#include "common.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include <stdio.h>
|
||||
@@ -194,3 +195,25 @@ void test_read_desktop_file()
|
||||
printf("Name:%s Icon:%s Exec:%s\n", entry.name, entry.icon, entry.exec);
|
||||
fprintf(stdout, "\033[0m");
|
||||
}
|
||||
|
||||
GSList *apps_locations = NULL;
|
||||
// Do not free the result.
|
||||
const GSList *get_apps_locations()
|
||||
{
|
||||
if (apps_locations)
|
||||
return apps_locations;
|
||||
|
||||
apps_locations = load_locations_from_env(apps_locations, "XDG_DATA_HOME", "applications", NULL);
|
||||
|
||||
apps_locations = g_slist_append(apps_locations, g_build_filename(g_get_home_dir(), ".local/share/applications", NULL));
|
||||
|
||||
apps_locations = load_locations_from_env(apps_locations, "XDG_DATA_DIRS", "applications", NULL);
|
||||
|
||||
apps_locations = g_slist_append(apps_locations, g_strdup("/usr/local/share/applications"));
|
||||
apps_locations = g_slist_append(apps_locations, g_strdup("/usr/share/applications"));
|
||||
apps_locations = g_slist_append(apps_locations, g_strdup("/opt/share/applications"));
|
||||
|
||||
apps_locations = slist_remove_duplicates(apps_locations, g_str_equal, g_free);
|
||||
|
||||
return apps_locations;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#ifndef APPS_COMMON_H
|
||||
#define APPS_COMMON_H
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
typedef struct DesktopEntry {
|
||||
char *name;
|
||||
char *exec;
|
||||
@@ -27,4 +29,8 @@ int read_desktop_file(const char *path, DesktopEntry *entry);
|
||||
// Empties DesktopEntry: releases the memory of the *members* of entry.
|
||||
void free_desktop_entry(DesktopEntry *entry);
|
||||
|
||||
// Returns a list of the directories used to store desktop files.
|
||||
// Do not free the result, it is cached.
|
||||
const GSList *get_apps_locations();
|
||||
|
||||
#endif
|
||||
|
||||
@@ -20,11 +20,13 @@
|
||||
|
||||
#include "icon-theme-common.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "apps-common.h"
|
||||
#include "common.h"
|
||||
|
||||
#define ICON_DIR_TYPE_SCALABLE 0
|
||||
#define ICON_DIR_TYPE_FIXED 1
|
||||
@@ -50,19 +52,22 @@ const GSList *get_icon_locations()
|
||||
if (icon_locations)
|
||||
return icon_locations;
|
||||
|
||||
gchar *path;
|
||||
path = g_build_filename(g_get_home_dir(), ".icons", NULL);
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup(path));
|
||||
g_free(path);
|
||||
path = g_build_filename(g_get_home_dir(), ".local/share/icons", NULL);
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup(path));
|
||||
g_free(path);
|
||||
icon_locations = load_locations_from_env(icon_locations, "XDG_DATA_HOME", ".icons", NULL);
|
||||
|
||||
icon_locations = g_slist_append(icon_locations, g_build_filename(g_get_home_dir(), ".icons", NULL));
|
||||
icon_locations = g_slist_append(icon_locations, g_build_filename(g_get_home_dir(), ".local/share/icons", NULL));
|
||||
|
||||
icon_locations = load_locations_from_env(icon_locations, "XDG_DATA_DIRS", ".icons", ".pixmaps", NULL);
|
||||
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup("/usr/local/share/icons"));
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup("/usr/local/share/pixmaps"));
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup("/usr/share/icons"));
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup("/usr/share/pixmaps"));
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup("/opt/share/icons"));
|
||||
icon_locations = g_slist_append(icon_locations, g_strdup("/opt/share/pixmaps"));
|
||||
|
||||
icon_locations = slist_remove_duplicates(icon_locations, g_str_equal, g_free);
|
||||
|
||||
return icon_locations;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user