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;
 }