From a7a9c2b12e14cdb80dcb9cb9244b476b38aa0b6b Mon Sep 17 00:00:00 2001 From: Jordan Lee <jordan@transmissionbt.com> Date: Sat, 13 Aug 2011 22:58:49 +0000 Subject: [PATCH] (trunk gtk) #4399 "Add option to disable 'trash can' feature" -- done. --- gtk/conf.c | 1 + gtk/tr-prefs.h | 1 + gtk/util.c | 34 ++++++++++++++++++++-------------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/gtk/conf.c b/gtk/conf.c index 7b37db0f8..f46a74356 100644 --- a/gtk/conf.c +++ b/gtk/conf.c @@ -86,6 +86,7 @@ tr_prefs_init_defaults( tr_benc * d ) tr_bencDictAddBool( d, PREF_KEY_TOOLBAR, TRUE ); tr_bencDictAddBool( d, PREF_KEY_FILTERBAR, TRUE ); tr_bencDictAddBool( d, PREF_KEY_STATUSBAR, TRUE ); + tr_bencDictAddBool( d, PREF_KEY_TRASH_CAN_ENABLED, TRUE ); tr_bencDictAddBool( d, PREF_KEY_SHOW_TRAY_ICON, FALSE ); tr_bencDictAddBool( d, PREF_KEY_SHOW_MORE_TRACKER_INFO, FALSE ); tr_bencDictAddBool( d, PREF_KEY_SHOW_MORE_PEER_INFO, FALSE ); diff --git a/gtk/tr-prefs.h b/gtk/tr-prefs.h index fa0c085fd..f1c315acc 100644 --- a/gtk/tr-prefs.h +++ b/gtk/tr-prefs.h @@ -48,6 +48,7 @@ GtkWidget * gtr_prefs_dialog_new( GtkWindow * parent, GObject * core ); #define PREF_KEY_TORRENT_COMPLETE_NOTIFICATION_ENABLED "torrent-complete-notification-enabled" #define PREF_KEY_TORRENT_COMPLETE_SOUND_COMMAND "torrent-complete-sound-command" #define PREF_KEY_TORRENT_COMPLETE_SOUND_ENABLED "torrent-complete-sound-enabled" +#define PREF_KEY_TRASH_CAN_ENABLED "trash-can-enabled" #define PREF_KEY_USER_HAS_GIVEN_INFORMED_CONSENT "user-has-given-informed-consent" enum diff --git a/gtk/util.c b/gtk/util.c index d0794f9d0..5868b4825 100644 --- a/gtk/util.c +++ b/gtk/util.c @@ -25,7 +25,9 @@ #include <libtransmission/web.h> /* tr_webResponseStr() */ #include <libtransmission/version.h> /* SHORT_VERSION_STRING */ +#include "conf.h" #include "hig.h" +#include "tr-prefs.h" #include "util.h" /*** @@ -297,24 +299,28 @@ on_tree_view_button_released( GtkWidget * view, int gtr_file_trash_or_remove( const char * filename ) { - if( filename && g_file_test( filename, G_FILE_TEST_EXISTS ) ) - { - gboolean trashed = FALSE; - GError * err = NULL; - GFile * file = g_file_new_for_path( filename ); - trashed = g_file_trash( file, NULL, &err ); - if( err ) - g_message( "Unable to trash file \"%s\": %s", filename, err->message ); - g_clear_error( &err ); - g_object_unref( G_OBJECT( file ) ); + gboolean trashed = FALSE; + GFile * file = g_file_new_for_path( filename ); - if( !trashed && g_remove( filename ) ) - { - const int err = errno; - g_message( "Unable to remove file \"%s\": %s", filename, g_strerror( err ) ); + if( gtr_pref_flag_get( PREF_KEY_TRASH_CAN_ENABLED ) ) { + GError * err = NULL; + trashed = g_file_trash( file, NULL, &err ); + if( err ) { + g_message( "Unable to trash file \"%s\": %s", filename, err->message ); + g_clear_error( &err ); } } + if( !trashed ) { + GError * err = NULL; + trashed = g_file_delete( file, NULL, &err ); + if( err ) { + g_message( "Unable to delete file \"%s\": %s", filename, err->message ); + g_clear_error( &err ); + } + } + + g_object_unref( G_OBJECT( file ) ); return 0; }