[Xfce4-commits] [xfce/exo] 01/01: Fix desktop item creation on symbolic link directories, make user-created launchers executable by default

noreply at xfce.org noreply at xfce.org
Sat Oct 5 14:11:58 CEST 2019


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/exo.

commit 8c8548d84fd0ca9454c894a2f2da7a9a0d6197c9
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sat Oct 5 08:11:52 2019 -0400

    Fix desktop item creation on symbolic link directories, make user-created launchers executable by default
---
 exo-desktop-item-edit/exo-die-utils.c | 40 ++++++++++++++++++++++++++++++++++-
 exo-desktop-item-edit/exo-die-utils.h |  1 +
 exo-desktop-item-edit/main.c          | 10 +++++----
 3 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/exo-desktop-item-edit/exo-die-utils.c b/exo-desktop-item-edit/exo-die-utils.c
index 7016ca1..2a9cd01 100644
--- a/exo-desktop-item-edit/exo-die-utils.c
+++ b/exo-desktop-item-edit/exo-die-utils.c
@@ -73,10 +73,43 @@ exo_die_g_key_file_set_locale_value (GKeyFile    *key_file,
 
 
 
+static void trust_launcher (GFile *gfile)
+{
+  /* trust the launcher since the user created it */
+  guint32 mode = 0111, mask = 0111;
+  guint32 old_mode, new_mode;
+  GFileInfo *info;
+
+  info = g_file_query_info (gfile,
+                            G_FILE_ATTRIBUTE_UNIX_MODE,
+                            G_FILE_QUERY_INFO_NONE,
+                            NULL,
+                            NULL);
+
+  if (info == NULL)
+    return;
+
+  old_mode = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE);
+  new_mode = (old_mode & ~mask) | mode;
+
+  if (old_mode != new_mode) {
+    g_file_set_attribute_uint32 (gfile,
+                                 G_FILE_ATTRIBUTE_UNIX_MODE, new_mode,
+                                 G_FILE_QUERY_INFO_NONE,
+                                 NULL,
+                                 NULL);
+  }
+
+  g_object_unref (G_OBJECT (info));
+}
+
+
+
 /**
  * exo_die_g_key_file_save:
  * @key_file : the #GKeyFile.
  * @create   : whether to create.
+ * @trust    : whether to trust the launcher.
  * @base     : file or folder (if @create).
  * @mode     : file mode for .directory or .desktop suffix.
  * @error    : return location for errors or %NULL.
@@ -88,6 +121,7 @@ exo_die_g_key_file_set_locale_value (GKeyFile    *key_file,
 gboolean
 exo_die_g_key_file_save (GKeyFile          *key_file,
                          gboolean           create,
+                         gboolean           trust,
                          GFile             *base,
                          ExoDieEditorMode   mode,
                          GError           **error)
@@ -125,7 +159,7 @@ exo_die_g_key_file_save (GKeyFile          *key_file,
         }
       else
         {
-          file_type = g_file_query_file_type (base, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL);
+          file_type = g_file_query_file_type (base, G_FILE_QUERY_INFO_NONE, NULL);
           if (file_type == G_FILE_TYPE_REGULAR)
             {
               file = G_FILE (g_object_ref (G_OBJECT (base)));
@@ -204,6 +238,10 @@ exo_die_g_key_file_save (GKeyFile          *key_file,
                                         NULL, NULL, error);
     }
 
+  if (trust) {
+    trust_launcher (file);
+  }
+
   /* cleanup */
   g_free (data);
   g_object_unref (G_OBJECT (file));
diff --git a/exo-desktop-item-edit/exo-die-utils.h b/exo-desktop-item-edit/exo-die-utils.h
index 3c03ae0..07bab78 100644
--- a/exo-desktop-item-edit/exo-die-utils.h
+++ b/exo-desktop-item-edit/exo-die-utils.h
@@ -33,6 +33,7 @@ void      exo_die_g_key_file_set_locale_value (GKeyFile          *key_file,
 
 gboolean  exo_die_g_key_file_save             (GKeyFile          *key_file,
                                                gboolean           create,
+                                               gboolean           trust,
                                                GFile             *base,
                                                ExoDieEditorMode   mode,
                                                GError           **error);
diff --git a/exo-desktop-item-edit/main.c b/exo-desktop-item-edit/main.c
index 0405ac7..7596f25 100644
--- a/exo-desktop-item-edit/main.c
+++ b/exo-desktop-item-edit/main.c
@@ -452,6 +452,8 @@ main (int argc, char **argv)
   response = gtk_dialog_run (GTK_DIALOG (dialog));
   if (response == GTK_RESPONSE_ACCEPT)
     {
+      gboolean trusted_launcher = opt_create_new; // User-created launchers are launchable by default
+
       /* save common values (localized if possible) */
       exo_die_g_key_file_set_locale_value (key_file, G_KEY_FILE_DESKTOP_GROUP,
                                            G_KEY_FILE_DESKTOP_KEY_NAME,
@@ -503,7 +505,7 @@ main (int argc, char **argv)
         }
 
       /* try to save the file */
-      if (!exo_die_g_key_file_save (key_file, opt_create_new, gfile, mode, &error))
+      if (!exo_die_g_key_file_save (key_file, opt_create_new, trusted_launcher, gfile, mode, &error))
         {
           if (opt_create_new)
             {
@@ -520,7 +522,7 @@ main (int argc, char **argv)
               gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
               gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (chooser), TRUE);
 
-              file_type = g_file_query_file_type (gfile, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL);
+              file_type = g_file_query_file_type (gfile, G_FILE_QUERY_INFO_NONE, NULL);
 
               /* if base is a folder, enter the folder */
               if (file_type == G_FILE_TYPE_DIRECTORY)
@@ -552,7 +554,7 @@ main (int argc, char **argv)
 
                   /* try again to save to the new file */
                   gfile = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (chooser));
-                  exo_die_g_key_file_save (key_file, FALSE, gfile, mode, &error);
+                  exo_die_g_key_file_save (key_file, FALSE, trusted_launcher, gfile, mode, &error);
                 }
 
               /* destroy the chooser */
@@ -598,7 +600,7 @@ main (int argc, char **argv)
 
                       /* try another save */
                       gfile_local = g_file_new_for_path (path);
-                      exo_die_g_key_file_save (key_file, FALSE, gfile_local, mode, &error);
+                      exo_die_g_key_file_save (key_file, FALSE, trusted_launcher, gfile_local, mode, &error);
                       g_object_unref (G_OBJECT (gfile_local));
                     }
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list