diff src/view_dir_tree.c @ 112:b15d4c18168f

Fri Nov 17 19:06:19 2006 John Ellis <johne@verizon.net> * ui_fileops.[ch]: Add path_list_lstat() to obtain a path listing that does not follow symbolic links. * utilops.[ch]: Add file_util_delete_dir(), and support functions. * view_dir_list.c: Add delete to folder popup menu. * view_dir_tree.c: Add delete to folder popup menu, and set rename and delete sensitive only when parent folder is writable.
author gqview
date Sat, 18 Nov 2006 00:12:22 +0000
parents 04ff0df3ad2f
children ee857b4ac902
line wrap: on
line diff
--- a/src/view_dir_tree.c	Wed Nov 15 07:19:16 2006 +0000
+++ b/src/view_dir_tree.c	Sat Nov 18 00:12:22 2006 +0000
@@ -1,6 +1,6 @@
 /*
  * GQview
- * (C) 2004 John Ellis
+ * (C) 2006 John Ellis
  *
  * Author: John Ellis
  *
@@ -446,6 +446,14 @@
 	vdtree_rename_by_data(vdt, vdt->click_fd);
 }
 
+static void vdtree_pop_menu_delete_cb(GtkWidget *widget, gpointer data)
+{
+	ViewDirTree *vdt = data;
+
+	if (!vdt->click_fd) return;
+	file_util_delete_dir(vdt->click_fd->path, vdt->widget);
+}
+
 static void vdtree_pop_menu_tree_cb(GtkWidget *widget, gpointer data)
 {
 	ViewDirTree *vdt = data;
@@ -464,8 +472,17 @@
 {
 	GtkWidget *menu;
 	gint active;
+	gint parent_active = FALSE;
 
 	active = (fd != NULL);
+	if (fd)
+		{
+		gchar *parent;
+
+		parent = remove_level_from_path(fd->path);
+		parent_active = access_file(parent, W_OK | X_OK);
+		g_free(parent);
+		}
 
 	menu = popup_menu_short_lived();
 	g_signal_connect(G_OBJECT(menu), "destroy",
@@ -494,8 +511,10 @@
 	menu_item_add_sensitive(menu, _("_New folder..."), active,
 				G_CALLBACK(vdtree_pop_menu_new_cb), vdt);
 
-	menu_item_add_sensitive(menu, _("_Rename..."), active,
+	menu_item_add_sensitive(menu, _("_Rename..."), parent_active,
 				G_CALLBACK(vdtree_pop_menu_rename_cb), vdt);
+	menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, parent_active,
+				      G_CALLBACK(vdtree_pop_menu_delete_cb), vdt);
 
 	menu_item_add_divider(menu);
 	menu_item_add_check(menu, _("View as _tree"), TRUE,