comparison 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
comparison
equal deleted inserted replaced
1271:4fcdbb497df3 1272:e0e12512cde2
325 static void vd_drop_menu_filter_cb(GtkWidget *widget, gpointer data) 325 static void vd_drop_menu_filter_cb(GtkWidget *widget, gpointer data)
326 { 326 {
327 ViewDir *vd = data; 327 ViewDir *vd = data;
328 const gchar *path; 328 const gchar *path;
329 GList *list; 329 GList *list;
330 guint n; 330 const gchar *key;
331 331
332 if (!vd->drop_fd) return; 332 if (!vd->drop_fd) return;
333 333
334 n = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(widget), "filter_idx")); 334 key = g_object_get_data(G_OBJECT(widget), "filter_key");
335 if (n == 0) return;
336 n--;
337 335
338 path = vd->drop_fd->path; 336 path = vd->drop_fd->path;
339 list = vd->drop_list; 337 list = vd->drop_list;
340 338
341 vd->drop_list = NULL; 339 vd->drop_list = NULL;
342 340
343 file_util_start_filter_from_filelist(n, list, path, vd->widget); 341 file_util_start_filter_from_filelist(key, list, path, vd->widget);
344 } 342 }
345 343
346 344
347 345
348 GtkWidget *vd_drop_menu(ViewDir *vd, gint active) 346 GtkWidget *vd_drop_menu(ViewDir *vd, gint active)
349 { 347 {
350 GtkWidget *menu; 348 GtkWidget *menu;
351 guint i; 349 GList *editors_list = editor_list_get();
350 GList *work = editors_list;
352 351
353 menu = popup_menu_short_lived(); 352 menu = popup_menu_short_lived();
354 g_signal_connect(G_OBJECT(menu), "destroy", 353 g_signal_connect(G_OBJECT(menu), "destroy",
355 G_CALLBACK(vd_popup_destroy_cb), vd); 354 G_CALLBACK(vd_popup_destroy_cb), vd);
356 355
357 menu_item_add_stock_sensitive(menu, _("_Copy"), GTK_STOCK_COPY, active, 356 menu_item_add_stock_sensitive(menu, _("_Copy"), GTK_STOCK_COPY, active,
358 G_CALLBACK(vd_drop_menu_copy_cb), vd); 357 G_CALLBACK(vd_drop_menu_copy_cb), vd);
359 menu_item_add_sensitive(menu, _("_Move"), active, G_CALLBACK(vd_drop_menu_move_cb), vd); 358 menu_item_add_sensitive(menu, _("_Move"), active, G_CALLBACK(vd_drop_menu_move_cb), vd);
360 359
361 for (i = 0; i < GQ_EDITOR_GENERIC_SLOTS; i++) 360 while (work)
362 { 361 {
363 GtkWidget *item; 362 GtkWidget *item;
364 363 const EditorDescription *editor = work->data;
365 const gchar *name = editor_get_name(i); 364 work = work->next;
366 if (!name || !editor_is_filter(i)) continue; 365
367 366 if (!editor_is_filter(editor->key)) continue;
368 item = menu_item_add_sensitive(menu, name, active, G_CALLBACK(vd_drop_menu_filter_cb), vd); 367 item = menu_item_add_sensitive(menu, editor->name, active, G_CALLBACK(vd_drop_menu_filter_cb), vd);
369 368
370 g_object_set_data(G_OBJECT(item), "filter_idx", GUINT_TO_POINTER(i + 1)); 369 g_object_set_data(G_OBJECT(item), "filter_key", editor->key);
371 } 370 }
371
372 g_list_free(editors_list);
372 373
373 menu_item_add_divider(menu); 374 menu_item_add_divider(menu);
374 menu_item_add_stock(menu, _("Cancel"), GTK_STOCK_CANCEL, NULL, vd); 375 menu_item_add_stock(menu, _("Cancel"), GTK_STOCK_CANCEL, NULL, vd);
375 376
376 return menu; 377 return menu;