Allow Nautilus to search for extensions in the directories listed
in $NAUTILUS_EXTENSION_PATH.
diff --git a/src/nautilus-module.c b/src/nautilus-module.c
index bf474bd..42e2a4e 100644
--- a/src/nautilus-module.c
+++ b/src/nautilus-module.c
@@ -211,6 +211,10 @@ static void
load_module_dir (const char *dirname)
{
GDir *dir;
+ static GHashTable *loaded = NULL;
+
+ if (loaded == NULL)
+ loaded = g_hash_table_new (g_str_hash, g_str_equal);
dir = g_dir_open (dirname, 0, NULL);
@@ -221,15 +225,22 @@ load_module_dir (const char *dirname)
while ((name = g_dir_read_name (dir)))
{
if (g_str_has_suffix (name, "." G_MODULE_SUFFIX))
- {
- char *filename;
-
- filename = g_build_filename (dirname,
- name,
- NULL);
- nautilus_module_load_file (filename);
- 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);
+ g_hash_table_add (loaded, g_strdup (name));
+ g_free (filename);
+ }
+ }
}
g_dir_close (dir);
@@ -257,10 +268,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);
+ }
+
eel_debug_call_at_shutdown (free_module_objects);
}
}
ix/log/gnu/installer?id=ce98de1fed17a937907081fdaaf96d7ac4a77cbc'>installer/tests.scm
Age | Commit message (Expand) | Author |
2021-04-28 | tests: Add gui-uefi-installed-os test....* gnu/installer/tests.scm (conclude-installation): Rename it into ...
(start-installation): ... this new procedure.
(complete-installation): New procedure.
(choose-partitioning): Add an uefi-support? argument.
* gnu/tests/install.scm (uefi-firmware): New procedure.
(run-install, qemu-command/writable-image, gui-test-program,
installation-target-os-for-gui-tests): Add an uefi-support? argument.
(%extra-packages): Add grub-efi, fatfsck/static and dosfstools.
(%test-gui-installed-os): New variable.
| Mathieu Othacehe |
2020-10-30 | installer: Use UUIDs in the 'swap-devices' field....Note: This change requires an updated 'guix' package that contains
Linux-swap support in (gnu build file-systems).
* gnu/installer/parted.scm (user-partitions->configuration): Use UUIDs
in the 'swap-devices' field.
* gnu/installer/newt/final.scm (run-final-page)[wait-for-clients]: New
procedure. Use it.
* gnu/installer/tests.scm (choose-partitioning): Wait for
'starting-final-step' message and move configuration file dialog
handling to...
(conclude-installation): ... here. Send over PORT the reply
corresponding to 'starting-final-step'.
* gnu/tests/install.scm (gui-test-program): When ENCRYPTED? is false,
invoke 'swaplabel' in the marionette.
(installation-target-os-for-gui-tests): When ENCRYPTED? is false, except
a fixed UUID.
| Ludovic Courtès |