Merge merge-requests/513 - build paths
authorKlaus Ethgen <Klaus@Ethgen.de>
Sun, 17 Sep 2017 08:32:01 +0000 (09:32 +0100)
committerKlaus Ethgen <Klaus@Ethgen.de>
Sun, 17 Sep 2017 08:32:01 +0000 (09:32 +0100)
* github/merge-requests/513:
  Fix out-of-path (VPATH) builds.

33 files changed:
src/bar_keywords.c
src/cellrenderericon.c
src/cellrenderericon.h
src/collect-table.c
src/collect.c
src/debug.c
src/filedata.c
src/filefilter.c
src/filefilter.h
src/icons/Makefile.am
src/icons/sheet_metadata.png [new file with mode: 0644]
src/icons/sheet_unknown.png [new file with mode: 0644]
src/icons/sheet_video.png [new file with mode: 0644]
src/icons/svg/Makefile.am
src/icons/svg/sheet_metadata.svg [new file with mode: 0644]
src/icons/svg/sheet_unknown.svg [new file with mode: 0644]
src/icons/svg/sheet_video.svg [new file with mode: 0644]
src/image-overlay.c
src/image.c
src/layout_util.c
src/logwindow.c
src/metadata.c
src/options.c
src/options.h
src/pixbuf_util.c
src/pixbuf_util.h
src/preferences.c
src/rcfile.c
src/thumb.c
src/thumb_standard.c
src/typedefs.h
src/view_file/view_file_icon.c
src/view_file/view_file_list.c

