diff options
author | Alexander Schwinn <alexxcons@xfce.org> | 2021-05-07 15:21:27 +0200 |
---|---|---|
committer | Alexander Schwinn <alexxcons@xfce.org> | 2021-05-07 15:27:21 +0200 |
commit | 0afccd803b264d03da0a9b02772400245fe5b6cc (patch) | |
tree | 08464aca2d547acd7bfd8b7e866a24c32c4f76a3 | |
parent | 61ff2daf3677d58f14a442f76cd359a6fe118dd2 (diff) | |
download | thunar-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.c | 68 | ||||
-rw-r--r-- | thunar/thunar-application.h | 9 | ||||
-rw-r--r-- | thunar/thunar-dbus-service.c | 2 |
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 */ |