[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