diff src/view_dir.c @ 1272:e0e12512cde2

read external editors from .desktop files
author nadvornik
date Sun, 01 Feb 2009 12:48:14 +0000
parents 98be4a5e36f8
children 8b89e3ff286b
line wrap: on
line diff
--- a/src/view_dir.c	Thu Jan 29 19:43:34 2009 +0000
+++ b/src/view_dir.c	Sun Feb 01 12:48:14 2009 +0000
@@ -327,20 +327,18 @@
 	ViewDir *vd = data;
 	const gchar *path;
 	GList *list;
-	guint n;
-
+	const gchar *key;
+	
 	if (!vd->drop_fd) return;
 	
-	n = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(widget), "filter_idx"));
-	if (n == 0) return;
-	n--;
+	key = g_object_get_data(G_OBJECT(widget), "filter_key");
 
 	path = vd->drop_fd->path;
 	list = vd->drop_list;
 
 	vd->drop_list = NULL;
 
-	file_util_start_filter_from_filelist(n, list, path, vd->widget);
+	file_util_start_filter_from_filelist(key, list, path, vd->widget);
 }
 
 
@@ -348,7 +346,8 @@
 GtkWidget *vd_drop_menu(ViewDir *vd, gint active)
 {
 	GtkWidget *menu;
-	guint i;
+	GList *editors_list = editor_list_get();
+	GList *work = editors_list;
 
 	menu = popup_menu_short_lived();
 	g_signal_connect(G_OBJECT(menu), "destroy",
@@ -358,17 +357,19 @@
 				      G_CALLBACK(vd_drop_menu_copy_cb), vd);
 	menu_item_add_sensitive(menu, _("_Move"), active, G_CALLBACK(vd_drop_menu_move_cb), vd);
 
-	for (i = 0; i < GQ_EDITOR_GENERIC_SLOTS; i++)
+	while (work)
 		{
 		GtkWidget *item;
-
-		const gchar *name = editor_get_name(i);
-		if (!name || !editor_is_filter(i)) continue;
+		const EditorDescription *editor = work->data;
+		work = work->next;
+		
+		if (!editor_is_filter(editor->key)) continue;
+		item = menu_item_add_sensitive(menu, editor->name, active, G_CALLBACK(vd_drop_menu_filter_cb), vd);
 
-		item = menu_item_add_sensitive(menu, name, active, G_CALLBACK(vd_drop_menu_filter_cb), vd);
-
-		g_object_set_data(G_OBJECT(item), "filter_idx", GUINT_TO_POINTER(i + 1));
+		g_object_set_data(G_OBJECT(item), "filter_key", editor->key);
 		}
+	
+	g_list_free(editors_list);
 
 	menu_item_add_divider(menu);
 	menu_item_add_stock(menu, _("Cancel"), GTK_STOCK_CANCEL, NULL, vd);