[Xfce4-commits] <thunar:master> Add menu item for permanent delete.

Nick Schermer noreply at xfce.org
Tue Oct 30 22:06:15 CET 2012


Updating branch refs/heads/master
         to 4832cab6f92470786cb6b38551d0021f12e245b0 (commit)
       from 251775c5c8decbba27fc5587feac405c6dad4273 (commit)

commit 4832cab6f92470786cb6b38551d0021f12e245b0
Author: Nick Schermer <nick at xfce.org>
Date:   Tue Oct 30 21:52:01 2012 +0100

    Add menu item for permanent delete.
    
    Rename the old delete action to "Move to Trash" and add
    permanent delete action. THe action still requests if
    you //really// want to, but it got a bit easier.

 thunar/thunar-standard-view-ui.xml |    4 ++
 thunar/thunar-standard-view.c      |   43 +++++++++++++++++++++++----
 thunar/thunar-tree-view.c          |   58 ++++++++++++++++++++++++++++++++---
 3 files changed, 94 insertions(+), 11 deletions(-)

diff --git a/thunar/thunar-standard-view-ui.xml b/thunar/thunar-standard-view-ui.xml
index 0678924..b91d60e 100644
--- a/thunar/thunar-standard-view-ui.xml
+++ b/thunar/thunar-standard-view-ui.xml
@@ -26,6 +26,8 @@
         <menuitem action="cut" />
         <menuitem action="copy" />
         <menuitem action="paste" />
+        <separator />
+        <menuitem action="move-to-trash" />
         <menuitem action="delete" />
       </placeholder>
       <placeholder name="placeholder-edit-select-actions">
@@ -54,6 +56,8 @@
       <menuitem action="cut" />
       <menuitem action="copy" />
       <menuitem action="paste-into-folder" />
+      <separator />
+      <menuitem action="move-to-trash" />
       <menuitem action="delete" />
     </placeholder>
     <placeholder name="placeholder-edit-actions">
diff --git a/thunar/thunar-standard-view.c b/thunar/thunar-standard-view.c
index 4e487df..4323a9c 100644
--- a/thunar/thunar-standard-view.c
+++ b/thunar/thunar-standard-view.c
@@ -40,6 +40,7 @@
 #include <thunar/thunar-gio-extensions.h>
 #include <thunar/thunar-gobject-extensions.h>
 #include <thunar/thunar-gtk-extensions.h>
+#include <thunar/thunar-stock.h>
 #include <thunar/thunar-icon-renderer.h>
 #include <thunar/thunar-marshal.h>
 #include <thunar/thunar-private.h>
@@ -180,7 +181,9 @@ static void                 thunar_standard_view_action_copy                (Gtk
                                                                              ThunarStandardView       *standard_view);
 static void                 thunar_standard_view_action_paste               (GtkAction                *action,
                                                                              ThunarStandardView       *standard_view);