index e4974fb..b59a089 100644 (file)
@@ -1292,7 +1292,7 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk
                submenu = gtk_menu_new();
                for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
                        {
-                       text = g_strdup_printf(_("Mark %d"), i + 1);
+                       text = g_strdup_printf(_("Mark %d"), 1 + (i < 9 ? i : -1));
                        item = menu_item_add(submenu, text, G_CALLBACK(bar_pane_keywords_connect_mark_cb), pkd);
                        g_object_set_data(G_OBJECT(item), "mark", GINT_TO_POINTER(i + 1));
                        g_free(text);
index 5f42e1c..7820209 100644 (file)
@@ -25,9 +25,6 @@
 
 #define FIXED_ICON_SIZE_MAX 512
 
-#define TOGGLE_WIDTH 13
-#define TOGGLE_SPACING 18
-
 
 static void gqv_cell_renderer_icon_get_property(GObject                *object,
                                                guint           param_id,
index 57f3cf7..62611ea 100644 (file)
@@ -24,6 +24,9 @@
 extern "C" {
 #endif /* __cplusplus */
 
+#define TOGGLE_WIDTH 13
+#define TOGGLE_SPACING 16
+
 
 #define GQV_TYPE_CELL_RENDERER_ICON            (gqv_cell_renderer_icon_get_type())
 #define GQV_CELL_RENDERER_ICON(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GQV_TYPE_CELL_RENDERER_ICON, GQvCellRendererIcon))
index 3eed2e0..75be016 100644 (file)
@@ -2502,6 +2502,16 @@ static void collection_table_destroy(GtkWidget *widget, gpointer data)
 {
        CollectTable *ct = data;
 
+       /* If there is no unsaved data, save the window geometry
+        */
+       if (!ct->cd->changed)
+               {
+               if (!collection_save(ct->cd, ct->cd->path))
+                       {
+                       log_printf("failed saving to collection path: %s\n", ct->cd->path);
+                       }
+               }
+
        if (ct->popup)
                {
                g_signal_handlers_disconnect_matched(G_OBJECT(ct->popup), G_SIGNAL_MATCH_DATA,
index 358091b..94cfab1 100644 (file)
@@ -1194,19 +1194,39 @@ void collection_window_close_by_collection(CollectionData *cd)
        if (cw) collection_window_close_final(cw);
 }
 
+/**
+ * @brief Check if any Collection windows have unsaved data
+ * @returns TRUE if unsaved data exists
+ * 
+ * Also saves window geometry for Collection windows that have
+ * no unsaved data
+ */
 gboolean collection_window_modified_exists(void)
 {
        GList *work;
+       gboolean ret;
+
+       ret = FALSE;
 
        work = collection_window_list;
        while (work)
                {
                CollectWindow *cw = work->data;
-               if (cw->cd->changed) return TRUE;
+               if (cw->cd->changed)
+                       {
+                       ret = TRUE;
+                       }
+               else
+                       {
+                       if (!collection_save(cw->table->cd, cw->table->cd->path))
+                               {
+                               log_printf("failed saving to collection path: %s\n", cw->table->cd->path);
+                               }
+                       }
                work = work->next;
                }
 
-       return FALSE;
+       return ret;
 }
 
 static gboolean collection_window_delete(GtkWidget *widget, GdkEvent *event, gpointer data)
index 851bb79..3fb889f 100644 (file)
@@ -40,11 +40,38 @@ static gboolean log_msg_cb(gpointer data)
        return FALSE;
 }
 
+/**
+ * @brief Appends a user information message to the log window queue
+ * @param data The message
+ * @returns FALSE
+ * 
+ * If the first word of the message is either "error" or "warning"
+ * (case insensitive) the message is color-coded appropriately
+ */
 static gboolean log_normal_cb(gpointer data)
 {
        gchar *buf = data;
-       log_window_append(buf, LOG_NORMAL);
+       gchar *buf_casefold = g_utf8_casefold(buf, -1);
+       gchar *error_casefold = g_utf8_casefold(_("error"), -1);
+       gchar *warning_casefold = g_utf8_casefold(_("warning"), -1);
+
+       if (buf_casefold == g_strstr_len(buf_casefold, -1, error_casefold))
+               {
+               log_window_append(buf, LOG_ERROR);
+               }
+       else if (buf_casefold == g_strstr_len(buf_casefold, -1, warning_casefold))
+               {
+               log_window_append(buf, LOG_WARN);
+               }
+       else
+               {
+               log_window_append(buf, LOG_NORMAL);
+               }
+
        g_free(buf);
+       g_free(buf_casefold);
+       g_free(error_casefold);
+       g_free(warning_casefold);
        return FALSE;
 }
 
@@ -97,7 +124,16 @@ void log_domain_print_debug(const gchar *domain, const gchar *file_name, const g
        message = g_strdup_vprintf(format, ap);
        va_end(ap);
 
-       location = g_strdup_printf("%s:%s:%d:", file_name, function_name, line_number);
+       if (options && options->log_window.timer_data)
+               {
+               location = g_strdup_printf("%s:%s:%s:%d:", get_exec_time(), file_name,
+                                                                                               function_name, line_number);
+               }
+       else
+               {
+               location = g_strdup_printf("%s:%s:%d:", file_name, function_name, line_number);
+               }
+
        buf = g_strconcat(location, message, NULL);
        log_domain_print_message(domain,buf);
        g_free(location);
index b690e81..3bbbbfb 100644 (file)
@@ -429,6 +429,7 @@ static FileData *file_data_new(const gchar *path_utf8, struct stat *st, gboolean
        fd->magick = FD_MAGICK;
        fd->exifdate = 0;
        fd->rating = 0;
+       fd->format_class = filter_file_get_class(path_utf8);
 
        if (disable_sidecars) fd->disable_grouping = TRUE;
 
index 1594bc9..4ff7295 100644 (file)
@@ -277,6 +277,14 @@ void filter_add_defaults(void)
        filter_add_if_missing("erf", "Epson raw format", ".erf", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
        filter_add_if_missing("srw", "Samsung raw format", ".srw", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
        filter_add_if_missing("rw2", "Panasonic raw format", ".rw2", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
+
+       /* video files */
+       filter_add_if_missing("mp4", "MP4 video file", ".mp4;.m4v;.3gp;.3g2", FORMAT_CLASS_VIDEO, FALSE, FALSE, FALSE);
+       filter_add_if_missing("3gp", "3GP video file", ".3gp;.3g2", FORMAT_CLASS_VIDEO, FALSE, FALSE, FALSE);
+       filter_add_if_missing("mov", "MOV video file", ".mov;.qt", FORMAT_CLASS_VIDEO, FALSE, FALSE, FALSE);
+       filter_add_if_missing("avi", "AVI video file", ".avi", FORMAT_CLASS_VIDEO, FALSE, FALSE, FALSE);
+       filter_add_if_missing("mpg", "MPG video file", ".mpg;.mpeg;.mts;.m2ts;", FORMAT_CLASS_VIDEO, FALSE, FALSE, FALSE);
+       filter_add_if_missing("mkv", "Matroska video file", ".mkv;", FORMAT_CLASS_VIDEO, FALSE, FALSE, FALSE);
 }
 
 GList *filter_to_list(const gchar *extensions)
@@ -449,6 +457,15 @@ gboolean filter_file_class(const gchar *name, FileFormatClass file_class)
        return !!filter_name_find(file_class_extension_list[file_class], name);
 }
 
+FileFormatClass filter_file_get_class(const gchar *name)
+{
+       if (filter_file_class(name, FORMAT_CLASS_IMAGE)) return FORMAT_CLASS_IMAGE;
+       if (filter_file_class(name, FORMAT_CLASS_RAWIMAGE)) return FORMAT_CLASS_RAWIMAGE;
+       if (filter_file_class(name, FORMAT_CLASS_META)) return FORMAT_CLASS_META;
+       if (filter_file_class(name, FORMAT_CLASS_VIDEO)) return FORMAT_CLASS_VIDEO;
+       return FORMAT_CLASS_UNKNOWN;
+}
+
 gboolean filter_name_is_writable(const gchar *name)
 {
        return !!filter_name_find(file_writable_list, name);
index 294d30e..06140b3 100644 (file)
@@ -48,6 +48,7 @@ GList *filter_to_list(const gchar *extensions);
 const gchar *registered_extension_from_path(const gchar *name);
 gboolean filter_name_exists(const gchar *name);
 gboolean filter_file_class(const gchar *name, FileFormatClass file_class);
+FileFormatClass filter_file_get_class(const gchar *name);
 gboolean filter_name_is_writable(const gchar *name);
 gboolean filter_name_allow_sidecar(const gchar *name);
 
index ada6b91..a4d2308 100644 (file)
@@ -12,6 +12,9 @@ ICONS_INLINE = \
        geeqie_logo.png         \
        scroller.png            \
        sheet_broken.png        \
+       sheet_metadata.png      \
+       sheet_unknown.png       \
+       sheet_video.png \
        icon_float.png          \
        icon_thumb.png          \
        icon_book.png           \
@@ -30,6 +33,9 @@ ICONS_INLINE_PAIRS = \
        icon_thumb              $(srcdir)/icon_thumb.png        \
        icon_scroller           $(srcdir)/scroller.png          \
        icon_broken             $(srcdir)/sheet_broken.png      \
+       icon_metadata           $(srcdir)/sheet_metadata.png    \
+       icon_unknown            $(srcdir)/sheet_unknown.png     \
+       icon_video              $(srcdir)/sheet_video.png       \
        icon_book               $(srcdir)/icon_book.png         \
        icon_config             $(srcdir)/icon_config.png       \
        icon_tools              $(srcdir)/icon_tools.png        \
diff --git a/src/icons/sheet_metadata.png b/src/icons/sheet_metadata.png
new file mode 100644 (file)
index 0000000..846b53c
Binary files /dev/null and b/src/icons/sheet_metadata.png differ
diff --git a/src/icons/sheet_unknown.png b/src/icons/sheet_unknown.png
new file mode 100644 (file)
index 0000000..be51861
Binary files /dev/null and b/src/icons/sheet_unknown.png differ
diff --git a/src/icons/sheet_video.png b/src/icons/sheet_video.png
new file mode 100644 (file)
index 0000000..732dcab
Binary files /dev/null and b/src/icons/sheet_video.png differ
index 2e15ef1..c79080a 100644 (file)
@@ -12,6 +12,9 @@ svg_images = \
        icon_view.svg           \
        sheet_blank.svg         \
        sheet_broken.svg        \
+       sheet_metadata.svg      \
+       sheet_unknown.svg       \
+       sheet_video.svg \
        spinner_orbit.svg
 
 EXTRA_DIST = $(svg_images)
diff --git a/src/icons/svg/sheet_metadata.svg b/src/icons/svg/sheet_metadata.svg
new file mode 100644 (file)
index 0000000..a66dd0a
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg1"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.1 r"
+   width="256.00000pt"
+   height="256.00000pt"
+   sodipodi:docname="sheet_metadata.svg"
+   version="1.1"
+   inkscape:export-filename="/home/tomaszg/src/geeqie/geeqie.org/src/icons/svg/sheet_blankx.svg.png"
+   inkscape:export-xdpi="13.5"
+   inkscape:export-ydpi="13.5">
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="162.82316"
+     inkscape:cy="169.784"
+     inkscape:window-width="2554"
+     inkscape:window-height="1384"
+     showgrid="true"
+     gridtolerance="1.0000000pt"
+     snaptoguides="false"
+     guidetolerance="5.0000000pt"
+     snaptogrid="true"
+     inkscape:window-x="3"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg1">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0"
+       originy="0"
+       spacingx="14.222222"
+       spacingy="14.222222"
+       color="#3f3fff"
+       empcolor="#3f3fff"
+       opacity="0.15"
+       empopacity="0.38"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <path
+     style="fill:#f5f5e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linejoin:round"
+     d="M 53.333333,21.333333 V 314.66667 H 293.33333 V 128 c 0,-7.33333 0,-13.33333 -2.66666,-22 L 237.33333,26 c -10.66666,-4.666667 -18.66666,-4.666667 -24,-4.666667 z"
+     id="path826"
+     sodipodi:nodetypes="cccccccc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#000000;fill-opacity:0.25619836;fill-rule:evenodd;stroke:none;stroke-width:5.33333349;stroke-linejoin:round"
+     d="m 292,107.33333 v 0 L 238.66667,27.333333 230.51878,90.228764 C 248.96977,98.444445 269.30637,107.33333 292,107.33333 Z"
+     id="path829"
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#fafaeb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.66666675;stroke-linejoin:round;stroke-dasharray:none"
+     d="M 225.33333,80.666667 C 252,84.84151 265.33333,83.966498 292,107.33333 L 238.66667,27.333333 c 0,31.919914 -8.88889,35.555556 -13.33334,53.333334 z"
+     id="path828"
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0" />
+  <flowRoot
+     xml:space="preserve"
+     id="flowRoot831"
+     style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.66666794px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:'FreeMono Italic';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#003380;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     transform="translate(-16.906653,49.002012)"><flowRegion
+       id="flowRegion833"
+       style="font-size:42.66666794px;fill:#003380"><rect
+         id="rect835"
+         width="189.33333"
+         height="190"
+         x="75"
+         y="60.333332"
+         style="font-size:42.66666794px;fill:#003380" /></flowRegion><flowPara
+       id="flowPara837"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:64px;font-family:FreeMono;-inkscape-font-specification:'FreeMono Bold';fill:#003380">0101 0110 1011 0101 0101</flowPara></flowRoot></svg>
diff --git a/src/icons/svg/sheet_unknown.svg b/src/icons/svg/sheet_unknown.svg
new file mode 100644 (file)
index 0000000..47d788a
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg1"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.1 r"
+   width="256.00000pt"
+   height="256.00000pt"
+   sodipodi:docname="sheet_unknown.svg"
+   version="1.1"
+   inkscape:export-filename="/home/tomaszg/src/geeqie/geeqie.org/src/icons/sheet_unknown.png"
+   inkscape:export-xdpi="13.5"
+   inkscape:export-ydpi="13.5">
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="162.82316"
+     inkscape:cy="169.784"
+     inkscape:window-width="2554"
+     inkscape:window-height="1384"
+     showgrid="true"
+     gridtolerance="1.0000000pt"
+     snaptoguides="false"
+     guidetolerance="5.0000000pt"
+     snaptogrid="true"
+     inkscape:window-x="3"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg1">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0"
+       originy="0"
+       spacingx="14.222222"
+       spacingy="14.222222"
+       color="#3f3fff"
+       empcolor="#3f3fff"
+       opacity="0.15"
+       empopacity="0.38"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <path
+     style="fill:#f5f5e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linejoin:round"
+     d="M 53.333333,21.333333 V 314.66667 H 293.33333 V 128 c 0,-7.33333 0,-13.33333 -2.66666,-22 L 237.33333,26 c -10.66666,-4.666667 -18.66666,-4.666667 -24,-4.666667 z"
+     id="path826"
+     sodipodi:nodetypes="cccccccc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#000000;fill-opacity:0.25619836;fill-rule:evenodd;stroke:none;stroke-width:5.33333349;stroke-linejoin:round"
+     d="m 292,107.33333 v 0 L 238.66667,27.333333 230.51878,90.228764 C 248.96977,98.444445 269.30637,107.33333 292,107.33333 Z"
+     id="path829"
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#fafaeb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.66666675;stroke-linejoin:round;stroke-dasharray:none"
+     d="M 225.33333,80.666667 C 252,84.84151 265.33333,83.966498 292,107.33333 L 238.66667,27.333333 c 0,31.919914 -8.88889,35.555556 -13.33334,53.333334 z"
+     id="path828"
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0" />
+  <flowRoot
+     xml:space="preserve"
+     id="flowRoot831"
+     style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.66666794px;line-height:125%;font-family:FreeMono;-inkscape-font-specification:'FreeMono Bold';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     transform="translate(-15.163317,80.274016)"><flowRegion
+       id="flowRegion833"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.66666794px;font-family:FreeMono;-inkscape-font-specification:'FreeMono Bold';fill:#000000"><rect
+         id="rect835"
+         width="189.33333"
+         height="190"
+         x="75"
+         y="60.333332"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:42.66666794px;font-family:FreeMono;-inkscape-font-specification:'FreeMono Bold';fill:#000000" /></flowRegion><flowPara
+       id="flowPara837"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:85.33333588px;font-family:FreeMono;-inkscape-font-specification:'FreeMono Bold';fill:#000000">???</flowPara></flowRoot></svg>
diff --git a/src/icons/svg/sheet_video.svg b/src/icons/svg/sheet_video.svg
new file mode 100644 (file)
index 0000000..6bbd257
--- /dev/null
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg1"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.1 r"
+   width="256.00000pt"
+   height="256.00000pt"
+   sodipodi:docname="sheet_video.svg"
+   version="1.1"
+   inkscape:export-filename="/home/tomaszg/src/geeqie/geeqie.org/src/icons/sheet_video.png"
+   inkscape:export-xdpi="13.5"
+   inkscape:export-ydpi="13.5">
+  <metadata
+     id="metadata883">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="148.42568"
+     inkscape:cy="222.41884"
+     inkscape:window-width="2554"
+     inkscape:window-height="1384"
+     showgrid="true"
+     gridtolerance="1.0000000pt"
+     snaptoguides="false"
+     guidetolerance="5.0000000pt"
+     snaptogrid="true"
+     inkscape:window-x="3"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg1">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0"
+       originy="0"
+       spacingx="14.222222"
+       spacingy="14.222222"
+       color="#3f3fff"
+       empcolor="#3f3fff"
+       opacity="0.15"
+       empopacity="0.38"
+       empspacing="5" />
+  </sodipodi:namedview>
+  <path
+     style="fill:#f5f5e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+     d="M 53.333333,21.333333 V 314.66667 H 293.33333 V 128 c 0,-7.33333 0,-13.33333 -2.66666,-22 L 237.33333,26 c -10.66666,-4.666667 -18.66666,-4.666667 -24,-4.666667 z"
+     id="path826"
+     sodipodi:nodetypes="cccccccc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#000000;fill-opacity:0.25619836;fill-rule:evenodd;stroke:none;stroke-width:5.33333349;stroke-linejoin:round"
+     d="m 292,107.33333 v 0 L 238.66667,27.333333 230.51878,90.228764 C 248.96977,98.444445 269.30637,107.33333 292,107.33333 Z"
+     id="path829"
+     sodipodi:nodetypes="ccccc"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#fafaeb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.66666675;stroke-linejoin:round;stroke-dasharray:none"
+     d="M 225.33333,80.666667 C 252,84.84151 265.33333,83.966498 292,107.33333 L 238.66667,27.333333 c 0,31.919914 -8.88889,35.555556 -13.33334,53.333334 z"
+     id="path828"
+     sodipodi:nodetypes="cccc"
+     inkscape:connector-curvature="0" />
+  <circle
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e6f3f5;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.33300018;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
+     id="path1502"
+     cx="173.33333"
+     cy="195.55556"
+     r="81.777779" />
+  <path
+     style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:5.33300018;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 139.11112,124.55556 V 266.77778 L 252.16667,194.66667 Z"
+     id="path1506"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+</svg>
index 7afe1a4..4f8afe3 100644 (file)
@@ -650,7 +650,7 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
 
                        for (mark = 0; mark < FILEDATA_MARKS_SIZE; mark++)
                                {
-                               g_string_append_printf(buf, file_data_get_mark(fd, mark) ? " <span background='#FF00FF'>%c</span>" : " %c", '1' + mark);
+                               g_string_append_printf(buf, file_data_get_mark(fd, mark) ? " <span background='#FF00FF'>%c</span>" : " %c", '1' + (mark < 9 ? mark : -1) );
                                }
 
                        if (*text)
index 2be32c5..de44101 100644 (file)
@@ -671,7 +671,21 @@ static void image_load_done_cb(ImageLoader *il, gpointer data)
                {
                GdkPixbuf *pixbuf;
 
-               pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
+               switch (imd->image_fd->format_class)
+                       {
+                       case FORMAT_CLASS_UNKNOWN:
+                               pixbuf = pixbuf_inline(PIXBUF_INLINE_UNKNOWN);
+                               break;
+                       case FORMAT_CLASS_META:
+                               pixbuf = pixbuf_inline(PIXBUF_INLINE_METADATA);
+                               break;
+                       case FORMAT_CLASS_VIDEO:
+                               pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO);
+                               break;
+                       default:
+                               pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
+                       }
+
                image_change_pixbuf(imd, pixbuf, image_zoom_get(imd), FALSE);
                g_object_unref(pixbuf);
 
index c8a83f9..9c320bb 100644 (file)
@@ -2220,7 +2220,7 @@ static void layout_actions_setup_mark(LayoutWindow *lw, gint mark, gchar *name_t
 
        gtk_action_group_add_actions(lw->action_group, &entry, 1, lw);
        action = gtk_action_group_get_action(lw->action_group, name);
-       g_object_set_data(G_OBJECT(action), "mark_num", GINT_TO_POINTER(mark));
+       g_object_set_data(G_OBJECT(action), "mark_num", GINT_TO_POINTER(mark > 0 ? mark : 10));
 }
 
 static void layout_actions_setup_marks(LayoutWindow *lw)
@@ -2234,17 +2234,19 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
 
        for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++)
                {
-               layout_actions_setup_mark(lw, mark, "Mark%d",           _("Mark _%d"), NULL, NULL, NULL);
-               layout_actions_setup_mark(lw, mark, "SetMark%d",        _("_Set mark %d"),                      NULL,           _("Set mark %d"), G_CALLBACK(layout_menu_set_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "ResetMark%d",      _("_Reset mark %d"),                    NULL,           _("Reset mark %d"), G_CALLBACK(layout_menu_res_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "ToggleMark%d",     _("_Toggle mark %d"),                   "%d",           _("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "ToggleMark%dAlt1", _("_Toggle mark %d"),                   "KP_%d",        _("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
-               layout_actions_setup_mark(lw, mark, "SelectMark%d",     _("Se_lect mark %d"),                   "<control>%d",  _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
-               layout_actions_setup_mark(lw, mark, "SelectMark%dAlt1", _("_Select mark %d"),                   "<control>KP_%d", _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
-               layout_actions_setup_mark(lw, mark, "AddMark%d",        _("_Add mark %d"),                      NULL,           _("Add mark %d"), G_CALLBACK(layout_menu_sel_mark_or_cb));
-               layout_actions_setup_mark(lw, mark, "IntMark%d",        _("_Intersection with mark %d"),        NULL,           _("Intersection with mark %d"), G_CALLBACK(layout_menu_sel_mark_and_cb));
-               layout_actions_setup_mark(lw, mark, "UnselMark%d",      _("_Unselect mark %d"),                 NULL,           _("Unselect mark %d"), G_CALLBACK(layout_menu_sel_mark_minus_cb));
-               layout_actions_setup_mark(lw, mark, "FilterMark%d",     _("_Filter mark %d"),                   NULL,           _("Filter mark %d"), G_CALLBACK(layout_menu_mark_filter_toggle_cb));
+               gint i = (mark < 10 ? mark : 0);
+
+               layout_actions_setup_mark(lw, i, "Mark%d",              _("Mark _%d"), NULL, NULL, NULL);
+               layout_actions_setup_mark(lw, i, "SetMark%d",   _("_Set mark %d"),                      NULL,           _("Set mark %d"), G_CALLBACK(layout_menu_set_mark_sel_cb));
+               layout_actions_setup_mark(lw, i, "ResetMark%d", _("_Reset mark %d"),                    NULL,           _("Reset mark %d"), G_CALLBACK(layout_menu_res_mark_sel_cb));
+               layout_actions_setup_mark(lw, i, "ToggleMark%d",        _("_Toggle mark %d"),                   "%d",           _("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
+               layout_actions_setup_mark(lw, i, "ToggleMark%dAlt1",    _("_Toggle mark %d"),                   "KP_%d",        _("Toggle mark %d"), G_CALLBACK(layout_menu_toggle_mark_sel_cb));
+               layout_actions_setup_mark(lw, i, "SelectMark%d",        _("Se_lect mark %d"),                   "<control>%d",  _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
+               layout_actions_setup_mark(lw, i, "SelectMark%dAlt1",    _("_Select mark %d"),                   "<control>KP_%d", _("Select mark %d"), G_CALLBACK(layout_menu_sel_mark_cb));
+               layout_actions_setup_mark(lw, i, "AddMark%d",   _("_Add mark %d"),                      NULL,           _("Add mark %d"), G_CALLBACK(layout_menu_sel_mark_or_cb));
+               layout_actions_setup_mark(lw, i, "IntMark%d",   _("_Intersection with mark %d"),        NULL,           _("Intersection with mark %d"), G_CALLBACK(layout_menu_sel_mark_and_cb));
+               layout_actions_setup_mark(lw, i, "UnselMark%d", _("_Unselect mark %d"),                 NULL,           _("Unselect mark %d"), G_CALLBACK(layout_menu_sel_mark_minus_cb));
+               layout_actions_setup_mark(lw, i, "FilterMark%d",        _("_Filter mark %d"),                   NULL,           _("Filter mark %d"), G_CALLBACK(layout_menu_mark_filter_toggle_cb));
 
                g_string_append_printf(desc,
                                "      <menu action='Mark%d'>"
@@ -2259,7 +2261,7 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
                                "        <separator/>"
                                "        <menuitem action='FilterMark%d'/>"
                                "      </menu>",
-                               mark, mark, mark, mark, mark, mark, mark, mark, mark);
+                               i, i, i, i, i, i, i, i, i);
                }
 
        g_string_append(desc,
@@ -2267,10 +2269,12 @@ static void layout_actions_setup_marks(LayoutWindow *lw)
                                "  </menubar>");
        for (mark = 1; mark <= FILEDATA_MARKS_SIZE; mark++)
                {
+               gint i = (mark < 10 ? mark : 0);
+
                g_string_append_printf(desc,
                                "<accelerator action='ToggleMark%dAlt1'/>"
                                "<accelerator action='SelectMark%dAlt1'/>",
-                               mark, mark);
+                               i, i);
                }
        g_string_append(desc,   "</ui>" );
 
index 3d21cc1..eabeecc 100644 (file)
@@ -37,16 +37,22 @@ struct _LogWindow
        GtkWidget *scrolledwin;
        GtkWidget *text;
 
+#if !GTK_CHECK_VERSION(3,0,0)
        GdkColor colors[LOG_COUNT];
+#else
+       GtkTextTag *color_tags[LOG_COUNT];
+#endif
 
        guint lines;
        GtkWidget *regexp_box;
        GtkWidget *bar;
        GtkWidget *pause;
        GtkWidget *wrap;
+       GtkWidget *timer_data;
        GtkWidget *debug_level;
 };
 
+#if !GTK_CHECK_VERSION(3,0,0)
 typedef struct _LogDef LogDef;
 struct _LogDef
 {
@@ -62,6 +68,7 @@ static LogDef logdefs[LOG_COUNT] = {
        { LOG_WARN,     "warning",      "orange" },
        { LOG_ERROR,    "error",        "red"    },
 };
+#endif
 
 static LogWindow *logwindow = NULL;
 
@@ -99,6 +106,13 @@ static void log_window_line_wrap_cb(GtkWidget *widget, gpointer data)
                }
 }
 
+static void log_window_timer_data_cb(GtkWidget *widget, gpointer data)
+{
+       LogWindow *logwin = data;
+
+       options->log_window.timer_data = !options->log_window.timer_data;
+}
+
 static void log_window_regexp_cb(GtkWidget *text_entry, gpointer data)
 {
        gchar *new_regexp;
@@ -167,6 +181,9 @@ static LogWindow *log_window_create(LayoutWindow *lw)
        logwin->wrap = pref_button_new(hbox, NULL, "Line wrap", FALSE,
                                           G_CALLBACK(log_window_line_wrap_cb), logwin);
 
+       logwin->timer_data = pref_button_new(hbox, NULL, "Timer data", FALSE,
+                                          G_CALLBACK(log_window_timer_data_cb), logwin);
+
        pref_label_new(hbox, "Filter regexp");
 
        textbox = gtk_entry_new();
@@ -199,12 +216,10 @@ static void log_window_init(LogWindow *logwin)
 #if !GTK_CHECK_VERSION(3,0,0)
        GdkColormap *colormap;
        gboolean success[LOG_COUNT];
-#endif
        gint i;
 
        g_assert(logwin != NULL);
        g_assert(logwin->colors != NULL);
-#if !GTK_CHECK_VERSION(3,0,0)
        for (i = LOG_NORMAL; i < LOG_COUNT; i++)
                {
                gboolean ok = gdk_color_parse(logdefs[i].color, &logwin->colors[i]);
@@ -231,13 +246,31 @@ static void log_window_init(LogWindow *logwin)
                        break;
                        }
                }
-#endif
+
        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(logwin->text));
        for (i = LOG_NORMAL; i < LOG_COUNT; i++)
                gtk_text_buffer_create_tag(buffer, logdefs[i].tag,
                                           "foreground-gdk", &logwin->colors[i],
                                           "family", "MonoSpace",
                                           NULL);
+#else
+       g_assert(logwin != NULL);
+
+       buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(logwin->text));
+
+       logwin->color_tags[LOG_NORMAL] = gtk_text_buffer_create_tag (buffer,
+                                                       "black_foreground", "foreground", "black",
+                                                       "family", "MonoSpace", NULL);
+       logwin->color_tags[LOG_MSG] = gtk_text_buffer_create_tag (buffer,
+                                                       "blue_foreground", "foreground", "blue",
+                                                       "family", "MonoSpace", NULL);
+       logwin->color_tags[LOG_WARN] = gtk_text_buffer_create_tag (buffer,
+                                                       "orange_foreground", "foreground", "orange",
+                                                       "family", "MonoSpace", NULL);
+       logwin->color_tags[LOG_ERROR] = gtk_text_buffer_create_tag (buffer,
+                                                       "red_foreground", "foreground", "red",
+                                                       "family", "MonoSpace", NULL);
+#endif
 }
 
 static void log_window_show(LogWindow *logwin)
@@ -286,7 +319,7 @@ struct _LogMsg {
        LogType type;
 };
 
-
+#if !GTK_CHECK_VERSION(3,0,0)
 static void log_window_insert_text(GtkTextBuffer *buffer, GtkTextIter *iter,
                                   const gchar *text, const gchar *tag)
 {
@@ -298,7 +331,19 @@ static void log_window_insert_text(GtkTextBuffer *buffer, GtkTextIter *iter,
        gtk_text_buffer_insert_with_tags_by_name(buffer, iter, str_utf8, -1, tag, NULL);
        g_free(str_utf8);
 }
+#else
+static void log_window_insert_text(GtkTextBuffer *buffer, GtkTextIter *iter,
+                                  const gchar *text, GtkTextTag *tag)
+{
+       gchar *str_utf8;
 
+       if (!text || !*text) return;
+
+       str_utf8 = utf8_validate_or_convert(text);
+       gtk_text_buffer_insert_with_tags(buffer, iter, str_utf8, -1, tag, NULL);
+       g_free(str_utf8);
+}
+#endif
 
 void log_window_append(const gchar *str, LogType type)
 {
@@ -352,7 +397,12 @@ void log_window_append(const gchar *str, LogType type)
                GList *prev;
                LogMsg *oldest_msg = work->data;
 
+#if !GTK_CHECK_VERSION(3,0,0)
                log_window_insert_text(buffer, &iter, oldest_msg->text, logdefs[oldest_msg->type].tag);
+#else
+               log_window_insert_text(buffer, &iter, oldest_msg->text,
+                                                                       logwindow->color_tags[oldest_msg->type]);
+#endif
 
                prev = work->prev;
                memory = g_list_delete_link(memory, work);
@@ -360,7 +410,11 @@ void log_window_append(const gchar *str, LogType type)
                }
        }
 
+#if !GTK_CHECK_VERSION(3,0,0)
        log_window_insert_text(buffer, &iter, str, logdefs[type].tag);
+#else
+       log_window_insert_text(buffer, &iter, str, logwindow->color_tags[type]);
+#endif
 
        if (!options->log_window.paused)
                {
index 563b7b8..86a2cd2 100644 (file)
@@ -395,7 +395,7 @@ gboolean metadata_write_list(FileData *fd, const gchar *key, const GList *values
                        FileData *sfd = work->data;
                        work = work->next;
 
-                       if (filter_file_class(sfd->extension, FORMAT_CLASS_META)) continue;
+                       if (sfd->format_class == FORMAT_CLASS_META) continue;
 
                        metadata_write_list(sfd, key, values);
                        }
@@ -1092,7 +1092,7 @@ void meta_data_connect_mark_with_keyword(GtkTreeModel *keyword_tree, GtkTreeIter
                path = keyword_tree_get_path(keyword_tree, kw_iter);
                file_data_register_mark_func(mark, meta_data_get_keyword_mark, meta_data_set_keyword_mark, path, (GDestroyNotify)string_list_free);
 
-               mark_str = g_strdup_printf("%d", mark + 1);
+               mark_str = g_strdup_printf("%d", (mark < 9 ? mark : -1) + 1);
                gtk_tree_store_set(GTK_TREE_STORE(keyword_tree), kw_iter, KEYWORD_COLUMN_MARK, mark_str, -1);
                g_free(mark_str);
                }
@@ -1839,8 +1839,11 @@ GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *pa
 
                if (mark_str)
                        {
+                       gint i = (gint)atoi(mark_str);
+                       if (i == 0) i = 10;
+
                        meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree),
-                                                                                       &iter, (gint)atoi(mark_str) - 1);
+                                                                                       &iter, i - 1);
                        }
 
                g_free(name);
index a79dc28..a9d6b03 100644 (file)
@@ -173,6 +173,7 @@ ConfOptions *init_options(ConfOptions *options)
        options->log_window_lines = 1000;
        options->log_window.line_wrap = TRUE;
        options->log_window.paused = FALSE;
+       options->log_window.timer_data = FALSE;
 
        return options;
 }
index ac996dd..26bc003 100644 (file)
@@ -272,6 +272,7 @@ struct _ConfOptions
        struct {
                gboolean paused;
                gboolean line_wrap;
+               gboolean timer_data;
        } log_window;
 };
 
index 024e5ba..acefbdd 100644 (file)
@@ -108,6 +108,9 @@ static PixbufInline inline_pixbuf_data[] = {
        { PIXBUF_INLINE_FOLDER_UP,      folder_up },
        { PIXBUF_INLINE_SCROLLER,       icon_scroller },
        { PIXBUF_INLINE_BROKEN,         icon_broken },
+       { PIXBUF_INLINE_METADATA,       icon_metadata },
+       { PIXBUF_INLINE_UNKNOWN,        icon_unknown },
+       { PIXBUF_INLINE_VIDEO,          icon_video },
        { PIXBUF_INLINE_ICON,           gqview_icon },
        { PIXBUF_INLINE_LOGO,           geeqie_logo },
        { PIXBUF_INLINE_ICON_FLOAT,     icon_float },
@@ -238,7 +241,22 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h,
 
 GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_height)
 {
-       GdkPixbuf *pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); /* FIXME use different images according to FORMAT_CLASS */
+       GdkPixbuf *pixbuf;
+
+       switch (fd->format_class)
+               {
+               case FORMAT_CLASS_UNKNOWN:
+                       pixbuf = pixbuf_inline(PIXBUF_INLINE_UNKNOWN);
+                       break;
+               case FORMAT_CLASS_META:
+                       pixbuf = pixbuf_inline(PIXBUF_INLINE_METADATA);
+                       break;
+               case FORMAT_CLASS_VIDEO:
+                       pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO);
+                       break;
+               default:
+                       pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
+               }
 
        if (requested_width && requested_height)
                {
index 4cc5c6c..2cf1d8c 100644 (file)
@@ -40,6 +40,9 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h, gint old_w, gint old_h, gin
 #define PIXBUF_INLINE_FOLDER_UP                "folder_up"
 #define PIXBUF_INLINE_SCROLLER         "scroller"
 #define PIXBUF_INLINE_BROKEN           "broken"
+#define PIXBUF_INLINE_METADATA         "metadata"
+#define PIXBUF_INLINE_UNKNOWN          "unknown"
+#define PIXBUF_INLINE_VIDEO                    "video"
 #define PIXBUF_INLINE_ICON             "icon"
 #define PIXBUF_INLINE_LOGO             "logo"
 
index 6c29cde..d8f86ce 100644 (file)
@@ -106,7 +106,8 @@ static gchar *format_class_list[] = {
        N_("Unknown"),
        N_("Image"),
        N_("RAW Image"),
-       N_("Metadata")
+       N_("Metadata"),
+       N_("Video")
        };
 
 /* config memory values */
@@ -2243,6 +2244,9 @@ static void config_tab_behavior(GtkWidget *notebook)
        pref_spin_new_int(group, _("Debug level:"), NULL,
                          DEBUG_LEVEL_MIN, DEBUG_LEVEL_MAX, 1, get_debug_level(), &debug_c);
 
+       pref_checkbox_new_int(group, _("Timer data"),
+                       options->log_window.timer_data, &c_options->log_window.timer_data);
+
        pref_spin_new_int(group, _("Log Window max. lines:"), NULL,
                          1, 99999, 1, options->log_window_lines, &options->log_window_lines);
 #endif
index 9ed1342..460a46c 100644 (file)
@@ -336,6 +336,7 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_BOOL(*options, tools_restore_state);
 
        WRITE_NL(); WRITE_UINT(*options, log_window_lines);
+       WRITE_NL(); WRITE_BOOL(*options, log_window.timer_data);
 
        /* File operations Options */
        WRITE_NL(); WRITE_BOOL(*options, file_ops.enable_in_place_rename);
@@ -632,6 +633,7 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_BOOL(*options, tools_restore_state)) continue;
 
                if (READ_INT(*options, log_window_lines)) continue;
+               if (READ_BOOL(*options, log_window.timer_data)) continue;
 
                /* Properties dialog options */
                if (READ_CHAR(*options, properties.tabs_order)) continue;
index d3c9d97..3d43a34 100644 (file)
@@ -337,6 +337,11 @@ gboolean thumb_loader_start(ThumbLoader *tl, FileData *fd)
 
        if (!tl->fd) tl->fd = file_data_ref(fd);
 
+       if (tl->fd->format_class != FORMAT_CLASS_IMAGE && tl->fd->format_class != FORMAT_CLASS_RAWIMAGE)
+               {
+               thumb_loader_set_fallback(tl);
+               return FALSE;
+               }
 
        if (tl->cache_enable)
                {
index 35c3f0a..a6403d2 100644 (file)
@@ -668,7 +668,7 @@ gboolean thumb_loader_std_start(ThumbLoaderStd *tl, FileData *fd)
 
 
        tl->fd = file_data_ref(fd);
-       if (!stat_utf8(fd->path, &st))
+       if (!stat_utf8(fd->path, &st) || (tl->fd->format_class != FORMAT_CLASS_IMAGE && tl->fd->format_class != FORMAT_CLASS_RAWIMAGE))
                {
                thumb_loader_std_set_fallback(tl);
                return FALSE;
index 7f05639..9327e35 100644 (file)
@@ -133,6 +133,7 @@ typedef enum {
        FORMAT_CLASS_IMAGE,
        FORMAT_CLASS_RAWIMAGE,
        FORMAT_CLASS_META,
+       FORMAT_CLASS_VIDEO,
        FILE_FORMAT_CLASSES
 } FileFormatClass;
 
@@ -528,7 +529,7 @@ struct _ImageWindow
        gboolean mouse_wheel_mode;
 };
 
-#define FILEDATA_MARKS_SIZE 6
+#define FILEDATA_MARKS_SIZE 10
 
 struct _FileDataChangeInfo {
        FileDataChangeType type;
@@ -546,6 +547,7 @@ struct _FileData {
        const gchar *name;
        const gchar *extension;
        gchar *extended_extension;
+       FileFormatClass format_class;
        gchar *collate_key_name;
        gchar *collate_key_name_nocase;
        gint64 size;
@@ -638,7 +640,6 @@ struct _LayoutOptions
                gint h;
                gint x;
                gint y;
-               gboolean paused;
        } log_window;
 
        gboolean tools_float;
index b60074c..eea06b2 100644 (file)
@@ -48,7 +48,8 @@
 
 /* between these, the icon width is increased by thumb_max_width / 2 */
 #define THUMB_MIN_ICON_WIDTH 128
-#define THUMB_MAX_ICON_WIDTH 150
+#define THUMB_MAX_ICON_WIDTH 160
+#define THUMB_MIN_ICON_WIDTH_WITH_MARKS TOGGLE_SPACING * FILEDATA_MARKS_SIZE
 
 #define VFICON_MAX_COLUMNS 32
 #define THUMB_BORDER_PADDING 2
@@ -191,11 +192,12 @@ static gint vficon_get_icon_width(ViewFile *vf)
 {
        gint width;
 
-       if (!VFICON(vf)->show_text) return options->thumbnails.max_width;
+       if (!VFICON(vf)->show_text && !vf->marks_enabled ) return options->thumbnails.max_width;
 
        width = options->thumbnails.max_width + options->thumbnails.max_width / 2;
        if (width < THUMB_MIN_ICON_WIDTH) width = THUMB_MIN_ICON_WIDTH;
        if (width > THUMB_MAX_ICON_WIDTH) width = options->thumbnails.max_width;
+       if (vf->marks_enabled && width < THUMB_MIN_ICON_WIDTH_WITH_MARKS) width = THUMB_MIN_ICON_WIDTH_WITH_MARKS;
 
        return width;
 }
index b56a025..c89e6cb 100644 (file)
@@ -854,7 +854,11 @@ static void vflist_setup_iter(ViewFile *vf, GtkTreeStore *store, GtkTreeIter *it
                                        FILE_COLUMN_MARKS + 3, file_data_get_mark(fd, 3),
                                        FILE_COLUMN_MARKS + 4, file_data_get_mark(fd, 4),
                                        FILE_COLUMN_MARKS + 5, file_data_get_mark(fd, 5),
-#if FILEDATA_MARKS_SIZE != 6
+                                       FILE_COLUMN_MARKS + 6, file_data_get_mark(fd, 6),
+                                       FILE_COLUMN_MARKS + 7, file_data_get_mark(fd, 7),
+                                       FILE_COLUMN_MARKS + 8, file_data_get_mark(fd, 8),
+                                       FILE_COLUMN_MARKS + 9, file_data_get_mark(fd, 9),
+#if FILEDATA_MARKS_SIZE != 10
 #error this needs to be updated
 #endif
 #endif