summary refs log blame commit diff
path: root/pkgs/development/libraries/xdg-desktop-portal/respect-path-env-var.patch
blob: d970f5636ae44e8e605e5b4eed44d88a8b4291a1 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                                         
  
                                                                  








                                                                                         
                                     








































                                                                                             
                                                        








                                                                    
                                                            






                                                                        
diff --git a/src/portal-impl.c b/src/portal-impl.c
index 4fd48ff..346da7c 100644
--- a/src/portal-impl.c
+++ b/src/portal-impl.c
@@ -116,38 +116,50 @@ sort_impl_by_name (gconstpointer a,
 void
 load_installed_portals (gboolean opt_verbose)
 {
-  const char *portal_dir = DATADIR "/xdg-desktop-portal/portals";
-  g_autoptr(GFile) dir = g_file_new_for_path (portal_dir);
-  g_autoptr(GFileEnumerator) enumerator = NULL;
 
-  enumerator = g_file_enumerate_children (dir, "*", G_FILE_QUERY_INFO_NONE, NULL, NULL);
+  g_auto(GStrv) portal_dir_list;
+  int i;
+  const char *portal_dir = g_getenv ("XDG_DESKTOP_PORTAL_PATH");
+
+  if (portal_dir == NULL)
+    portal_dir = DATADIR "/portals";
 
-  if (enumerator == NULL)
-    return;
+  portal_dir_list = g_strsplit (portal_dir, G_SEARCHPATH_SEPARATOR_S, 0);
 
-  while (TRUE)
+  for (i = 0; portal_dir_list[i] != NULL; i++)
     {
-      g_autoptr(GFileInfo) info = g_file_enumerator_next_file (enumerator, NULL, NULL);
-      g_autoptr(GFile) child = NULL;
-      g_autofree char *path = NULL;
-      const char *name;
-      g_autoptr(GError) error = NULL;
+      portal_dir = portal_dir_list[i];
+      g_autoptr(GFile) dir = g_file_new_for_path (portal_dir);
+      g_autoptr(GFileEnumerator) enumerator = NULL;
+      enumerator = g_file_enumerate_children (dir, "*", G_FILE_QUERY_INFO_NONE, NULL, NULL);
 
-      if (info == NULL)
-        break;
+      if (enumerator == NULL)
+        continue;
 
-      name = g_file_info_get_name (info);
+      while (TRUE)
+        {
+          g_autoptr(GFileInfo) info = g_file_enumerator_next_file (enumerator, NULL, NULL);
+          g_autoptr(GFile) child = NULL;
+          g_autofree char *path = NULL;
+          const char *name;
+          g_autoptr(GError) error = NULL;
 
-      if (!g_str_has_suffix (name, ".portal"))
-        continue;
+          if (info == NULL)
+            break;
 
-      child = g_file_enumerator_get_child (enumerator, info);
-      path = g_file_get_path (child);
+          name = g_file_info_get_name (info);
 
-      if (!register_portal (path, opt_verbose, &error))
-        {
-          g_warning ("Error loading %s: %s", path, error->message);
-          continue;
+          if (!g_str_has_suffix (name, ".portal"))
+            continue;
+
+          child = g_file_enumerator_get_child (enumerator, info);
+          path = g_file_get_path (child);
+
+          if (!register_portal (path, opt_verbose, &error))
+            {
+              g_warning ("Error loading %s: %s", path, error->message);
+              continue;
+            }
         }
     }