summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Schwinn <alexxcons@xfce.org>2021-05-07 15:21:27 +0200
committerAlexander Schwinn <alexxcons@xfce.org>2021-05-07 15:27:21 +0200
commit0afccd803b264d03da0a9b02772400245fe5b6cc (patch)
tree08464aca2d547acd7bfd8b7e866a24c32c4f76a3
parent61ff2daf3677d58f14a442f76cd359a6fe118dd2 (diff)
downloadthunar-0afccd803b264d03da0a9b02772400245fe5b6cc.tar.gz
Regression: Activating Desktop Icon does not Use Default Application
(Issue #575) - Introduced by 9165a61f (Dont execute files, passed via command line due to security risks) - Now via DBus files are executed, and via CLI, files are just selected Fixes #575
-rw-r--r--thunar/thunar-application.c68
-rw-r--r--thunar/thunar-application.h9
-rw-r--r--thunar/thunar-dbus-service.c2
3 files changed, 49 insertions, 30 deletions
diff --git a/thunar/thunar-application.c b/thunar/thunar-application.c
index 1243940e..53d0b23e 100644
--- a/thunar/thunar-application.c
+++ b/thunar/thunar-application.c
@@ -182,37 +182,38 @@ struct _ThunarApplicationClass
struct _ThunarApplication
{
- GtkApplication __parent__;
+ GtkApplication __parent__;
- ThunarSessionClient *session_client;
+ ThunarSessionClient *session_client;
- ThunarPreferences *preferences;
- GtkWidget *progress_dialog;
+ ThunarPreferences *preferences;
+ GtkWidget *progress_dialog;
- ThunarThumbnailCache *thumbnail_cache;
- ThunarThumbnailer *thumbnailer;
+ ThunarThumbnailCache *thumbnail_cache;
+ ThunarThumbnailer *thumbnailer;
- ThunarDBusService *dbus_service;
+ ThunarDBusService *dbus_service;
- gboolean daemon;
+ gboolean daemon;
- guint accel_map_save_id;
- GtkAccelMap *accel_map;
+ guint accel_map_save_id;
+ GtkAccelMap *accel_map;
- guint show_dialogs_timer_id;
+ guint show_dialogs_timer_id;
#ifdef HAVE_GUDEV
- GUdevClient *udev_client;
+ GUdevClient *udev_client;
- GSList *volman_udis;
- guint volman_idle_id;
- guint volman_watch_id;
+ GSList *volman_udis;
+ guint volman_idle_id;
+ guint volman_watch_id;
#endif
- GList *files_to_launch;
+ GList *files_to_launch;
+ ThunarApplicationProcessAction process_file_action;
- guint dbus_owner_id_xfce;
- guint dbus_owner_id_fdo;
+ guint dbus_owner_id_xfce;
+ guint dbus_owner_id_fdo;
};
@@ -279,6 +280,7 @@ thunar_application_init (ThunarApplication *application)
* in the primary instance anyways */
application->files_to_launch = NULL;
+ application->process_file_action = THUNAR_APPLICATION_SELECT_FILES;
application->progress_dialog = NULL;
application->preferences = NULL;
@@ -531,7 +533,7 @@ thunar_application_command_line (GApplication *gapp,
}
else if (filenames != NULL)
{
- if (!thunar_application_process_filenames (application, cwd, filenames, NULL, NULL, &error))
+ if (!thunar_application_process_filenames (application, cwd, filenames, NULL, NULL, &error, THUNAR_APPLICATION_SELECT_FILES))
{
/* we failed to process the filenames or the bulk rename failed */
g_application_command_line_printerr (command_line, "Thunar: %s\n", error->message);
@@ -539,7 +541,7 @@ thunar_application_command_line (GApplication *gapp,
}
else if (!daemon)
{
- if (!thunar_application_process_filenames (application, cwd, cwd_list, NULL, NULL, &error))
+ if (!thunar_application_process_filenames (application, cwd, cwd_list, NULL, NULL, &error, THUNAR_APPLICATION_SELECT_FILES))
{
/* we failed to process the filenames or the bulk rename failed */
g_application_command_line_printerr (command_line, "Thunar: %s\n", error->message);
@@ -1512,7 +1514,12 @@ thunar_application_process_files_finish (ThunarBrowser *browser,
}
else
{
- if (thunar_file_is_directory (file))
+ if (application->process_file_action == THUNAR_APPLICATION_LAUNCH_FILES)
+ {
+ /* try to launch the file / open the directory */
+ thunar_file_launch (target_file, screen, startup_id, &error);
+ }
+ else if (thunar_file_is_directory (file))
{
thunar_application_open_window (application, file, screen, startup_id, FALSE);
}
@@ -1603,18 +1610,20 @@ thunar_application_process_files (ThunarApplication *application)
* @startup_id : startup id to finish startup notification and properly focus the
* window when focus stealing is enabled or %NULL.
* @error : return location for errors or %NULL.
+ * @action : action to invoke on the files
*
* Tells @application to process the given @filenames and launch them appropriately.
*
* Return value: %TRUE on success, %FALSE if @error is set.
**/
gboolean
-thunar_application_process_filenames (ThunarApplication *application,
- const gchar *working_directory,
- gchar **filenames,
- GdkScreen *screen,
- const gchar *startup_id,
- GError **error)
+thunar_application_process_filenames (ThunarApplication *application,
+ const gchar *working_directory,
+ gchar **filenames,
+ GdkScreen *screen,
+ const gchar *startup_id,
+ GError **error,
+ ThunarApplicationProcessAction action)
{
ThunarFile *file;
GError *derror = NULL;
@@ -1686,7 +1695,10 @@ thunar_application_process_filenames (ThunarApplication *application,
/* start processing files if we have any to launch */
if (application->files_to_launch != NULL)
- thunar_application_process_files (application);
+ {
+ application->process_file_action = action;
+ thunar_application_process_files (application);
+ }
/* free the file list */
g_list_free (file_list);
diff --git a/thunar/thunar-application.h b/thunar/thunar-application.h
index 547cb701..8c180e8c 100644
--- a/thunar/thunar-application.h
+++ b/thunar/thunar-application.h
@@ -31,6 +31,12 @@ G_BEGIN_DECLS;
typedef struct _ThunarApplicationClass ThunarApplicationClass;
typedef struct _ThunarApplication ThunarApplication;
+typedef enum
+{
+ THUNAR_APPLICATION_LAUNCH_FILES,
+ THUNAR_APPLICATION_SELECT_FILES
+} ThunarApplicationProcessAction;
+
#define THUNAR_TYPE_APPLICATION (thunar_application_get_type ())
#define THUNAR_APPLICATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), THUNAR_TYPE_APPLICATION, ThunarApplication))
#define THUNAR_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), THUNAR_TYPE_APPLICATION, ThunarApplicationClass))
@@ -74,7 +80,8 @@ gboolean thunar_application_process_filenames (ThunarAppli
gchar **filenames,
GdkScreen *screen,
const gchar *startup_id,
- GError **error);
+ GError **error,
+ ThunarApplicationProcessAction action);
void thunar_application_rename_file (ThunarApplication *application,
ThunarFile *file,
diff --git a/thunar/thunar-dbus-service.c b/thunar/thunar-dbus-service.c
index 2d27642d..4205a2b2 100644
--- a/thunar/thunar-dbus-service.c
+++ b/thunar/thunar-dbus-service.c
@@ -991,7 +991,7 @@ thunar_dbus_service_launch_files (ThunarDBusFileManager *object,
{
/* let the application process the filenames */
application = thunar_application_get ();
- thunar_application_process_filenames (application, working_directory, filenames, screen, startup_id, &error);
+ thunar_application_process_filenames (application, working_directory, filenames, screen, startup_id, &error, THUNAR_APPLICATION_LAUNCH_FILES);
g_object_unref (G_OBJECT (application));
/* release the screen */