Addl fix 510: Rudimentary video support
[geeqie.git] / src / layout_image.c
index f1a3cb9..b736e41 100644 (file)
@@ -29,6 +29,7 @@
 #include "exif.h"
 #include "filedata.h"
 #include "fullscreen.h"
+#include "history_list.h"
 #include "image.h"
 #include "image-overlay.h"
 #include "img-view.h"
@@ -52,7 +53,6 @@
 
 static GtkWidget *layout_image_pop_menu(LayoutWindow *lw);
 static void layout_image_set_buttons(LayoutWindow *lw);
-static void layout_image_animate_stop(LayoutWindow *lw);
 static gboolean layout_image_animate_new_file(LayoutWindow *lw);
 static void layout_image_animate_update_image(LayoutWindow *lw);
 
@@ -355,17 +355,6 @@ static gboolean layout_image_animate_check(LayoutWindow *lw)
        return TRUE;
 }
 
-static void layout_image_animate_stop(LayoutWindow *lw)
-{
-       if (!layout_valid(&lw)) return;
-
-       if(lw->options.animate && lw->animation)
-               {
-               lw->animation->valid = FALSE;
-               lw->animation = NULL;
-               }
-}
-
 static void layout_image_animate_update_image(LayoutWindow *lw)
 {
        if (!layout_valid(&lw)) return;
@@ -642,6 +631,25 @@ static GList *layout_image_get_fd_list(LayoutWindow *lw)
        return list;
 }
 
+/**
+ * @brief Add file selection list to a collection
+ * @param[in] widget 
+ * @param[in] data Index to the collection list menu item selected, or -1 for new collection
+ * 
+ * 
+ */
+static void layout_pop_menu_collections_cb(GtkWidget *widget, gpointer data)
+{
+       LayoutWindow *lw;
+       GList *selection_list = NULL;
+
+       lw = submenu_item_get_data(widget);
+       selection_list = g_list_append(selection_list, layout_image_get_fd(lw));
+       pop_menu_collections(selection_list, data);
+
+       filelist_free(selection_list);
+}
+
 static GtkWidget *layout_image_pop_menu(LayoutWindow *lw)
 {
        GtkWidget *menu;
@@ -687,12 +695,15 @@ static GtkWidget *layout_image_pop_menu(LayoutWindow *lw)
        if (!path) gtk_widget_set_sensitive(item, FALSE);
        item = menu_item_add(menu, _("_Rename..."), G_CALLBACK(li_pop_menu_rename_cb), lw);
        if (!path) gtk_widget_set_sensitive(item, FALSE);
-       item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(li_pop_menu_delete_cb), lw);
-       if (!path) gtk_widget_set_sensitive(item, FALSE);
-
        item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(li_pop_menu_copy_path_cb), lw);
        if (!path) gtk_widget_set_sensitive(item, FALSE);
+       item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(li_pop_menu_delete_cb), lw);
+       if (!path) gtk_widget_set_sensitive(item, FALSE);
+       menu_item_add_divider(menu);
 
+       submenu = submenu_add_collections(menu, &item,
+                               G_CALLBACK(layout_pop_menu_collections_cb), lw);
+       gtk_widget_set_sensitive(item, TRUE);
        menu_item_add_divider(menu);
 
        if (layout_image_slideshow_active(lw))
@@ -1070,7 +1081,6 @@ void layout_image_alter_orientation(LayoutWindow *lw, AlterType type)
        GtkTreePath *tpath;
        FileData *fd_n;
        GtkTreeIter iter;
-       IconData *id;
 
        if (!lw || !lw->vf) return;
 
@@ -1089,8 +1099,7 @@ void layout_image_alter_orientation(LayoutWindow *lw, AlterType type)
                {
                if (lw->vf->type == FILEVIEW_ICON)
                        {
-                       id = work->data;
-                       fd_n = id->fd;
+                       fd_n = work->data;
                        work = work->next;
                        }
                else
@@ -1120,7 +1129,6 @@ void layout_image_rating(LayoutWindow *lw, const gchar *rating)
        GtkTreePath *tpath;
        FileData *fd_n;
        GtkTreeIter iter;
-       IconData *id;
 
        if (!lw || !lw->vf) return;
 
@@ -1139,8 +1147,7 @@ void layout_image_rating(LayoutWindow *lw, const gchar *rating)
                {
                if (lw->vf->type == FILEVIEW_ICON)
                        {
-                       id = work->data;
-                       fd_n = id->fd;
+                       fd_n = work->data;
                        work = work->next;
                        }
                else
@@ -1686,11 +1693,16 @@ static void layout_image_button_cb(ImageWindow *imd, GdkEventButton *event, gpoi
 {
        LayoutWindow *lw = data;
        GtkWidget *menu;
+       FileData *dir_fd;
 
        switch (event->button)
                {
                case MOUSE_BUTTON_LEFT:
-                       if (options->image_lm_click_nav && lw->split_mode == SPLIT_NONE)
+                       if (options->image_l_click_video && options->image_l_click_video_editor && imd->image_fd && imd->image_fd->format_class == FORMAT_CLASS_VIDEO)
+                               {
+                               start_editor_from_file(options->image_l_click_video_editor, imd->image_fd);
+                               }
+                       else if (options->image_lm_click_nav && lw->split_mode == SPLIT_NONE)
                                layout_image_next(lw);
                        break;
                case MOUSE_BUTTON_MIDDLE:
@@ -1705,6 +1717,16 @@ static void layout_image_button_cb(ImageWindow *imd, GdkEventButton *event, gpoi
                                }
                        gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
                        break;
+               case MOUSE_BUTTON_BACK:
+                       dir_fd = file_data_new_dir(history_chain_back());
+                       layout_set_fd(lw, dir_fd);
+                       file_data_unref(dir_fd);
+                       break;
+               case MOUSE_BUTTON_FORWARD:
+                       dir_fd = file_data_new_dir(history_chain_forward());
+                       layout_set_fd(lw, dir_fd);
+                       file_data_unref(dir_fd);
+                       break;
                default:
                        break;
                }