[Xfce4-commits] <thunar:master> Only show Move to Trash if trash is supported.

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


Updating branch refs/heads/master
         to 98b752f33fb7fed37c6813c0c269fb38cbbb2090 (commit)
       from 4832cab6f92470786cb6b38551d0021f12e245b0 (commit)

commit 98b752f33fb7fed37c6813c0c269fb38cbbb2090
Author: Nick Schermer <nick at xfce.org>
Date:   Tue Oct 30 22:04:07 2012 +0100

    Only show Move to Trash if trash is supported.

 thunar/thunar-standard-view.c |   52 ++++++++++++++++++++++------------------
 thunar/thunar-tree-view.c     |   24 +++++++++++--------
 2 files changed, 43 insertions(+), 33 deletions(-)

diff --git a/thunar/thunar-standard-view.c b/thunar/thunar-standard-view.c
index 4323a9c..8576c79 100644
--- a/thunar/thunar-standard-view.c
+++ b/thunar/thunar-standard-view.c
@@ -1779,22 +1779,30 @@ thunar_standard_view_delete_selected_files (ThunarStandardView *standard_view)
 
   _thunar_return_val_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view), FALSE);
 
-  /* 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.
-   *
-   * The trick here is that if a custom accelerator is set by the user,
-   * this function is never called. If a hardcoded key combination is
-   * pressed and a custom accelerator is set, accel_key || accel_mods
-   * are no 0. */
-  accel_path = gtk_action_get_accel_path (action);
-  if (accel_path != NULL
-      && gtk_accel_map_lookup_entry (accel_path, &key)
-      && (key.accel_key != 0 || key.accel_mods != 0))
-    return FALSE;
+  if (thunar_g_vfs_is_uri_scheme_supported ("trash"))
+    {
+      /* 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.
+       *
+       * The trick here is that if a custom accelerator is set by the user,
+       * this function is never called. If a hardcoded key combination is
+       * pressed and a custom accelerator is set, accel_key || accel_mods
+       * are no 0. */
+      accel_path = gtk_action_get_accel_path (action);
+      if (accel_path != NULL
+          && gtk_accel_map_lookup_entry (accel_path, &key)
+          && (key.accel_key != 0 || key.accel_mods != 0))
+        return FALSE;
 
-  /* just emit the "activate" signal on the "delete" action */
-  gtk_action_activate (action);
+      /* just emit the "activate" signal on the "move-trash" action */
+      gtk_action_activate (action);
+    }
+  else
+    {
+      /* do a permanent delete */
+      gtk_action_activate (GTK_ACTION (standard_view->priv->action_delete));
+    }
 
   /* ...and we're done */
   return TRUE;
@@ -4016,6 +4024,7 @@ thunar_standard_view_selection_changed (ThunarStandardView *standard_view)
 
   /* determine the new list of selected files (replacing GtkTreePath's with ThunarFile's) */
   selected_files = (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_selected_items) (standard_view);
+  restorable = (selected_files != NULL);
   for (lp = selected_files; lp != NULL; lp = lp->next, ++n_selected_files)
     {
       /* determine the iterator for the path */
@@ -4026,19 +4035,15 @@ thunar_standard_view_selection_changed (ThunarStandardView *standard_view)
 
       /* ...and replace it with the file */
       lp->data = thunar_list_model_get_file (standard_view->model, &iter);
+
+      /* enable "Restore" if we have only trashed files (atleast one file) */
+      if (!thunar_file_is_trashed (lp->data))
+        restorable = FALSE;
     }
 
   /* and setup the new selected files list */
   standard_view->priv->selected_files = selected_files;
 
-  /* enable "Restore" if we have only trashed files (atleast one file) */
-  for (lp = selected_files, restorable = (lp != NULL); lp != NULL; lp = lp->next)
-    if (!thunar_file_is_trashed (lp->data))
-      {
-        restorable = FALSE;
-        break;
-      }
-
   /* check whether the folder displayed by the view is writable/in the trash */
   current_directory = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
   writable = (current_directory != NULL && thunar_file_is_writable (current_directory));
@@ -4083,6 +4088,7 @@ thunar_standard_view_selection_changed (ThunarStandardView *standard_view)
   /* update the "Move to Trash" action */
   g_object_set (G_OBJECT (standard_view->priv->action_move_to_trash),
                 "sensitive", (n_selected_files > 0) && writable,
+                "visible", !trashed && thunar_g_vfs_is_uri_scheme_supported ("trash"),
                 "tooltip", ngettext ("Move the selected file to the Trash",
                                      "Move the selected files to the Trash",
                                      n_selected_files),
diff --git a/thunar/thunar-tree-view.c b/thunar/thunar-tree-view.c
index b652270..55efdb0 100644
--- a/thunar/thunar-tree-view.c
+++ b/thunar/thunar-tree-view.c
@@ -1263,16 +1263,20 @@ thunar_tree_view_context_menu (ThunarTreeView *view,
           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);
+          if (thunar_g_vfs_is_uri_scheme_supported ("trash")
+              && thunar_file_can_be_trashed (file))
+            {
+              /* append the "Move to Tash" 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);
+              /* 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"));


More information about the Xfce4-commits mailing list