-static void                 thunar_standard_view_action_delete              (GtkAction                *action,
+static void                 thunar_standard_view_action_move_to_trash       (GtkAction                *action,
+                                                                             ThunarStandardView       *standard_view);
+static void                 thunar_standard_view_action_delete             (GtkAction                *action,
                                                                              ThunarStandardView       *standard_view);
 static void                 thunar_standard_view_action_paste_into_folder   (GtkAction                *action,
                                                                              ThunarStandardView       *standard_view);
@@ -297,6 +300,7 @@ struct _ThunarStandardViewPrivate
   GtkAction              *action_cut;
   GtkAction              *action_copy;
   GtkAction              *action_paste;
+  GtkAction              *action_move_to_trash;
   GtkAction              *action_delete;
   GtkAction              *action_paste_into_folder;
   GtkAction              *action_duplicate;
@@ -380,6 +384,7 @@ static const GtkActionEntry action_entries[] =
   { "cut", GTK_STOCK_CUT, N_ ("Cu_t"), NULL, NULL, G_CALLBACK (thunar_standard_view_action_cut), },
   { "copy", GTK_STOCK_COPY, N_ ("_Copy"), NULL, NULL, G_CALLBACK (thunar_standard_view_action_copy), },
   { "paste", GTK_STOCK_PASTE, N_ ("_Paste"), NULL, N_ ("Move or copy files previously selected by a Cut or Copy command"), G_CALLBACK (thunar_standard_view_action_paste), },
+  { "move-to-trash", THUNAR_STOCK_TRASH_FULL, N_ ("Mo_ve to Tash"), NULL, NULL, G_CALLBACK (thunar_standard_view_action_move_to_trash), },
   { "delete", GTK_STOCK_DELETE, N_ ("_Delete"), NULL, NULL, G_CALLBACK (thunar_standard_view_action_delete), },
   { "paste-into-folder", GTK_STOCK_PASTE, N_ ("Paste Into Folder"), NULL, N_ ("Move or copy files previously selected by a Cut or Copy command into the selected folder"), G_CALLBACK (thunar_standard_view_action_paste_into_folder), },
   { "select-all-files", NULL, N_ ("Select _all Files"), NULL, N_ ("Select all files in this window"), G_CALLBACK (thunar_standard_view_action_select_all_files), },
@@ -621,6 +626,7 @@ thunar_standard_view_init (ThunarStandardView *standard_view)
   standard_view->priv->action_cut = gtk_action_group_get_action (standard_view->action_group, "cut");
   standard_view->priv->action_copy = gtk_action_group_get_action (standard_view->action_group, "copy");
   standard_view->priv->action_paste = gtk_action_group_get_action (standard_view->action_group, "paste");
+  standard_view->priv->action_move_to_trash = gtk_action_group_get_action (standard_view->action_group, "move-to-trash");
   standard_view->priv->action_delete = gtk_action_group_get_action (standard_view->action_group, "delete");
   standard_view->priv->action_paste_into_folder = gtk_action_group_get_action (standard_view->action_group, "paste-into-folder");
   standard_view->priv->action_duplicate = gtk_action_group_get_action (standard_view->action_group, "duplicate");
@@ -1767,7 +1773,7 @@ thunar_standard_view_scroll_to_file (ThunarView *view,
 static gboolean
 thunar_standard_view_delete_selected_files (ThunarStandardView *standard_view)
 {
-  GtkAction       *action = GTK_ACTION (standard_view->priv->action_delete);
+  GtkAction       *action = GTK_ACTION (standard_view->priv->action_move_to_trash);
   const gchar     *accel_path;
   GtkAccelKey      key;
 
@@ -2374,8 +2380,8 @@ thunar_standard_view_action_paste (GtkAction          *action,
 
 
 static void
-thunar_standard_view_action_delete (GtkAction          *action,
-                                    ThunarStandardView *standard_view)
+thunar_standard_view_action_move_to_trash (GtkAction          *action,
+                                           ThunarStandardView *standard_view)
 {
   ThunarApplication *application;
   gboolean           permanently;
@@ -2409,6 +2415,23 @@ thunar_standard_view_action_delete (GtkAction          *action,
 
 
 static void
+thunar_standard_view_action_delete (GtkAction          *action,
+                                    ThunarStandardView *standard_view)
+{
+  ThunarApplication *application;
+
+  _thunar_return_if_fail (GTK_IS_ACTION (action));
+  _thunar_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
+
+  /* delete the selected files */
+  application = thunar_application_get ();
+  thunar_application_unlink_files (application, GTK_WIDGET (standard_view), standard_view->priv->selected_files, TRUE);
+  g_object_unref (G_OBJECT (application));
+}
+
+
+
+static void
 thunar_standard_view_action_paste_into_folder (GtkAction          *action,
                                                ThunarStandardView *standard_view)
 {
@@ -4057,11 +4080,19 @@ thunar_standard_view_selection_changed (ThunarStandardView *standard_view)
   /* update the "Paste" action */
   gtk_action_set_sensitive (standard_view->priv->action_paste, writable && pastable);
 
+  /* update the "Move to Trash" action */
+  g_object_set (G_OBJECT (standard_view->priv->action_move_to_trash),
+                "sensitive", (n_selected_files > 0) && writable,
+                "tooltip", ngettext ("Move the selected file to the Trash",
+                                     "Move the selected files to the Trash",
+                                     n_selected_files),
+                NULL);
+
   /* update the "Delete" action */
   g_object_set (G_OBJECT (standard_view->priv->action_delete),
                 "sensitive", (n_selected_files > 0) && writable,
-                "tooltip", ngettext ("Delete the selected file",
-                                     "Delete the selected files",
+                "tooltip", ngettext ("Permanently delete the selected file",
+                                     "Permanently delete the selected files",
                                      n_selected_files),
                 NULL);
 
diff --git a/thunar/thunar-tree-view.c b/thunar/thunar-tree-view.c
index 83b4d35..b652270 100644
--- a/thunar/thunar-tree-view.c
+++ b/thunar/thunar-tree-view.c
@@ -36,6 +36,7 @@
 #include <thunar/thunar-marshal.h>
 #include <thunar/thunar-preferences.h>
 #include <thunar/thunar-private.h>
+#include <thunar/thunar-stock.h>
 #include <thunar/thunar-properties-dialog.h>
 #include <thunar/thunar-shortcuts-icon-renderer.h>
 #include <thunar/thunar-simple-job.h>
@@ -146,6 +147,7 @@ static ThunarDevice            *thunar_tree_view_get_selected_device          (T
 static void                     thunar_tree_view_action_copy                  (ThunarTreeView          *view);
 static void                     thunar_tree_view_action_create_folder         (ThunarTreeView          *view);
 static void                     thunar_tree_view_action_cut                   (ThunarTreeView          *view);
+static void                     thunar_tree_view_action_move_to_trash         (ThunarTreeView          *view);
 static void                     thunar_tree_view_action_delete                (ThunarTreeView          *view);
 static void                     thunar_tree_view_action_rename                (ThunarTreeView          *view);
 static void                     thunar_tree_view_action_eject                 (ThunarTreeView          *view);
@@ -1063,12 +1065,12 @@ thunar_tree_view_delete_selected_files (ThunarTreeView *view)
   /* Check if there is a user defined accelerator for the delete action,
    * if there is, skip events from the hard-coded keys which are set in
    * the class of the standard view. See bug #4173. */
-  if (gtk_accel_map_lookup_entry ("<Actions>/ThunarStandardView/delete", &key)
+  if (gtk_accel_map_lookup_entry ("<Actions>/ThunarStandardView/move-to-trash", &key)
       && (key.accel_key != 0 || key.accel_mods != 0))
     return FALSE;
 
   /* ask the user whether to delete the folder... */
-  thunar_tree_view_action_delete (view);
+  thunar_tree_view_action_move_to_trash (view);
 
   /* ...and we're done */
   return TRUE;
@@ -1117,14 +1119,14 @@ thunar_tree_view_context_menu (ThunarTreeView *view,
   gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
   
   /* append the "Open in New Tab" menu action */
-  item = gtk_image_menu_item_new_with_mnemonic (_("Open in New Tab"));
+  item = gtk_image_menu_item_new_with_mnemonic (_("Open in New _Tab"));
   g_signal_connect_swapped (G_OBJECT (item), "activate", G_CALLBACK (thunar_tree_view_action_open_in_new_tab), view);
   gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
   gtk_widget_set_sensitive (item, (file != NULL || device != NULL));
   gtk_widget_show (item);
 
   /* append the "Open in New Window" menu action */
-  item = gtk_image_menu_item_new_with_mnemonic (_("Open in New Window"));
+  item = gtk_image_menu_item_new_with_mnemonic (_("Open in New _Window"));
   g_signal_connect_swapped (G_OBJECT (item), "activate", G_CALLBACK (thunar_tree_view_action_open_in_new_window), view);
   gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
   gtk_widget_set_sensitive (item, (file != NULL || device != NULL));
@@ -1256,6 +1258,22 @@ thunar_tree_view_context_menu (ThunarTreeView *view,
           /* determine the parent file (required to determine "Delete" sensitivity) */
           parent_file = thunar_file_get_parent (file, NULL);
 
+          /* append a separator item */
+          item = gtk_separator_menu_item_new ();
+          gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+          gtk_widget_show (item);
+
+          /* append the "Delete" menu action */
+          item = gtk_image_menu_item_new_with_mnemonic (_("Mo_ve to Trash"));
+          g_signal_connect_swapped (G_OBJECT (item), "activate", G_CALLBACK (thunar_tree_view_action_move_to_trash), view);
+          gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+          gtk_widget_set_sensitive (item, (parent_file != NULL && thunar_file_is_writable (parent_file)));
+          gtk_widget_show (item);
+
+          /* set the stock icon */
+          image = gtk_image_new_from_stock (THUNAR_STOCK_TRASH_FULL, GTK_ICON_SIZE_MENU);
+          gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+
           /* append the "Delete" menu action */
           item = gtk_image_menu_item_new_with_mnemonic (_("_Delete"));
           g_signal_connect_swapped (G_OBJECT (item), "activate", G_CALLBACK (thunar_tree_view_action_delete), view);
@@ -1653,7 +1671,7 @@ thunar_tree_view_action_cut (ThunarTreeView *view)
 
 
 static void
-thunar_tree_view_action_delete (ThunarTreeView *view)
+thunar_tree_view_action_move_to_trash (ThunarTreeView *view)
 {
   ThunarApplication *application;
   ThunarFile        *file;
@@ -1688,6 +1706,36 @@ thunar_tree_view_action_delete (ThunarTreeView *view)
 
 
 static void
+thunar_tree_view_action_delete (ThunarTreeView *view)
+{
+  ThunarApplication *application;
+  ThunarFile        *file;
+  GList              file_list;
+
+  _thunar_return_if_fail (THUNAR_IS_TREE_VIEW (view));
+
+  /* determine the selected file */
+  file = thunar_tree_view_get_selected_file (view);
+  if (G_LIKELY (file != NULL))
+    {
+      /* fake a file list */
+      file_list.data = file;
+      file_list.next = NULL;
+      file_list.prev = NULL;
+
+      /* delete the file */
+      application = thunar_application_get ();
+      thunar_application_unlink_files (application, GTK_WIDGET (view), &file_list, TRUE);
+      g_object_unref (G_OBJECT (application));
+
+      /* release the file */
+      g_object_unref (G_OBJECT (file));
+    }
+}
+
+
+
+static void
 thunar_tree_view_rename_error (ExoJob         *job,
                                GError         *error,
                                ThunarTreeView *view)


More information about the Xfce4-commits mailing list