[gtk/wip/hadess/portal-select-folders] filechoosernativeportal: Allowing selecting folder(s)



commit 5faa3063c9e9a364bd083164e48eebdb53727390
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Mar 13 17:50:41 2020 +0100

    filechoosernativeportal: Allowing selecting folder(s)
    
    Use the "directory" portal option when asked to select folders.

 gtk/gtkfilechoosernativeportal.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkfilechoosernativeportal.c b/gtk/gtkfilechoosernativeportal.c
index 07cbb5b4bc..b706cefde4 100644
--- a/gtk/gtkfilechoosernativeportal.c
+++ b/gtk/gtkfilechoosernativeportal.c
@@ -294,6 +294,7 @@ show_portal_file_chooser (GtkFileChooserNative *self,
   GDBusMessage *message;
   GVariantBuilder opt_builder;
   gboolean multiple;
+  gboolean directory;
   const char *title;
   char *token;
 
@@ -315,6 +316,7 @@ show_portal_file_chooser (GtkFileChooserNative *self,
                                             self, NULL);
 
   multiple = gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self));
+  directory = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (self)) == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
   g_variant_builder_init (&opt_builder, G_VARIANT_TYPE_VARDICT);
 
   g_variant_builder_add (&opt_builder, "{sv}", "handle_token",
@@ -323,6 +325,8 @@ show_portal_file_chooser (GtkFileChooserNative *self,
 
   g_variant_builder_add (&opt_builder, "{sv}", "multiple",
                          g_variant_new_boolean (multiple));
+  g_variant_builder_add (&opt_builder, "{sv}", "directory",
+                         g_variant_new_boolean (directory));
   if (self->accept_label)
     g_variant_builder_add (&opt_builder, "{sv}", "accept_label",
                            g_variant_new_string (self->accept_label));
@@ -408,6 +412,7 @@ gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
   GDBusConnection *connection;
   GtkFileChooserAction action;
   const char *method_name;
+  gboolean directory = FALSE;
 
   if (!gtk_should_use_portal ())
     return FALSE;
@@ -418,13 +423,14 @@ gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
 
   action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (self));
 
-  if (action == GTK_FILE_CHOOSER_ACTION_OPEN)
+  if (action == GTK_FILE_CHOOSER_ACTION_OPEN ||
+      action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
     method_name = "OpenFile";
   else if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
     method_name = "SaveFile";
   else
     {
-      g_warning ("GTK_FILE_CHOOSER_ACTION_%s is not supported by GtkFileChooserNativePortal", action == 
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ? "SELECT_FOLDER" : "CREATE_FOLDER");
+      g_warning ("GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER is not supported by GtkFileChooserNativePortal");
       return FALSE;
     }
 
@@ -433,6 +439,7 @@ gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
   data->connection = connection;
 
   data->method_name = method_name;
+  data->directory = directory;
 
   if (gtk_native_dialog_get_modal (GTK_NATIVE_DIALOG (self)))
     data->modal = TRUE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]