diff src/img-view.c @ 1397:a0bd58a6535f

In various Edit context menus, only display editors that match the file types in the selection.
author zas_
date Sun, 08 Mar 2009 13:23:25 +0000
parents fe4da037be21
children cf4029d10d38
line wrap: on
line diff
--- a/src/img-view.c	Sun Mar 08 12:42:23 2009 +0000
+++ b/src/img-view.c	Sun Mar 08 13:23:25 2009 +0000
@@ -49,6 +49,9 @@
 
 	GList *list;
 	GList *list_pointer;
+
+	/* file list for edit menu */
+	GList *editmenu_fd_list;
 };
 
 
@@ -1240,6 +1243,28 @@
 	view_window_close(vw);
 }
 
+static void view_popup_menu_destroy_cb(GtkWidget *widget, gpointer data)
+{
+	ViewWindow *vw = data;
+
+	filelist_free(vw->editmenu_fd_list);
+	vw->editmenu_fd_list = NULL;
+}		
+
+static GList *view_window_get_fd_list(ViewWindow *vw)
+{
+	GList *list = NULL;
+	ImageWindow *imd = view_window_active_image(vw);
+
+	if (imd)
+		{
+		FileData *fd = image_get_fd(imd);
+		if (fd) list = g_list_append(NULL, file_data_ref(fd));
+		}
+	
+	return list;
+}
+
 static GtkWidget *view_popup_menu(ViewWindow *vw)
 {
 	GtkWidget *menu;
@@ -1247,13 +1272,17 @@
 
 	menu = popup_menu_short_lived();
 
+	g_signal_connect(G_OBJECT(menu), "destroy",
+			 G_CALLBACK(view_popup_menu_destroy_cb), vw);
+
 	menu_item_add_stock(menu, _("Zoom _in"), GTK_STOCK_ZOOM_IN, G_CALLBACK(view_zoom_in_cb), vw);
 	menu_item_add_stock(menu, _("Zoom _out"), GTK_STOCK_ZOOM_OUT, G_CALLBACK(view_zoom_out_cb), vw);
 	menu_item_add_stock(menu, _("Zoom _1:1"), GTK_STOCK_ZOOM_100, G_CALLBACK(view_zoom_1_1_cb), vw);
 	menu_item_add_stock(menu, _("Fit image to _window"), GTK_STOCK_ZOOM_FIT, G_CALLBACK(view_zoom_fit_cb), vw);
 	menu_item_add_divider(menu);
 
-	item = submenu_add_edit(menu, NULL, G_CALLBACK(view_edit_cb), vw);
+ 	vw->editmenu_fd_list = view_window_get_fd_list(vw);
+	item = submenu_add_edit(menu, NULL, G_CALLBACK(view_edit_cb), vw, vw->editmenu_fd_list);
 	menu_item_add_divider(item);
 	menu_item_add(item, _("Set as _wallpaper"), G_CALLBACK(view_wallpaper_cb), vw);