In various Edit context menus, only display editors that match the file types in...
[geeqie.git] / src / img-view.c
index 9bc862f..2842e61 100644 (file)
@@ -49,6 +49,9 @@ struct _ViewWindow
 
        GList *list;
        GList *list_pointer;
+
+       /* file list for edit menu */
+       GList *editmenu_fd_list;
 };
 
 
@@ -1240,6 +1243,28 @@ static void view_set_layout_path_cb(GtkWidget *widget, gpointer data)
        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 @@ static GtkWidget *view_popup_menu(ViewWindow *vw)
 
        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);