diff src/view_dir.c @ 417:440979320308

Fix directory view popup menu to display a View As submenu to switch between different directory views.
author zas_
date Sat, 19 Apr 2008 09:36:30 +0000
parents 3a9074e73f53
children ce5316d2e2d0
line wrap: on
line diff
--- a/src/view_dir.c	Fri Apr 18 23:35:16 2008 +0000
+++ b/src/view_dir.c	Sat Apr 19 09:36:30 2008 +0000
@@ -457,6 +457,14 @@
 	layout_views_set(vd->layout, new_type, vd->layout->icon_view);
 }
 
+#define VIEW_DIR_AS_SUBMENU_KEY "view_dir_as"
+static void vd_pop_submenu_dir_view_as_cb(GtkWidget *widget, gpointer data)
+{
+	ViewDir *vd = data;
+	DirViewType new_type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), VIEW_DIR_AS_SUBMENU_KEY));
+	layout_views_set(vd->layout, new_type, vd->layout->icon_view);
+}
+
 static void vd_pop_menu_refresh_cb(GtkWidget *widget, gpointer data)
 {
 	ViewDir *vd = data;
@@ -540,9 +548,12 @@
 GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)
 {
 	GtkWidget *menu;
+	GtkWidget *submenu;
+	GtkWidget *item;
 	gint active;
 	gint rename_delete_active = FALSE;
 	gint new_folder_active = FALSE;
+	gint i;
 
 	active = (fd != NULL);
 	switch(vd->type)
@@ -604,9 +615,19 @@
 				      G_CALLBACK(vd_pop_menu_delete_cb), vd);
 
 	menu_item_add_divider(menu);
-	/* FIXME */
-	menu_item_add_check(menu, _("View as _tree"), vd->type,
-			    G_CALLBACK(vd_pop_menu_dir_view_as_cb), vd);
+	
+	item = menu_item_add(menu, _("_View as"), NULL, NULL);
+	submenu = gtk_menu_new();
+        gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
+
+	for (i = 0; i < sizeof(menu_view_dir_radio_entries) / sizeof(GtkRadioActionEntry); i++)
+		{
+		item = menu_item_add_check(submenu, menu_view_dir_radio_entries[i].label,
+					   (vd->type == menu_view_dir_radio_entries[i].value),
+					   G_CALLBACK(vd_pop_submenu_dir_view_as_cb), vd);
+		g_object_set_data(G_OBJECT(item), VIEW_DIR_AS_SUBMENU_KEY, GINT_TO_POINTER(menu_view_dir_radio_entries[i].value));
+		}
+
 	menu_item_add_check(menu, _("Show _hidden files"), options->file_filter.show_hidden_files,
 			    G_CALLBACK(vd_toggle_show_hidden_files_cb), vd);