1
Fork 0
mirror of https://https.git.savannah.gnu.org/git/guix.git/ synced 2025-07-13 18:40:57 +02:00
guix/gnu/packages/patches/nautilus-extension-search-path.patch
Liliana Marie Prikler e2ada3bd21
gnu: nautilus: Update to 46.2.
* gnu/packages/gnome.scm (nautilus): Update to 46.2.
[#:phases]: Add ‘patch-commands’.
Rename ‘disable-tracker-tests’ to ‘fix-tests’
Also fix “test-directory”.
[inputs]: Add bash-minimal.
* gnu/packages/patches/nautilus-extension-search-path.patch: Rebase patch.

Co-authored-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2025-03-02 20:31:37 +01:00

78 lines
2.7 KiB
Diff

Allow Nautilus to search for extensions in the directories listed
in $NAUTILUS_EXTENSION_PATH.
Index: nautilus-46.1/src/nautilus-module.c
===================================================================
--- nautilus-46.1.orig/src/nautilus-module.c
+++ nautilus-46.1/src/nautilus-module.c
@@ -219,8 +219,16 @@ static void
load_module_dir (const char *dirname)
{
GDir *dir;
-
+ static GHashTable *loaded = NULL;
g_autoptr (GStrvBuilder) installed_module_name_builder = g_strv_builder_new ();
+
+ if (installed_module_names != NULL)
+ g_strv_builder_addv (installed_module_name_builder,
+ (const gchar **)installed_module_names);
+
+ if (loaded == NULL)
+ loaded = g_hash_table_new (g_str_hash, g_str_equal);
+
dir = g_dir_open (dirname, 0, NULL);
if (dir)
@@ -231,13 +239,20 @@ load_module_dir (const char *dirname)
{
if (g_str_has_suffix (name, "." G_MODULE_SUFFIX))
{
- char *filename;
-
- filename = g_build_filename (dirname,
- name,
- NULL);
- nautilus_module_load_file (filename, installed_module_name_builder);
- g_free (filename);
+ /* Make sure each module is loaded only twice or this could
+ lead to a crash. Double loading can occur if DIRNAME
+ occurs more than once in $NAUTILUS_EXTENSION_PATH. */
+ if (!g_hash_table_contains (loaded, name))
+ {
+ char *filename;
+
+ filename = g_build_filename (dirname,
+ name,
+ NULL);
+ nautilus_module_load_file (filename, installed_module_name_builder);
+ g_hash_table_add (loaded, g_strdup (name));
+ g_free (filename);
+ }
}
}
@@ -277,9 +292,24 @@ nautilus_module_setup (void)
if (!initialized)
{
+ const gchar *extension_path;
initialized = TRUE;
load_module_dir (NAUTILUS_EXTENSIONDIR);
+
+ /* Load additional modules from the user-provided search path. */
+ extension_path = g_getenv ("NAUTILUS_EXTENSION_PATH");
+ if (extension_path)
+ {
+ char **extension_dirs, **d;
+
+ extension_dirs = g_strsplit (extension_path, ":", -1);
+ for (d = extension_dirs; d != NULL && *d != NULL; d++)
+ load_module_dir (*d);
+
+ g_strfreev (extension_dirs);
+ }
+
}
}