changeset 2870:49bd0d974e88

Merge.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 12 Dec 2018 21:56:30 +0200
parents c79d70e18076 (current diff) c56112a165a4 (diff)
children bf63dbec74b0
files src/Makefile.am src/editors.c
diffstat 79 files changed, 5334 insertions(+), 3091 deletions(-) [+]
line wrap: on
line diff
--- a/.gitignore	Tue Oct 02 22:50:14 2018 +0300
+++ b/.gitignore	Wed Dec 12 21:56:30 2018 +0200
@@ -6,6 +6,9 @@
 *.rej
 *.orig
 
+# GNOME .desktop files
+*.desktop
+
 # /
 /aclocal.m4
 /autom4te.cache
@@ -32,23 +35,10 @@
 /depcomp
 /auxdir
 /stamp-h1
-/geeqie.desktop
 /intltool-extract.in
 /intltool-update.in
 /intltool-merge.in
 
-# /plugins/import/
-/plugins/import/*.desktop
-
-# /plugins/rotate/
-/plugins/rotate/*.desktop
-
-# /plugins/symlink/
-/plugins/symlink/*.desktop
-
-# /plugins/ufraw/
-/plugins/ufraw/*.desktop
-
 # /po/
 /po/Makefile.in.in
 /po/POTFILES
--- a/.mailmap	Tue Oct 02 22:50:14 2018 +0300
+++ b/.mailmap	Wed Dec 12 21:56:30 2018 +0200
@@ -6,6 +6,8 @@
 <mschwendt@fedoraproject.org> <mschwendt@gmail.com>
 <michal@cihar.com> <mcihar@suse.cz>
 <michal@cihar.com> <nijel@debian.org>
-<jrs+git@weitnahbei.de> J. R. Schmid <sixtyfive@users.noreply.github.com>
+<jrs+git@weitnahbei.de> <sixtyfive@users.noreply.github.com>
 Morgan Hardwood <entertheyoni@gmail.com>
 Rezső Páder <rezso@rezso.net>
+Olaf Seibert <rhialto@falu.nl> <>
+<niko@nava.de> <nikoss@users.noreply.github.com>
--- a/README.md	Tue Oct 02 22:50:14 2018 +0300
+++ b/README.md	Wed Dec 12 21:56:30 2018 +0200
@@ -100,17 +100,26 @@
 
 ## Downloading
 
-Geeqie is available as a package with some distributions.
+Geeqie is available as a package with some distributions, however Geeqie is stable and you may compile the latest version from sources.
+
+There are two scripts which will download and compile the sources for you.
 
-However Geeqie is stable, and you may download the latest version (if you have installed git) from here:
+The first script will install Geeqie to a defined location, and will run under any system. However, it is left to you to make sure dependencies are fulfilled.
+To get the script, from the command line type:<br/><br/>
+`wget https://raw.githubusercontent.com/pixlsus/Scripts/master/build-geeqie`
+
+The second script will run only on Debian-based system, but will fulfil all dependencies and also give you the opportunity to include additional pixbuf loaders and other useful programs.
+To get the script, from the command line type:<br/><br/>
+`wget https://raw.githubusercontent.com/BestImageViewer/geeqie/master/web/geeqie-install-debian.sh`
+
+
+If you wish to compile the sources yourself you may download the latest version (if you have installed git) from here:
 
 Either: `git clone git://www.geeqie.org/geeqie.git`
 
 Or: `git clone http://www.geeqie.org/git/geeqie.git`
 
-For Ubuntu and other Debian-based systems, [this script](http://www.geeqie.org/web/geeqie-install-debian.sh) will download Geeqie sources, all dependencies, and compile and install Geeqie. You may also select which optional libraries to install.
-
-## Installation
+## Manual Installation
 
 List compile options: `./autogen.sh --help`
 
@@ -238,6 +247,19 @@
         and copy to the location of the Geeqie ancilliary files, which is usually:
         /usr/local/lib/geeqie/
 
+    libimage-exiftool-perl
+        For the jpeg extraction plugin
+
+    liblcms2-utils
+        For the command-line tool jpgicc, used by the jpeg extraction plugin
+
+     ImageMagick
+     exiftran
+     gphoto2
+     ufraw
+     exiv2
+        Additional command-line tools for various operations
+
 ### Code hackers:
 
 If you plan on making any major changes to the code that will be offered for
--- a/autogen.sh	Tue Oct 02 22:50:14 2018 +0300
+++ b/autogen.sh	Wed Dec 12 21:56:30 2018 +0200
@@ -6,7 +6,7 @@
 srcdir=`dirname $0`
 test -z "$srcdir" && srcdir=.
 
-(test -f $srcdir/configure.in \
+(test -f $srcdir/configure.ac\
   && test -f $srcdir/src/main.c \
   && test -f $srcdir/src/main.h) || {
     echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
@@ -24,8 +24,8 @@
   DIE=1
 }
 
-(grep "^AM_GLIB_GNU_GETTEXT" $srcdir/configure.in >/dev/null) && {
-  (grep "sed.*POTFILES" $srcdir/configure.in) >/dev/null || \
+(grep "^AM_GLIB_GNU_GETTEXT" $srcdir/configure.ac >/dev/null) && {
+  (grep "sed.*POTFILES" $srcdir/configure.ac) >/dev/null || \
   (glib-gettextize --version) < /dev/null > /dev/null 2>&1 || {
     echo
     echo "**Error**: You must have \`glib-gettextize' installed."
@@ -74,13 +74,13 @@
   am_opt=--include-deps;;
 esac
 
-auxdir="`sed -ne 's/^[ \t]*A._CONFIG_AUX_DIR *( *\([^ )]*\).*/\1/p' $srcdir/configure.in`"
+auxdir="`sed -ne 's/^[ \t]*A._CONFIG_AUX_DIR *( *\([^ )]*\).*/\1/p' $srcdir/configure.ac`"
 if test -n "$auxdir"; then
   if test ! -d "$srcdir/$auxdir"; then
     mkdir -p "$srcdir/$auxdir"
   fi                                                                            fi
 
-for coin in `find $srcdir -name configure.in -print`
+for coin in `find $srcdir -name configure.ac -print`
 do 
   dr=`dirname $coin`
   if test -f $dr/NO-AUTO-GEN; then
@@ -97,9 +97,9 @@
 	##  echo "**Warning**: No such directory \`$k'.  Ignored."
         fi
       done
-      if grep "^AM_GLIB_GNU_GETTEXT" configure.in >/dev/null; then
-	if grep "sed.*POTFILES" configure.in >/dev/null; then
-	  : do nothing -- we still have an old unmodified configure.in
+      if grep "^AM_GLIB_GNU_GETTEXT" configure.ac >/dev/null; then
+	if grep "sed.*POTFILES" configure.ac >/dev/null; then
+	  : do nothing -- we still have an old unmodified configure.ac
 	else
 	  echo "Creating $dr/aclocal.m4 ..."
 	  test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
@@ -117,7 +117,7 @@
       fi
       echo "Running aclocal $aclocalinclude ..."
       aclocal $aclocalinclude
-      if grep "^AC_CONFIG_HEADER" configure.in >/dev/null; then
+      if grep "^AC_CONFIG_HEADER" configure.ac >/dev/null; then
 	echo "Running autoheader..."
 	autoheader
       fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configure.ac	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,690 @@
+dnl Process this file with autoconf to produce a configure script.  -*- Autoconf
+ -*-
+
+dnl This file is a part of Geeqie project (http://www.geeqie.org/).
+dnl Copyright (C) 2008 - 2018 The Geeqie Team
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+
+AC_PREREQ(2.57)
+AC_INIT([geeqie], m4_esyscmd_s(git rev-parse --quiet --verify --short HEAD), [geeqie@freelists.org], [], [http://www.geeqie.org/])
+
+# Add -Werror to the default CFLAGS
+CFLAGS+=" -Werror -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=return-type"
+
+# Check for rightly dirs
+AC_CONFIG_SRCDIR([src/main.c])
+
+AC_CONFIG_AUX_DIR(auxdir)
+# Require Automake 1.14 for %reldir% support
+AM_INIT_AUTOMAKE([1.14.1 subdir-objects foreign dist-xz no-dist-gzip])
+
+AC_CONFIG_HEADER([config.h])
+
+# Only for developers
+AM_MAINTAINER_MODE
+
+# Silent build for automake >= 1.11
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_ARG_ENABLE(developer, [
+Development options:
+AC_HELP_STRING([--enable-developer], [turn on developers mode [default=no]])],
+[
+  __IS_DEVELOPER=yes
+],
+[
+if test "x${enable_developer}" != "xyes"
+then
+  __IS_DEVELOPER=no
+else
+  __IS_DEVELOPER=yes
+fi
+])
+
+DX_HTML_FEATURE(ON)
+DX_CHM_FEATURE(OFF)
+DX_CHI_FEATURE(OFF)
+DX_MAN_FEATURE(OFF)
+DX_RTF_FEATURE(OFF)
+DX_XML_FEATURE(OFF)
+DX_PDF_FEATURE(OFF)
+DX_PS_FEATURE(OFF)
+
+DX_INIT_DOXYGEN($PACKAGE_NAME, doxygen.conf, doc/doxygen)
+
+#  Debug support
+# ----------------------------------------------------------------------
+
+dnl Debugging option
+dnl FIXME: official release convert default to 'no'
+dnl
+
+AC_ARG_ENABLE([debug-flags], [
+Development options:
+AC_HELP_STRING([--enable-debug-flags], [use compiler flags for debugging [default=no]])], [],
+[
+if test "x${enable_developer}" != "xyes"
+then
+  enable_debug_flags="no"
+else
+  enable_debug_flags="yes"
+fi
+])
+
+AC_ARG_ENABLE([debug-log], [
+Development options:
+AC_HELP_STRING([--enable-debug-log], [enable debugging messages [default=yes]])], [], [enable_debug_log="yes"])
+
+if test "x${enable_debug_flags}" != "xno"
+then
+  if test "x${enable_developer}" = "xyes"
+  then
+    CXXFLAGS="${CXXFLAGS} -Wall"
+    CFLAGS="${CFLAGS} -Wstrict-prototypes -Wall"
+  fi
+  __COMMONFLAGS="-g -O0 -Wextra -Wunused-value -Wunused-variable -Wunused-function -Wunused-label -Wcomment -Wmissing-braces -Wparentheses -Wreturn-type -Wswitch -Wstrict-aliasing -Wno-unused-parameter -Wformat -Wformat-security -DGQ_DEBUG_PATH_UTF8=1"
+  CXXFLAGS="${CXXFLAGS} ${__COMMONFLAGS}"
+  CFLAGS="${CFLAGS} ${__COMMONFLAGS} -Wimplicit-int -Werror-implicit-function-declaration"
+  __IS_DEBUG_FLAGS=yes
+else
+  __IS_DEBUG_FLAGS=no
+fi
+
+if test "x${enable_debug_log}" != "xno"
+then
+  AC_DEFINE(DEBUG,1,[Defined if Geeqie is compiled with debugging messages support])
+  __IS_DEBUG_LOG=yes
+else
+  __IS_DEBUG_LOG=no
+fi
+
+AM_CONDITIONAL(DEBUG, test x$enable_debug_flags = xyes)
+
+AC_ARG_ENABLE(deprecated, [
+AC_HELP_STRING([--enable-deprecated], [turn off checking of deprecated functions [default=yes]])], [],
+[
+if test "x${enable_developer}" != "xyes"
+then
+  enable_deprecated="no"
+else
+  enable_deprecated="yes"
+fi
+])
+
+if test "x${enable_deprecated}" != "xno"
+then
+  CXXFLAGS="${CXXFLAGS} -DGTK_DISABLE_DEPRECATED=1 -DGDK_DISABLE_DEPRECATED=1 -DGDK_PIXBUF_DISABLE_DEPRECATED=1 -DG_DISABLE_DEPRECATED=1"
+  CFLAGS="${CFLAGS} -DGTK_DISABLE_DEPRECATED=1 -DGDK_DISABLE_DEPRECATED=1 -DGDK_PIXBUF_DISABLE_DEPRECATED=1 -DG_DISABLE_DEPRECATED=1"
+  __IS_DEPRECATED=yes
+else
+  __IS_DEPRECATED=no
+fi
+
+
+AC_ISC_POSIX
+AC_PROG_CC
+AC_PROG_CC_C99
+AC_PROG_CXX
+AC_STDC_HEADERS
+AC_ARG_PROGRAM
+AC_SYS_LARGEFILE
+IT_PROG_INTLTOOL([0.35.0])
+
+
+dnl checks for functions
+AC_CHECK_FUNCS(strverscmp access fsync fflush)
+
+
+# Check target architecture
+
+# Check for Win32
+AC_MSG_CHECKING([for some Win32 platform])
+case "$target_os" in
+  mingw* | cygwin*)
+    platform_win32=yes
+    AC_DEFINE(PLATFORM_WIN32, 1, [Build on win32 OS])
+    ;;
+  *)
+    platform_win32=no
+    ;;
+esac
+AC_MSG_RESULT([$platform_win32])
+AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")
+
+AC_MSG_CHECKING([for native Win32])
+case "$target_os" in
+  mingw*)
+    os_win32=yes
+    AC_DEFINE(OS_WIN32, 1, [Build on native win32 OS])
+    os_unix=no
+    PATHSEP=';'
+    ;;
+  *)
+    os_win32=no
+    os_unix=yes
+    PATHSEP=':'
+    ;;
+esac
+AC_MSG_RESULT([$os_win32])
+AC_SUBST(PATHSEP)
+AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
+AM_CONDITIONAL(OS_UNIX, test "$os_unix" = "yes")
+
+if test "$os_win32" = "yes"; then
+  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
+  AC_CHECK_TOOL(WINDRES, windres, :)
+else
+  WINDRES=":"
+fi
+
+AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
+AM_CONDITIONAL(HAVE_WINDRES, test "x$WINDRES" != "x:")
+AC_SUBST(WINDRES)
+
+dnl reasonable guesses for where stuff is installed
+if test "x$prefix" = "xNONE"; then
+  prefix="/usr/local"
+else
+  prefix=$prefix
+fi
+
+AM_PATH_GLIB_2_0(2.24.0,,AC_MSG_ERROR(GLIB >= 2.24.0 not installed.))
+AC_ARG_ENABLE([gtk3], AC_HELP_STRING([--disable-gtk3], [use gtk2 instead of gtk3]),[gtk3="${enableval}"], [gtk3=m4_ifdef([AM_PATH_GTK_3_0], [auto], [no])])
+
+if test x$gtk3 = xyes; then
+    AC_MSG_WARN("Gtk3 enabled")
+    m4_ifdef([AM_PATH_GTK_3_0], [AM_PATH_GTK_3_0(3.0.0,,AC_MSG_ERROR(GTK+ >= 3.0.0 not installed.))])
+else
+    if test x$gtk3 != xno; then
+       AC_MSG_WARN("Gtk3 is preferred...")
+       m4_ifdef([AM_PATH_GTK_3_0], [AM_PATH_GTK_3_0(3.0.0,,[gtk3=no])])
+    fi
+fi
+
+if test x$gtk3 = xno; then
+    m4_ifdef([AM_PATH_GTK_2_0], [AM_PATH_GTK_2_0(2.20.0,,AC_MSG_ERROR(GTK+ >= 2.20.0 not installed.))])
+    true
+fi
+
+threads="auto"
+AC_ARG_ENABLE([threads],
+  AC_HELP_STRING([--disable-threads], [disable thread support]), [threads="${enableval}"])
+
+have_gthread="no"
+if test "x${threads}" != "xno" ; then
+  PKG_CHECK_MODULES(GTHREAD, [gthread-2.0], have_gthread="yes", [AC_MSG_WARN("No thread support in glib")])
+fi
+
+if test "x$have_gthread" != "xno"; then
+        AC_DEFINE(HAVE_GTHREAD, 1, Define if you have gthread library)
+        GLIB_CFLAGS="$GTHREAD_CFLAGS"
+        GLIB_LIBS="$GTHREAD_LIBS"
+fi
+
+
+AC_PATH_PROGS(GDK_PIXBUF_CSOURCE, "gdk-pixbuf-csource")
+AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
+
+AC_ARG_WITH(readmedir, [  --with-readmedir=DIR    install path for readme files],
+            readmedir=$withval, readmedir="$prefix/share/doc/geeqie-$VERSION")
+AC_ARG_WITH(htmldir, [  --with-htmldir=DIR      install path for html files],
+            htmldir=$withval, htmldir="$readmedir/html")
+
+AC_DEFINE_UNQUOTED(GQ_HELPDIR, "$readmedir", [Location of documentation files])
+AC_DEFINE_UNQUOTED(GQ_HTMLDIR, "$htmldir", [Location of html documentation])
+
+AC_PATH_PROG(GNOME_DOC_TOOL, gnome-doc-tool)
+
+AC_SUBST(readmedir)
+AC_SUBST(htmldir)
+
+eval "eval appdir=${datadir}/${PACKAGE}"
+AC_DEFINE_UNQUOTED([GQ_APP_DIR], "$appdir", [Location of application data])
+AC_SUBST(appdir)
+
+eval "eval gq_bindir=${prefix}/lib/${PACKAGE}"
+AC_DEFINE_UNQUOTED([GQ_BIN_DIR], "$gq_bindir", [Location of helper scripts and executables])
+AC_SUBST(gq_bindir)
+
+#  LIRC support
+# ----------------------------------------------------------------------
+
+dnl Check for LIRC client support
+AC_MSG_CHECKING(if LIRC support is enabled)
+lirc=no
+AC_ARG_ENABLE([lirc],
+  AC_HELP_STRING([--disable-lirc], [disable lirc support (auto)]),
+[
+if test "x${enableval}" = "xyes" -a "x$GCC" = "xyes"; then
+  AC_MSG_RESULT(yes)
+  lirc=yes
+else
+  AC_MSG_RESULT(no)
+  lirc=no
+fi], AC_MSG_RESULT(no))
+
+
+AC_ARG_WITH(lirc-prefix,
+[  --with-lirc-prefix=PATH Prefix where LIRC is installed],
+[
+for dir in `echo "$withval" | tr : ' '`; do
+  if test -d $dir/lib; then CXXFLAGS="$CXXFLAGS -L$dir/lib"; fi
+  if test -d $dir/include; then CXXFLAGS="$CXXFLAGS -I$dir/include"; fi
+  done
+])
+
+HAVE_LIRC=no
+if test "x${lirc}" != "xno" ; then
+  AC_CHECK_HEADER(lirc/lirc_client.h,
+    [AC_CHECK_LIB(lirc_client,lirc_init,[HAVE_LIRC=yes;LIBS=-llirc_client $LIBS;AC_DEFINE([HAVE_LIRC],[],[Define to 1 if LIRC must be used])],,)],)
+fi
+AM_CONDITIONAL(HAVE_LIRC, [test "x$HAVE_LIRC" = xyes])
+
+
+#  LCMS support
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([lcms],
+  AC_HELP_STRING([--disable-lcms], [disable lcms support]),
+    [liblcms=$enableval], [liblcms=auto])
+
+if test "x${liblcms}" != "xno"; then
+  PKG_CHECK_MODULES(LCMS, [lcms2 >= 2.0],
+    [
+      HAVE_LCMS=yes
+      AC_DEFINE(HAVE_LCMS, 1, [define to enable use of color profiles with lcms])
+      AC_DEFINE(HAVE_LCMS2, 1, [lcms2 is used])
+    ],
+    [
+    PKG_CHECK_MODULES(LCMS, [lcms >= 1.14],
+      [
+        HAVE_LCMS=yes
+        AC_DEFINE(HAVE_LCMS, 1, [define to enable use of color profiles with lcms])
+      ],
+      [
+        HAVE_LCMS=no
+        AC_MSG_WARN([$LCMS_PKG_ERRORS])
+      ])
+    ])
+else
+  HAVE_LCMS=disabled
+fi
+
+AM_CONDITIONAL(HAVE_LCMS, [test "x$HAVE_LCMS" = xyes])
+AC_SUBST(LCMS_CFLAGS)
+AC_SUBST(LCMS_LIBS)
+
+#  libjpeg support
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([jpeg],
+  AC_HELP_STRING([--disable-jpeg], [disable direct jpeg support]),
+    [libjpeg=$enableval], [libjpeg=auto])
+
+if test "x${libjpeg}" != "xno"; then
+  AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
+      HAVE_JPEG=yes
+      JPEG_LIBS=-ljpeg
+      AC_DEFINE(HAVE_JPEG, 1, [define to enable use of custom jpeg loader]),
+      HAVE_JPEG=no)
+else
+  HAVE_JPEG=disabled
+fi
+
+AM_CONDITIONAL(HAVE_JPEG, [test "x$HAVE_JPEG" = xyes])
+AC_SUBST(JPEG_CFLAGS)
+AC_SUBST(JPEG_LIBS)
+
+
+#  libtiff support
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([tiff],
+  AC_HELP_STRING([--disable-tiff], [disable direct tiff support]),
+    [libtiff=$enableval], [libtiff=auto])
+
+if test "x${libtiff}" != "xno"; then
+  AC_CHECK_LIB(tiff, TIFFClientOpen,
+      HAVE_TIFF=yes
+      TIFF_LIBS=-ltiff
+      AC_DEFINE(HAVE_TIFF, 1, [define to enable use of custom tiff loader]),
+      HAVE_TIFF=no)
+else
+  HAVE_TIFF=disabled
+fi
+
+AM_CONDITIONAL(HAVE_TIFF, [test "x$HAVE_TIFF" = xyes])
+AC_SUBST(TIFF_CFLAGS)
+AC_SUBST(TIFF_LIBS)
+
+#  libffmpegthumbnailer support
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([ffmpegthumbnailer],
+  AC_HELP_STRING([--disable-ffmpegthumbnailer], [disable ffmpegthumbnailer support for generating thumbnails of video files]),
+    [ffmpegthumbnailer=$enableval], [ffmpegthumbnailer=auto])
+
+if test "x${ffmpegthumbnailer}" != "xno"; then
+  PKG_CHECK_MODULES(FFMPEGTHUMBNAILER, [libffmpegthumbnailer >= 2.1.0],
+    [
+      HAVE_FFMPEGTHUMBNAILER=yes
+      AC_DEFINE(HAVE_FFMPEGTHUMBNAILER, 1, [define to enable ffmpegthumbnailer support])
+      AC_CHECK_MEMBER([video_thumbnailer.prefer_embedded_metadata], [AC_DEFINE(HAVE_FFMPEGTHUMBNAILER_METADATA, 1, [define if ffmpegthumbnailer supports embedded metadata])], [], [[#include <libffmpegthumbnailer/videothumbnailerc.h>]])
+      AC_CHECK_MEMBER([image_data.image_data_width], [AC_DEFINE(HAVE_FFMPEGTHUMBNAILER_RGB, 1, [define if ffmpegthumbnailer supports raw RGB output])], [], [[#include <libffmpegthumbnailer/videothumbnailerc.h>]])
+      AC_CHECK_LIB([ffmpegthumbnailer], [video_thumbnailer_set_size], [AC_DEFINE(HAVE_FFMPEGTHUMBNAILER_WH, 1, [define if ffmpegthumbnailer supports specifying size by width/height])])
+    ],
+    [
+      HAVE_FFMPEGTHUMBNAILER=no
+    ])
+else
+  HAVE_FFMPEGTHUMBNAILER=disabled
+fi
+
+AM_CONDITIONAL(HAVE_FFMPEGTHUMBNAILER, [test "x$HAVE_FFMPEGTHUMBNAILER" = xyes])
+AC_SUBST(FFMPEGTHUMBNAILER_CFLAGS)
+AC_SUBST(FFMPEGTHUMBNAILER_LIBS)
+
+#  Exiv2 support
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([exiv2],
+  AC_HELP_STRING([--disable-exiv2], [disable exiv2 support]),
+    [libexiv2=$enableval], [libexiv2=auto])
+
+if test "x${libexiv2}" != "xno"; then
+  PKG_CHECK_MODULES(EXIV2, [exiv2 >= 0.11],
+    [
+      HAVE_EXIV2=yes
+      AC_DEFINE(HAVE_EXIV2, 1, [define to enable exiv2 support])
+    ],
+    [
+      HAVE_EXIV2=no
+      AC_MSG_WARN([$EXIV2_PKG_ERRORS])
+    ])
+else
+  HAVE_EXIV2=disabled
+fi
+
+AM_CONDITIONAL(HAVE_EXIV2, [test "x$HAVE_EXIV2" = xyes])
+AC_SUBST(EXIV2_CFLAGS)
+AC_SUBST(EXIV2_LIBS)
+
+
+#  Gettext support
+# ----------------------------------------------------------------------
+
+dnl Set of available languages
+ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`"
+AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS'])
+
+GETTEXT_PACKAGE=$PACKAGE
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["${GETTEXT_PACKAGE}"],[Name of gettext file])
+AM_GLIB_GNU_GETTEXT
+AM_GLIB_DEFINE_LOCALEDIR(GQ_LOCALEDIR)
+
+AC_SUBST(CFLAGS)
+AC_SUBST(CXXFLAGS)
+AC_SUBST(CPPFLAGS)
+AC_SUBST(LDFLAGS)
+
+
+#  clutter and champlain support
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([map],
+  AC_HELP_STRING([--disable-map], [disable map support]),
+    [libgps=$enableval], [libgps=auto])
+
+AC_ARG_ENABLE([gpu-accel],
+  AC_HELP_STRING([--disable-gpu-accel], [disable GPU acceleration support - experimental]),
+    [libclutter=$enableval], [libclutter=auto])
+
+if test "x${libclutter}" != "xno" -a "x${gtk3}" != "xno"; then
+  PKG_CHECK_MODULES(CLUTTER, [clutter-1.0 >= 1.0],
+    [
+      PKG_CHECK_MODULES(CLUTTER_GTK, [clutter-gtk-1.0 >= 1.0],
+        [
+          HAVE_CLUTTER=yes
+          AC_DEFINE(HAVE_CLUTTER, 1, [define to enable use of clutter library])
+        ],
+        [
+          HAVE_CLUTTER=no
+          AC_MSG_WARN([$CLUTTER_GTK_PKG_ERRORS])
+        ])
+    ],
+    [
+      HAVE_CLUTTER=no
+      AC_MSG_WARN([$CLUTTER_PKG_ERRORS])
+    ])
+else
+  HAVE_CLUTTER=disabled
+fi
+
+AC_SUBST(CLUTTER_CFLAGS)
+AC_SUBST(CLUTTER_LIBS)
+AC_SUBST(CLUTTER_GTK_CFLAGS)
+AC_SUBST(CLUTTER_GTK_LIBS)
+
+
+#  Libchamplain support - used for map facility
+# ----------------------------------------------------------------------
+
+if test "x${libgps}" != "xno" -a "x${HAVE_CLUTTER}" = "xyes"; then
+    if test "x${gtk3}" != "xno"; then
+      PKG_CHECK_MODULES(LIBCHAMPLAIN, [champlain-0.12 >= 0.12],
+        [
+          HAVE_LIBCHAMPLAIN=yes
+          AC_DEFINE(HAVE_LIBCHAMPLAIN, 1, [define to enable use of maps])
+        ],
+        [
+          HAVE_LIBCHAMPLAIN=no
+          AC_MSG_WARN([$LIBCHAMPLAIN_PKG_ERRORS])
+        ])
+    else
+      HAVE_LIBCHAMPLAIN=disabled
+    fi
+else
+  HAVE_LIBCHAMPLAIN=disabled
+fi
+
+if test "x${libgps}" != "xno" -a "x${HAVE_LIBCHAMPLAIN}" = "xyes" ; then
+  PKG_CHECK_MODULES(LIBCHAMPLAIN_GTK, [champlain-gtk-0.12 >= 0.12],
+    [
+      HAVE_LIBCHAMPLAIN_GTK=yes
+      AC_DEFINE(HAVE_LIBCHAMPLAIN_GTK, 1, [define to enable use of maps])
+    ],
+    [
+      HAVE_LIBCHAMPLAIN_GTK=no
+      AC_MSG_WARN([$LIBCHAMPLAIN_GTK_PKG_ERRORS])
+    ])
+else
+  HAVE_LIBCHAMPLAIN_GTK=disabled
+fi
+
+AM_CONDITIONAL(HAVE_LIBCHAMPLAIN_GTK, [test "x$HAVE_LIBCHAMPLAIN_GTK" = xyes])
+AC_SUBST(LIBCHAMPLAIN_GTK_CFLAGS)
+AC_SUBST(LIBCHAMPLAIN_GTK_LIBS)
+
+#  Lua support
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([lua],
+  AC_HELP_STRING([--disable-lua], [disable lua support]),
+    [liblua=$enableval], [liblua=auto])
+
+if test "x${liblua}" != "xno"; then
+  PKG_CHECK_MODULES(LUA, lua5.1 >= 5.1,
+    [
+      HAVE_LUA=yes
+      AC_DEFINE(HAVE_LUA, 1, [define to enable lua support])
+    ],
+    [
+      HAVE_LUA=no
+      AC_MSG_WARN([$LUA_PKG_ERRORS])
+    ])
+else
+  HAVE_LUA=disabled
+fi
+
+AM_CONDITIONAL(HAVE_LUA, [test "x$HAVE_LUA" = xyes])
+AC_SUBST(LUA_CFLAGS)
+AC_SUBST(LUA_LIBS)
+
+#  Pdf support
+# ----------------------------------------------------------------------
+
+if test "x${gtk3}" != "xno"; then
+    AC_ARG_ENABLE([pdf],
+      AC_HELP_STRING([--disable-pdf], [disable pdf support]),
+        [libpdf=$enableval], [libpdf=auto])
+
+    if test "x${libpdf}" != "xno"; then
+      PKG_CHECK_MODULES(PDF, poppler-glib >= 0.62,
+        [
+          HAVE_PDF=yes
+          AC_DEFINE(HAVE_PDF, 1, [define to enable pdf support])
+        ],
+        [
+          HAVE_PDF=no
+          AC_MSG_WARN([$PDF_PKG_ERRORS])
+        ])
+    else
+        HAVE_PDF=disabled
+    fi
+else
+    HAVE_PDF=disabled
+fi
+
+AM_CONDITIONAL(HAVE_PDF, [test "x$HAVE_PDF" = xyes])
+AC_SUBST(PDF_CFLAGS)
+AC_SUBST(PDF_LIBS)
+
+#  Markdown support
+# ----------------------------------------------------------------------
+
+AM_CONDITIONAL(HAVE_MARKDOWN, [ "$(command -v markdown)" ])
+
+# ----------------------------------------------------------------------
+
+AH_TOP([
+/** \file
+ * \short autogenerated definition by autoheader.
+ * \author Bruclik
+ */
+
+/*
+ *  This file is a part of Geeqie project (http://www.geeqie.org/).
+ *  Copyright (C) 2008 - 2016 The Geeqie Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ */
+
+#ifndef _INCLUDE_CONFIG_H
+#define _INCLUDE_CONFIG_H
+])
+
+AH_BOTTOM([#endif])
+
+dnl Write the output
+dnl
+
+AC_CONFIG_FILES([
+    Makefile
+    src/Makefile
+    src/icons/Makefile
+    src/icons/svg/Makefile
+    po/Makefile.in
+    doc/Makefile
+    plugins/Makefile
+    plugins/symlink/Makefile
+    plugins/rotate/Makefile
+    plugins/ufraw/Makefile
+    plugins/import/Makefile
+    plugins/geocode-parameters/Makefile
+    plugins/export-jpeg/Makefile
+    plugins/tethered-photography/Makefile
+    plugins/camera-import/Makefile
+    plugins/image-crop/Makefile
+    geeqie.spec
+])
+
+AC_OUTPUT
+dnl Print the results
+dnl
+
+cat > config.report << END
+
+     Config results:
+    -=-=-=-=-=-=-=-=-
+
+Package:
+  Name:          $PACKAGE_NAME
+  Version:       $PACKAGE_VERSION
+
+Architecture:
+  UNIX:          $os_unix
+  Win32:         $platform_win32 (native: $os_win32)
+
+Flags:
+  Geeqie:        $GQ_CFLAGS
+  DEFS:          $DEFS
+  CPPFLAGS:      $__CPPFLAGS
+  CFLAGS:        $CFLAGS
+  CXXFLAGS:      $CXXFLAGS
+  Gtk:           $GTK_CFLAGS
+  Glib:          $GLIB_CFLAGS
+  Thread:        $GTHREAD_LIBS
+  Others:	 $JPEG_LIBS $TIFF_LIBS $LCMS_LIBS $EXIV2_LIBS $CLUTTER_LIBS $CLUTTER_GTK_LIBS $LIBCHAMPLAIN_LIBS $LIBCHAMPLAIN_GTK_LIBS $LUA_LIBS
+
+Localization:
+  NLS support:   $USE_NLS
+  LINGUAS:       $LINGUAS
+
+Settings:
+  Developer:     $__IS_DEVELOPER
+  Debug flags:   $__IS_DEBUG_FLAGS
+  Debug log:     $__IS_DEBUG_LOG
+  Deprecated:    $__IS_DEPRECATED
+
+Support:
+  LCMS:          $HAVE_LCMS
+  Exiv2:	 $HAVE_EXIV2
+  Lirc:          $HAVE_LIRC
+  Clutter:       $HAVE_CLUTTER
+  Libchamplain:		$HAVE_LIBCHAMPLAIN
+  Libchamplain-gtk:	$HAVE_LIBCHAMPLAIN_GTK
+  Lua:	         $HAVE_LUA
+  FFmpegthumbnailer:	$HAVE_FFMPEGTHUMBNAILER
+  Pdf:	         $HAVE_PDF
+
+Documentation:
+  Doxygen:       $DX_DOXYGEN
+  doc-tool:      $GNOME_DOC_TOOL
+
+END
+
+cat config.report
+cat <<EOF
+
+  Now you can type "make" to build Geeqie
+  (or you take blue pill and the story ends :)
+
+EOF
--- a/doc/docbook/GuideOptionsBehavior.xml	Tue Oct 02 22:50:14 2018 +0300
+++ b/doc/docbook/GuideOptionsBehavior.xml	Wed Dec 12 21:56:30 2018 +0200
@@ -7,7 +7,7 @@
     <variablelist>
       <varlistentry>
         <term>
-          <guilabel>Confirm file delete</guilabel>
+          <guilabel>Confirm permanent file delete</guilabel>
         </term>
         <listitem>
           <para>Prompts for confirmation before deleting files.</para>
@@ -15,6 +15,14 @@
       </varlistentry>
       <varlistentry>
         <term>
+          <guilabel>Confirm move file to Trash</guilabel>
+        </term>
+        <listitem>
+          <para>Prompts for confirmation before moving files to the trash bin.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
           <guilabel>
             Enable
             <keycap>Delete key</keycap>
@@ -44,7 +52,7 @@
       </varlistentry>
       <varlistentry>
         <term>
-          <guilabel>Safe Delete</guilabel>
+          <guilabel>Use Geeqie trash location</guilabel>
         </term>
         <listitem>
           <para>Moves deleted files to a temporary folder, for easy retrieval of deleted files. Files in the temporary folder are retained until the maximum size is reached, at which point deleting additional files will result in the removal of the oldest files to reclaim the space needed for the new files.</para>
@@ -62,6 +70,14 @@
       </varlistentry>
       <varlistentry>
         <term>
+          <guilabel>Use system Trash bin</guilabel>
+        </term>
+        <listitem>
+          <para>Moves deleted files to the system-defined trash bin.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
           <guilabel>Folder</guilabel>
         </term>
         <listitem>
--- a/doc/docbook/GuidePluginsConfig.xml	Tue Oct 02 22:50:14 2018 +0300
+++ b/doc/docbook/GuidePluginsConfig.xml	Wed Dec 12 21:56:30 2018 +0200
@@ -29,6 +29,14 @@
     <variablelist spacing="compact">
       <varlistentry>
         <term>
+          <guilabel>Disabled</guilabel>
+        </term>
+        <listitem>
+          <para>If the checkbox is ticked, the plugin will not be displayed in Geeqie menus.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
           <guilabel>Name</guilabel>
         </term>
         <listitem>
--- a/doc/docbook/GuideReferenceKeyboardShortcuts.xml	Tue Oct 02 22:50:14 2018 +0300
+++ b/doc/docbook/GuideReferenceKeyboardShortcuts.xml	Wed Dec 12 21:56:30 2018 +0200
@@ -424,7 +424,16 @@
               </code>
             </entry>
             <entry />
-            <entry>Delete selected images.</entry>
+            <entry>Move selected images to trash bin.</entry>
+          </row>
+          <row>
+            <entry>
+              <code>
+                Shift + Delete
+              </code>
+            </entry>
+            <entry />
+            <entry>Permanently delete selected images.</entry>
           </row>
           <row>
             <entry>
--- a/plugins/Makefile.am	Tue Oct 02 22:50:14 2018 +0300
+++ b/plugins/Makefile.am	Wed Dec 12 21:56:30 2018 +0200
@@ -1,7 +1,9 @@
-#FIXME enable or disable individual plugins from configure
 
-SUBDIRS = rotate symlink ufraw import geocode-parameters
+SUBDIRS = rotate symlink ufraw import geocode-parameters export-jpeg tethered-photography camera-import image-crop
 qq_desktoptemplatedir = $(appdir)
-qq_desktoptemplate_DATA = template.desktop
+qq_desktoptemplate_in_files = template.desktop.in
+qq_desktoptemplate_DATA = $(qq_desktoptemplate_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
 
-EXTRA_DIST = $(qq_desktoptemplate_DATA)
+EXTRA_DIST = $(qq_desktoptemplate_in_files)
+CLEANFILES = $(qq_desktoptemplate_DATA)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/camera-import/Makefile.am	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,9 @@
+dist_gq_bin_SCRIPTS = geeqie-camera-import geeqie-camera-import-hook-script
+
+gq_desktopdir = $(appdir)/applications
+gq_desktop_in_files = camera-import.desktop.in
+gq_desktop_DATA = $(gq_desktop_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
+
+EXTRA_DIST = $(gq_desktop_in_files)
+CLEANFILES = $(gq_desktop_DATA)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/camera-import/camera-import.desktop.in	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,19 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+_Name=Camera import
+
+# Requires gphoto2
+# The gphoto2 file $HOME/.gphoto2/settings can
+# be used to set auto-rename on download
+
+Exec=geeqie-camera-import
+
+# Desktop files that are usable only in Geeqie should be marked like this:
+Categories=X-Geeqie;
+OnlyShowIn=X-Geeqie;
+
+# It can be made verbose
+#X-Geeqie-Verbose=true
+
+Icon=geeqie
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/camera-import/geeqie-camera-import	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,159 @@
+#!/bin/bash
+
+# Import all images from camera
+# Requires gphoto2
+
+function finish 
+{
+	if [ -f /tmp/geeqie-camera-import-files ]
+	then
+		rm /tmp/geeqie-camera-import-files
+	fi
+
+	if [ -p $zen_pipe ]
+	then
+		rm $zen_pipe
+	fi
+
+	if [ "$gphoto2_pid" != "" ]
+	then
+		ps -p $gphoto2_pid > /dev/null
+		if [ $? -eq 0 ]
+		then
+			kill $gphoto2_pid
+		fi
+	fi
+
+	if [ "$zen_pid" != "" ]
+	then
+		ps -p $zen_pid > /dev/null
+		if [ $? -eq 0 ]
+		then
+			kill $zen_pid
+		fi
+	fi
+}
+trap finish EXIT
+
+if ! [ -x "$(command -v gphoto2)" ]
+then
+	zenity --title="Geeqie camera import" --info --width=200 --text="gphoto2 is not installed" 2>/dev/null
+	exit 0
+fi
+
+if [ -f /tmp/geeqie-camera-import.log ]
+then
+	rm /tmp/geeqie-camera-import.log
+fi
+
+if [ $(gphoto2 --auto-detect | wc -l) -le 2 ]
+then
+	zenity --error --title="Geeqie camera import" --text="No camera detected" --window-icon=/usr/local/share/pixmaps/geeqie.png --width=250 2>/dev/null
+	exit 0
+fi
+
+list=$(gphoto2 --auto-detect | tail +3)
+readarray -t split_list <<<"$list"
+
+camera_list=""
+n=1
+count=$(gphoto2 --auto-detect | tail +3 | wc -l)
+if [[ $count -gt 1 ]]
+then
+	for camera in "${split_list[@]}"
+	do
+		if [[ $n -eq $count ]]
+		then
+			camera_list="$camera_list"$'TRUE\n'"$camera"$'\n'"$n"
+		else
+			camera_list="$camera_list"$'FALSE\n'"$camera"$'\n'"$n"$'\n'
+		fi
+		n=$((n+1))
+	done
+
+	camera_selected=$(echo "$camera_list" | zenity  --width=500 --height=250 --title="Geeqie camera import" --list  --text "Select camera" --radiolist  --column "Select" --column "Camera" --column "n" --hide-column=3 --print-column=2 2>/dev/null) 
+
+	if [[ $? == 1 ]]
+	then
+		exit 0
+	fi
+else
+	camera_selected=$(gphoto2 --auto-detect | tail +3)
+fi
+
+port_type=$(echo $camera_selected |awk -F ':' '{print $1}' | awk '{print $NF}')
+camera=$(echo $camera_selected | awk -F $port_type '{print $1}')
+port_address=$(echo $camera_selected | awk -F ':' '{print $2}')
+port="$port_type:$port_address"
+
+script_dir=$(dirname "$0")
+
+zenity --question --title="Geeqie camera import" --text="Camera: $camera\n\nDownloading to folder:\n<b>$PWD</b>" --ok-label="OK" --cancel-label="Cancel" --window-icon=/usr/local/share/pixmaps/geeqie.png --width=350 2>/dev/null
+
+if [[ $? == 1 ]]
+then
+	exit 0
+fi
+
+src_files_sorted=$(mktemp --tmpdir geeqie_camera_import_camera_files_sorted_XXXXXX)
+dest_files_sorted=$(mktemp --tmpdir geeqie_camera_import_computer_files_sorted_XXXXXX)
+
+(
+gphoto2 --port "$port" --list-files  2>/tmp/geeqie-camera-import.log | awk '/#/ {print $2}' | sort > $src_files_sorted
+) | zenity --progress --auto-close --auto-kill --title="Geeqie camera import" --text="Searching for files to download..."  --pulsate --window-icon=/usr/local/share/pixmaps/geeqie.png --width=250 
+
+error=$(grep -i error /tmp/geeqie-camera-import.log)
+
+if [ ! -z "$error" ]
+then
+	cat /tmp/geeqie-camera-import.log | zenity --text-info --title="Geeqie camera import" - --window-icon=error --width=250 2>/dev/null
+	exit 1
+fi
+
+ls -1 | sort > $dest_files_sorted
+existing_file_count=$(comm -12 $src_files_sorted $dest_files_sorted | wc -l)
+
+total=$(cat $src_files_sorted | wc -l)
+files_to_load=$(( $total - $existing_file_count ))
+
+rm $src_files_sorted
+rm $dest_files_sorted
+
+if [ "$files_to_load" -eq 0 ]
+then
+	zenity --info --title="Geeqie camera download" --text="No photos to download" --width=250 --window-icon=usr/local/share/pixmaps/geeqie.png 2>/dev/null
+	exit 0
+fi
+
+if [ -f /tmp/geeqie-camera-import-files ]
+then
+	rm /tmp/geeqie-camera-import-files
+fi
+touch /tmp/geeqie-camera-import-files
+
+zen_pipe=$(mktemp --dry-run --tmpdir geeqie_camera_import_pipe_XXXXXX)
+mkfifo $zen_pipe
+
+gphoto2 --port "$port" --hook-script "$script_dir/"geeqie-camera-import-hook-script --get-all-files --skip-existing 2>/tmp/geeqie-camera-import.log &
+
+gphoto2_pid=$!
+
+(tail -f $zen_pipe 2>/dev/null) | zenity --progress --title="Geeqie camera import" --width=370 --text="Downloading: total: $files_to_load existing: $existing_file_count\n" --auto-close --auto-kill --percentage=0 window-icon=/usr/local/share/pixmaps/geeqie.png 2>/dev/null &
+zen_pid=$!
+
+n=0
+while [ -f /tmp/geeqie-camera-import-files ] &&  [ "$n" -lt 100 ]
+do
+	i=$(cat "/tmp/geeqie-camera-import-files" | wc -l)
+	n=$(( $((i * 100)) / $files_to_load))
+	echo "$n" >$zen_pipe
+
+	latest_file=$(tail -n 1 /tmp/geeqie-camera-import-files)
+	if [ -z "$latest_file" ]
+	then
+		latest_file="Skipping existing files, if any..."
+	fi
+	echo "#Downloading: total: $files_to_load existing: $existing_file_count\n$latest_file" >$zen_pipe
+
+	sleep 1
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/camera-import/geeqie-camera-import-hook-script	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Camera import
+
+if [ "$ACTION" == "download" ]
+then
+	echo "$ARGUMENT" >> /tmp/geeqie-camera-import-files
+
+elif [ "$ACTION" == "stop" ]
+then
+	zenity --info --title="Geeqie camera download" --text="Import ended" --width=200 --timeout=5 --window-icon=usr/local/share/pixmaps/geeqie.png 2>/dev/null 
+	if [ -f /tmp/geeqie-camera-import-files ]
+	then
+		rm /tmp/geeqie-camera-import-files
+	fi
+fi
+
+exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/export-jpeg/Makefile.am	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,9 @@
+dist_gq_bin_SCRIPTS = geeqie-export-jpeg
+
+gq_desktopdir = $(appdir)/applications
+gq_desktop_in_files = export-jpeg.desktop.in
+gq_desktop_DATA = $(gq_desktop_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
+
+EXTRA_DIST = $(gq_desktop_in_files)
+CLEANFILES = $(gq_desktop_DATA)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/export-jpeg/export-jpeg.desktop.in	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,19 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+_Name=Export jpeg
+
+Exec=geeqie-export-jpeg %f
+
+# show only if these are installed
+#TryExec=exiv2
+#TryExec=jpgicc
+
+# Desktop files that are usable only in Geeqie should be marked like this:
+Categories=X-Geeqie;
+OnlyShowIn=X-Geeqie;
+
+# It can be made verbose
+#X-Geeqie-Verbose=true
+
+Icon=geeqie
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/export-jpeg/geeqie-export-jpeg	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+# Extract emdedded jpegs from a raw file:
+#
+# Display a list of the embedded files
+# Extract the selected image to a tmp folder
+# If jpgicc is installed, correct for currently selected rendering intent
+#  and store in a new file
+# Set Geeqie focus to the newly generated image
+
+count=$(exiv2 -pp "$1" | wc -l)
+
+if [[ $count -eq 0 ]]
+then
+	zenity --info --width=300 --height=100 --text="Export jpeg from raw file\n\nFile contains no embedded images" --title="Geeqie export jpeg" 2>/dev/null
+	exit
+fi
+
+if ! [ -x "$(command -v exiv2)" ]
+then
+	zenity --info --width=300 --height=100 --text="Export jpeg from raw file\n\nexiv2 is not installed" --title="Geeqie export jpeg" 2>/dev/null
+	exit 1
+fi
+
+if ! [ -x "$(command -v jpgicc)" ]
+then
+	zenity --info --width=300 --height=100 --text="Export jpeg from raw file\n\njpgicc is not installed\ncolor corrections will not be made\nYou may install via liblcms2-utils" --title="Geeqie export jpeg" 2>/dev/null
+fi
+
+list=$(exiv2 -pp "$1")
+readarray -t split_list <<<"$list"
+
+image_list=""
+n=1
+
+for image in "${split_list[@]}"
+do
+	if [[ $n -eq $count ]]
+	then
+		image_list="$image_list"$'TRUE\n'"$image"$'\n'"$n"
+	else
+		image_list="$image_list"$'FALSE\n'"$image"$'\n'"$n"$'\n'
+	fi
+	n=$((n+1))
+done
+
+image_selected=$(echo "$image_list" | zenity  --width=500 --height=250 --title="Geeqie export jpeg" --list  --text "Select embedded image" --radiolist  --column "Select" --column "Image" --column "n" --hide-column=3 --print-column=3 2>/dev/null) 
+
+if [[ ! -z "$image_selected" ]]
+then
+	tmpdir=$(mktemp --tmpdir --directory geeqie_export_jpeg_XXXXXX)
+
+	exiv2 -ep"$image_selected" "$1" --location "$tmpdir"
+
+	render_str=$(geeqie --remote --get-render-intent)
+
+	case $render_str in
+		"Perceptual" )
+		render_key=0;;
+		"Relative Colorimetric" )
+		render_key=1;;
+		"Saturation" )
+		render_key=2;;
+		"Absolute Colorimetric" )
+		render_key=3;;
+	esac
+
+	filename=$(basename "$tmpdir/"* ".jpg")
+	if [ -x "$(command -v jpgicc)" ]
+	then
+		filename_ri="$tmpdir/""$filename""-ri.jpg"
+		jpgicc -t $render_key "$tmpdir/""$filename"".jpg"  "$filename_ri"
+
+		rm "$tmpdir/""$filename"".jpg"
+
+		geeqie --remote view:"$filename_ri"
+	else
+		geeqie --remote view:"$tmpdir/""$filename"".jpg"
+	fi
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/image-crop/Makefile.am	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,9 @@
+dist_gq_bin_SCRIPTS = geeqie-image-crop
+
+gq_desktopdir = $(appdir)/applications
+gq_desktop_in_files = image-crop.desktop.in
+gq_desktop_DATA = $(gq_desktop_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
+
+EXTRA_DIST = $(gq_desktop_in_files)
+CLEANFILES = $(gq_desktop_DATA)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/image-crop/geeqie-image-crop	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,109 @@
+#!/bin/bash
+
+# Crop image
+#
+# Requires ImageMagick and exiftool
+
+
+process_raw ()
+{
+	tmpdir=$(mktemp --tmpdir --directory geeqie_crop_image_XXXXXX)
+
+	list=$(exiv2 -pp "$1")
+	if [[ ! -z "$list" ]]
+	then
+		readarray -t split_list <<<"$list"
+
+		array_length="${#split_list[@]}" 
+		exiv2 -ep"$array_length" "$1" --location "$tmpdir"
+
+		src_filename=$(ls "$tmpdir/")
+		filename="${src_filename%.*}"
+		extension="${src_filename##*.}"
+		rotation=$(exiftool -Orientation -n "$1" | cut -d':' -f2 | xargs)
+		convert "$tmpdir/$src_filename" -crop "$2" "$tmpdir/$filename-crop.$extension"
+
+		exiftool -Orientation=$rotation -n "$tmpdir/$filename-crop.$extension"
+
+		rm "$tmpdir/$src_filename"
+
+		geeqie --remote view:"$tmpdir/$filename-crop.$extension"
+		res=0
+	else
+		res=1
+	fi
+
+	return $res
+}
+
+process_plain ()
+{
+	tmpdir=$(mktemp --tmpdir --directory geeqie_crop_image_XXXXXX)
+
+	src_filename=$(basename -- "$1")
+	filename="${src_filename%.*}"
+	extension="${src_filename##*.}"
+	convert "$1" -crop "$2" "$tmpdir/$filename-crop.$extension"
+	if [ $? = 1 ]
+	then
+		zenity --error --title="$title" --text="Cannot process this file format" --width="$width" --window-icon="$window_icon"
+	else
+		geeqie --remote view:"$tmpdir/$filename-crop.$extension"
+	fi
+}
+
+export window_icon="/usr/local/share/pixmaps/geeqie.png"
+export title="Geeqie crop image"
+export width="250"
+
+if [ -x "$(command -v convert)" ]
+then
+	if [ -x "$(command -v exiftool)" ]
+	then
+
+		coords=$(geeqie --remote --get-rectangle)
+
+		if [ -z "$coords" ]
+		then
+			zenity --error --title="$title" --text="Rectangle coordinates have not been set" --width="$width" --window-icon="$window_icon" 2>/dev/null
+			exit 0
+		fi
+
+		filename=$(basename -- "$1")
+		extension="${filename##*.}"
+
+		if [ "${extension,,}" = "jpeg" ]
+		then
+			source_file="$1"
+			process_plain "$1" $coords
+		elif [ "${extension,,}" = "jpg" ]
+		then
+			source_file="$1"
+			process_plain "$1" $coords
+		elif [ "${extension,,}" = "png" ]
+		then
+			source_file="$1"
+			process_plain "$1" $coords
+		elif [ "${extension,,}" = "tif" ]
+		then
+			source_file="$1"
+			process_plain "$1" $coords
+		elif [ "${extension,,}" = "tiff" ]
+		then
+			source_file="$1"
+			process_plain "$1" $coords
+		else
+			process_raw "$1" $coords
+			if [ $? = 1 ]
+			then
+				process_plain "$1" $coords
+			fi
+		fi
+	else
+		zenity --info --title="$title" --width="$width" --height=100 --text="Crop image\n\nexiftool is not installed" --title="$title" --window-icon="$window_icon" 2>/dev/null
+		exit 0
+	fi
+else
+	zenity --info --title="$title" --width="$width" --height=100 --text="Crop image\n\nImageMagick is not installed" --title="$title" --window-icon="$window_icon" 2>/dev/null
+	exit 0
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/image-crop/image-crop.desktop	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,17 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=Image crop
+
+# Requires ImageMagick and exiftools
+
+Exec=geeqie-image-crop %f
+
+# Desktop files that are usable only in Geeqie should be marked like this:
+Categories=X-Geeqie;
+OnlyShowIn=X-Geeqie;
+
+# It can be made verbose
+#X-Geeqie-Verbose=true
+
+Icon=geeqie
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/image-crop/image-crop.desktop.in	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,17 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+_Name=Image crop
+
+# Requires ImageMagick and exiftools
+
+Exec=geeqie-image-crop %f
+
+# Desktop files that are usable only in Geeqie should be marked like this:
+Categories=X-Geeqie;
+OnlyShowIn=X-Geeqie;
+
+# It can be made verbose
+#X-Geeqie-Verbose=true
+
+Icon=geeqie
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/template.desktop.in	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,94 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+
+# The name which appears in the menu:
+_Name=Template
+#Name[cs]=
+#Name[fr]=
+#Name[de]=Vorlage
+
+# Replace "command" with the actual command or script:
+Exec=command %f
+
+# %f	 A single file name, even if multiple files are selected. The
+#        system reading the desktop entry should recognize that the program in
+#        question cannot handle multiple file arguments, and it should should
+#        probably spawn and execute multiple copies of a program for each
+#        selected file if the program is not able to handle additional file
+#        arguments. If files are not on the local file system (i.e. are on HTTP
+#        or FTP locations), the files will be copied to the local file system
+#        and %f will be expanded to point at the temporary file. Used for
+#        programs that do not understand the URL syntax.
+#
+# %F	A list of files. Use for apps that can open several local files
+#       at once. Each file is passed as a separate argument to the executable
+#       program.
+#
+# %u	A single URL. Local files may either be passed as file: URLs or
+#       as file path.
+#
+# %U	A list of URLs. Each URL is passed as a separate argument to
+#       the executable program. Local files may either be passed as file: URLs
+#       or as file path.
+
+# Change the following line to point to an icon of your choosing
+Icon=gtk-file
+
+# Use the following to only show this menu entry if the command is installed
+#TryExec=command
+
+# Desktop files that are usable only in Geeqie should be marked like this:
+Categories=X-Geeqie;
+OnlyShowIn=X-Geeqie;
+
+# Uncomment the following line to include in a Geeqie menu,
+# other than in the default path of EditMenu/ExternalMenu
+#X-Geeqie-Menu-Path=<FileMenuPath>
+
+# e.g.
+#X-Geeqie-Menu-Path=SelectMenu/SelectSection
+
+# Valid sections are:
+#    FileMenu
+#    FileMenu/OpenSection
+#    FileMenu/SearchSection
+#    FileMenu/PrintSection
+#    FileMenu/FileOpsSection
+#    FileMenu/QuitSection
+#    GoMenu
+#    SelectMenu
+#    SelectMenu/SelectSection
+#    SelectMenu/ClipboardSection
+#    SelectMenu/MarksSection
+#    EditMenu
+#    EditMenu/EditSection
+#    EditMenu/OrientationMenu
+#    EditMenu/RatingMenu
+#    EditMenu/PropertiesSection
+#    EditMenu/PreferencesSection
+#    PluginsMenu
+#    ViewMenu
+#    ViewMenu/WindowSection
+#    ViewMenu/FileDirMenu
+#    ViewMenu/FileDirMenu/FolderSection
+#    ViewMenu/FileDirMenu/ListSection
+#    ViewMenu/DirSection
+#    ViewMenu/ZoomMenu
+#    ViewMenu/ZoomMenu/ConnectZoomMenu
+#    ViewMenu/SplitMenu
+#    ViewMenu/StereoMenu
+#    ViewMenu/ColorMenu
+#    ViewMenu/OverlayMenu
+#    ViewMenu/ViewSection
+#    ViewMenu/ToolsSection
+#    ViewMenu/SlideShowSection
+#    HelpMenu
+#    HelpMenu/HelpSection
+
+# This is a filter - see symlink.desktop and geeqie-symlink for an example
+# how to use this feature
+#X-Geeqie-Filter=true
+
+# It can be made verbose
+#X-Geeqie-Verbose=true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/tethered-photography/Makefile.am	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,9 @@
+dist_gq_bin_SCRIPTS = geeqie-tethered-photography geeqie-tethered-photography-hook-script
+
+gq_desktopdir = $(appdir)/applications
+gq_desktop_in_files = tethered-photography.desktop.in
+gq_desktop_DATA = $(gq_desktop_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
+
+EXTRA_DIST = $(gq_desktop_in_files)
+CLEANFILES = $(gq_desktop_DATA)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/tethered-photography/geeqie-tethered-photography	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# Tethered photography
+# Requires gphoto2
+#
+# If a file already exists with the same name, it is not overwritten, but the
+# download will not take place.
+# Auto-rename can be achieved with the --filename option of gphoto2.
+# In file $HOME/.config/gphoto2/settings, set the option:
+# gphoto2=filename=<see the manual>
+
+n=$(ps -e | grep "geeqie-tethered" | wc -l)
+if [ "$n" -ge 3 ]
+then
+	exit 0
+fi
+
+if ! [ -x "$(command -v gphoto2)" ]
+then
+	zenity --title="Geeqie tethered photography" --info --width=200 --text="gphoto2 is not installed" 2>/dev/null
+	exit 0
+fi
+
+if [ $(gphoto2 --auto-detect | wc -l) -le 2 ]
+then
+	zenity --error --title="Geeqie tethered photography" --text="No camera detected" --window-icon=/usr/local/share/pixmaps/geeqie.png --width=250 2>/dev/null
+	exit 0
+fi
+
+notify-send --expire-time=2000 "$(gphoto2 --auto-detect | sed -n '3p')" --icon=geeqie
+
+script_dir=$(dirname "$0")
+
+tmpfile=$(mktemp --tmpdir geeqie_tethered_photography_XXXXXX)
+
+yes n | gphoto2 --hook-script "$script_dir/"geeqie-tethered-photography-hook-script --capture-tethered >$tmpfile &
+
+gphoto2_pid=$!
+
+zenity --question --title="Geeqie tethered photography" --ok-label="Stop" --cancel-label="Show log data" --text="Tethered photography is running.\n\n\nDownloading to folder:\n""$PWD\n\n\nExisting files will not be overwritten,\nbut the download will not take place.\n\n(Use gphoto2 --filename default option\nfor auto-rename on download)" --width=300 --window-icon=/usr/local/share/pixmaps/geeqie.png 2>/dev/null
+
+if [ $? == 1 ]
+then
+	zenity --text-info --title="Geeqie tethered photography" --window-icon=/usr/local/share/pixmaps/geeqie.png --ok-label="Stop" --cancel-label="Abort" <$tmpfile 2>/dev/null
+fi
+
+kill $gphoto2_pid
+rm $tmpfile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/tethered-photography/geeqie-tethered-photography-hook-script	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Tethered photography
+
+if [ "$ACTION" == "download" ]
+then
+	notify-send --expire-time=4000 "$ARGUMENT"  --icon=geeqie
+	geeqie --remote File:"$PWD/$ARGUMENT"
+fi
+
+exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/tethered-photography/tethered-photography.desktop.in	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+_Name=Tethered photography
+
+Exec=geeqie-tethered-photography
+
+# Desktop files that are usable only in Geeqie should be marked like this:
+Categories=X-Geeqie;
+OnlyShowIn=X-Geeqie;
+
+# It can be made verbose
+#X-Geeqie-Verbose=true
+
+Icon=geeqie
--- a/po/POTFILES.in	Tue Oct 02 22:50:14 2018 +0300
+++ b/po/POTFILES.in	Wed Dec 12 21:56:30 2018 +0200
@@ -1,8 +1,13 @@
 geeqie.desktop.in
 plugins/import/geeqie-import-geeqie.desktop.in
 plugins/import/geeqie-import-gqview.desktop.in
+plugins/export-jpeg/export-jpeg.desktop.in
+plugins/tethered-photography/tethered-photography.desktop.in
+plugins/camera-import/camera-import.desktop.in
+plugins/image-crop/image-crop.desktop.in
 plugins/rotate/rotate.desktop.in
 plugins/symlink/symlink.desktop.in
+plugins/template.desktop.in
 plugins/ufraw/geeqie-ufraw.desktop.in
 plugins/ufraw/geeqie-ufraw-id.desktop.in
 plugins/ufraw/geeqie-ufraw-recursive.desktop.in
@@ -45,9 +50,12 @@
 src/history_list.c
 src/image.c
 src/image-load.c
+src/image_load_collection.c
+src/image_load_dds.c
 src/image_load_ffmpegthumbnailer.c
 src/image_load_gdk.c
 src/image_load_jpeg.c
+src/image_load_pdf.c
 src/image_load_tiff.c
 src/image-overlay.c
 src/img-view.c
@@ -66,6 +74,7 @@
 src/metadata.c
 src/misc.c
 src/options.c
+src/osd.c
 src/pan-view/pan-calendar.c
 src/pan-view/pan-folder.c
 src/pan-view/pan-grid.c
@@ -111,3 +120,4 @@
 src/view_file/view_file_icon.c
 src/view_file/view_file_list.c
 src/window.c
+src/zonedetect.c
--- a/po/en_GB.po	Tue Oct 02 22:50:14 2018 +0300
+++ b/po/en_GB.po	Wed Dec 12 21:56:30 2018 +0200
@@ -7,15 +7,15 @@
 msgstr ""
 "Project-Id-Version: geeqie-1.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-06-24 10:14+0100\n"
-"PO-Revision-Date: 2018-07-14 14:54+0100\n"
+"POT-Creation-Date: 2018-11-03 15:19+0000\n"
+"PO-Revision-Date: 2018-11-03 16:09+0000\n"
 "Last-Translator: Colin Clark <colin.clark@cclark.uk>\n"
-"Language-Team: British English <>\n"
+"Language-Team: English <>\n"
 "Language: en_GB\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Generator: Gtranslator 2.91.7\n"
 
 #: ../geeqie.desktop.in.h:1
@@ -38,6 +38,22 @@
 msgid "Import GQView metadata"
 msgstr ""
 
+#: ../plugins/export-jpeg/export-jpeg.desktop.in.h:1
+msgid "Export jpeg"
+msgstr ""
+
+#: ../plugins/tethered-photography/tethered-photography.desktop.in.h:1
+msgid "Tethered photography"
+msgstr ""
+
+#: ../plugins/camera-import/camera-import.desktop.in.h:1
+msgid "Camera import"
+msgstr ""
+
+#: ../plugins/image-crop/image-crop.desktop.in.h:1
+msgid "Image crop"
+msgstr ""
+
 #: ../plugins/rotate/rotate.desktop.in.h:1
 msgid "Apply the orientation to image content"
 msgstr ""
@@ -58,13 +74,13 @@
 msgid "UFRaw Batch recursive"
 msgstr ""
 
-#: ../src/advanced_exif.c:384 ../src/cache_maint.c:1265
-#: ../src/preferences.c:111 ../src/preferences.c:2304 ../src/search.c:2103
-#: ../src/search.c:3242
+#: ../src/advanced_exif.c:384 ../src/cache_maint.c:1266
+#: ../src/preferences.c:118 ../src/preferences.c:2512 ../src/search.c:2193
+#: ../src/search.c:3366
 msgid "Metadata"
 msgstr ""
 
-#: ../src/advanced_exif.c:432 ../src/preferences.c:2218
+#: ../src/advanced_exif.c:432 ../src/preferences.c:2426
 msgid "Description"
 msgstr ""
 
@@ -72,9 +88,10 @@
 msgid "Value"
 msgstr ""
 
-#: ../src/advanced_exif.c:434 ../src/desktop_file.c:535 ../src/dupe.c:2765
-#: ../src/dupe.c:3306 ../src/print.c:3209 ../src/search.c:3325
-#: ../src/utilops.c:505 ../src/view_file/view_file_list.c:2059
+#: ../src/advanced_exif.c:434 ../src/desktop_file.c:629 ../src/dupe.c:2784
+#: ../src/dupe.c:3326 ../src/preferences.c:2062 ../src/print.c:414
+#: ../src/search.c:3449 ../src/utilops.c:505
+#: ../src/view_file/view_file_list.c:2070
 msgid "Name"
 msgstr ""
 
@@ -91,68 +108,72 @@
 msgstr ""
 
 #. default sidebar
-#: ../src/bar.c:186
+#: ../src/bar.c:199
 msgid "Histogram"
 msgstr ""
 
-#: ../src/bar.c:187
+#: ../src/bar.c:200
 msgid "Title"
 msgstr ""
 
-#: ../src/bar.c:188 ../src/search.c:3163
+#: ../src/bar.c:201 ../src/preferences.c:2897 ../src/search.c:3286
 msgid "Keywords"
 msgstr ""
 
-#: ../src/bar.c:189 ../src/search.c:3175
+#: ../src/bar.c:202 ../src/search.c:3298
 msgid "Comment"
 msgstr ""
 
-#: ../src/bar.c:190
+#: ../src/bar.c:203
 msgid "Rating"
 msgstr ""
 
-#: ../src/bar.c:191
+#: ../src/bar.c:204
+msgid "Headline"
+msgstr ""
+
+#: ../src/bar.c:205
 msgid "Exif"
 msgstr ""
 
 #. other pre-configured panes
-#: ../src/bar.c:193
+#: ../src/bar.c:207
 msgid "File info"
 msgstr ""
 
-#: ../src/bar.c:194
+#: ../src/bar.c:208
 msgid "Location and GPS"
 msgstr ""
 
-#: ../src/bar.c:195 ../src/exif.c:342
+#: ../src/bar.c:209 ../src/exif.c:342
 msgid "Copyright"
 msgstr ""
 
-#: ../src/bar.c:198 ../src/bar_gps.c:1010
+#: ../src/bar.c:212 ../src/bar_gps.c:1010
 msgid "GPS Map"
 msgstr ""
 
-#: ../src/bar.c:318 ../src/toolbar.c:191
+#: ../src/bar.c:332 ../src/toolbar.c:210
 msgid "Move to _top"
 msgstr ""
 
-#: ../src/bar.c:319 ../src/toolbar.c:192 ../src/ui_bookmark.c:416
+#: ../src/bar.c:333 ../src/toolbar.c:211 ../src/ui_bookmark.c:416
 msgid "Move _up"
 msgstr ""
 
-#: ../src/bar.c:320 ../src/toolbar.c:193 ../src/ui_bookmark.c:418
+#: ../src/bar.c:334 ../src/toolbar.c:212 ../src/ui_bookmark.c:418
 msgid "Move _down"
 msgstr ""
 
-#: ../src/bar.c:321 ../src/toolbar.c:194
+#: ../src/bar.c:335 ../src/toolbar.c:213
 msgid "Move to _bottom"
 msgstr ""
 
-#: ../src/bar.c:323 ../src/toolbar.c:196
+#: ../src/bar.c:337 ../src/toolbar.c:215
 msgid "Remove"
 msgstr ""
 
-#: ../src/bar.c:714
+#: ../src/bar.c:728
 msgid "Add Pane"
 msgstr ""
 
@@ -181,7 +202,7 @@
 msgid "Key:"
 msgstr ""
 
-#: ../src/bar_exif.c:576 ../src/preferences.c:1872
+#: ../src/bar_exif.c:576 ../src/preferences.c:1886
 msgid "Title:"
 msgstr ""
 
@@ -199,7 +220,7 @@
 msgid "Configure \"%s\""
 msgstr ""
 
-#: ../src/bar_exif.c:636 ../src/bar_keywords.c:1342
+#: ../src/bar_exif.c:636 ../src/bar_keywords.c:1367
 #, c-format
 msgid "Remove \"%s\""
 msgstr ""
@@ -303,27 +324,27 @@
 msgstr ""
 
 #. use the same strings as in layout_util.c
-#: ../src/bar_histogram.c:257 ../src/layout_util.c:1961
+#: ../src/bar_histogram.c:257 ../src/layout_util.c:2047
 msgid "Histogram on _Red"
 msgstr ""
 
-#: ../src/bar_histogram.c:258 ../src/layout_util.c:1962
+#: ../src/bar_histogram.c:258 ../src/layout_util.c:2048
 msgid "Histogram on _Green"
 msgstr ""
 
-#: ../src/bar_histogram.c:259 ../src/layout_util.c:1963
+#: ../src/bar_histogram.c:259 ../src/layout_util.c:2049
 msgid "Histogram on _Blue"
 msgstr ""
 
-#: ../src/bar_histogram.c:260 ../src/layout_util.c:1964
+#: ../src/bar_histogram.c:260 ../src/layout_util.c:2050
 msgid "_Histogram on RGB"
 msgstr ""
 
-#: ../src/bar_histogram.c:261 ../src/layout_util.c:1965
+#: ../src/bar_histogram.c:261 ../src/layout_util.c:2051
 msgid "Histogram on _Value"
 msgstr ""
 
-#: ../src/bar_histogram.c:265 ../src/layout_util.c:1969
+#: ../src/bar_histogram.c:265 ../src/layout_util.c:2055
 msgid "Li_near Histogram"
 msgstr ""
 
@@ -331,120 +352,125 @@
 msgid "L_og Histogram"
 msgstr ""
 
-#: ../src/bar_keywords.c:463
-msgid "Add keywords to selected files"
-msgstr ""
-
-#: ../src/bar_keywords.c:464
-msgid "Replace existing keywords in selected files"
-msgstr ""
-
-#: ../src/bar_keywords.c:935
+#: ../src/bar_keywords.c:488
+msgid "Add selected keywords to selected files"
+msgstr ""
+
+#: ../src/bar_keywords.c:489
+msgid "Replace existing keywords in selected files with selected keywords"
+msgstr ""
+
+#: ../src/bar_keywords.c:960
 msgid "Edit keyword"
 msgstr ""
 
-#: ../src/bar_keywords.c:935 ../src/bar_keywords.c:942
-#: ../src/bar_keywords.c:1287
+#: ../src/bar_keywords.c:960 ../src/bar_keywords.c:967
+#: ../src/bar_keywords.c:1312
 msgid "New keyword"
 msgstr ""
 
-#: ../src/bar_keywords.c:942
+#: ../src/bar_keywords.c:967
 msgid "Configure keyword"
 msgstr ""
 
-#: ../src/bar_keywords.c:948
+#: ../src/bar_keywords.c:973
 msgid "Keyword:"
 msgstr ""
 
-#: ../src/bar_keywords.c:957
+#: ../src/bar_keywords.c:982
 msgid "Keyword type:"
 msgstr ""
 
-#: ../src/bar_keywords.c:959
+#: ../src/bar_keywords.c:984
 msgid "Active keyword"
 msgstr ""
 
-#: ../src/bar_keywords.c:962
+#: ../src/bar_keywords.c:987
 msgid "Helper"
 msgstr ""
 
-#: ../src/bar_keywords.c:1036
+#: ../src/bar_keywords.c:1061
 msgid "This will disconnect all Marks Keywords connections"
 msgstr ""
 
-#: ../src/bar_keywords.c:1038
+#: ../src/bar_keywords.c:1063
 msgid "Marks Keywords"
 msgstr ""
 
-#: ../src/bar_keywords.c:1311
+#: ../src/bar_keywords.c:1336
 #, c-format
 msgid "Add \"%s\" to all selected images"
 msgstr ""
 
-#: ../src/bar_keywords.c:1317
+#: ../src/bar_keywords.c:1342
 #, c-format
 msgid "Hide \"%s\""
 msgstr ""
 
-#: ../src/bar_keywords.c:1324
-#, c-format
-msgid "Mark %d"
-msgstr ""
-
-#: ../src/bar_keywords.c:1332
-#, c-format
-msgid "Connect \"%s\" to mark"
-msgstr ""
-
-#: ../src/bar_keywords.c:1339
-#, c-format
-msgid "Edit \"%s\""
-msgstr ""
-
 #: ../src/bar_keywords.c:1349
 #, c-format
+msgid "Mark %d"
+msgstr ""
+
+#: ../src/bar_keywords.c:1357
+#, c-format
+msgid "Connect \"%s\" to mark"
+msgstr ""
+
+#: ../src/bar_keywords.c:1364
+#, c-format
+msgid "Edit \"%s\""
+msgstr ""
+
+#: ../src/bar_keywords.c:1374
+#, c-format
 msgid "Disconnect \"%s\" from mark %s"
 msgstr ""
 
-#: ../src/bar_keywords.c:1356
+#: ../src/bar_keywords.c:1381
 #, c-format
 msgid "Disconnect all Mark Keyword connections"
 msgstr ""
 
 #. for the pane
-#: ../src/bar_keywords.c:1367 ../src/bar_keywords.c:1381
+#: ../src/bar_keywords.c:1392 ../src/bar_keywords.c:1406
 msgid "Expand checked"
 msgstr ""
 
-#: ../src/bar_keywords.c:1368 ../src/bar_keywords.c:1382
+#: ../src/bar_keywords.c:1393 ../src/bar_keywords.c:1407
 msgid "Collapse unchecked"
 msgstr ""
 
-#: ../src/bar_keywords.c:1369 ../src/bar_keywords.c:1383
+#: ../src/bar_keywords.c:1394 ../src/bar_keywords.c:1408
 msgid "Hide unchecked"
 msgstr ""
 
-#: ../src/bar_keywords.c:1370
+#: ../src/bar_keywords.c:1395
 msgid "Revert all hidden"
 msgstr ""
 
-#: ../src/bar_keywords.c:1372
+#: ../src/bar_keywords.c:1397
 msgid "Show all"
 msgstr ""
 
-#: ../src/bar_keywords.c:1373
+#: ../src/bar_keywords.c:1398
 msgid "Collapse all"
 msgstr ""
 
-#: ../src/bar_keywords.c:1374
+#: ../src/bar_keywords.c:1399
 msgid "Revert"
 msgstr ""
 
-#: ../src/bar_keywords.c:1378
+#: ../src/bar_keywords.c:1403
 msgid "On any change"
 msgstr ""
 
-#: ../src/bar_sort.c:500
+#: ../src/bar_keywords.c:1899
+#, c-format
+msgid "Error: Unable to write keywords list to: %s\n"
+msgstr ""
+
+#: ../src/bar_sort.c:501
 #, c-format
 msgid ""
 "The collection:\n"
@@ -452,63 +478,63 @@
 "already exists."
 msgstr ""
 
-#: ../src/bar_sort.c:501
+#: ../src/bar_sort.c:502
 msgid "Collection exists"
 msgstr ""
 
-#: ../src/bar_sort.c:515 ../src/collect.c:1146 ../src/collect-dlg.c:93
+#: ../src/bar_sort.c:516 ../src/collect.c:1147 ../src/collect-dlg.c:93
 #, c-format
 msgid ""
 "Failed to save the collection:\n"
 "%s"
 msgstr ""
 
-#: ../src/bar_sort.c:516 ../src/collect.c:1147 ../src/collect-dlg.c:94
+#: ../src/bar_sort.c:517 ../src/collect.c:1148 ../src/collect-dlg.c:94
 msgid "Save Failed"
 msgstr ""
 
-#: ../src/bar_sort.c:551 ../src/bar_sort.c:723
+#: ../src/bar_sort.c:552 ../src/bar_sort.c:724
 msgid "Add Bookmark"
 msgstr ""
 
-#: ../src/bar_sort.c:555
+#: ../src/bar_sort.c:556
 msgid "Add Collection"
 msgstr ""
 
-#: ../src/bar_sort.c:572 ../src/shortcuts.c:118 ../src/ui_bookmark.c:297
+#: ../src/bar_sort.c:573 ../src/shortcuts.c:118 ../src/ui_bookmark.c:297
 msgid "Name:"
 msgstr ""
 
-#: ../src/bar_sort.c:650
+#: ../src/bar_sort.c:651
 msgid "Sort Manager"
 msgstr ""
 
-#: ../src/bar_sort.c:659 ../src/pan-view/pan-view.c:1832
+#: ../src/bar_sort.c:660 ../src/pan-view/pan-view.c:1836
 #: ../src/ui_pathsel.c:1108
 msgid "Folders"
 msgstr ""
 
-#: ../src/bar_sort.c:660 ../src/options.c:207
+#: ../src/bar_sort.c:661 ../src/options.c:221
 msgid "Collections"
 msgstr ""
 
-#: ../src/bar_sort.c:668 ../src/utilops.c:2321
+#: ../src/bar_sort.c:669 ../src/toolbar.c:88 ../src/utilops.c:2329
 msgid "Copy"
 msgstr ""
 
-#: ../src/bar_sort.c:671 ../src/utilops.c:2271
+#: ../src/bar_sort.c:672 ../src/toolbar.c:89 ../src/utilops.c:2279
 msgid "Move"
 msgstr ""
 
-#: ../src/bar_sort.c:710
+#: ../src/bar_sort.c:711
 msgid "Add image"
 msgstr ""
 
-#: ../src/bar_sort.c:713
+#: ../src/bar_sort.c:714
 msgid "Add selection"
 msgstr ""
 
-#: ../src/bar_sort.c:726
+#: ../src/bar_sort.c:727
 msgid "Undo last image"
 msgstr ""
 
@@ -520,7 +546,7 @@
 msgstr ""
 
 #: ../src/cache_maint.c:123 ../src/cache_maint.c:612 ../src/cache_maint.c:880
-#: ../src/editors.c:1205
+#: ../src/editors.c:1228 ../src/preferences.c:2674
 msgid "done"
 msgstr ""
 
@@ -540,11 +566,11 @@
 msgid "Maintenance"
 msgstr ""
 
-#: ../src/cache_maint.c:732
+#: ../src/cache_maint.c:732 ../src/preferences.c:2756
 msgid "Invalid folder"
 msgstr ""
 
-#: ../src/cache_maint.c:733
+#: ../src/cache_maint.c:733 ../src/preferences.c:2757
 msgid "The specified folder can not be found."
 msgstr ""
 
@@ -552,19 +578,19 @@
 msgid "Create thumbnails"
 msgstr ""
 
-#: ../src/cache_maint.c:804 ../src/cache_maint.c:1063
+#: ../src/cache_maint.c:804 ../src/cache_maint.c:1063 ../src/preferences.c:2795
 msgid "S_tart"
 msgstr ""
 
-#: ../src/cache_maint.c:817 ../src/preferences.c:2564
+#: ../src/cache_maint.c:817 ../src/preferences.c:2808 ../src/preferences.c:3134
 msgid "Folder:"
 msgstr ""
 
-#: ../src/cache_maint.c:820
+#: ../src/cache_maint.c:820 ../src/preferences.c:2811
 msgid "Select folder"
 msgstr ""
 
-#: ../src/cache_maint.c:824
+#: ../src/cache_maint.c:824 ../src/preferences.c:2815
 msgid "Include subfolders"
 msgstr ""
 
@@ -572,11 +598,11 @@
 msgid "Store thumbnails local to source images"
 msgstr ""
 
-#: ../src/cache_maint.c:834 ../src/cache_maint.c:1072
+#: ../src/cache_maint.c:834 ../src/cache_maint.c:1072 ../src/preferences.c:2823
 msgid "click start to begin"
 msgstr ""
 
-#: ../src/cache_maint.c:992 ../src/editors.c:1131
+#: ../src/cache_maint.c:992 ../src/editors.c:1154
 msgid "running..."
 msgstr ""
 
@@ -613,7 +639,7 @@
 msgstr ""
 
 #: ../src/cache_maint.c:1227 ../src/cache_maint.c:1246
-#: ../src/cache_maint.c:1271
+#: ../src/cache_maint.c:1272
 msgid "Clean up"
 msgstr ""
 
@@ -641,13 +667,13 @@
 msgid "Render thumbnails for a specific folder."
 msgstr ""
 
-#: ../src/cache_maint.c:1274
+#: ../src/cache_maint.c:1275
 msgid "Remove orphaned keywords and comments."
 msgstr ""
 
 #. When does this occur ??
-#: ../src/collect.c:422 ../src/image.c:189 ../src/image-overlay.c:549
-#: ../src/image-overlay.c:626
+#: ../src/collect.c:422 ../src/image.c:313 ../src/image-overlay.c:555
+#: ../src/image-overlay.c:632
 msgid "Untitled"
 msgstr ""
 
@@ -656,22 +682,22 @@
 msgid "Untitled (%d)"
 msgstr ""
 
-#: ../src/collect.c:1071
+#: ../src/collect.c:1072
 #, c-format
 msgid "%s - Collection - %s"
 msgstr ""
 
-#: ../src/collect.c:1183 ../src/collect.c:1187
+#: ../src/collect.c:1184 ../src/collect.c:1188
 msgid "Close collection"
 msgstr ""
 
-#: ../src/collect.c:1188
+#: ../src/collect.c:1189
 msgid ""
 "Collection has been modified.\n"
 "Save first?"
 msgstr ""
 
-#: ../src/collect.c:1191
+#: ../src/collect.c:1192
 msgid "_Discard"
 msgstr ""
 
@@ -750,166 +776,189 @@
 "error: %s\n"
 msgstr ""
 
-#: ../src/collect-table.c:212
+#: ../src/collect-table.c:214
 #, c-format
 msgid "%s, %d images (%s, %d)"
 msgstr ""
 
-#: ../src/collect-table.c:219
+#: ../src/collect-table.c:221
 #, c-format
 msgid "%s, %d images"
 msgstr ""
 
-#: ../src/collect-table.c:224 ../src/layout_util.c:1736
-#: ../src/layout_util.c:2880
+#: ../src/collect-table.c:226 ../src/layout_util.c:1817
+#: ../src/layout_util.c:2992
 msgid "Empty"
 msgstr ""
 
-#: ../src/collect-table.c:238 ../src/dupe.c:1363 ../src/search.c:386
-#: ../src/view_file/view_file.c:1004 ../src/view_file/view_file.c:1113
+#: ../src/collect-table.c:240 ../src/dupe.c:1364 ../src/search.c:389
+#: ../src/view_file/view_file.c:1146 ../src/view_file/view_file.c:1255
 msgid "Loading thumbs..."
 msgstr ""
 
-#: ../src/collect-table.c:933 ../src/dupe.c:2344 ../src/dupe.c:2662
-#: ../src/layout_util.c:1783 ../src/search.c:1095
+#: ../src/collect-table.c:961 ../src/dupe.c:2354 ../src/dupe.c:2681
+#: ../src/layout_util.c:1864 ../src/search.c:1107
 msgid "_View"
 msgstr ""
 
-#: ../src/collect-table.c:935 ../src/dupe.c:2346 ../src/dupe.c:2664
-#: ../src/img-view.c:1328 ../src/layout_image.c:691
-#: ../src/pan-view/pan-view.c:2290 ../src/search.c:1097
-#: ../src/view_file/view_file.c:622
+#: ../src/collect-table.c:963 ../src/dupe.c:2356 ../src/dupe.c:2683
+#: ../src/img-view.c:1337 ../src/layout_image.c:701
+#: ../src/pan-view/pan-view.c:2309 ../src/search.c:1109
+#: ../src/view_file/view_file.c:623
 msgid "View in _new window"
 msgstr ""
 
-#: ../src/collect-table.c:937 ../src/pan-view/pan-view.c:2292
+#: ../src/collect-table.c:965 ../src/pan-view/pan-view.c:2311
 msgid "Go to original"
 msgstr ""
 
-#: ../src/collect-table.c:940 ../src/dupe.c:2385 ../src/dupe.c:2672
-#: ../src/search.c:1132
+#: ../src/collect-table.c:968 ../src/dupe.c:2404 ../src/dupe.c:2691
 msgid "Rem_ove"
 msgstr ""
 
-#: ../src/collect-table.c:943
+#: ../src/collect-table.c:971
 msgid "Append from file selection"
 msgstr ""
 
-#: ../src/collect-table.c:945
+#: ../src/collect-table.c:973
 msgid "Append from collection..."
 msgstr ""
 
-#: ../src/collect-table.c:949
+#: ../src/collect-table.c:977
 msgid "_Selection"
 msgstr ""
 
-#: ../src/collect-table.c:951 ../src/dupe.c:2349 ../src/dupe.c:2667
-#: ../src/layout_util.c:1841 ../src/search.c:1100
+#: ../src/collect-table.c:979 ../src/dupe.c:2359 ../src/dupe.c:2686
+#: ../src/layout_util.c:1923 ../src/search.c:1112 ../src/toolbar.c:94
 msgid "Select all"
 msgstr ""
 
-#: ../src/collect-table.c:953 ../src/dupe.c:2351 ../src/dupe.c:2669
-#: ../src/layout_util.c:1842 ../src/search.c:1102
+#: ../src/collect-table.c:981 ../src/dupe.c:2361 ../src/dupe.c:2688
+#: ../src/layout_util.c:1924 ../src/search.c:1114 ../src/toolbar.c:95
 msgid "Select none"
 msgstr ""
 
-#: ../src/collect-table.c:955
+#: ../src/collect-table.c:983
 msgid "Invert selection"
 msgstr ""
 
-#: ../src/collect-table.c:957
-msgid "Rectangular selection"
-msgstr ""
-
-#: ../src/collect-table.c:969 ../src/dupe.c:2372 ../src/img-view.c:1332
-#: ../src/layout_image.c:699 ../src/layout_util.c:1816
-#: ../src/pan-view/pan-view.c:2296 ../src/search.c:1119
-#: ../src/view_file/view_file.c:626
-msgid "_Copy..."
-msgstr ""
-
-#: ../src/collect-table.c:971 ../src/dupe.c:2374 ../src/img-view.c:1333
-#: ../src/layout_image.c:701 ../src/layout_util.c:1817
-#: ../src/pan-view/pan-view.c:2298 ../src/search.c:1121
-#: ../src/view_file/view_file.c:628
-msgid "_Move..."
-msgstr ""
-
-#: ../src/collect-table.c:973 ../src/dupe.c:2376 ../src/img-view.c:1334
-#: ../src/layout_image.c:703 ../src/layout_util.c:1818
-#: ../src/pan-view/pan-view.c:2300 ../src/search.c:1123 ../src/view_dir.c:683
-#: ../src/view_file/view_file.c:630
-msgid "_Rename..."
-msgstr ""
-
-#: ../src/collect-table.c:975 ../src/dupe.c:2378 ../src/img-view.c:1335
-#: ../src/layout_image.c:705 ../src/pan-view/pan-view.c:2302
-#: ../src/search.c:1125 ../src/view_dir.c:686 ../src/view_file/view_file.c:632
-msgid "_Copy path"
-msgstr ""
-
-#: ../src/collect-table.c:977 ../src/dupe.c:2380 ../src/img-view.c:1336
-#: ../src/layout_image.c:706 ../src/pan-view/pan-view.c:2304
-#: ../src/search.c:1127 ../src/view_dir.c:689 ../src/view_file/view_file.c:634
-msgid "_Copy path unquoted"
-msgstr ""
-
-#: ../src/collect-table.c:979 ../src/dupe.c:2382 ../src/img-view.c:1337
-#: ../src/layout_image.c:708 ../src/layout_util.c:1819
-#: ../src/layout_util.c:1820 ../src/layout_util.c:1821
-#: ../src/pan-view/pan-view.c:2306 ../src/search.c:1129 ../src/view_dir.c:692
-#: ../src/view_file/view_file.c:636
-msgid "_Delete..."
-msgstr ""
-
 #: ../src/collect-table.c:985
+msgid "Rectangular selection"
+msgstr ""
+
+#: ../src/collect-table.c:997 ../src/dupe.c:2382 ../src/img-view.c:1341
+#: ../src/layout_image.c:709 ../src/layout_util.c:1897
+#: ../src/pan-view/pan-view.c:2315 ../src/search.c:1131
+#: ../src/view_file/view_file.c:627
+msgid "_Copy..."
+msgstr ""
+
+#: ../src/collect-table.c:999 ../src/dupe.c:2384 ../src/img-view.c:1342
+#: ../src/layout_image.c:711 ../src/layout_util.c:1898
+#: ../src/pan-view/pan-view.c:2317 ../src/search.c:1133
+#: ../src/view_file/view_file.c:629
+msgid "_Move..."
+msgstr ""
+
+#: ../src/collect-table.c:1001 ../src/dupe.c:2386 ../src/img-view.c:1343
+#: ../src/layout_image.c:713 ../src/layout_util.c:1899
+#: ../src/pan-view/pan-view.c:2319 ../src/search.c:1135 ../src/view_dir.c:686
+#: ../src/view_file/view_file.c:631
+msgid "_Rename..."
+msgstr ""
+
+#: ../src/collect-table.c:1003 ../src/dupe.c:2388 ../src/img-view.c:1344
+#: ../src/layout_image.c:715 ../src/pan-view/pan-view.c:2321
+#: ../src/search.c:1137 ../src/view_dir.c:689 ../src/view_file/view_file.c:633
+msgid "_Copy path"
+msgstr ""
+
+#: ../src/collect-table.c:1005 ../src/dupe.c:2390 ../src/img-view.c:1345
+#: ../src/layout_image.c:716 ../src/pan-view/pan-view.c:2323
+#: ../src/search.c:1139 ../src/view_dir.c:692 ../src/view_file/view_file.c:635
+msgid "_Copy path unquoted"
+msgstr ""
+
+#: ../src/collect-table.c:1010 ../src/dupe.c:2395 ../src/img-view.c:1349
+#: ../src/layout_image.c:721 ../src/layout_util.c:1900
+#: ../src/layout_util.c:1901 ../src/layout_util.c:1902
+#: ../src/pan-view/pan-view.c:2328 ../src/search.c:1144
+#: ../src/view_file/view_file.c:639
+msgid "Move to Trash..."
+msgstr "Move to Rubbish bin..."
+
+#: ../src/collect-table.c:1011 ../src/dupe.c:2396 ../src/img-view.c:1350
+#: ../src/layout_image.c:722 ../src/pan-view/pan-view.c:2329
+#: ../src/search.c:1145 ../src/view_file/view_file.c:640
+msgid "Move to Trash"
+msgstr "Move to Rubbish bin"
+
+#: ../src/collect-table.c:1014 ../src/dupe.c:2399 ../src/img-view.c:1353
+#: ../src/layout_image.c:726 ../src/pan-view/pan-view.c:2332
+#: ../src/search.c:1148 ../src/view_dir.c:695 ../src/view_file/view_file.c:643
+msgid "_Delete..."
+msgstr ""
+
+#: ../src/collect-table.c:1015 ../src/dupe.c:2400 ../src/img-view.c:1354
+#: ../src/layout_image.c:727 ../src/pan-view/pan-view.c:2333
+#: ../src/search.c:1149 ../src/ui_pathsel.c:644
+#: ../src/view_file/view_file.c:644
+msgid "_Delete"
+msgstr ""
+
+#: ../src/collect-table.c:1021
 msgid "Randomize"
 msgstr "Randomise"
 
-#: ../src/collect-table.c:987 ../src/view_file/view_file.c:661
+#: ../src/collect-table.c:1023 ../src/view_file/view_file.c:669
 msgid "_Sort"
 msgstr ""
 
-#: ../src/collect-table.c:990 ../src/view_file/view_file.c:677
+#: ../src/collect-table.c:1026 ../src/view_file/view_file.c:685
 msgid "Show filename _text"
 msgstr ""
 
-#: ../src/collect-table.c:993
+#: ../src/collect-table.c:1028 ../src/view_file/view_file.c:693
+#: ../src/view_file/view_file.c:697
+msgid "Show star rating"
+msgstr ""
+
+#: ../src/collect-table.c:1031
 msgid "_Save collection"
 msgstr ""
 
-#: ../src/collect-table.c:995
+#: ../src/collect-table.c:1033
 msgid "Save collection _as..."
 msgstr ""
 
-#: ../src/collect-table.c:998 ../src/layout_util.c:1812
-#: ../src/view_file/view_file.c:646
+#: ../src/collect-table.c:1036 ../src/layout_util.c:1893
+#: ../src/view_file/view_file.c:654
 msgid "_Find duplicates..."
 msgstr ""
 
-#: ../src/collect-table.c:1000 ../src/dupe.c:2369 ../src/layout_util.c:1814
-#: ../src/search.c:1116
+#: ../src/collect-table.c:1038 ../src/dupe.c:2379 ../src/layout_util.c:1895
+#: ../src/search.c:1128
 msgid "Print..."
 msgstr ""
 
-#: ../src/collect-table.c:2189 ../src/dupe.c:3528 ../src/img-view.c:1496
+#: ../src/collect-table.c:2227 ../src/dupe.c:3548 ../src/img-view.c:1514
 msgid "Dropped list includes folders."
 msgstr ""
 
-#: ../src/collect-table.c:2191 ../src/dupe.c:3530 ../src/img-view.c:1498
+#: ../src/collect-table.c:2229 ../src/dupe.c:3550 ../src/img-view.c:1516
 msgid "_Add contents"
 msgstr ""
 
-#: ../src/collect-table.c:2193 ../src/dupe.c:3531 ../src/img-view.c:1499
+#: ../src/collect-table.c:2231 ../src/dupe.c:3551 ../src/img-view.c:1517
 msgid "Add contents _recursive"
 msgstr ""
 
-#: ../src/collect-table.c:2195 ../src/dupe.c:3532 ../src/img-view.c:1500
+#: ../src/collect-table.c:2233 ../src/dupe.c:3552 ../src/img-view.c:1518
 msgid "_Skip folders"
 msgstr ""
 
-#: ../src/collect-table.c:2198 ../src/dupe.c:3534 ../src/img-view.c:1502
-#: ../src/view_dir.c:426
+#: ../src/collect-table.c:2236 ../src/dupe.c:3554 ../src/img-view.c:1520
+#: ../src/view_dir.c:429
 msgid "Cancel"
 msgstr ""
 
@@ -945,7 +994,7 @@
 msgid "Could not create directory"
 msgstr ""
 
-#: ../src/desktop_file.c:191 ../src/desktop_file.c:554
+#: ../src/desktop_file.c:191 ../src/desktop_file.c:648
 msgid "Desktop file"
 msgstr ""
 
@@ -956,8 +1005,8 @@
 "%s"
 msgstr ""
 
-#: ../src/desktop_file.c:301 ../src/ui_pathsel.c:495 ../src/utilops.c:2157
-#: ../src/utilops.c:2184 ../src/utilops.c:2706
+#: ../src/desktop_file.c:301 ../src/ui_pathsel.c:495 ../src/utilops.c:2158
+#: ../src/utilops.c:2192 ../src/utilops.c:2714
 msgid "File deletion failed"
 msgstr ""
 
@@ -977,230 +1026,234 @@
 msgid "new.desktop"
 msgstr ""
 
-#: ../src/desktop_file.c:467
+#: ../src/desktop_file.c:548 ../src/menu.c:119
 msgid "Plugins"
 msgstr ""
 
-#: ../src/desktop_file.c:544
+#: ../src/desktop_file.c:616
+msgid "Disabled"
+msgstr ""
+
+#: ../src/desktop_file.c:638
 msgid "Hidden"
 msgstr ""
 
-#: ../src/desktop_file.c:563 ../src/dupe.c:2771 ../src/dupe.c:3310
-#: ../src/print.c:3211 ../src/search.c:3329 ../src/ui_pathsel.c:1120
-#: ../src/utilops.c:501
+#: ../src/desktop_file.c:657 ../src/dupe.c:2790 ../src/dupe.c:3330
+#: ../src/preferences.c:2063 ../src/print.c:416 ../src/search.c:3453
+#: ../src/ui_pathsel.c:1120 ../src/utilops.c:501
 msgid "Path"
 msgstr ""
 
-#: ../src/dupe.c:109
+#: ../src/dupe.c:110
 msgid "Drop files to compare them."
 msgstr ""
 
-#: ../src/dupe.c:113
+#: ../src/dupe.c:114
 #, c-format
 msgid "%d files"
 msgstr ""
 
-#: ../src/dupe.c:117
+#: ../src/dupe.c:118
 #, c-format
 msgid "%d matches found in %d files"
 msgstr ""
 
-#: ../src/dupe.c:122
+#: ../src/dupe.c:123
 msgid "[set 1]"
 msgstr ""
 
-#: ../src/dupe.c:1489
+#: ../src/dupe.c:1490
 msgid "Reading checksums..."
 msgstr ""
 
-#: ../src/dupe.c:1522
+#: ../src/dupe.c:1523
 msgid "Reading dimensions..."
 msgstr ""
 
-#: ../src/dupe.c:1556
+#: ../src/dupe.c:1557
 msgid "Reading similarity data..."
 msgstr ""
 
-#: ../src/dupe.c:1592 ../src/dupe.c:1623
+#: ../src/dupe.c:1593 ../src/dupe.c:1624
 msgid "Comparing..."
 msgstr ""
 
-#: ../src/dupe.c:1603 ../src/pan-view/pan-view.c:1012
+#: ../src/dupe.c:1604 ../src/pan-view/pan-view.c:1012
 msgid "Sorting..."
 msgstr ""
 
-#: ../src/dupe.c:2353
+#: ../src/dupe.c:2363
 msgid "Select group _1 duplicates"
 msgstr ""
 
-#: ../src/dupe.c:2355
+#: ../src/dupe.c:2365
 msgid "Select group _2 duplicates"
 msgstr ""
 
-#: ../src/dupe.c:2387 ../src/dupe.c:2674 ../src/search.c:1134
+#: ../src/dupe.c:2406 ../src/dupe.c:2693
 msgid "C_lear"
 msgstr ""
 
-#: ../src/dupe.c:2390 ../src/dupe.c:2677
+#: ../src/dupe.c:2409 ../src/dupe.c:2696
 msgid "Close _window"
 msgstr ""
 
-#: ../src/dupe.c:2550
+#: ../src/dupe.c:2569
 #, c-format
 msgid "%d files (set 2)"
 msgstr ""
 
-#: ../src/dupe.c:2766
+#: ../src/dupe.c:2785
 msgid "Name case-insensitive"
 msgstr ""
 
-#: ../src/dupe.c:2767 ../src/dupe.c:3307 ../src/preferences.c:2017
-#: ../src/print.c:3215 ../src/search.c:3326
-#: ../src/view_file/view_file_list.c:2071
+#: ../src/dupe.c:2786 ../src/dupe.c:3327 ../src/preferences.c:2033
+#: ../src/preferences.c:2065 ../src/print.c:420 ../src/search.c:3450
+#: ../src/view_file/view_file_list.c:2082
 msgid "Size"
 msgstr ""
 
-#: ../src/dupe.c:2768 ../src/dupe.c:3308 ../src/exif.c:336
-#: ../src/exif-common.c:870 ../src/print.c:3213 ../src/search.c:3327
-#: ../src/view_file/view_file_list.c:2075
+#: ../src/dupe.c:2787 ../src/dupe.c:3328 ../src/exif.c:336
+#: ../src/exif-common.c:900 ../src/preferences.c:2064 ../src/print.c:418
+#: ../src/search.c:3451 ../src/view_file/view_file_list.c:2086
 msgid "Date"
 msgstr ""
 
-#: ../src/dupe.c:2769 ../src/dupe.c:3309 ../src/print.c:3217
-#: ../src/search.c:3328
+#: ../src/dupe.c:2788 ../src/dupe.c:3329 ../src/preferences.c:2067
+#: ../src/print.c:422 ../src/search.c:3452
 msgid "Dimensions"
 msgstr ""
 
-#: ../src/dupe.c:2770
+#: ../src/dupe.c:2789
 msgid "Checksum"
 msgstr ""
 
-#: ../src/dupe.c:2772
+#: ../src/dupe.c:2791
 msgid "Similarity (high)"
 msgstr ""
 
-#: ../src/dupe.c:2773
+#: ../src/dupe.c:2792
 msgid "Similarity"
 msgstr ""
 
-#: ../src/dupe.c:2774
+#: ../src/dupe.c:2793
 msgid "Similarity (low)"
 msgstr ""
 
-#: ../src/dupe.c:2775
+#: ../src/dupe.c:2794
 msgid "Similarity (custom)"
 msgstr ""
 
-#: ../src/dupe.c:3260 ../src/toolbar.c:86
+#: ../src/dupe.c:3280 ../src/toolbar.c:86
 msgid "Find duplicates"
 msgstr ""
 
-#: ../src/dupe.c:3342
+#: ../src/dupe.c:3362
 msgid "Compare to:"
 msgstr ""
 
-#: ../src/dupe.c:3355
+#: ../src/dupe.c:3375
 msgid "Compare by:"
 msgstr ""
 
-#: ../src/dupe.c:3363 ../src/preferences.c:1714 ../src/search.c:3342
+#: ../src/dupe.c:3383 ../src/preferences.c:1721 ../src/search.c:3466
 msgid "Thumbnails"
 msgstr ""
 
-#: ../src/dupe.c:3371
+#: ../src/dupe.c:3391
 msgid "Ignore Rotation"
 msgstr ""
 
-#: ../src/dupe.c:3379
+#: ../src/dupe.c:3399
 msgid "Compare two file sets"
 msgstr ""
 
-#: ../src/dupe.c:3399 ../src/menu.c:229
+#: ../src/dupe.c:3419 ../src/menu.c:229
 msgid "Sort"
 msgstr ""
 
-#: ../src/dupe.c:3407
+#: ../src/dupe.c:3427
 msgid "Custom Threshold"
 msgstr ""
 
-#: ../src/editors.c:305
+#: ../src/editors.c:307
 #, c-format
 msgid "Desktop file '%s' should not include extension in Icon key: '%s'\n"
 msgstr ""
 
 #. flash fired (bit 0)
-#: ../src/editors.c:359 ../src/exif.c:220 ../src/exif-common.c:429
+#: ../src/editors.c:377 ../src/exif.c:220 ../src/exif-common.c:429
 msgid "yes"
 msgstr ""
 
-#: ../src/editors.c:359 ../src/exif.c:219 ../src/exif-common.c:429
+#: ../src/editors.c:377 ../src/exif.c:219 ../src/exif-common.c:429
 msgid "no"
 msgstr ""
 
-#: ../src/editors.c:531
+#: ../src/editors.c:554
 msgid "stopping..."
 msgstr ""
 
-#: ../src/editors.c:552
+#: ../src/editors.c:575
 msgid "Edit command results"
 msgstr ""
 
-#: ../src/editors.c:555
+#: ../src/editors.c:578
 #, c-format
 msgid "Output of %s"
 msgstr ""
 
-#: ../src/editors.c:1082
+#: ../src/editors.c:1105
 #, c-format
 msgid ""
 "Failed to run command:\n"
 "%s\n"
 msgstr ""
 
-#: ../src/editors.c:1209
+#: ../src/editors.c:1232
 msgid "stopped by user"
 msgstr ""
 
-#: ../src/editors.c:1294
+#: ../src/editors.c:1317
 #, c-format
 msgid ""
 "%s\n"
 "\"%s\""
 msgstr ""
 
-#: ../src/editors.c:1296
+#: ../src/editors.c:1319
 msgid "Invalid editor command"
 msgstr ""
 
-#: ../src/editors.c:1383
+#: ../src/editors.c:1406
 msgid "Editor template is empty."
 msgstr ""
 
-#: ../src/editors.c:1384
+#: ../src/editors.c:1407
 msgid "Editor template has incorrect syntax."
 msgstr ""
 
-#: ../src/editors.c:1385
+#: ../src/editors.c:1408
 msgid "Editor template uses incompatible macros."
 msgstr ""
 
-#: ../src/editors.c:1386
+#: ../src/editors.c:1409
 msgid "Can't find matching file type."
 msgstr ""
 
-#: ../src/editors.c:1387
+#: ../src/editors.c:1410
 msgid "Can't execute external editor."
 msgstr ""
 
-#: ../src/editors.c:1388
+#: ../src/editors.c:1411
 msgid "External editor returned error status."
 msgstr ""
 
-#: ../src/editors.c:1389
+#: ../src/editors.c:1412
 msgid "File was skipped."
 msgstr ""
 
-#: ../src/editors.c:1390
+#: ../src/editors.c:1413
 msgid "Unknown error."
 msgstr ""
 
@@ -1592,7 +1645,7 @@
 msgid "Spectral Sensitivity"
 msgstr ""
 
-#: ../src/exif.c:349 ../src/exif.c:385 ../src/exif-common.c:875
+#: ../src/exif.c:349 ../src/exif.c:385 ../src/exif-common.c:905
 msgid "ISO sensitivity"
 msgstr ""
 
@@ -1608,7 +1661,7 @@
 msgid "Date original"
 msgstr ""
 
-#: ../src/exif.c:353
+#: ../src/exif.c:353 ../src/preferences.c:2078
 msgid "Date digitized"
 msgstr "Date digitised"
 
@@ -1620,11 +1673,11 @@
 msgid "Compression ratio"
 msgstr ""
 
-#: ../src/exif.c:356 ../src/exif-common.c:872
+#: ../src/exif.c:356 ../src/exif-common.c:902 ../src/preferences.c:2084
 msgid "Shutter speed"
 msgstr ""
 
-#: ../src/exif.c:357 ../src/exif-common.c:873
+#: ../src/exif.c:357 ../src/exif-common.c:903 ../src/preferences.c:2080
 msgid "Aperture"
 msgstr ""
 
@@ -1632,7 +1685,7 @@
 msgid "Brightness"
 msgstr ""
 
-#: ../src/exif.c:359 ../src/exif-common.c:874
+#: ../src/exif.c:359 ../src/exif-common.c:904 ../src/preferences.c:2081
 msgid "Exposure bias"
 msgstr ""
 
@@ -1640,7 +1693,7 @@
 msgid "Maximum aperture"
 msgstr ""
 
-#: ../src/exif.c:361 ../src/exif-common.c:878
+#: ../src/exif.c:361 ../src/exif-common.c:908 ../src/preferences.c:2088
 msgid "Subject distance"
 msgstr ""
 
@@ -1652,11 +1705,11 @@
 msgid "Light source"
 msgstr ""
 
-#: ../src/exif.c:364 ../src/exif-common.c:879
+#: ../src/exif.c:364 ../src/exif-common.c:909 ../src/preferences.c:2089
 msgid "Flash"
 msgstr ""
 
-#: ../src/exif.c:365 ../src/exif-common.c:876
+#: ../src/exif.c:365 ../src/exif-common.c:906 ../src/preferences.c:2086
 msgid "Focal length"
 msgstr ""
 
@@ -1693,11 +1746,11 @@
 msgstr "Colourspace"
 
 #. ExifImageWidth, ExifImageHeight can also be unsigned short
-#: ../src/exif.c:375 ../src/preferences.c:2829
+#: ../src/exif.c:375 ../src/preferences.c:3411
 msgid "Width"
 msgstr ""
 
-#: ../src/exif.c:376 ../src/preferences.c:2831
+#: ../src/exif.c:376 ../src/preferences.c:3413
 msgid "Height"
 msgstr ""
 
@@ -1782,7 +1835,7 @@
 msgid "Contrast"
 msgstr ""
 
-#: ../src/exif.c:399 ../src/preferences.c:2435
+#: ../src/exif.c:399 ../src/preferences.c:2986
 msgid "Saturation"
 msgstr ""
 
@@ -1818,11 +1871,11 @@
 msgid "mode:"
 msgstr ""
 
-#: ../src/exif-common.c:437 ../src/trash.c:213
+#: ../src/exif-common.c:437
 msgid "on"
 msgstr ""
 
-#: ../src/exif-common.c:440 ../src/trash.c:218
+#: ../src/exif-common.c:440
 msgid "off"
 msgstr ""
 
@@ -1860,141 +1913,165 @@
 msgid "Below Sea Level"
 msgstr ""
 
-#: ../src/exif-common.c:869
+#: ../src/exif-common.c:899 ../src/preferences.c:2083
 msgid "Camera"
 msgstr ""
 
-#: ../src/exif-common.c:871
+#: ../src/exif-common.c:901
 msgid "DateDigitized"
 msgstr "DateDigitised"
 
-#: ../src/exif-common.c:877
+#: ../src/exif-common.c:907
 msgid "Focal length 35mm"
 msgstr ""
 
-#: ../src/exif-common.c:880
+#: ../src/exif-common.c:910 ../src/preferences.c:2082
 msgid "Resolution"
 msgstr ""
 
-#: ../src/exif-common.c:881
+#: ../src/exif-common.c:911 ../src/preferences.c:2090
 msgid "Color profile"
 msgstr "Colour profile"
 
-#: ../src/exif-common.c:882
+#: ../src/exif-common.c:912
 msgid "GPS position"
 msgstr ""
 
-#: ../src/exif-common.c:883
+#: ../src/exif-common.c:913
 msgid "GPS altitude"
 msgstr ""
 
-#: ../src/exif-common.c:884
+#: ../src/exif-common.c:914 ../src/preferences.c:2093
 msgid "Local time"
 msgstr ""
 
-#: ../src/exif-common.c:885
+#: ../src/exif-common.c:915
 msgid "Time zone"
 msgstr ""
 
-#: ../src/exif-common.c:886
+#: ../src/exif-common.c:916 ../src/preferences.c:2095
+msgid "Country name"
+msgstr ""
+
+#: ../src/exif-common.c:917 ../src/preferences.c:2096
+msgid "Country code"
+msgstr ""
+
+#: ../src/exif-common.c:918 ../src/preferences.c:2097
 msgid "Star rating"
 msgstr ""
 
-#: ../src/exif-common.c:887
+#: ../src/exif-common.c:919
 msgid "File size"
 msgstr ""
 
-#: ../src/exif-common.c:888
+#: ../src/exif-common.c:920
 msgid "File date"
 msgstr ""
 
-#: ../src/exif-common.c:889
+#: ../src/exif-common.c:921 ../src/preferences.c:2072
 msgid "File mode"
 msgstr ""
 
-#: ../src/exif-common.c:890
+#: ../src/exif-common.c:922 ../src/preferences.c:2071
 msgid "File ctime"
 msgstr ""
 
-#: ../src/filedata.c:110
+#: ../src/exif-common.c:923 ../src/preferences.c:2073
+msgid "File owner"
+msgstr ""
+
+#: ../src/exif-common.c:924 ../src/preferences.c:2074
+msgid "File group"
+msgstr ""
+
+#: ../src/exif-common.c:925 ../src/preferences.c:2075
+msgid "File link"
+msgstr ""
+
+#: ../src/exif-common.c:926 ../src/preferences.c:2076
+msgid "File class"
+msgstr ""
+
+#: ../src/filedata.c:112
 #, c-format
 msgid "%d bytes"
 msgstr ""
 
-#: ../src/filedata.c:114
+#: ../src/filedata.c:116
 #, c-format
 msgid "%.1f K"
 msgstr ""
 
-#: ../src/filedata.c:118
+#: ../src/filedata.c:120
 #, c-format
 msgid "%.1f MB"
 msgstr ""
 
-#: ../src/filedata.c:123
+#: ../src/filedata.c:125
 #, c-format
 msgid "%.1f GB"
 msgstr ""
 
-#: ../src/filedata.c:2625
+#: ../src/filedata.c:2680
 msgid "file or directory does not exist"
 msgstr ""
 
-#: ../src/filedata.c:2631
+#: ../src/filedata.c:2686
 msgid "destination already exists"
 msgstr ""
 
-#: ../src/filedata.c:2637
+#: ../src/filedata.c:2692
 msgid "destination can't be overwritten"
 msgstr ""
 
-#: ../src/filedata.c:2643
+#: ../src/filedata.c:2698
 msgid "destination directory is not writable"
 msgstr ""
 
-#: ../src/filedata.c:2649
+#: ../src/filedata.c:2704
 msgid "destination directory does not exist"
 msgstr ""
 
-#: ../src/filedata.c:2655
+#: ../src/filedata.c:2710
 msgid "source directory is not writable"
 msgstr ""
 
-#: ../src/filedata.c:2661
+#: ../src/filedata.c:2716
 msgid "no read permission"
 msgstr ""
 
-#: ../src/filedata.c:2667
+#: ../src/filedata.c:2722
 msgid "file is readonly"
 msgstr ""
 
-#: ../src/filedata.c:2673
+#: ../src/filedata.c:2728
 msgid "destination already exists and will be overwritten"
 msgstr ""
 
-#: ../src/filedata.c:2679
+#: ../src/filedata.c:2734
 msgid "source and destination are the same"
 msgstr ""
 
-#: ../src/filedata.c:2685
+#: ../src/filedata.c:2740
 msgid "source and destination have different extension"
 msgstr ""
 
-#: ../src/filedata.c:2691
+#: ../src/filedata.c:2746
 msgid "there are unsaved metadata changes for the file"
 msgstr ""
 
-#: ../src/filedata.c:2697
+#: ../src/filedata.c:2752
 msgid "another destination file has the same filename"
 msgstr ""
 
-#: ../src/filedata.c:3251
+#: ../src/filedata.c:3306
 #, c-format
 msgid "Error: Unable to write marks lists to: %s\n"
 msgstr ""
 
-#: ../src/fullscreen.c:242 ../src/layout_util.c:1883 ../src/layout_util.c:1884
-#: ../src/layout_util.c:1885 ../src/preferences.c:2030
+#: ../src/fullscreen.c:242 ../src/layout_util.c:1966 ../src/layout_util.c:1967
+#: ../src/layout_util.c:1968 ../src/preferences.c:2046
 msgid "Full screen"
 msgstr ""
 
@@ -2067,7 +2144,7 @@
 msgid "Unable to write history lists to: %s\n"
 msgstr ""
 
-#: ../src/image.c:190
+#: ../src/image.c:314
 #, c-format
 msgid " (Collection %s)"
 msgstr ""
@@ -2077,201 +2154,201 @@
 msgid "Error interpreting JPEG image file (%s)"
 msgstr ""
 
-#: ../src/img-view.c:1312 ../src/layout_image.c:674 ../src/layout_util.c:1850
-#: ../src/layout_util.c:1851 ../src/layout_util.c:1866
-#: ../src/layout_util.c:1867 ../src/pan-view/pan-view.c:2275
+#: ../src/img-view.c:1321 ../src/layout_image.c:684 ../src/layout_util.c:1933
+#: ../src/layout_util.c:1934 ../src/layout_util.c:1949
+#: ../src/layout_util.c:1950 ../src/pan-view/pan-view.c:2294
 msgid "Zoom _in"
 msgstr ""
 
-#: ../src/img-view.c:1313 ../src/layout_image.c:675 ../src/layout_util.c:1852
-#: ../src/layout_util.c:1853 ../src/layout_util.c:1868
-#: ../src/layout_util.c:1869 ../src/pan-view/pan-view.c:2277
+#: ../src/img-view.c:1322 ../src/layout_image.c:685 ../src/layout_util.c:1935
+#: ../src/layout_util.c:1936 ../src/layout_util.c:1951
+#: ../src/layout_util.c:1952 ../src/pan-view/pan-view.c:2296
 msgid "Zoom _out"
 msgstr ""
 
-#: ../src/img-view.c:1314 ../src/layout_image.c:676 ../src/layout_util.c:1854
-#: ../src/layout_util.c:1855 ../src/layout_util.c:1870
-#: ../src/layout_util.c:1871 ../src/pan-view/pan-view.c:2279
+#: ../src/img-view.c:1323 ../src/layout_image.c:686 ../src/layout_util.c:1937
+#: ../src/layout_util.c:1938 ../src/layout_util.c:1953
+#: ../src/layout_util.c:1954 ../src/pan-view/pan-view.c:2298
 msgid "Zoom _1:1"
 msgstr ""
 
-#: ../src/img-view.c:1315 ../src/layout_image.c:677
+#: ../src/img-view.c:1324 ../src/layout_image.c:687
 msgid "Fit image to _window"
 msgstr ""
 
-#: ../src/img-view.c:1324 ../src/layout_image.c:687 ../src/layout_util.c:1848
+#: ../src/img-view.c:1333 ../src/layout_image.c:697 ../src/layout_util.c:1930
 msgid "Set as _wallpaper"
 msgstr ""
 
-#: ../src/img-view.c:1329 ../src/layout_image.c:694
+#: ../src/img-view.c:1338 ../src/layout_image.c:704
 msgid "_Go to directory view"
 msgstr ""
 
-#: ../src/img-view.c:1348 ../src/layout_image.c:719
+#: ../src/img-view.c:1366 ../src/layout_image.c:739
 msgid "_Stop slideshow"
 msgstr ""
 
-#: ../src/img-view.c:1351 ../src/layout_image.c:722
+#: ../src/img-view.c:1369 ../src/layout_image.c:742
 msgid "Continue slides_how"
 msgstr ""
 
-#: ../src/img-view.c:1356 ../src/img-view.c:1364 ../src/layout_image.c:727
-#: ../src/layout_image.c:734
+#: ../src/img-view.c:1374 ../src/img-view.c:1382 ../src/layout_image.c:747
+#: ../src/layout_image.c:754
 msgid "Pause slides_how"
 msgstr ""
 
-#: ../src/img-view.c:1362 ../src/layout_image.c:733
+#: ../src/img-view.c:1380 ../src/layout_image.c:753
 msgid "_Start slideshow"
 msgstr ""
 
-#: ../src/img-view.c:1370 ../src/layout_image.c:744
-#: ../src/pan-view/pan-view.c:2359
+#: ../src/img-view.c:1388 ../src/layout_image.c:764
+#: ../src/pan-view/pan-view.c:2386
 msgid "Exit _full screen"
 msgstr ""
 
-#: ../src/img-view.c:1374 ../src/layout_image.c:740
-#: ../src/pan-view/pan-view.c:2363
+#: ../src/img-view.c:1392 ../src/layout_image.c:760
+#: ../src/pan-view/pan-view.c:2390
 msgid "_Full screen"
 msgstr ""
 
-#: ../src/img-view.c:1378 ../src/layout_util.c:1826
-#: ../src/pan-view/pan-view.c:2367
+#: ../src/img-view.c:1396 ../src/layout_util.c:1908
+#: ../src/pan-view/pan-view.c:2394
 msgid "C_lose window"
 msgstr ""
 
-#: ../src/layout.c:407 ../src/view_file/view_file.c:658
+#: ../src/layout.c:424 ../src/view_file/view_file.c:666
 msgid "Ascending"
 msgstr ""
 
-#: ../src/layout.c:487
+#: ../src/layout.c:504
 msgid "Scroll to top left corner"
 msgstr ""
 
-#: ../src/layout.c:492
+#: ../src/layout.c:509
 msgid "Scroll to image center"
 msgstr ""
 
-#: ../src/layout.c:497
+#: ../src/layout.c:514
 msgid "Keep the region from previous image"
 msgstr ""
 
-#: ../src/layout.c:603
+#: ../src/layout.c:620
 msgid " Slideshow"
 msgstr ""
 
-#: ../src/layout.c:607
+#: ../src/layout.c:624
 msgid " Paused"
 msgstr ""
 
-#: ../src/layout.c:623
+#: ../src/layout.c:640
 #, c-format
 msgid "%s, %d files (%s, %d)%s"
 msgstr ""
 
-#: ../src/layout.c:630
+#: ../src/layout.c:647
 #, c-format
 msgid "%s, %d files%s"
 msgstr ""
 
-#: ../src/layout.c:635
+#: ../src/layout.c:652
 #, c-format
 msgid "%d files%s"
 msgstr ""
 
-#: ../src/layout.c:681
+#: ../src/layout.c:698
 #, c-format
 msgid "(no read permission) %s bytes"
 msgstr ""
 
-#: ../src/layout.c:685
+#: ../src/layout.c:702
 #, c-format
 msgid "( ? x ? ) %s bytes"
 msgstr ""
 
-#: ../src/layout.c:693
+#: ../src/layout.c:710
 #, c-format
 msgid "( %d x %d ) %s bytes"
 msgstr ""
 
-#: ../src/layout.c:779
+#: ../src/layout.c:796
 msgid "Select sort order"
 msgstr ""
 
-#: ../src/layout.c:784
+#: ../src/layout.c:801
 msgid "Folder contents (files selected)"
 msgstr ""
 
-#: ../src/layout.c:793
+#: ../src/layout.c:810
 msgid "(Image dimensions) Image size"
 msgstr ""
 
-#: ../src/layout.c:803
+#: ../src/layout.c:820
 msgid "Select zoom and scroll mode"
 msgstr ""
 
 #. expand only in small format
-#: ../src/layout.c:813
+#: ../src/layout.c:830
 msgid "[Pixel x,y coord]: (Pixel R,G,B value)"
 msgstr ""
 
-#: ../src/layout.c:1458 ../src/layout_config.c:67
+#: ../src/layout.c:1493 ../src/layout_config.c:67
 msgid "Tools"
 msgstr ""
 
-#: ../src/layout.c:2085
+#: ../src/layout.c:2123
 msgid "Window options and layout"
 msgstr ""
 
-#: ../src/layout.c:2150
+#: ../src/layout.c:2188
 msgid "General options"
 msgstr ""
 
-#: ../src/layout.c:2152
+#: ../src/layout.c:2190
 msgid "Home path (empty to use your home directory)"
 msgstr ""
 
-#: ../src/layout.c:2160
+#: ../src/layout.c:2198
 msgid "Use current"
 msgstr ""
 
-#: ../src/layout.c:2163
+#: ../src/layout.c:2201
 msgid "Show date in directories list view"
 msgstr ""
 
-#: ../src/layout.c:2166
+#: ../src/layout.c:2204
 msgid "Exit program when this window is closed"
 msgstr ""
 
-#: ../src/layout.c:2169
+#: ../src/layout.c:2207
 msgid "Start-up directory:"
 msgstr ""
 
-#: ../src/layout.c:2171
+#: ../src/layout.c:2209
 msgid "No change"
 msgstr ""
 
-#: ../src/layout.c:2174
+#: ../src/layout.c:2212
 msgid "Restore last path"
 msgstr ""
 
-#: ../src/layout.c:2177
+#: ../src/layout.c:2215
 msgid "Home path"
 msgstr ""
 
-#: ../src/layout.c:2181 ../src/print.c:3375 ../src/print.c:3382
+#: ../src/layout.c:2219
 msgid "Layout"
 msgstr ""
 
-#: ../src/layout.c:2428
+#: ../src/layout.c:2466
 msgid "Invalid geometry\n"
 msgstr ""
 
-#: ../src/layout_config.c:67 ../src/preferences.c:2150 ../src/ui_pathsel.c:1187
+#: ../src/layout_config.c:67 ../src/preferences.c:2358 ../src/ui_pathsel.c:1187
 msgid "Files"
 msgstr ""
 
-#: ../src/layout_config.c:67 ../src/preferences.c:109 ../src/preferences.c:1915
-#: ../src/print.c:133 ../src/search.c:2088 ../src/search.c:3239
+#: ../src/layout_config.c:67 ../src/preferences.c:116 ../src/preferences.c:1934
+#: ../src/search.c:2178 ../src/search.c:3363
 msgid "Image"
 msgstr ""
 
@@ -2279,1216 +2356,1239 @@
 msgid "(drag to change order)"
 msgstr ""
 
-#: ../src/layout_image.c:747
+#: ../src/layout_image.c:767
 msgid "_Animate"
 msgstr ""
 
-#: ../src/layout_image.c:751
+#: ../src/layout_image.c:771
 msgid "Hide file _list"
 msgstr ""
 
-#: ../src/layout_image.c:1942
+#: ../src/layout_image.c:1962
 #, c-format
 msgid "[%*d,%*d]: RGB(%3d,%3d,%3d)"
 msgstr ""
 
-#: ../src/layout_image.c:1950
+#: ../src/layout_image.c:1970
 #, c-format
 msgid "[%*s,%*s]: RGB(---,---,---)"
 msgstr ""
 
-#: ../src/layout_util.c:255 ../src/layout_util.c:1912
+#: ../src/layout_util.c:265 ../src/layout_util.c:1995
 msgid "Clear Marks"
 msgstr ""
 
-#: ../src/layout_util.c:569
+#: ../src/layout_util.c:606
 msgid "Operation failed:\n"
 msgstr ""
 
-#: ../src/layout_util.c:572
+#: ../src/layout_util.c:609
 msgid "No file extension\n"
 msgstr ""
 
-#: ../src/layout_util.c:574
+#: ../src/layout_util.c:611
 msgid "Cannot create tmp file\n"
 msgstr ""
 
-#: ../src/layout_util.c:576
+#: ../src/layout_util.c:613
 msgid "Operation not supported for filetype\n"
 msgstr ""
 
-#: ../src/layout_util.c:578
+#: ../src/layout_util.c:615
 msgid "File is not writable\n"
 msgstr ""
 
-#: ../src/layout_util.c:580
+#: ../src/layout_util.c:617
 msgid "Exiftran error\n"
 msgstr ""
 
-#: ../src/layout_util.c:582
+#: ../src/layout_util.c:619
 msgid "Mogrify error\n"
 msgstr ""
 
-#: ../src/layout_util.c:586
+#: ../src/layout_util.c:623
 msgid "Image orientation"
 msgstr ""
 
-#: ../src/layout_util.c:1776
+#: ../src/layout_util.c:1857
 msgid "_File"
 msgstr ""
 
-#: ../src/layout_util.c:1777
-msgid "_Go"
-msgstr ""
-
-#: ../src/layout_util.c:1778 ../src/menu.c:119
-msgid "_Edit"
-msgstr ""
-
-#: ../src/layout_util.c:1779
-msgid "_Select"
-msgstr ""
-
-#: ../src/layout_util.c:1780 ../src/menu.c:380
-msgid "_Orientation"
-msgstr ""
-
-#: ../src/layout_util.c:1781
-msgid "_Rating"
-msgstr ""
-
-#: ../src/layout_util.c:1782
-msgid "P_references"
-msgstr ""
-
-#: ../src/layout_util.c:1784
-msgid "_Files and Folders"
-msgstr ""
-
-#: ../src/layout_util.c:1785
-msgid "_Zoom"
-msgstr ""
-
-#: ../src/layout_util.c:1786
-msgid "_Color Management"
-msgstr "_Colour Management"
-
-#: ../src/layout_util.c:1787
-msgid "_Connected Zoom"
-msgstr ""
-
-#: ../src/layout_util.c:1788
-msgid "Spli_t"
-msgstr ""
-
-#: ../src/layout_util.c:1789
-msgid "Stere_o"
-msgstr ""
-
-#: ../src/layout_util.c:1790 ../src/layout_util.c:1928
-msgid "Image _Overlay"
-msgstr ""
-
-#: ../src/layout_util.c:1791
-msgid "_Plugins"
-msgstr ""
-
-#: ../src/layout_util.c:1792
-msgid "_Help"
-msgstr ""
-
-#: ../src/layout_util.c:1794
-msgid "_First Image"
-msgstr ""
-
-#: ../src/layout_util.c:1794 ../src/toolbar.c:74
-msgid "First Image"
-msgstr ""
-
-#: ../src/layout_util.c:1795 ../src/layout_util.c:1796
-#: ../src/layout_util.c:1797
-msgid "_Previous Image"
-msgstr ""
-
-#: ../src/layout_util.c:1795 ../src/layout_util.c:1796
-#: ../src/layout_util.c:1797 ../src/toolbar.c:75
-msgid "Previous Image"
-msgstr ""
-
-#: ../src/layout_util.c:1798 ../src/layout_util.c:1799
-#: ../src/layout_util.c:1800
-msgid "_Next Image"
-msgstr ""
-
-#: ../src/layout_util.c:1798 ../src/layout_util.c:1799
-#: ../src/layout_util.c:1800 ../src/toolbar.c:76
-msgid "Next Image"
-msgstr ""
-
-#: ../src/layout_util.c:1801
-msgid "_Last Image"
-msgstr ""
-
-#: ../src/layout_util.c:1801 ../src/toolbar.c:77
-msgid "Last Image"
-msgstr ""
-
-#: ../src/layout_util.c:1802
-msgid "_Back"
-msgstr ""
-
-#: ../src/layout_util.c:1802 ../src/toolbar.c:78
-msgid "Back"
-msgstr ""
-
-#: ../src/layout_util.c:1803
-msgid "_Forward"
-msgstr ""
-
-#: ../src/layout_util.c:1803 ../src/toolbar.c:79
-msgid "Forward"
-msgstr ""
-
-#: ../src/layout_util.c:1804
-msgid "_Home"
-msgstr ""
-
-#: ../src/layout_util.c:1804 ../src/options.c:203 ../src/toolbar.c:80
-#: ../src/ui_bookmark.c:567 ../src/ui_pathsel.c:1056
-msgid "Home"
-msgstr ""
-
-#: ../src/layout_util.c:1805
-msgid "_Up"
-msgstr ""
-
-#: ../src/layout_util.c:1805 ../src/toolbar.c:81
-msgid "Up"
-msgstr ""
-
-#: ../src/layout_util.c:1807 ../src/toolbar.c:82
-msgid "New _window"
-msgstr ""
-
-#: ../src/layout_util.c:1807
-msgid "New window"
-msgstr ""
-
-#: ../src/layout_util.c:1808
-msgid "_New collection"
-msgstr ""
-
-#: ../src/layout_util.c:1808 ../src/menu.c:439 ../src/toolbar.c:83
-msgid "New collection"
-msgstr ""
-
-#: ../src/layout_util.c:1809
-msgid "_Open collection..."
-msgstr ""
-
-#: ../src/layout_util.c:1809
-msgid "Open collection..."
-msgstr ""
-
-#: ../src/layout_util.c:1810
-msgid "Open recen_t"
-msgstr ""
-
-#: ../src/layout_util.c:1810
-msgid "Open recent"
-msgstr ""
-
-#: ../src/layout_util.c:1811
-msgid "_Search..."
-msgstr ""
-
-#: ../src/layout_util.c:1811
-msgid "Search..."
-msgstr ""
-
-#: ../src/layout_util.c:1812
-msgid "Find duplicates..."
-msgstr ""
-
-#: ../src/layout_util.c:1813
-msgid "Pa_n view"
-msgstr ""
-
-#: ../src/layout_util.c:1813 ../src/toolbar.c:87
-msgid "Pan view"
-msgstr ""
-
-#: ../src/layout_util.c:1814
-msgid "_Print..."
-msgstr ""
-
-#: ../src/layout_util.c:1815
-msgid "N_ew folder..."
-msgstr ""
-
-#: ../src/layout_util.c:1815
-msgid "New folder..."
-msgstr ""
-
-#: ../src/layout_util.c:1816
-msgid "Copy..."
-msgstr ""
-
-#: ../src/layout_util.c:1817
-msgid "Move..."
-msgstr ""
-
-#: ../src/layout_util.c:1818
-msgid "Rename..."
-msgstr ""
-
-#: ../src/layout_util.c:1819 ../src/layout_util.c:1820
-#: ../src/layout_util.c:1821
-msgid "Delete..."
-msgstr ""
-
-#: ../src/layout_util.c:1822 ../src/view_file/view_file.c:640
-msgid "Enable file _grouping"
-msgstr ""
-
-#: ../src/layout_util.c:1822
-msgid "Enable file grouping"
-msgstr ""
-
-#: ../src/layout_util.c:1823 ../src/view_file/view_file.c:642
-msgid "Disable file groupi_ng"
-msgstr ""
-
-#: ../src/layout_util.c:1823
-msgid "Disable file grouping"
-msgstr ""
-
-#: ../src/layout_util.c:1824
-msgid "_Copy path to clipboard"
-msgstr ""
-
-#: ../src/layout_util.c:1824
-msgid "Copy path to clipboard"
-msgstr ""
-
-#: ../src/layout_util.c:1825
-msgid "_Copy path unquoted to clipboard"
-msgstr ""
-
-#: ../src/layout_util.c:1825
-msgid "Copy path unquoted to clipboard"
-msgstr ""
-
-#: ../src/layout_util.c:1826
-msgid "Close window"
-msgstr ""
-
-#: ../src/layout_util.c:1827
-msgid "_Quit"
-msgstr ""
-
-#: ../src/layout_util.c:1827 ../src/toolbar.c:117
-msgid "Quit"
-msgstr ""
-
-#: ../src/layout_util.c:1828 ../src/menu.c:322
-msgid "_Rotate clockwise"
-msgstr ""
-
-#: ../src/layout_util.c:1828
-msgid "Rotate clockwise"
-msgstr ""
-
-#: ../src/layout_util.c:1829
-msgid "_Rating 0"
-msgstr ""
-
-#: ../src/layout_util.c:1829
-msgid "Rating 0"
-msgstr ""
-
-#: ../src/layout_util.c:1830
-msgid "_Rating 1"
-msgstr ""
-
-#: ../src/layout_util.c:1830
-msgid "Rating 1"
-msgstr ""
-
-#: ../src/layout_util.c:1831
-msgid "_Rating 2"
-msgstr ""
-
-#: ../src/layout_util.c:1831
-msgid "Rating 2"
-msgstr ""
-
-#: ../src/layout_util.c:1832
-msgid "_Rating 3"
-msgstr ""
-
-#: ../src/layout_util.c:1832
-msgid "Rating 3"
-msgstr ""
-
-#: ../src/layout_util.c:1833
-msgid "_Rating 4"
-msgstr ""
-
-#: ../src/layout_util.c:1833
-msgid "Rating 4"
-msgstr ""
-
-#: ../src/layout_util.c:1834
-msgid "_Rating 5"
-msgstr ""
-
-#: ../src/layout_util.c:1834
-msgid "Rating 5"
-msgstr ""
-
-#: ../src/layout_util.c:1835
-msgid "_Rating -1"
-msgstr ""
-
-#: ../src/layout_util.c:1835
-msgid "Rating -1"
-msgstr ""
-
-#: ../src/layout_util.c:1836 ../src/menu.c:325
-msgid "Rotate _counterclockwise"
-msgstr ""
-
-#: ../src/layout_util.c:1836
-msgid "Rotate counterclockwise"
-msgstr ""
-
-#: ../src/layout_util.c:1837
-msgid "Rotate 1_80"
-msgstr ""
-
-#: ../src/layout_util.c:1837
-msgid "Rotate 180"
-msgstr ""
-
-#: ../src/layout_util.c:1838 ../src/menu.c:331
-msgid "_Mirror"
-msgstr ""
-
-#: ../src/layout_util.c:1838
-msgid "Mirror"
-msgstr ""
-
-#: ../src/layout_util.c:1839 ../src/menu.c:334
-msgid "_Flip"
-msgstr ""
-
-#: ../src/layout_util.c:1839
-msgid "Flip"
-msgstr ""
-
-#: ../src/layout_util.c:1840 ../src/menu.c:337
-msgid "_Original state"
-msgstr ""
-
-#: ../src/layout_util.c:1840
-msgid "Original state"
-msgstr ""
-
-#: ../src/layout_util.c:1841
-msgid "Select _all"
-msgstr ""
-
-#: ../src/layout_util.c:1842
-msgid "Select _none"
-msgstr ""
-
-#: ../src/layout_util.c:1843
-msgid "_Invert Selection"
-msgstr ""
-
-#: ../src/layout_util.c:1843
-msgid "Invert Selection"
-msgstr ""
-
-#: ../src/layout_util.c:1844
-msgid "P_references..."
-msgstr ""
-
-#: ../src/layout_util.c:1844
-msgid "Preferences..."
-msgstr ""
-
-#: ../src/layout_util.c:1845
-msgid "Configure _Plugins..."
-msgstr ""
-
-#: ../src/layout_util.c:1845
-msgid "Configure Plugins..."
-msgstr ""
-
-#: ../src/layout_util.c:1846
-msgid "_Configure this window..."
-msgstr ""
-
-#: ../src/layout_util.c:1846
-msgid "Configure this window..."
-msgstr ""
-
-#: ../src/layout_util.c:1847
-msgid "_Cache maintenance..."
-msgstr ""
-
-#: ../src/layout_util.c:1847
-msgid "Cache maintenance..."
-msgstr ""
-
-#: ../src/layout_util.c:1848
-msgid "Set as wallpaper"
-msgstr ""
-
-#: ../src/layout_util.c:1849
-msgid "_Save metadata"
-msgstr ""
-
-#: ../src/layout_util.c:1849
-msgid "Save metadata"
-msgstr ""
-
-#: ../src/layout_util.c:1850 ../src/layout_util.c:1851 ../src/toolbar.c:92
-msgid "Zoom in"
-msgstr ""
-
-#: ../src/layout_util.c:1852 ../src/layout_util.c:1853 ../src/toolbar.c:93
-msgid "Zoom out"
-msgstr ""
-
-#: ../src/layout_util.c:1854 ../src/layout_util.c:1855 ../src/toolbar.c:94
-msgid "Zoom 1:1"
-msgstr ""
-
-#: ../src/layout_util.c:1856 ../src/layout_util.c:1857
-#: ../src/layout_util.c:1872 ../src/layout_util.c:1873
-msgid "_Zoom to fit"
-msgstr ""
-
-#: ../src/layout_util.c:1856 ../src/layout_util.c:1857 ../src/toolbar.c:95
-msgid "Zoom to fit"
-msgstr ""
-
-#: ../src/layout_util.c:1858 ../src/layout_util.c:1874
-msgid "Fit _Horizontally"
-msgstr ""
-
 #: ../src/layout_util.c:1858
-msgid "Fit Horizontally"
-msgstr ""
-
-#: ../src/layout_util.c:1859 ../src/layout_util.c:1875
-msgid "Fit _Vertically"
+msgid "_Go"
 msgstr ""
 
 #: ../src/layout_util.c:1859
-msgid "Fit Vertically"
-msgstr ""
-
-#: ../src/layout_util.c:1860 ../src/layout_util.c:1876
-msgid "Zoom _2:1"
-msgstr ""
-
-#: ../src/layout_util.c:1860 ../src/toolbar.c:98
-msgid "Zoom 2:1"
-msgstr ""
-
-#: ../src/layout_util.c:1861 ../src/layout_util.c:1877
-msgid "Zoom _3:1"
-msgstr ""
-
-#: ../src/layout_util.c:1861 ../src/toolbar.c:99
-msgid "Zoom 3:1"
-msgstr ""
-
-#: ../src/layout_util.c:1862 ../src/layout_util.c:1878
-msgid "Zoom _4:1"
-msgstr ""
-
-#: ../src/layout_util.c:1862 ../src/toolbar.c:100
-msgid "Zoom 4:1"
-msgstr ""
-
-#: ../src/layout_util.c:1863 ../src/layout_util.c:1879 ../src/toolbar.c:101
-msgid "Zoom 1:2"
-msgstr ""
-
-#: ../src/layout_util.c:1864 ../src/layout_util.c:1880
-msgid "Zoom 1:3"
-msgstr ""
-
-#: ../src/layout_util.c:1865 ../src/layout_util.c:1881 ../src/toolbar.c:103
-msgid "Zoom 1:4"
-msgstr ""
-
-#: ../src/layout_util.c:1866 ../src/layout_util.c:1867 ../src/toolbar.c:104
-msgid "Connected Zoom in"
-msgstr ""
-
-#: ../src/layout_util.c:1868 ../src/layout_util.c:1869
-msgid "Connected Zoom out"
-msgstr ""
-
-#: ../src/layout_util.c:1870 ../src/layout_util.c:1871
-msgid "Connected Zoom 1:1"
-msgstr ""
-
-#: ../src/layout_util.c:1872 ../src/layout_util.c:1873
-msgid "Connected Zoom to fit"
-msgstr ""
-
-#: ../src/layout_util.c:1874
-msgid "Connected Fit Horizontally"
+msgid "_Edit"
+msgstr ""
+
+#: ../src/layout_util.c:1860
+msgid "_Select"
+msgstr ""
+
+#: ../src/layout_util.c:1861 ../src/menu.c:380
+msgid "_Orientation"
+msgstr ""
+
+#: ../src/layout_util.c:1862
+msgid "_Rating"
+msgstr ""
+
+#: ../src/layout_util.c:1863
+msgid "P_references"
+msgstr ""
+
+#: ../src/layout_util.c:1865
+msgid "_Files and Folders"
+msgstr ""
+
+#: ../src/layout_util.c:1866
+msgid "_Zoom"
+msgstr ""
+
+#: ../src/layout_util.c:1867
+msgid "_Color Management"
+msgstr "_Colour Management"
+
+#: ../src/layout_util.c:1868
+msgid "_Connected Zoom"
+msgstr ""
+
+#: ../src/layout_util.c:1869
+msgid "Spli_t"
+msgstr ""
+
+#: ../src/layout_util.c:1870
+msgid "Stere_o"
+msgstr ""
+
+#: ../src/layout_util.c:1871 ../src/layout_util.c:2012
+msgid "Image _Overlay"
+msgstr ""
+
+#: ../src/layout_util.c:1872
+msgid "_Plugins"
+msgstr ""
+
+#: ../src/layout_util.c:1873
+msgid "_Help"
 msgstr ""
 
 #: ../src/layout_util.c:1875
-msgid "Connected Fit Vertically"
-msgstr ""
-
-#: ../src/layout_util.c:1876
-msgid "Connected Zoom 2:1"
-msgstr ""
-
-#: ../src/layout_util.c:1877
-msgid "Connected Zoom 3:1"
-msgstr ""
-
+msgid "_First Image"
+msgstr ""
+
+#: ../src/layout_util.c:1875 ../src/toolbar.c:74
+msgid "First Image"
+msgstr ""
+
+#: ../src/layout_util.c:1876 ../src/layout_util.c:1877
 #: ../src/layout_util.c:1878
-msgid "Connected Zoom 4:1"
-msgstr ""
-
-#: ../src/layout_util.c:1879
-msgid "Connected Zoom 1:2"
-msgstr ""
-
-#: ../src/layout_util.c:1880
-msgid "Connected Zoom 1:3"
-msgstr ""
-
+msgid "_Previous Image"
+msgstr ""
+
+#: ../src/layout_util.c:1876 ../src/layout_util.c:1877
+#: ../src/layout_util.c:1878 ../src/toolbar.c:75
+msgid "Previous Image"
+msgstr ""
+
+#: ../src/layout_util.c:1879 ../src/layout_util.c:1880
 #: ../src/layout_util.c:1881
-msgid "Connected Zoom 1:4"
+msgid "_Next Image"
+msgstr ""
+
+#: ../src/layout_util.c:1879 ../src/layout_util.c:1880
+#: ../src/layout_util.c:1881 ../src/toolbar.c:76
+msgid "Next Image"
 msgstr ""
 
 #: ../src/layout_util.c:1882
-msgid "_View in new window"
-msgstr ""
-
-#: ../src/layout_util.c:1882
-msgid "View in new window"
-msgstr ""
-
-#: ../src/layout_util.c:1883 ../src/layout_util.c:1884
+msgid "_Last Image"
+msgstr ""
+
+#: ../src/layout_util.c:1882 ../src/toolbar.c:77
+msgid "Last Image"
+msgstr ""
+
+#: ../src/layout_util.c:1883
+msgid "_Back"
+msgstr ""
+
+#: ../src/layout_util.c:1883 ../src/toolbar.c:78
+msgid "Back"
+msgstr ""
+
+#: ../src/layout_util.c:1884
+msgid "_Forward"
+msgstr ""
+
+#: ../src/layout_util.c:1884 ../src/toolbar.c:79
+msgid "Forward"
+msgstr ""
+
 #: ../src/layout_util.c:1885
-msgid "F_ull screen"
-msgstr ""
-
-#: ../src/layout_util.c:1886 ../src/layout_util.c:1887
-msgid "_Leave full screen"
-msgstr ""
-
-#: ../src/layout_util.c:1886 ../src/layout_util.c:1887
-msgid "Leave full screen"
+msgid "_Home"
+msgstr ""
+
+#: ../src/layout_util.c:1885 ../src/options.c:217 ../src/toolbar.c:80
+#: ../src/ui_bookmark.c:578 ../src/ui_pathsel.c:1056
+msgid "Home"
+msgstr ""
+
+#: ../src/layout_util.c:1886
+msgid "_Up"
+msgstr ""
+
+#: ../src/layout_util.c:1886 ../src/toolbar.c:81
+msgid "Up"
+msgstr ""
+
+#: ../src/layout_util.c:1888 ../src/toolbar.c:82
+msgid "New _window"
 msgstr ""
 
 #: ../src/layout_util.c:1888
-msgid "_Cycle through overlay modes"
-msgstr ""
-
-#: ../src/layout_util.c:1888
-msgid "Cycle through Overlay modes"
-msgstr ""
-
-#: ../src/layout_util.c:1889
-msgid "Cycle through histogram ch_annels"
+msgid "New window"
 msgstr ""
 
 #: ../src/layout_util.c:1889
-msgid "Cycle through histogram channels"
+msgid "_New collection"
+msgstr ""
+
+#: ../src/layout_util.c:1889 ../src/menu.c:439 ../src/toolbar.c:83
+msgid "New collection"
 msgstr ""
 
 #: ../src/layout_util.c:1890
-msgid "Cycle through histogram mo_des"
+msgid "_Open collection..."
 msgstr ""
 
 #: ../src/layout_util.c:1890
-msgid "Cycle through histogram modes"
+msgid "Open collection..."
+msgstr ""
+
+#: ../src/layout_util.c:1891
+msgid "Open recen_t"
 msgstr ""
 
 #: ../src/layout_util.c:1891
-msgid "_Hide file list"
-msgstr ""
-
-#: ../src/layout_util.c:1891 ../src/toolbar.c:105
-msgid "Hide file list"
+msgid "Open recent"
+msgstr ""
+
+#: ../src/layout_util.c:1892
+msgid "_Search..."
 msgstr ""
 
 #: ../src/layout_util.c:1892
-msgid "_Pause slideshow"
-msgstr ""
-
-#: ../src/layout_util.c:1892 ../src/toolbar.c:106
-msgid "Pause slideshow"
+msgid "Search..."
 msgstr ""
 
 #: ../src/layout_util.c:1893
-msgid "Faster"
+msgid "Find duplicates..."
 msgstr ""
 
 #: ../src/layout_util.c:1894
-msgid "Slower"
+msgid "Pa_n view"
+msgstr ""
+
+#: ../src/layout_util.c:1894 ../src/toolbar.c:93
+msgid "Pan view"
 msgstr ""
 
 #: ../src/layout_util.c:1895
-msgid "_Refresh"
-msgstr ""
-
-#: ../src/layout_util.c:1895 ../src/toolbar.c:109
-msgid "Refresh"
+msgid "_Print..."
 msgstr ""
 
 #: ../src/layout_util.c:1896
-msgid "_Contents"
+msgid "N_ew folder..."
 msgstr ""
 
 #: ../src/layout_util.c:1896
-msgid "Contents"
-msgstr ""
-
-#: ../src/layout_util.c:1897 ../src/window.c:371
-msgid "On-line help search"
+msgid "New folder..."
+msgstr ""
+
+#: ../src/layout_util.c:1897
+msgid "Copy..."
 msgstr ""
 
 #: ../src/layout_util.c:1898
-msgid "_Keyboard shortcuts"
-msgstr ""
-
-#: ../src/layout_util.c:1898
-msgid "Keyboard shortcuts"
-msgstr ""
-
-#: ../src/layout_util.c:1899
-msgid "_Keyboard map"
+msgid "Move..."
 msgstr ""
 
 #: ../src/layout_util.c:1899
-msgid "Keyboard map"
-msgstr ""
-
-#: ../src/layout_util.c:1900
-msgid "_Release notes"
-msgstr ""
-
-#: ../src/layout_util.c:1900
-msgid "Release notes"
-msgstr ""
-
-#: ../src/layout_util.c:1901
-msgid "_ChangeLog"
-msgstr ""
-
-#: ../src/layout_util.c:1901
-msgid "ChangeLog notes"
-msgstr ""
-
-#: ../src/layout_util.c:1902
-msgid "_About"
-msgstr ""
-
-#: ../src/layout_util.c:1902
-msgid "About"
+msgid "Rename..."
 msgstr ""
 
 #: ../src/layout_util.c:1903
-msgid "_Log Window"
-msgstr ""
-
-#: ../src/layout_util.c:1903
-msgid "Log Window"
+msgid "Delete..."
+msgstr ""
+
+#: ../src/layout_util.c:1904 ../src/view_file/view_file.c:648
+msgid "Enable file _grouping"
 msgstr ""
 
 #: ../src/layout_util.c:1904
-msgid "_Exif window"
-msgstr ""
-
-#: ../src/layout_util.c:1904 ../src/toolbar.c:111
-msgid "Exif window"
+msgid "Enable file grouping"
+msgstr ""
+
+#: ../src/layout_util.c:1905 ../src/view_file/view_file.c:650
+msgid "Disable file groupi_ng"
 msgstr ""
 
 #: ../src/layout_util.c:1905
-msgid "_Cycle through stereo modes"
-msgstr ""
-
-#: ../src/layout_util.c:1905
-msgid "Cycle through stereo modes"
+msgid "Disable file grouping"
 msgstr ""
 
 #: ../src/layout_util.c:1906
-msgid "_Next Pane"
+msgid "_Copy path to clipboard"
 msgstr ""
 
 #: ../src/layout_util.c:1906
-msgid "Next Pane"
-msgstr ""
-
-#: ../src/layout_util.c:1907
-msgid "_Previous Pane"
+msgid "Copy path to clipboard"
 msgstr ""
 
 #: ../src/layout_util.c:1907
-msgid "Previous Pane"
+msgid "_Copy path unquoted to clipboard"
+msgstr ""
+
+#: ../src/layout_util.c:1907
+msgid "Copy path unquoted to clipboard"
 msgstr ""
 
 #: ../src/layout_util.c:1908
-msgid "_Up Pane"
-msgstr ""
-
-#: ../src/layout_util.c:1908
-msgid "Up Pane"
+msgid "Close window"
 msgstr ""
 
 #: ../src/layout_util.c:1909
-msgid "_Down Pane"
-msgstr ""
-
-#: ../src/layout_util.c:1909
-msgid "Down Pane"
-msgstr ""
-
-#: ../src/layout_util.c:1910
-msgid "_Write orientation to file"
-msgstr ""
-
-#: ../src/layout_util.c:1910
-msgid "Write orientation to file"
+msgid "_Quit"
+msgstr ""
+
+#: ../src/layout_util.c:1909 ../src/toolbar.c:136
+msgid "Quit"
+msgstr ""
+
+#: ../src/layout_util.c:1910 ../src/menu.c:322
+msgid "_Rotate clockwise"
+msgstr ""
+
+#: ../src/layout_util.c:1910 ../src/toolbar.c:103
+msgid "Rotate clockwise"
+msgstr ""
+
+#: ../src/layout_util.c:1911
+msgid "_Rating 0"
 msgstr ""
 
 #: ../src/layout_util.c:1911
-msgid "_Write orientation to file (preserve timestamp)"
-msgstr ""
-
-#: ../src/layout_util.c:1911
-msgid "Write orientation to file (preserve timestamp)"
+msgid "Rating 0"
+msgstr ""
+
+#: ../src/layout_util.c:1912
+msgid "_Rating 1"
 msgstr ""
 
 #: ../src/layout_util.c:1912
-msgid "Clear Marks..."
+msgid "Rating 1"
+msgstr ""
+
+#: ../src/layout_util.c:1913
+msgid "_Rating 2"
+msgstr ""
+
+#: ../src/layout_util.c:1913
+msgid "Rating 2"
+msgstr ""
+
+#: ../src/layout_util.c:1914
+msgid "_Rating 3"
+msgstr ""
+
+#: ../src/layout_util.c:1914
+msgid "Rating 3"
+msgstr ""
+
+#: ../src/layout_util.c:1915
+msgid "_Rating 4"
+msgstr ""
+
+#: ../src/layout_util.c:1915
+msgid "Rating 4"
 msgstr ""
 
 #: ../src/layout_util.c:1916
-msgid "Show _Thumbnails"
+msgid "_Rating 5"
 msgstr ""
 
 #: ../src/layout_util.c:1916
-msgid "Show Thumbnails"
-msgstr ""
-
-#: ../src/layout_util.c:1917
-msgid "Show _Marks"
+msgid "Rating 5"
 msgstr ""
 
 #: ../src/layout_util.c:1917
-msgid "Show Marks"
-msgstr ""
-
-#: ../src/layout_util.c:1918
-msgid "Pi_xel Info"
-msgstr ""
-
-#: ../src/layout_util.c:1918
-msgid "Show Pixel Info"
+msgid "_Rating -1"
+msgstr ""
+
+#: ../src/layout_util.c:1917
+msgid "Rating -1"
+msgstr ""
+
+#: ../src/layout_util.c:1918 ../src/menu.c:325
+msgid "Rotate _counterclockwise"
+msgstr ""
+
+#: ../src/layout_util.c:1918 ../src/toolbar.c:104
+msgid "Rotate counterclockwise"
 msgstr ""
 
 #: ../src/layout_util.c:1919
-msgid "_Float file list"
-msgstr ""
-
-#: ../src/layout_util.c:1919 ../src/toolbar.c:114
-msgid "Float file list"
-msgstr ""
-
-#: ../src/layout_util.c:1920
-msgid "Hide tool_bar"
-msgstr ""
-
-#: ../src/layout_util.c:1920
-msgid "Hide toolbar"
-msgstr ""
-
-#: ../src/layout_util.c:1921
-msgid "_Info sidebar"
-msgstr ""
-
-#: ../src/layout_util.c:1921 ../src/toolbar.c:115
-msgid "Info sidebar"
-msgstr ""
-
-#: ../src/layout_util.c:1922
-msgid "Sort _manager"
-msgstr ""
-
-#: ../src/layout_util.c:1922 ../src/toolbar.c:116
-msgid "Sort manager"
+msgid "Rotate 1_80"
+msgstr ""
+
+#: ../src/layout_util.c:1919 ../src/toolbar.c:105
+msgid "Rotate 180"
+msgstr ""
+
+#: ../src/layout_util.c:1920 ../src/menu.c:331
+msgid "_Mirror"
+msgstr ""
+
+#: ../src/layout_util.c:1920 ../src/toolbar.c:106
+msgid "Mirror"
+msgstr ""
+
+#: ../src/layout_util.c:1921 ../src/menu.c:334
+msgid "_Flip"
+msgstr ""
+
+#: ../src/layout_util.c:1921 ../src/toolbar.c:107
+msgid "Flip"
+msgstr ""
+
+#: ../src/layout_util.c:1922 ../src/menu.c:337
+msgid "_Original state"
+msgstr ""
+
+#: ../src/layout_util.c:1922 ../src/toolbar.c:108
+msgid "Original state"
 msgstr ""
 
 #: ../src/layout_util.c:1923
-msgid "Hide Bars"
+msgid "Select _all"
 msgstr ""
 
 #: ../src/layout_util.c:1924
-msgid "Toggle _slideshow"
-msgstr ""
-
-#: ../src/layout_util.c:1924
-msgid "Toggle slideshow"
+msgid "Select _none"
+msgstr ""
+
+#: ../src/layout_util.c:1925
+msgid "_Invert Selection"
 msgstr ""
 
 #: ../src/layout_util.c:1925
-msgid "Use _color profiles"
-msgstr "Use _colour profiles"
-
-#: ../src/layout_util.c:1925
-msgid "Use color profiles"
-msgstr "Use colour profiles"
+msgid "Invert Selection"
+msgstr ""
 
 #: ../src/layout_util.c:1926
-msgid "Use profile from _image"
+msgid "P_references..."
 msgstr ""
 
 #: ../src/layout_util.c:1926
-msgid "Use profile from image"
+msgid "Preferences..."
 msgstr ""
 
 #: ../src/layout_util.c:1927
-msgid "Toggle _grayscale"
+msgid "Configure _Plugins..."
 msgstr ""
 
 #: ../src/layout_util.c:1927
-msgid "Toggle grayscale"
+msgid "Configure Plugins..."
+msgstr ""
+
+#: ../src/layout_util.c:1928
+msgid "_Configure this window..."
 msgstr ""
 
 #: ../src/layout_util.c:1928
-msgid "Image Overlay"
+msgid "Configure this window..."
 msgstr ""
 
 #: ../src/layout_util.c:1929
-msgid "_Show Histogram"
+msgid "_Cache maintenance..."
 msgstr ""
 
 #: ../src/layout_util.c:1929
-msgid "Show Histogram"
+msgid "Cache maintenance..."
 msgstr ""
 
 #: ../src/layout_util.c:1930
-msgid "Rectangular Selection"
+msgid "Set as wallpaper"
 msgstr ""
 
 #: ../src/layout_util.c:1931
-msgid "GIF _animation"
+msgid "_Save metadata"
 msgstr ""
 
 #: ../src/layout_util.c:1931
-msgid "Toggle GIF animation"
+msgid "Save metadata"
 msgstr ""
 
 #: ../src/layout_util.c:1932
-msgid "_Exif rotate"
+msgid "Keyword autocomplete"
 msgstr ""
 
 #: ../src/layout_util.c:1932
-msgid "Exif rotate"
-msgstr ""
-
-#: ../src/layout_util.c:1936
-msgid "Image _List"
-msgstr ""
-
-#: ../src/layout_util.c:1936
-msgid "View Images as List"
-msgstr ""
-
-#: ../src/layout_util.c:1937
-msgid "I_cons"
-msgstr ""
-
-#: ../src/layout_util.c:1937
-msgid "View Images as Icons"
-msgstr ""
-
-#: ../src/layout_util.c:1941
-msgid "T_oggle Folder View"
+msgid "Keyword Autocomplete"
+msgstr ""
+
+#: ../src/layout_util.c:1933 ../src/layout_util.c:1934 ../src/toolbar.c:109
+msgid "Zoom in"
+msgstr ""
+
+#: ../src/layout_util.c:1935 ../src/layout_util.c:1936 ../src/toolbar.c:110
+msgid "Zoom out"
+msgstr ""
+
+#: ../src/layout_util.c:1937 ../src/layout_util.c:1938 ../src/toolbar.c:111
+msgid "Zoom 1:1"
+msgstr ""
+
+#: ../src/layout_util.c:1939 ../src/layout_util.c:1940
+#: ../src/layout_util.c:1955 ../src/layout_util.c:1956
+msgid "_Zoom to fit"
+msgstr ""
+
+#: ../src/layout_util.c:1939 ../src/layout_util.c:1940 ../src/toolbar.c:112
+msgid "Zoom to fit"
+msgstr ""
+
+#: ../src/layout_util.c:1941 ../src/layout_util.c:1957
+msgid "Fit _Horizontally"
 msgstr ""
 
 #: ../src/layout_util.c:1941
-msgid "Toggle Folders View"
-msgstr ""
-
-#: ../src/layout_util.c:1945
-msgid "_Horizontal"
-msgstr ""
-
-#: ../src/layout_util.c:1945
-msgid "Split Horizontal"
-msgstr ""
-
-#: ../src/layout_util.c:1946
-msgid "_Vertical"
-msgstr ""
-
-#: ../src/layout_util.c:1946
-msgid "Split Vertical"
-msgstr ""
-
-#: ../src/layout_util.c:1947
-msgid "_Quad"
-msgstr ""
-
-#: ../src/layout_util.c:1947
-msgid "Split Quad"
-msgstr ""
-
-#: ../src/layout_util.c:1948
-msgid "_Single"
-msgstr ""
-
-#: ../src/layout_util.c:1948
-msgid "Split Single"
-msgstr ""
-
-#: ../src/layout_util.c:1952
-msgid "Input _0: sRGB"
-msgstr ""
-
-#: ../src/layout_util.c:1952
-msgid "Input 0: sRGB"
-msgstr ""
-
-#: ../src/layout_util.c:1953
-msgid "Input _1: AdobeRGB compatible"
-msgstr ""
-
-#: ../src/layout_util.c:1953
-msgid "Input 1: AdobeRGB compatible"
-msgstr ""
-
-#: ../src/layout_util.c:1954
-msgid "Input _2"
-msgstr ""
-
-#: ../src/layout_util.c:1954
-msgid "Input 2"
-msgstr ""
-
-#: ../src/layout_util.c:1955
-msgid "Input _3"
-msgstr ""
-
-#: ../src/layout_util.c:1955
-msgid "Input 3"
-msgstr ""
-
-#: ../src/layout_util.c:1956
-msgid "Input _4"
-msgstr ""
-
-#: ../src/layout_util.c:1956
-msgid "Input 4"
+msgid "Fit Horizontally"
+msgstr ""
+
+#: ../src/layout_util.c:1942 ../src/layout_util.c:1958
+msgid "Fit _Vertically"
+msgstr ""
+
+#: ../src/layout_util.c:1942
+msgid "Fit Vertically"
+msgstr ""
+
+#: ../src/layout_util.c:1943 ../src/layout_util.c:1959
+msgid "Zoom _2:1"
+msgstr ""
+
+#: ../src/layout_util.c:1943 ../src/toolbar.c:115
+msgid "Zoom 2:1"
+msgstr ""
+
+#: ../src/layout_util.c:1944 ../src/layout_util.c:1960
+msgid "Zoom _3:1"
+msgstr ""
+
+#: ../src/layout_util.c:1944 ../src/toolbar.c:116
+msgid "Zoom 3:1"
+msgstr ""
+
+#: ../src/layout_util.c:1945 ../src/layout_util.c:1961
+msgid "Zoom _4:1"
+msgstr ""
+
+#: ../src/layout_util.c:1945 ../src/toolbar.c:117
+msgid "Zoom 4:1"
+msgstr ""
+
+#: ../src/layout_util.c:1946 ../src/layout_util.c:1962 ../src/toolbar.c:118
+msgid "Zoom 1:2"
+msgstr ""
+
+#: ../src/layout_util.c:1947 ../src/layout_util.c:1963
+msgid "Zoom 1:3"
+msgstr ""
+
+#: ../src/layout_util.c:1948 ../src/layout_util.c:1964 ../src/toolbar.c:120
+msgid "Zoom 1:4"
+msgstr ""
+
+#: ../src/layout_util.c:1949 ../src/layout_util.c:1950 ../src/toolbar.c:121
+msgid "Connected Zoom in"
+msgstr ""
+
+#: ../src/layout_util.c:1951 ../src/layout_util.c:1952
+msgid "Connected Zoom out"
+msgstr ""
+
+#: ../src/layout_util.c:1953 ../src/layout_util.c:1954
+msgid "Connected Zoom 1:1"
+msgstr ""
+
+#: ../src/layout_util.c:1955 ../src/layout_util.c:1956
+msgid "Connected Zoom to fit"
 msgstr ""
 
 #: ../src/layout_util.c:1957
-msgid "Input _5"
-msgstr ""
-
-#: ../src/layout_util.c:1957
-msgid "Input 5"
+msgid "Connected Fit Horizontally"
+msgstr ""
+
+#: ../src/layout_util.c:1958
+msgid "Connected Fit Vertically"
+msgstr ""
+
+#: ../src/layout_util.c:1959
+msgid "Connected Zoom 2:1"
+msgstr ""
+
+#: ../src/layout_util.c:1960
+msgid "Connected Zoom 3:1"
 msgstr ""
 
 #: ../src/layout_util.c:1961
-msgid "Histogram on Red"
+msgid "Connected Zoom 4:1"
 msgstr ""
 
 #: ../src/layout_util.c:1962
-msgid "Histogram on Green"
+msgid "Connected Zoom 1:2"
 msgstr ""
 
 #: ../src/layout_util.c:1963
-msgid "Histogram on Blue"
+msgid "Connected Zoom 1:3"
 msgstr ""
 
 #: ../src/layout_util.c:1964
-msgid "Histogram on RGB"
+msgid "Connected Zoom 1:4"
+msgstr ""
+
+#: ../src/layout_util.c:1965
+msgid "_View in new window"
 msgstr ""
 
 #: ../src/layout_util.c:1965
-msgid "Histogram on Value"
-msgstr ""
-
-#: ../src/layout_util.c:1969
-msgid "Linear Histogram"
-msgstr ""
-
-#: ../src/layout_util.c:1970
-msgid "_Log Histogram"
-msgstr ""
-
-#: ../src/layout_util.c:1970
-msgid "Log Histogram"
+msgid "View in new window"
+msgstr ""
+
+#: ../src/layout_util.c:1966 ../src/layout_util.c:1967
+#: ../src/layout_util.c:1968
+msgid "F_ull screen"
+msgstr ""
+
+#: ../src/layout_util.c:1969 ../src/layout_util.c:1970
+msgid "_Leave full screen"
+msgstr ""
+
+#: ../src/layout_util.c:1969 ../src/layout_util.c:1970
+msgid "Leave full screen"
+msgstr ""
+
+#: ../src/layout_util.c:1971
+msgid "_Cycle through overlay modes"
+msgstr ""
+
+#: ../src/layout_util.c:1971
+msgid "Cycle through Overlay modes"
+msgstr ""
+
+#: ../src/layout_util.c:1972
+msgid "Cycle through histogram ch_annels"
+msgstr ""
+
+#: ../src/layout_util.c:1972
+msgid "Cycle through histogram channels"
+msgstr ""
+
+#: ../src/layout_util.c:1973
+msgid "Cycle through histogram mo_des"
+msgstr ""
+
+#: ../src/layout_util.c:1973
+msgid "Cycle through histogram modes"
 msgstr ""
 
 #: ../src/layout_util.c:1974
-msgid "_Auto"
-msgstr ""
-
-#: ../src/layout_util.c:1974
-msgid "Stereo Auto"
-msgstr ""
-
-#: ../src/layout_util.c:1975
-msgid "_Side by Side"
+msgid "_Hide file list"
+msgstr ""
+
+#: ../src/layout_util.c:1974 ../src/toolbar.c:122
+msgid "Hide file list"
 msgstr ""
 
 #: ../src/layout_util.c:1975
-msgid "Stereo Side by Side"
+msgid "_Pause slideshow"
+msgstr ""
+
+#: ../src/layout_util.c:1975 ../src/toolbar.c:123
+msgid "Pause slideshow"
 msgstr ""
 
 #: ../src/layout_util.c:1976
-msgid "_Cross"
-msgstr ""
-
-#: ../src/layout_util.c:1976
-msgid "Stereo Cross"
-msgstr ""
-
-#: ../src/layout_util.c:1977
-msgid "_Off"
+msgid "Faster"
 msgstr ""
 
 #: ../src/layout_util.c:1977
+msgid "Slower"
+msgstr ""
+
+#: ../src/layout_util.c:1978
+msgid "_Refresh"
+msgstr ""
+
+#: ../src/layout_util.c:1978 ../src/toolbar.c:126
+msgid "Refresh"
+msgstr ""
+
+#: ../src/layout_util.c:1979
+msgid "_Contents"
+msgstr ""
+
+#: ../src/layout_util.c:1979
+msgid "Contents"
+msgstr ""
+
+#: ../src/layout_util.c:1980 ../src/window.c:371
+msgid "On-line help search"
+msgstr ""
+
+#: ../src/layout_util.c:1981
+msgid "_Keyboard shortcuts"
+msgstr ""
+
+#: ../src/layout_util.c:1981
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: ../src/layout_util.c:1982
+msgid "_Keyboard map"
+msgstr ""
+
+#: ../src/layout_util.c:1982
+msgid "Keyboard map"
+msgstr ""
+
+#: ../src/layout_util.c:1983
+msgid "_Release notes"
+msgstr ""
+
+#: ../src/layout_util.c:1983
+msgid "Release notes"
+msgstr ""
+
+#: ../src/layout_util.c:1984
+msgid "_ChangeLog"
+msgstr ""
+
+#: ../src/layout_util.c:1984
+msgid "ChangeLog notes"
+msgstr ""
+
+#: ../src/layout_util.c:1985
+msgid "_About"
+msgstr ""
+
+#: ../src/layout_util.c:1985
+msgid "About"
+msgstr ""
+
+#: ../src/layout_util.c:1986
+msgid "_Log Window"
+msgstr ""
+
+#: ../src/layout_util.c:1986
+msgid "Log Window"
+msgstr ""
+
+#: ../src/layout_util.c:1987
+msgid "_Exif window"
+msgstr ""
+
+#: ../src/layout_util.c:1987 ../src/toolbar.c:128
+msgid "Exif window"
+msgstr ""
+
+#: ../src/layout_util.c:1988
+msgid "_Cycle through stereo modes"
+msgstr ""
+
+#: ../src/layout_util.c:1988
+msgid "Cycle through stereo modes"
+msgstr ""
+
+#: ../src/layout_util.c:1989
+msgid "_Next Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1989
+msgid "Next Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1990
+msgid "_Previous Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1990
+msgid "Previous Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1991
+msgid "_Up Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1991
+msgid "Up Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1992
+msgid "_Down Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1992
+msgid "Down Pane"
+msgstr ""
+
+#: ../src/layout_util.c:1993
+msgid "_Write orientation to file"
+msgstr ""
+
+#: ../src/layout_util.c:1993
+msgid "Write orientation to file"
+msgstr ""
+
+#: ../src/layout_util.c:1994
+msgid "_Write orientation to file (preserve timestamp)"
+msgstr ""
+
+#: ../src/layout_util.c:1994
+msgid "Write orientation to file (preserve timestamp)"
+msgstr ""
+
+#: ../src/layout_util.c:1995
+msgid "Clear Marks..."
+msgstr ""
+
+#: ../src/layout_util.c:1999
+msgid "Show _Thumbnails"
+msgstr ""
+
+#: ../src/layout_util.c:1999
+msgid "Show Thumbnails"
+msgstr ""
+
+#: ../src/layout_util.c:2000
+msgid "Show _Marks"
+msgstr ""
+
+#: ../src/layout_util.c:2000
+msgid "Show Marks"
+msgstr ""
+
+#: ../src/layout_util.c:2001
+msgid "Show File Filter"
+msgstr ""
+
+#: ../src/layout_util.c:2002
+msgid "Pi_xel Info"
+msgstr ""
+
+#: ../src/layout_util.c:2002
+msgid "Show Pixel Info"
+msgstr ""
+
+#: ../src/layout_util.c:2003
+msgid "_Float file list"
+msgstr ""
+
+#: ../src/layout_util.c:2003 ../src/toolbar.c:133
+msgid "Float file list"
+msgstr ""
+
+#: ../src/layout_util.c:2004
+msgid "Hide tool_bar"
+msgstr ""
+
+#: ../src/layout_util.c:2004
+msgid "Hide toolbar"
+msgstr ""
+
+#: ../src/layout_util.c:2005
+msgid "_Info sidebar"
+msgstr ""
+
+#: ../src/layout_util.c:2005 ../src/toolbar.c:134
+msgid "Info sidebar"
+msgstr ""
+
+#: ../src/layout_util.c:2006
+msgid "Sort _manager"
+msgstr ""
+
+#: ../src/layout_util.c:2006 ../src/toolbar.c:135
+msgid "Sort manager"
+msgstr ""
+
+#: ../src/layout_util.c:2007
+msgid "Hide Bars"
+msgstr ""
+
+#: ../src/layout_util.c:2008
+msgid "Toggle _slideshow"
+msgstr ""
+
+#: ../src/layout_util.c:2008
+msgid "Toggle slideshow"
+msgstr ""
+
+#: ../src/layout_util.c:2009
+msgid "Use _color profiles"
+msgstr "Use _colour profiles"
+
+#: ../src/layout_util.c:2009
+msgid "Use color profiles"
+msgstr "Use colour profiles"
+
+#: ../src/layout_util.c:2010
+msgid "Use profile from _image"
+msgstr ""
+
+#: ../src/layout_util.c:2010
+msgid "Use profile from image"
+msgstr ""
+
+#: ../src/layout_util.c:2011
+msgid "Toggle _grayscale"
+msgstr ""
+
+#: ../src/layout_util.c:2011
+msgid "Toggle grayscale"
+msgstr ""
+
+#: ../src/layout_util.c:2012
+msgid "Image Overlay"
+msgstr ""
+
+#: ../src/layout_util.c:2013
+msgid "_Show Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:2013
+msgid "Show Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:2014
+msgid "_Show Guidelines"
+msgstr ""
+
+#: ../src/layout_util.c:2014
+msgid "Show Guidelines"
+msgstr ""
+
+#: ../src/layout_util.c:2015
+msgid "Rectangular Selection"
+msgstr ""
+
+#: ../src/layout_util.c:2016
+msgid "GIF _animation"
+msgstr ""
+
+#: ../src/layout_util.c:2016
+msgid "Toggle GIF animation"
+msgstr ""
+
+#: ../src/layout_util.c:2017
+msgid "_Exif rotate"
+msgstr ""
+
+#: ../src/layout_util.c:2017
+msgid "Exif rotate"
+msgstr ""
+
+#: ../src/layout_util.c:2018 ../src/toolbar.c:132
+msgid "Draw Rectangle"
+msgstr ""
+
+#: ../src/layout_util.c:2022
+msgid "Image _List"
+msgstr ""
+
+#: ../src/layout_util.c:2022
+msgid "View Images as List"
+msgstr ""
+
+#: ../src/layout_util.c:2023
+msgid "I_cons"
+msgstr ""
+
+#: ../src/layout_util.c:2023
+msgid "View Images as Icons"
+msgstr ""
+
+#: ../src/layout_util.c:2027
+msgid "T_oggle Folder View"
+msgstr ""
+
+#: ../src/layout_util.c:2027
+msgid "Toggle Folders View"
+msgstr ""
+
+#: ../src/layout_util.c:2031
+msgid "_Horizontal"
+msgstr ""
+
+#: ../src/layout_util.c:2031
+msgid "Split Horizontal"
+msgstr ""
+
+#: ../src/layout_util.c:2032
+msgid "_Vertical"
+msgstr ""
+
+#: ../src/layout_util.c:2032
+msgid "Split Vertical"
+msgstr ""
+
+#: ../src/layout_util.c:2033
+msgid "_Quad"
+msgstr ""
+
+#: ../src/layout_util.c:2033
+msgid "Split Quad"
+msgstr ""
+
+#: ../src/layout_util.c:2034
+msgid "_Single"
+msgstr ""
+
+#: ../src/layout_util.c:2034
+msgid "Split Single"
+msgstr ""
+
+#: ../src/layout_util.c:2038
+msgid "Input _0: sRGB"
+msgstr ""
+
+#: ../src/layout_util.c:2038
+msgid "Input 0: sRGB"
+msgstr ""
+
+#: ../src/layout_util.c:2039
+msgid "Input _1: AdobeRGB compatible"
+msgstr ""
+
+#: ../src/layout_util.c:2039
+msgid "Input 1: AdobeRGB compatible"
+msgstr ""
+
+#: ../src/layout_util.c:2040
+msgid "Input _2"
+msgstr ""
+
+#: ../src/layout_util.c:2040
+msgid "Input 2"
+msgstr ""
+
+#: ../src/layout_util.c:2041
+msgid "Input _3"
+msgstr ""
+
+#: ../src/layout_util.c:2041
+msgid "Input 3"
+msgstr ""
+
+#: ../src/layout_util.c:2042
+msgid "Input _4"
+msgstr ""
+
+#: ../src/layout_util.c:2042
+msgid "Input 4"
+msgstr ""
+
+#: ../src/layout_util.c:2043
+msgid "Input _5"
+msgstr ""
+
+#: ../src/layout_util.c:2043
+msgid "Input 5"
+msgstr ""
+
+#: ../src/layout_util.c:2047
+msgid "Histogram on Red"
+msgstr ""
+
+#: ../src/layout_util.c:2048
+msgid "Histogram on Green"
+msgstr ""
+
+#: ../src/layout_util.c:2049
+msgid "Histogram on Blue"
+msgstr ""
+
+#: ../src/layout_util.c:2050
+msgid "Histogram on RGB"
+msgstr ""
+
+#: ../src/layout_util.c:2051
+msgid "Histogram on Value"
+msgstr ""
+
+#: ../src/layout_util.c:2055
+msgid "Linear Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:2056
+msgid "_Log Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:2056
+msgid "Log Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:2060
+msgid "_Auto"
+msgstr ""
+
+#: ../src/layout_util.c:2060
+msgid "Stereo Auto"
+msgstr ""
+
+#: ../src/layout_util.c:2061
+msgid "_Side by Side"
+msgstr ""
+
+#: ../src/layout_util.c:2061
+msgid "Stereo Side by Side"
+msgstr ""
+
+#: ../src/layout_util.c:2062
+msgid "_Cross"
+msgstr ""
+
+#: ../src/layout_util.c:2062
+msgid "Stereo Cross"
+msgstr ""
+
+#: ../src/layout_util.c:2063
+msgid "_Off"
+msgstr ""
+
+#: ../src/layout_util.c:2063
 msgid "Stereo Off"
 msgstr ""
 
-#: ../src/layout_util.c:2290
+#: ../src/layout_util.c:2384
 #, c-format
 msgid "Mark _%d"
 msgstr ""
 
-#: ../src/layout_util.c:2291 ../src/view_file/view_file.c:574
+#: ../src/layout_util.c:2385 ../src/view_file/view_file.c:575
 #, c-format
 msgid "_Set mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2291
+#: ../src/layout_util.c:2385
 #, c-format
 msgid "Set mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2292 ../src/view_file/view_file.c:575
+#: ../src/layout_util.c:2386 ../src/view_file/view_file.c:576
 #, c-format
 msgid "_Reset mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2292
+#: ../src/layout_util.c:2386
 #, c-format
 msgid "Reset mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2293 ../src/layout_util.c:2294
-#: ../src/view_file/view_file.c:576
+#: ../src/layout_util.c:2387 ../src/layout_util.c:2388
+#: ../src/view_file/view_file.c:577
 #, c-format
 msgid "_Toggle mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2293 ../src/layout_util.c:2294
+#: ../src/layout_util.c:2387 ../src/layout_util.c:2388
 #, c-format
 msgid "Toggle mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2295
+#: ../src/layout_util.c:2389
 #, c-format
 msgid "Se_lect mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2295 ../src/layout_util.c:2296
+#: ../src/layout_util.c:2389 ../src/layout_util.c:2390
 #, c-format
 msgid "Select mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2296 ../src/view_file/view_file.c:577
+#: ../src/layout_util.c:2390 ../src/view_file/view_file.c:578
 #, c-format
 msgid "_Select mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2297 ../src/view_file/view_file.c:578
+#: ../src/layout_util.c:2391 ../src/view_file/view_file.c:579
 #, c-format
 msgid "_Add mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2297
+#: ../src/layout_util.c:2391
 #, c-format
 msgid "Add mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2298 ../src/view_file/view_file.c:579
+#: ../src/layout_util.c:2392 ../src/view_file/view_file.c:580
 #, c-format
 msgid "_Intersection with mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2298
+#: ../src/layout_util.c:2392
 #, c-format
 msgid "Intersection with mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2299 ../src/view_file/view_file.c:580
+#: ../src/layout_util.c:2393 ../src/view_file/view_file.c:581
 #, c-format
 msgid "_Unselect mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2299
+#: ../src/layout_util.c:2393
 #, c-format
 msgid "Unselect mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2300
+#: ../src/layout_util.c:2394
 #, c-format
 msgid "_Filter mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2300
+#: ../src/layout_util.c:2394
 #, c-format
 msgid "Filter mark %d"
 msgstr ""
 
-#: ../src/layout_util.c:2854
+#: ../src/layout_util.c:2966
 #, c-format
 msgid "Number of files with unsaved metadata: %d"
 msgstr ""
 
-#: ../src/layout_util.c:2860
+#: ../src/layout_util.c:2972
 msgid "No unsaved metadata"
 msgstr ""
 
-#: ../src/layout_util.c:2907
+#: ../src/layout_util.c:3019
 #, c-format
 msgid ""
 "Image profile: %s\n"
 "Screen profile: %s"
 msgstr ""
 
-#: ../src/layout_util.c:2915
+#: ../src/layout_util.c:3027
 msgid "Click to enable color management"
 msgstr "Click to enable colour management"
 
-#: ../src/layout_util.c:2920
+#: ../src/layout_util.c:3032
 msgid "Color profiles not supported"
 msgstr "Colour profiles not supported"
 
-#: ../src/layout_util.c:2942
+#: ../src/layout_util.c:3054
 #, c-format
 msgid "Input _%d: %s"
 msgstr ""
@@ -3511,7 +3611,7 @@
 msgid "Log"
 msgstr ""
 
-#: ../src/logwindow.c:172 ../src/preferences.c:2636
+#: ../src/logwindow.c:172 ../src/preferences.c:3218
 msgid "Debug level:"
 msgstr ""
 
@@ -3642,7 +3742,7 @@
 msgid "Collections have been modified. Quit anyway?"
 msgstr ""
 
-#: ../src/main.c:973 ../src/remote.c:790
+#: ../src/main.c:973 ../src/remote.c:847
 msgid "Command line"
 msgstr ""
 
@@ -3694,7 +3794,7 @@
 msgid "Zoom to original size"
 msgstr ""
 
-#: ../src/menu.c:245 ../src/preferences.c:1936
+#: ../src/menu.c:245 ../src/preferences.c:1955
 msgid "Fit image to window"
 msgstr ""
 
@@ -3702,7 +3802,7 @@
 msgid "Leave Zoom at previous setting"
 msgstr ""
 
-#: ../src/menu.c:303 ../src/preferences.c:1917
+#: ../src/menu.c:303 ../src/preferences.c:1936 ../src/preferences.c:2066
 msgid "Zoom"
 msgstr ""
 
@@ -3798,7 +3898,7 @@
 msgid "Sea"
 msgstr ""
 
-#: ../src/metadata.c:1733 ../src/print.c:385
+#: ../src/metadata.c:1733
 msgid "Landscape"
 msgstr ""
 
@@ -3934,7 +4034,7 @@
 msgid "Macro"
 msgstr ""
 
-#: ../src/metadata.c:1769 ../src/print.c:384
+#: ../src/metadata.c:1769
 msgid "Portrait"
 msgstr ""
 
@@ -3946,12 +4046,12 @@
 msgid "Perspective"
 msgstr ""
 
-#: ../src/options.c:205 ../src/ui_bookmark.c:578
+#: ../src/options.c:219 ../src/ui_bookmark.c:589
 msgid "Desktop"
 msgstr ""
 
-#: ../src/options.c:226 ../src/search.c:2140 ../src/search.c:2144
-#: ../src/search.c:3258 ../src/search.c:3262 ../src/view_file/view_file.c:820
+#: ../src/options.c:240 ../src/search.c:2230 ../src/search.c:2234
+#: ../src/search.c:3382 ../src/search.c:3386 ../src/view_file/view_file.c:828
 msgid "Mark "
 msgstr ""
 
@@ -3977,140 +4077,141 @@
 msgid "Sorting images..."
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1408 ../src/print.c:2609
+#: ../src/pan-view/pan-view.c:1412
 msgid "Filename:"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1410 ../src/pan-view/pan-view.c:1823
-#: ../src/preferences.c:2034
+#: ../src/pan-view/pan-view.c:1414 ../src/pan-view/pan-view.c:1827
+#: ../src/preferences.c:2050
 msgid "Location:"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1412 ../src/pan-view/pan-view-search.c:377
+#: ../src/pan-view/pan-view.c:1416 ../src/pan-view/pan-view-search.c:377
 msgid "Date:"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1414 ../src/preferences.c:1717
-#: ../src/print.c:3222 ../src/print.c:3427
+#: ../src/pan-view/pan-view.c:1418 ../src/preferences.c:1724
 msgid "Size:"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1721 ../src/search.c:2560
+#: ../src/pan-view/pan-view.c:1725 ../src/search.c:2680
 msgid "Folder not found"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1722
+#: ../src/pan-view/pan-view.c:1726
 msgid "The entered path is not a folder"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1807
+#: ../src/pan-view/pan-view.c:1811
 msgid "Pan View"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1830
-msgid "Timeline"
-msgstr ""
-
-#: ../src/pan-view/pan-view.c:1831
-msgid "Calendar"
-msgstr ""
-
-#: ../src/pan-view/pan-view.c:1833
-msgid "Folders (flower)"
-msgstr ""
-
 #: ../src/pan-view/pan-view.c:1834
+msgid "Timeline"
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:1835
+msgid "Calendar"
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:1837
+msgid "Folders (flower)"
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:1838
 msgid "Grid"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1843
-msgid "Dots"
-msgstr ""
-
-#: ../src/pan-view/pan-view.c:1844
-msgid "No Images"
-msgstr ""
-
-#: ../src/pan-view/pan-view.c:1845
-msgid "Small Thumbnails"
-msgstr ""
-
-#: ../src/pan-view/pan-view.c:1846
-msgid "Normal Thumbnails"
-msgstr ""
-
 #: ../src/pan-view/pan-view.c:1847
+msgid "Dots"
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:1848
+msgid "No Images"
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:1849
+msgid "Small Thumbnails"
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:1850
+msgid "Normal Thumbnails"
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:1851
 msgid "Large Thumbnails"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1848 ../src/pan-view/pan-view.c:2349
+#: ../src/pan-view/pan-view.c:1852 ../src/pan-view/pan-view.c:2376
 msgid "1:10 (10%)"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1849 ../src/pan-view/pan-view.c:2345
+#: ../src/pan-view/pan-view.c:1853 ../src/pan-view/pan-view.c:2372
 msgid "1:4 (25%)"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1850 ../src/pan-view/pan-view.c:2341
+#: ../src/pan-view/pan-view.c:1854 ../src/pan-view/pan-view.c:2368
 msgid "1:3 (33%)"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1851 ../src/pan-view/pan-view.c:2337
+#: ../src/pan-view/pan-view.c:1855 ../src/pan-view/pan-view.c:2364
 msgid "1:2 (50%)"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1852
+#: ../src/pan-view/pan-view.c:1856
 msgid "1:1 (100%)"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:1998
+#: ../src/pan-view/pan-view.c:2002
 msgid "Pan View Performance"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2005
+#: ../src/pan-view/pan-view.c:2009
 msgid "Pan view performance may be poor."
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2006
+#: ../src/pan-view/pan-view.c:2010
 msgid ""
-"To improve performance of thumbnails in the pan view the following options "
-"can be enabled. Note that both options must be enabled to notice a change in "
-"performance."
-msgstr ""
-
-#: ../src/pan-view/pan-view.c:2014 ../src/preferences.c:1720
+"To improve the performance of thumbnails in\n"
+"pan view the following options can be enabled.\n"
+"\n"
+"Note that both options must be enabled to\n"
+"notice a change in performance."
+msgstr ""
+
+#: ../src/pan-view/pan-view.c:2016 ../src/preferences.c:1727
 msgid "Cache thumbnails"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2016
+#: ../src/pan-view/pan-view.c:2018
 msgid "Use shared thumbnail cache"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2022
+#: ../src/pan-view/pan-view.c:2024
 msgid "Do not show this dialog again"
 msgstr "Do not show this dialogue again"
 
-#: ../src/pan-view/pan-view.c:2271 ../src/search.c:1091
+#: ../src/pan-view/pan-view.c:2290 ../src/search.c:1103
 msgid "_Play"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2317
+#: ../src/pan-view/pan-view.c:2344
 msgid "Sort by E_xif date"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2323
+#: ../src/pan-view/pan-view.c:2350
 msgid "_Show Exif information"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2325
+#: ../src/pan-view/pan-view.c:2352
 msgid "Show im_age"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2329
+#: ../src/pan-view/pan-view.c:2356
 msgid "_None"
 msgstr ""
 
-#: ../src/pan-view/pan-view.c:2333
+#: ../src/pan-view/pan-view.c:2360
 msgid "_Full size"
 msgstr ""
 
@@ -4150,7 +4251,7 @@
 msgid "Keyword Filter:"
 msgstr ""
 
-#: ../src/pan-view/pan-view-filter.c:105 ../src/preferences.c:2198
+#: ../src/pan-view/pan-view-filter.c:105 ../src/preferences.c:2406
 msgid "Filter"
 msgstr ""
 
@@ -4182,271 +4283,297 @@
 msgid "no match"
 msgstr ""
 
-#: ../src/preferences.c:108 ../src/search.c:3243
+#: ../src/preferences.c:115 ../src/search.c:3367
 msgid "Unknown"
 msgstr ""
 
-#: ../src/preferences.c:110
+#: ../src/preferences.c:117
 msgid "RAW Image"
 msgstr ""
 
-#: ../src/preferences.c:112 ../src/search.c:2098 ../src/search.c:3241
+#: ../src/preferences.c:119 ../src/search.c:2188 ../src/search.c:3365
 msgid "Video"
 msgstr ""
 
-#: ../src/preferences.c:570
+#: ../src/preferences.c:120 ../src/preferences.c:2068
+msgid "Collection"
+msgstr ""
+
+#: ../src/preferences.c:121
+msgid "Pdf"
+msgstr ""
+
+#: ../src/preferences.c:589
 msgid "Nearest (worst, but fastest)"
 msgstr ""
 
-#: ../src/preferences.c:572
+#: ../src/preferences.c:591
 msgid "Tiles"
 msgstr ""
 
-#: ../src/preferences.c:574
+#: ../src/preferences.c:593
 msgid "Bilinear"
 msgstr ""
 
-#: ../src/preferences.c:576
+#: ../src/preferences.c:595
 msgid "Hyper (best, but slowest)"
 msgstr ""
 
-#: ../src/preferences.c:601
+#: ../src/preferences.c:620
 msgid "PRIMARY"
 msgstr ""
 
-#: ../src/preferences.c:603
+#: ../src/preferences.c:622
 msgid "CLIPBOARD"
 msgstr ""
 
-#: ../src/preferences.c:668 ../src/print.c:390
+#: ../src/preferences.c:687
 msgid "Custom"
 msgstr ""
 
-#: ../src/preferences.c:751
+#: ../src/preferences.c:770
 msgid "Single image"
 msgstr ""
 
-#: ../src/preferences.c:753
-msgid "Anaglyph Red-Cyan"
-msgstr ""
-
-#: ../src/preferences.c:755
-msgid "Anaglyph Green-Magenta"
-msgstr ""
-
-#: ../src/preferences.c:757
-msgid "Anaglyph Yellow-Blue"
-msgstr ""
-
-#: ../src/preferences.c:759
-msgid "Anaglyph Gray Red-Cyan"
-msgstr ""
-
-#: ../src/preferences.c:761
-msgid "Anaglyph Gray Green-Magenta"
-msgstr ""
-
-#: ../src/preferences.c:763
-msgid "Anaglyph Gray Yellow-Blue"
-msgstr ""
-
-#: ../src/preferences.c:765
-msgid "Anaglyph Dubois Red-Cyan"
-msgstr ""
-
-#: ../src/preferences.c:767
-msgid "Anaglyph Dubois Green-Magenta"
-msgstr ""
-
-#: ../src/preferences.c:769
-msgid "Anaglyph Dubois Yellow-Blue"
-msgstr ""
-
 #: ../src/preferences.c:772
-msgid "Side by Side"
-msgstr ""
-
-#: ../src/preferences.c:773
-msgid "Side by Side Half size"
+msgid "Anaglyph Red-Cyan"
+msgstr ""
+
+#: ../src/preferences.c:774
+msgid "Anaglyph Green-Magenta"
+msgstr ""
+
+#: ../src/preferences.c:776
+msgid "Anaglyph Yellow-Blue"
+msgstr ""
+
+#: ../src/preferences.c:778
+msgid "Anaglyph Gray Red-Cyan"
 msgstr ""
 
 #: ../src/preferences.c:780
+msgid "Anaglyph Gray Green-Magenta"
+msgstr ""
+
+#: ../src/preferences.c:782
+msgid "Anaglyph Gray Yellow-Blue"
+msgstr ""
+
+#: ../src/preferences.c:784
+msgid "Anaglyph Dubois Red-Cyan"
+msgstr ""
+
+#: ../src/preferences.c:786
+msgid "Anaglyph Dubois Green-Magenta"
+msgstr ""
+
+#: ../src/preferences.c:788
+msgid "Anaglyph Dubois Yellow-Blue"
+msgstr ""
+
+#: ../src/preferences.c:791
+msgid "Side by Side"
+msgstr ""
+
+#: ../src/preferences.c:792
+msgid "Side by Side Half size"
+msgstr ""
+
+#: ../src/preferences.c:799
 msgid "Top - Bottom"
 msgstr ""
 
-#: ../src/preferences.c:781
+#: ../src/preferences.c:800
 msgid "Top - Bottom Half size"
 msgstr ""
 
-#: ../src/preferences.c:790 ../src/preferences.c:2827
+#: ../src/preferences.c:809 ../src/preferences.c:3409
 msgid "Fixed position"
 msgstr ""
 
-#: ../src/preferences.c:1129 ../src/preferences.c:1132
+#: ../src/preferences.c:1148 ../src/preferences.c:1151
 msgid "Reset filters"
 msgstr ""
 
-#: ../src/preferences.c:1133
+#: ../src/preferences.c:1152
 msgid ""
 "This will reset the file filters to the defaults.\n"
 "Continue?"
 msgstr ""
 
-#: ../src/preferences.c:1160 ../src/preferences.c:1163
+#: ../src/preferences.c:1179 ../src/preferences.c:1182
 msgid "Clear trash"
 msgstr "Clear Rubbish Bin"
 
-#: ../src/preferences.c:1164
+#: ../src/preferences.c:1183
 msgid "This will remove the trash contents."
 msgstr "This will remove the Rubbish Bin contents."
 
-#: ../src/preferences.c:1208 ../src/preferences.c:1211
+#: ../src/preferences.c:1227 ../src/preferences.c:1230
 msgid "Reset image overlay template string"
 msgstr ""
 
-#: ../src/preferences.c:1212
+#: ../src/preferences.c:1231
 msgid ""
 "This will reset the image overlay template string to the default.\n"
 "Continue?"
 msgstr ""
 
-#: ../src/preferences.c:1712
+#: ../src/preferences.c:1719
 msgid "General"
 msgstr ""
 
-#: ../src/preferences.c:1718 ../src/preferences.c:1920
+#: ../src/preferences.c:1725 ../src/preferences.c:1939
 msgid "Quality:"
 msgstr ""
 
-#: ../src/preferences.c:1726
+#: ../src/preferences.c:1735
 msgid "Use Geeqie thumbnail style and cache"
 msgstr ""
 
-#: ../src/preferences.c:1733
+#: ../src/preferences.c:1742
 msgid "Store thumbnails local to image folder (non-standard)"
 msgstr ""
 
-#: ../src/preferences.c:1740
+#: ../src/preferences.c:1749
 msgid "Use standard thumbnail style and cache, shared with other applications"
 msgstr ""
 
-#: ../src/preferences.c:1746
+#: ../src/preferences.c:1755
 msgid "Use EXIF thumbnails when available (EXIF thumbnails may be outdated)"
 msgstr ""
 
-#: ../src/preferences.c:1750
+#: ../src/preferences.c:1758
+msgid "Collection preview:"
+msgstr ""
+
+#: ../src/preferences.c:1761
+msgid "The maximum number of thumbnails shown in a Collection preview montage"
+msgstr ""
+
+#: ../src/preferences.c:1764
 msgid "Use embedded metadata in video files as thumbnails when available"
 msgstr ""
 
-#: ../src/preferences.c:1757
+#: ../src/preferences.c:1771
 msgid "Star Rating"
 msgstr ""
 
-#: ../src/preferences.c:1773 ../src/preferences.c:1805
+#: ../src/preferences.c:1787 ../src/preferences.c:1819
 msgid "Set"
 msgstr ""
 
-#: ../src/preferences.c:1775 ../src/preferences.c:1807
+#: ../src/preferences.c:1789 ../src/preferences.c:1821
 msgid "Display selected character"
 msgstr ""
 
-#: ../src/preferences.c:1778 ../src/preferences.c:1810
+#: ../src/preferences.c:1792 ../src/preferences.c:1824
 msgid ""
 "Hexadecimal representation of a Unicode character. A list of all Unicode "
 "characters may be found on the Internet."
 msgstr ""
 
-#: ../src/preferences.c:1782 ../src/preferences.c:1814
-#: ../src/preferences.c:1894 ../src/window.c:397
+#: ../src/preferences.c:1796 ../src/preferences.c:1828
+#: ../src/preferences.c:1913 ../src/window.c:397
 msgid "Clear"
 msgstr ""
 
-#: ../src/preferences.c:1786 ../src/preferences.c:1818
-#: ../src/preferences.c:1898
+#: ../src/preferences.c:1800 ../src/preferences.c:1832
+#: ../src/preferences.c:1917
 msgid "Default"
 msgstr ""
 
-#: ../src/preferences.c:1826
+#: ../src/preferences.c:1840
 msgid "Slide show"
 msgstr ""
 
-#: ../src/preferences.c:1837
+#: ../src/preferences.c:1851
 msgid "Delay between image change hrs:mins:secs.dec"
 msgstr ""
 
-#: ../src/preferences.c:1853
-msgid "Random"
-msgstr ""
-
-#: ../src/preferences.c:1854
-msgid "Repeat"
-msgstr ""
-
-#: ../src/preferences.c:1856
-msgid "Image loading and caching"
-msgstr ""
-
-#: ../src/preferences.c:1858
-msgid "Decoded image cache size (Mb):"
-msgstr ""
-
-#: ../src/preferences.c:1860
-msgid "Preload next image"
-msgstr ""
-
-#: ../src/preferences.c:1863
-msgid "Refresh on file change"
-msgstr ""
-
-#: ../src/preferences.c:1866
-msgid "Info sidebar heights"
-msgstr ""
-
 #: ../src/preferences.c:1867
+msgid "Random"
+msgstr ""
+
+#: ../src/preferences.c:1868
+msgid "Repeat"
+msgstr ""
+
+#: ../src/preferences.c:1870
+msgid "Image loading and caching"
+msgstr ""
+
+#: ../src/preferences.c:1872
+msgid "Decoded image cache size (Mb):"
+msgstr ""
+
+#: ../src/preferences.c:1874
+msgid "Preload next image"
+msgstr ""
+
+#: ../src/preferences.c:1877
+msgid "Refresh on file change"
+msgstr ""
+
+#: ../src/preferences.c:1880
+msgid "Info sidebar heights"
+msgstr ""
+
+#: ../src/preferences.c:1881
 msgid "NOTE! Geeqie must be restarted for changes to take effect"
 msgstr ""
 
-#: ../src/preferences.c:1869
+#: ../src/preferences.c:1883
 msgid "Keywords:"
 msgstr ""
 
-#: ../src/preferences.c:1875
-msgid "Comment:"
-msgstr ""
-
-#: ../src/preferences.c:1878
-msgid "Rating:"
-msgstr ""
-
-#: ../src/preferences.c:1882
-msgid "On-line help search engine"
-msgstr ""
-
 #: ../src/preferences.c:1889
+msgid "Comment:"
+msgstr ""
+
+#: ../src/preferences.c:1892
+msgid "Rating:"
+msgstr ""
+
+#: ../src/preferences.c:1896
+msgid "Show predefined keyword tree"
+msgstr ""
+
+#: ../src/preferences.c:1898
+msgid ""
+"Show predefined keyword tree (NOTE! Geeqie must be restarted for change to "
+"take effect)"
+msgstr ""
+
+#: ../src/preferences.c:1901
+msgid "On-line help search engine"
+msgstr ""
+
+#: ../src/preferences.c:1908
 msgid ""
 "The format varies between search engines, e.g the format may be:\n"
 "https://www.search_engine.com/search?q=site:geeqie.org/help\n"
 "https://www.search_engine.com/?q=site:geeqie.org/help"
 msgstr ""
 
-#: ../src/preferences.c:1923
+#: ../src/preferences.c:1942
 msgid "Use GPU acceleration via Clutter library"
 msgstr ""
 
-#: ../src/preferences.c:1927
+#: ../src/preferences.c:1946
 msgid "Two pass rendering (apply HQ zoom and color correction in second pass)"
 msgstr ""
 "Two pass rendering (apply HQ zoom and colour correction in second pass)"
 
-#: ../src/preferences.c:1931
+#: ../src/preferences.c:1950
 msgid "Zoom increment:"
 msgstr ""
 
-#: ../src/preferences.c:1939
+#: ../src/preferences.c:1958
 msgid "Allow enlargement of image (max. size in %)"
 msgstr ""
 
-#: ../src/preferences.c:1945
+#: ../src/preferences.c:1964
 #, c-format
 msgid ""
 "Enable this to allow Geeqie to increase the image size for images that are "
@@ -4455,12 +4582,12 @@
 "100% is full-size."
 msgstr ""
 
-#: ../src/preferences.c:1948
+#: ../src/preferences.c:1967
 #, c-format
 msgid "Virtual window size (% of actual window):"
 msgstr ""
 
-#: ../src/preferences.c:1954
+#: ../src/preferences.c:1973
 msgid ""
 "This value will set the virtual size of the window when \"Fit image to window"
 "\" is set. Instead of using the actual size of the window, the specified "
@@ -4469,822 +4596,656 @@
 "than 100%). It affects fullscreen mode too."
 msgstr ""
 
-#: ../src/preferences.c:1956
+#: ../src/preferences.c:1975
 msgid "Appearance"
 msgstr ""
 
-#: ../src/preferences.c:1958
+#: ../src/preferences.c:1977
 msgid "Use custom border color in window mode"
 msgstr "Use custom border colour in window mode"
 
-#: ../src/preferences.c:1961
+#: ../src/preferences.c:1980
 msgid "Use custom border color in fullscreen mode"
 msgstr "Use custom border colour in fullscreen mode"
 
-#: ../src/preferences.c:1964
+#: ../src/preferences.c:1983
 msgid "Border color"
 msgstr "Border colour"
 
-#: ../src/preferences.c:1969
+#: ../src/preferences.c:1988
 msgid "Alpha channel color 1"
 msgstr "Alpha channel colour 1"
 
-#: ../src/preferences.c:1972
+#: ../src/preferences.c:1991
 msgid "Alpha channel color 2"
 msgstr "Alpha channel colour 2"
 
-#: ../src/preferences.c:1978
+#: ../src/preferences.c:1997
 msgid "Convenience"
 msgstr ""
 
-#: ../src/preferences.c:1980
-msgid "Auto rotate proofs using Exif information"
-msgstr ""
-
-#: ../src/preferences.c:1997
-msgid "Windows"
-msgstr ""
-
 #: ../src/preferences.c:1999
+msgid "Auto rotate proofs using Exif information"
+msgstr ""
+
+#: ../src/preferences.c:2013
+msgid "Windows"
+msgstr ""
+
+#: ../src/preferences.c:2015
 msgid "State"
 msgstr ""
 
-#: ../src/preferences.c:2001
+#: ../src/preferences.c:2017
 msgid "Remember window positions"
 msgstr ""
 
-#: ../src/preferences.c:2004
+#: ../src/preferences.c:2020
 msgid "Use saved window positions also for new windows"
 msgstr ""
 
-#: ../src/preferences.c:2008
+#: ../src/preferences.c:2024
 msgid "Remember tool state (float/hidden)"
 msgstr ""
 
-#: ../src/preferences.c:2011
+#: ../src/preferences.c:2027
 msgid "Remember dialog window positions"
 msgstr "Remember dialogue window positions"
 
-#: ../src/preferences.c:2014
+#: ../src/preferences.c:2030
 msgid "Show window IDs"
 msgstr ""
 
-#: ../src/preferences.c:2019
+#: ../src/preferences.c:2035
 msgid "Fit window to image when tools are hidden/floating"
 msgstr ""
 
-#: ../src/preferences.c:2023
+#: ../src/preferences.c:2039
 msgid "Limit size when auto-sizing window (%):"
 msgstr ""
 
-#: ../src/preferences.c:2038
+#: ../src/preferences.c:2054
 msgid "Smooth image flip"
 msgstr ""
 
-#: ../src/preferences.c:2040
+#: ../src/preferences.c:2056
 msgid "Disable screen saver"
 msgstr ""
 
-#: ../src/preferences.c:2044
-msgid "Overlay Screen Display"
-msgstr ""
-
-#: ../src/preferences.c:2046
-msgid "Image overlay template"
-msgstr ""
-
-#: ../src/preferences.c:2059
-msgid ""
-"<i>%name%</i> results in the filename of the picture.\n"
-"Also available: <i>%collection%</i>, <i>%number%</i>, <i>%total%</i>, <i>"
-"%date%</i>,\n"
-"<i>%size%</i> (filesize), <i>%width%</i>, <i>%height%</i>, <i>%res%</i> "
-"(resolution),\n"
-"<i>%rating%</i>, <i>%keywords%</i>, <i>%comment%</i> (XMP), <i>%imagecomment"
-"%</i> (JPEG)\n"
-"To access exif data use the exif name, e. g. <i>%formatted.Camera%</i> is "
-"the formatted camera name,\n"
-"<i>%Exif.Photo.DateTimeOriginal%</i> the date of the original shot.\n"
-"<i>%formatted.Camera:20</i> notation will truncate the displayed data to 20 "
-"characters and will add 3 dots at the end to denote the truncation.\n"
-"If two or more variables are connected with the |-sign, it prints available "
-"variables with a separator.\n"
-"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>"
-"%formatted.FocalLength%</i> could show \"1/20s - 400 - 80 mm\" or \"1/200 - "
-"80 mm\",\n"
-"if there's no ISO information in the Exif data.\n"
-"If a line is empty, it is removed. This allows one to add lines that totally "
-"disappear when no data is available.\n"
-msgstr ""
-
-#: ../src/preferences.c:2077 ../src/print.c:3220
-msgid "Font"
-msgstr ""
-
-#: ../src/preferences.c:2089 ../src/print.c:3410
-msgid "Text"
+#: ../src/preferences.c:2069
+msgid "Collection number"
+msgstr ""
+
+#: ../src/preferences.c:2070
+msgid "Collection total"
+msgstr ""
+
+#: ../src/preferences.c:2077
+msgid "Image date"
+msgstr ""
+
+#: ../src/preferences.c:2079
+msgid "ShutterSpeed"
+msgstr ""
+
+#: ../src/preferences.c:2085
+msgid "ISO"
+msgstr ""
+
+#: ../src/preferences.c:2087
+msgid "Focal len. 35mm"
+msgstr ""
+
+#: ../src/preferences.c:2091
+msgid "Lat, Long"
+msgstr ""
+
+#: ../src/preferences.c:2092
+msgid "Altitude"
 msgstr ""
 
 #: ../src/preferences.c:2094
-msgid "Background"
-msgstr ""
-
-#: ../src/preferences.c:2100 ../src/preferences.c:2278
-#: ../src/preferences.c:2740
-msgid "Defaults"
-msgstr ""
-
-#: ../src/preferences.c:2154
-msgid "Show hidden files or folders"
-msgstr ""
-
-#: ../src/preferences.c:2156
-msgid "Show parent folder (..)"
-msgstr ""
-
-#: ../src/preferences.c:2158
-msgid "Case sensitive sort"
-msgstr ""
-
-#: ../src/preferences.c:2160
-msgid "Natural sort order"
-msgstr ""
-
-#: ../src/preferences.c:2162
-msgid "Disable file extension checks"
-msgstr ""
-
-#: ../src/preferences.c:2165
-msgid "Disable File Filtering"
-msgstr ""
-
-#: ../src/preferences.c:2169
-msgid "Grouping sidecar extensions"
-msgstr ""
-
-#: ../src/preferences.c:2176
-msgid "File types"
+msgid "Timezone"
+msgstr ""
+
+#: ../src/preferences.c:2186
+msgid "OSD"
+msgstr ""
+
+#: ../src/preferences.c:2190
+msgid "Overlay Screen Display"
+msgstr ""
+
+#: ../src/preferences.c:2197
+msgid ""
+"To include predefined tags in the template, click a button or drag-and-drop"
+msgstr ""
+
+#: ../src/preferences.c:2222
+msgid "Image overlay template"
 msgstr ""
 
 #: ../src/preferences.c:2233
-msgid "Class"
-msgstr ""
-
-#: ../src/preferences.c:2250
-msgid "Writable"
-msgstr ""
-
-#: ../src/preferences.c:2261
-msgid "Sidecar is allowed"
-msgstr ""
-
-#: ../src/preferences.c:2307
-msgid "Metadata writing process"
-msgstr ""
-
-#: ../src/preferences.c:2309
-msgid "Warning: Geeqie is built without Exiv2. Some options are disabled."
-msgstr ""
-
-#: ../src/preferences.c:2311
-msgid ""
-"Metadata are written in the following order. The process ends after first "
-"success."
-msgstr ""
-
-#: ../src/preferences.c:2314
-msgid ""
-"1) Save metadata in image files, or sidecar files, according to the XMP "
-"standard"
-msgstr ""
-
-#: ../src/preferences.c:2320
+msgid "Extensive formatting options are shown in the Help file"
+msgstr ""
+
+#: ../src/preferences.c:2241 ../src/print.c:428 ../src/print.c:491
+msgid "Font"
+msgstr ""
+
+#: ../src/preferences.c:2253
+msgid "Text"
+msgstr ""
+
+#: ../src/preferences.c:2258
+msgid "Background"
+msgstr ""
+
+#: ../src/preferences.c:2264 ../src/preferences.c:2486
+#: ../src/preferences.c:3322
+msgid "Defaults"
+msgstr ""
+
+#: ../src/preferences.c:2281
+msgid "Exif, XMP or IPTC tags"
+msgstr ""
+
+#: ../src/preferences.c:2285
+msgid "%Exif.Image.Orientation%"
+msgstr ""
+
+#: ../src/preferences.c:2290
+msgid "Field separators"
+msgstr ""
+
+#: ../src/preferences.c:2294
 msgid ""
-"2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
-msgstr ""
-
-#: ../src/preferences.c:2323
-#, c-format
-msgid "3) Save metadata in Geeqie private directory '%s'"
-msgstr ""
-
-#: ../src/preferences.c:2329
-msgid "Step 1: Write to image files"
-msgstr ""
-
-#: ../src/preferences.c:2337
+"Separator shown only if both fields are non-null:\n"
+"%formatted.ShutterSpeed%|%formatted.ISOSpeedRating%"
+msgstr ""
+
+#: ../src/preferences.c:2299
+msgid "Field maximum length"
+msgstr ""
+
+#: ../src/preferences.c:2303
+msgid "%path:39%"
+msgstr ""
+
+#: ../src/preferences.c:2308
+msgid "Pre- and post- text"
+msgstr ""
+
+#: ../src/preferences.c:2312
 msgid ""
-"Store metadata also in legacy IPTC tags (converted according to IPTC4XMP "
-"standard)"
-msgstr ""
-
-#: ../src/preferences.c:2340
-msgid "Warn if the image files are unwritable"
-msgstr ""
-
-#: ../src/preferences.c:2343
-msgid "Ask before writing to image files"
-msgstr ""
-
-#: ../src/preferences.c:2346
-msgid "Create sidecar files named image.ext.xmp (as opposed to image.xmp)"
-msgstr ""
-
-#: ../src/preferences.c:2349
-msgid "Step 2 and 3: write to Geeqie private files"
-msgstr ""
-
-#: ../src/preferences.c:2354
+"Text shown only if the field is non-null:\n"
+"%formatted.Aperture:F no. * setting%\n"
+" %formatted.Aperture:10:F no. * setting%"
+msgstr ""
+
+#: ../src/preferences.c:2317
+msgid "Pango markup"
+msgstr ""
+
+#: ../src/preferences.c:2321
 msgid ""
-"Use GQview legacy metadata format (supports only keywords and comments) "
-"instead of XMP"
-msgstr ""
-
-#: ../src/preferences.c:2358
-msgid "Miscellaneous"
-msgstr ""
-
-#: ../src/preferences.c:2359
-msgid ""
-"Write the same description tags (keywords, comment, etc.) to all grouped "
-"sidecars"
+"<b>bold</b>\n"
+"<u>underline</u>\n"
+"<i>italic</i>\n"
+"<s>strikethrough</s>"
 msgstr ""
 
 #: ../src/preferences.c:2362
-msgid "Allow keywords to differ only in case"
-msgstr ""
-
-#: ../src/preferences.c:2365
-msgid "Write altered image orientation to the metadata"
-msgstr ""
-
-#: ../src/preferences.c:2371
-msgid "Auto-save options"
+msgid "Show hidden files or folders"
+msgstr ""
+
+#: ../src/preferences.c:2364
+msgid "Show parent folder (..)"
+msgstr ""
+
+#: ../src/preferences.c:2366
+msgid "Case sensitive sort"
+msgstr ""
+
+#: ../src/preferences.c:2368
+msgid "Natural sort order"
+msgstr ""
+
+#: ../src/preferences.c:2370
+msgid "Disable file extension checks"
 msgstr ""
 
 #: ../src/preferences.c:2373
-msgid "Write metadata after timeout"
-msgstr ""
-
-#: ../src/preferences.c:2379
-msgid "Timeout (seconds):"
-msgstr ""
-
-#: ../src/preferences.c:2382
-msgid "Write metadata on image change"
-msgstr ""
-
-#: ../src/preferences.c:2385
-msgid "Write metadata on directory change"
-msgstr ""
-
-#: ../src/preferences.c:2388
-msgid "Pre-load metadata"
-msgstr ""
-
-#: ../src/preferences.c:2390
-msgid "Read metadata in background"
-msgstr ""
-
-#: ../src/preferences.c:2431
-msgid "Perceptual"
-msgstr ""
-
-#: ../src/preferences.c:2433
-msgid "Relative Colorimetric"
-msgstr "Relative Colourimetric"
-
-#: ../src/preferences.c:2437
-msgid "Absolute Colorimetric"
-msgstr "Absolute Colourimetric"
-
-#: ../src/preferences.c:2462
-msgid "Color management"
-msgstr "Colour management"
-
-#: ../src/preferences.c:2464
-msgid "Input profiles"
-msgstr ""
-
-#: ../src/preferences.c:2472
-msgid "Type"
-msgstr ""
-
-#: ../src/preferences.c:2475
-msgid "Menu name"
-msgstr ""
-
-#: ../src/preferences.c:2478
-msgid "File"
-msgstr ""
-
-#: ../src/preferences.c:2486
-#, c-format
-msgid "Input %d:"
-msgstr ""
-
-#: ../src/preferences.c:2502 ../src/preferences.c:2522
-msgid "Select color profile"
-msgstr "Select colour profile"
-
-#: ../src/preferences.c:2510
-msgid "Screen profile"
-msgstr ""
-
-#: ../src/preferences.c:2514
-msgid "Use system screen profile if available"
+msgid "Disable File Filtering"
+msgstr ""
+
+#: ../src/preferences.c:2377
+msgid "Grouping sidecar extensions"
+msgstr ""
+
+#: ../src/preferences.c:2384
+msgid "File types"
+msgstr ""
+
+#: ../src/preferences.c:2441
+msgid "Class"
+msgstr ""
+
+#: ../src/preferences.c:2458
+msgid "Writable"
+msgstr ""
+
+#: ../src/preferences.c:2469
+msgid "Sidecar is allowed"
+msgstr ""
+
+#: ../src/preferences.c:2515
+msgid "Metadata writing process"
+msgstr ""
+
+#: ../src/preferences.c:2517
+msgid "Warning: Geeqie is built without Exiv2. Some options are disabled."
 msgstr ""
 
 #: ../src/preferences.c:2519
-msgid "Screen:"
-msgstr ""
-
-#: ../src/preferences.c:2525
-msgid "Render Intent:"
-msgstr ""
-
-#: ../src/preferences.c:2548 ../src/preferences.c:2589
-msgid "Behavior"
-msgstr "Behaviour"
-
-#: ../src/preferences.c:2550 ../src/utilops.c:2180
-msgid "Delete"
-msgstr ""
-
-#: ../src/preferences.c:2552
-msgid "Confirm file delete"
+msgid ""
+"Metadata are written in the following order. The process ends after first "
+"success."
+msgstr ""
+
+#: ../src/preferences.c:2522
+msgid ""
+"1) Save metadata in image files, or sidecar files, according to the XMP "
+"standard"
+msgstr ""
+
+#: ../src/preferences.c:2528
+msgid ""
+"2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
+msgstr ""
+
+#: ../src/preferences.c:2531
+#, c-format
+msgid "3) Save metadata in Geeqie private directory '%s'"
+msgstr ""
+
+#: ../src/preferences.c:2537
+msgid "Step 1: Write to image files"
+msgstr ""
+
+#: ../src/preferences.c:2545
+msgid ""
+"Store metadata also in legacy IPTC tags (converted according to IPTC4XMP "
+"standard)"
+msgstr ""
+
+#: ../src/preferences.c:2548
+msgid "Warn if the image files are unwritable"
+msgstr ""
+
+#: ../src/preferences.c:2551
+msgid "Ask before writing to image files"
 msgstr ""
 
 #: ../src/preferences.c:2554
-msgid "Enable Delete key"
+msgid "Create sidecar files named image.ext.xmp (as opposed to image.xmp)"
 msgstr ""
 
 #: ../src/preferences.c:2557
-msgid "Safe delete"
-msgstr ""
-
-#: ../src/preferences.c:2575
+msgid "Step 2 and 3: write to Geeqie private files"
+msgstr ""
+
+#: ../src/preferences.c:2562
+msgid ""
+"Use GQview legacy metadata format (supports only keywords and comments) "
+"instead of XMP"
+msgstr ""
+
+#: ../src/preferences.c:2566
+msgid "Miscellaneous"
+msgstr ""
+
+#: ../src/preferences.c:2567
+msgid ""
+"Write the same description tags (keywords, comment, etc.) to all grouped "
+"sidecars"
+msgstr ""
+
+#: ../src/preferences.c:2570
+msgid "Allow keywords to differ only in case"
+msgstr ""
+
+#: ../src/preferences.c:2573
+msgid "Write altered image orientation to the metadata"
+msgstr ""
+
+#: ../src/preferences.c:2579
+msgid "Auto-save options"
+msgstr ""
+
+#: ../src/preferences.c:2581
+msgid "Write metadata after timeout"
+msgstr ""
+
+#: ../src/preferences.c:2587
+msgid "Timeout (seconds):"
+msgstr ""
+
+#: ../src/preferences.c:2590
+msgid "Write metadata on image change"
+msgstr ""
+
+#: ../src/preferences.c:2593
+msgid "Write metadata on directory change"
+msgstr ""
+
+#: ../src/preferences.c:2596
+msgid "Pre-load metadata"
+msgstr ""
+
+#: ../src/preferences.c:2598
+msgid "Read metadata in background"
+msgstr ""
+
+#: ../src/preferences.c:2787 ../src/preferences.c:2801
+msgid "Search for keywords"
+msgstr ""
+
+#: ../src/preferences.c:2899
+msgid "Edit keywords autocompletion list"
+msgstr ""
+
+#: ../src/preferences.c:2903 ../src/toolbar.c:85
+msgid "Search"
+msgstr ""
+
+#: ../src/preferences.c:2982
+msgid "Perceptual"
+msgstr ""
+
+#: ../src/preferences.c:2984
+msgid "Relative Colorimetric"
+msgstr "Relative Colourimetric"
+
+#: ../src/preferences.c:2988
+msgid "Absolute Colorimetric"
+msgstr "Absolute Colourimetric"
+
+#: ../src/preferences.c:3013
+msgid "Color management"
+msgstr "Colour management"
+
+#: ../src/preferences.c:3015
+msgid "Input profiles"
+msgstr ""
+
+#: ../src/preferences.c:3023
+msgid "Type"
+msgstr ""
+
+#: ../src/preferences.c:3026
+msgid "Menu name"
+msgstr ""
+
+#: ../src/preferences.c:3029
+msgid "File"
+msgstr ""
+
+#: ../src/preferences.c:3037
+#, c-format
+msgid "Input %d:"
+msgstr ""
+
+#: ../src/preferences.c:3053 ../src/preferences.c:3073
+msgid "Select color profile"
+msgstr "Select colour profile"
+
+#: ../src/preferences.c:3061
+msgid "Screen profile"
+msgstr ""
+
+#: ../src/preferences.c:3065
+msgid "Use system screen profile if available"
+msgstr ""
+
+#: ../src/preferences.c:3070
+msgid "Screen:"
+msgstr ""
+
+#: ../src/preferences.c:3076
+msgid "Render Intent:"
+msgstr ""
+
+#: ../src/preferences.c:3116 ../src/preferences.c:3163
+msgid "Behavior"
+msgstr "Behaviour"
+
+#: ../src/preferences.c:3118 ../src/toolbar.c:91 ../src/utilops.c:2188
+msgid "Delete"
+msgstr ""
+
+#: ../src/preferences.c:3120
+msgid "Confirm permanent file delete"
+msgstr ""
+
+#: ../src/preferences.c:3122
+msgid "Confirm move file to Trash"
+msgstr "Confirm file move to Rubbish bin"
+
+#: ../src/preferences.c:3124
+msgid "Enable Delete key"
+msgstr ""
+
+#: ../src/preferences.c:3127
+msgid "Use Geeqie trash location"
+msgstr "Use Geeqie Rubbish bin location"
+
+#: ../src/preferences.c:3145
 msgid "Maximum size:"
 msgstr ""
 
-#: ../src/preferences.c:2575
+#: ../src/preferences.c:3145
 msgid "MB"
 msgstr ""
 
-#: ../src/preferences.c:2577
+#: ../src/preferences.c:3147
 msgid "Set to 0 for unlimited size"
 msgstr ""
 
-#: ../src/preferences.c:2578
+#: ../src/preferences.c:3148
 msgid "View"
 msgstr ""
 
-#: ../src/preferences.c:2591
+#: ../src/preferences.c:3156
+msgid "Use system Trash bin"
+msgstr "Use system Rubbish bin"
+
+#: ../src/preferences.c:3165
 msgid "Descend folders in tree view"
 msgstr ""
 
-#: ../src/preferences.c:2594
+#: ../src/preferences.c:3168
 msgid "In place renaming"
 msgstr ""
 
-#: ../src/preferences.c:2597
+#: ../src/preferences.c:3171
 msgid "List directory view uses single click to enter"
 msgstr ""
 
-#: ../src/preferences.c:2600
+#: ../src/preferences.c:3174
 msgid "Save marks on exit"
 msgstr ""
 
-#: ../src/preferences.c:2604
+#: ../src/preferences.c:3178
 msgid "Use \"With Rename\" as default for Copy/Move dialogs"
 msgstr "Use \"With Rename\" as default for Copy/Move dialogues"
 
-#: ../src/preferences.c:2608
+#: ../src/preferences.c:3182
+msgid "Open collections on top"
+msgstr ""
+
+#: ../src/preferences.c:3186
 msgid "Recent folder list maximum size"
 msgstr ""
 
-#: ../src/preferences.c:2611
+#: ../src/preferences.c:3189
 msgid "Drag'n drop icon size"
 msgstr ""
 
-#: ../src/preferences.c:2615
+#: ../src/preferences.c:3193
 msgid "Copy path clipboard selection:"
 msgstr ""
 
-#: ../src/preferences.c:2617
+#: ../src/preferences.c:3197
 msgid "Navigation"
 msgstr ""
 
-#: ../src/preferences.c:2619
+#: ../src/preferences.c:3199
 msgid "Progressive keyboard scrolling"
 msgstr ""
 
-#: ../src/preferences.c:2621
+#: ../src/preferences.c:3201
 msgid "Keyboard scrolling step multiplier:"
 msgstr ""
 
-#: ../src/preferences.c:2623
+#: ../src/preferences.c:3203
 msgid "Mouse wheel scrolls image"
 msgstr ""
 
-#: ../src/preferences.c:2625
+#: ../src/preferences.c:3205
 msgid "Navigation by left or middle click on image"
 msgstr ""
 
-#: ../src/preferences.c:2627
+#: ../src/preferences.c:3207
 msgid "Play video by left click on image"
 msgstr ""
 
-#: ../src/preferences.c:2630
+#: ../src/preferences.c:3210
 msgid "Play with:"
 msgstr ""
 
-#: ../src/preferences.c:2634
+#: ../src/preferences.c:3216
 msgid "Debugging"
 msgstr ""
 
-#: ../src/preferences.c:2639
+#: ../src/preferences.c:3221
 msgid "Timer data"
 msgstr ""
 
-#: ../src/preferences.c:2642
+#: ../src/preferences.c:3224
 msgid "Log Window max. lines:"
 msgstr ""
 
-#: ../src/preferences.c:2660
+#: ../src/preferences.c:3242
 msgid "Keyboard"
 msgstr ""
 
-#: ../src/preferences.c:2662
+#: ../src/preferences.c:3244
 msgid "Accelerators"
 msgstr ""
 
-#: ../src/preferences.c:2681
+#: ../src/preferences.c:3263
 msgid "Action"
 msgstr ""
 
-#: ../src/preferences.c:2703
+#: ../src/preferences.c:3285
 msgid "KEY"
 msgstr ""
 
-#: ../src/preferences.c:2714
+#: ../src/preferences.c:3296
 msgid "Tooltip"
 msgstr ""
 
-#: ../src/preferences.c:2745
+#: ../src/preferences.c:3327
 msgid "Reset selected"
 msgstr ""
 
-#: ../src/preferences.c:2760
+#: ../src/preferences.c:3342
 msgid "Toolbar"
 msgstr ""
 
-#: ../src/preferences.c:2777
+#: ../src/preferences.c:3359
 msgid "Stereo"
 msgstr ""
 
-#: ../src/preferences.c:2779 ../src/preferences.c:2782
+#: ../src/preferences.c:3361 ../src/preferences.c:3364
 msgid "Windowed stereo mode"
 msgstr ""
 
-#: ../src/preferences.c:2786 ../src/preferences.c:2811
+#: ../src/preferences.c:3368 ../src/preferences.c:3393
 msgid "Mirror left image"
 msgstr ""
 
-#: ../src/preferences.c:2789 ../src/preferences.c:2814
+#: ../src/preferences.c:3371 ../src/preferences.c:3396
 msgid "Flip left image"
 msgstr ""
 
-#: ../src/preferences.c:2792 ../src/preferences.c:2817
+#: ../src/preferences.c:3374 ../src/preferences.c:3399
 msgid "Mirror right image"
 msgstr ""
 
-#: ../src/preferences.c:2795 ../src/preferences.c:2820
+#: ../src/preferences.c:3377 ../src/preferences.c:3402
 msgid "Flip right image"
 msgstr ""
 
-#: ../src/preferences.c:2797 ../src/preferences.c:2822
+#: ../src/preferences.c:3379 ../src/preferences.c:3404
 msgid "Swap left and right images"
 msgstr ""
 
-#: ../src/preferences.c:2799 ../src/preferences.c:2824
+#: ../src/preferences.c:3381 ../src/preferences.c:3406
 msgid "Disable stereo mode on single image source"
 msgstr ""
 
-#: ../src/preferences.c:2802 ../src/preferences.c:2808
+#: ../src/preferences.c:3384 ../src/preferences.c:3390
 msgid "Fullscreen stereo mode"
 msgstr ""
 
-#: ../src/preferences.c:2803
+#: ../src/preferences.c:3385
 msgid "Use different settings for fullscreen"
 msgstr ""
 
-#: ../src/preferences.c:2833
+#: ../src/preferences.c:3415
 msgid "Left X"
 msgstr ""
 
-#: ../src/preferences.c:2835
+#: ../src/preferences.c:3417
 msgid "Left Y"
 msgstr ""
 
-#: ../src/preferences.c:2837
+#: ../src/preferences.c:3419
 msgid "Right X"
 msgstr ""
 
-#: ../src/preferences.c:2839
+#: ../src/preferences.c:3421
 msgid "Right Y"
 msgstr ""
 
-#: ../src/preferences.c:2855 ../src/toolbar.c:89
+#: ../src/preferences.c:3437 ../src/toolbar.c:100
 msgid "Preferences"
 msgstr ""
 
-#: ../src/preferences.c:3004
+#: ../src/preferences.c:3589
 msgid "About Geeqie"
 msgstr ""
 
-#: ../src/preferences.c:3014
+#: ../src/preferences.c:3599
 msgid "translator-credits"
 msgstr ""
 
-#: ../src/print.c:134
-msgid "Selection"
-msgstr ""
-
-#: ../src/print.c:135
-msgid "All"
-msgstr ""
-
-#: ../src/print.c:146
-msgid "One image per page"
-msgstr ""
-
-#: ../src/print.c:147
-msgid "Proof sheet"
-msgstr ""
-
-#: ../src/print.c:160
-msgid "Default printer"
-msgstr ""
-
-#: ../src/print.c:161
-msgid "Custom printer"
-msgstr ""
-
-#: ../src/print.c:162
-msgid "PostScript file"
-msgstr ""
-
-#: ../src/print.c:163
-msgid "Image file"
-msgstr ""
-
-#: ../src/print.c:177
-msgid "jpeg, low quality"
-msgstr ""
-
-#: ../src/print.c:178
-msgid "jpeg, normal quality"
-msgstr ""
-
-#: ../src/print.c:179
-msgid "jpeg, high quality"
-msgstr ""
-
-#: ../src/print.c:375 ../src/print.c:3222
-msgid "points"
-msgstr ""
-
-#: ../src/print.c:376
-msgid "millimeters"
-msgstr "millimetres"
-
-#: ../src/print.c:377
-msgid "centimeters"
-msgstr "centimetres"
-
-#: ../src/print.c:378
-msgid "inches"
-msgstr ""
-
-#: ../src/print.c:379
-msgid "picas"
-msgstr ""
-
-#: ../src/print.c:391
-msgid "Letter"
-msgstr ""
-
-#. in 8.5 x 11
-#: ../src/print.c:392
-msgid "Legal"
-msgstr ""
-
-#. in 8.5 x 14
-#: ../src/print.c:393
-msgid "Executive"
-msgstr ""
-
-#. in 7.25x 10.5
-#. mm 841 x 1189
-#. mm 594 x 841
-#. mm 420 x 594
-#. mm 297 x 420
-#. mm 210 x 297
-#. mm 148 x 210
-#. mm 105 x 148
-#. mm 353 x 500
-#. mm 250 x 353
-#. mm 176 x 250
-#. mm 125 x 176
-#: ../src/print.c:405
-msgid "Envelope #10"
-msgstr ""
-
-#. in 4.125 x 9.5
-#: ../src/print.c:406
-msgid "Envelope #9"
-msgstr ""
-
-#. in 3.875 x 8.875
-#: ../src/print.c:407
-msgid "Envelope C4"
-msgstr ""
-
-#. mm 229 x 324
-#: ../src/print.c:408
-msgid "Envelope C5"
-msgstr ""
-
-#. mm 162 x 229
-#: ../src/print.c:409
-msgid "Envelope C6"
-msgstr ""
-
-#. mm 114 x 162
-#: ../src/print.c:410
-msgid "Photo 6x4"
-msgstr ""
-
-#. in 6   x 4
-#: ../src/print.c:411
-msgid "Photo 8x10"
-msgstr ""
-
-#. in 8   x 10
-#: ../src/print.c:412
-msgid "Postcard"
-msgstr ""
-
-#. mm 100 x 148
-#: ../src/print.c:413
-msgid "Tabloid"
-msgstr ""
-
-#: ../src/print.c:569
-#, c-format
-msgid "page %d of %d"
-msgstr ""
-
-#: ../src/print.c:761
-msgid "Preview"
-msgstr ""
-
-#: ../src/print.c:1069
-#, c-format
-msgid ""
-"Unable to open pipe for writing.\n"
-"\"%s\""
-msgstr ""
-
-#: ../src/print.c:1084 ../src/print.c:1476 ../src/ui_pathsel.c:432
-#, c-format
-msgid "A file with name %s already exists."
-msgstr ""
-
-#: ../src/print.c:1099 ../src/print.c:1531
-#, c-format
-msgid "Failure writing to file %s"
-msgstr ""
-
-#: ../src/print.c:1154 ../src/print.c:1191 ../src/print.c:1227
-#: ../src/print.c:1344 ../src/print.c:1417
-msgid "SIGPIPE error writing to printer."
-msgstr ""
-
-#: ../src/print.c:1952
-#, c-format
-msgid "Page %d"
-msgstr ""
-
-#: ../src/print.c:1974 ../src/print.c:1979
-msgid "Printing error"
-msgstr ""
-
-#: ../src/print.c:1978
-#, c-format
-msgid "An error occurred printing to %s."
-msgstr ""
-
-#: ../src/print.c:1982
-msgid "Details"
-msgstr ""
-
-#: ../src/print.c:2597 ../src/print.c:3351 ../src/toolbar.c:88
-msgid "Print"
-msgstr ""
-
-#: ../src/print.c:2601
-#, c-format
-msgid "Printing %d pages to %s."
-msgstr ""
-
-#: ../src/print.c:2701
-msgid "Format:"
-msgstr ""
-
-#: ../src/print.c:2776
-msgid "Units:"
-msgstr ""
-
-#: ../src/print.c:2820
-msgid "Orientation:"
-msgstr ""
-
-#: ../src/print.c:2952
-msgid "Destination:"
-msgstr ""
-
-#: ../src/print.c:3000
-msgid "<printer name>"
-msgstr ""
-
-#: ../src/print.c:3089
-msgid "Unlimited"
-msgstr ""
-
-#: ../src/print.c:3207
-msgid "Show"
-msgstr ""
-
-#: ../src/print.c:3378
-msgid "Source"
-msgstr ""
-
-#: ../src/print.c:3390
-msgid "Image size:"
-msgstr ""
-
-#: ../src/print.c:3394
-msgid "Proof size:"
-msgstr ""
-
-#: ../src/print.c:3420
-msgid "Paper"
-msgstr ""
-
-#: ../src/print.c:3443
-msgid "Margins"
-msgstr ""
-
-#: ../src/print.c:3445
-msgid "Left:"
-msgstr ""
-
-#: ../src/print.c:3448
-msgid "Right:"
-msgstr ""
-
-#: ../src/print.c:3451
-msgid "Top:"
-msgstr ""
-
-#: ../src/print.c:3454
-msgid "Bottom:"
-msgstr ""
-
-#: ../src/print.c:3463
-msgid "Printer"
-msgstr ""
-
-#: ../src/print.c:3469
-msgid "Custom printer:"
-msgstr ""
-
-#: ../src/print.c:3478
-msgid "File:"
-msgstr ""
-
-#: ../src/print.c:3487
-msgid "File format:"
-msgstr ""
-
-#: ../src/print.c:3492
-msgid "DPI:"
-msgstr ""
-
-#: ../src/print.c:3500
-msgid "Remember print settings"
+#: ../src/print.c:386
+msgid "Image text"
+msgstr ""
+
+#: ../src/print.c:388
+msgid "Show image text"
+msgstr ""
+
+#: ../src/print.c:442
+msgid "Page text"
+msgstr ""
+
+#: ../src/print.c:444
+msgid "Show page text"
 msgstr ""
 
 #: ../src/rcfile.c:91
@@ -5292,12 +5253,12 @@
 msgid "Option %s ignored: %s\n"
 msgstr ""
 
-#: ../src/rcfile.c:560
+#: ../src/rcfile.c:608
 #, c-format
 msgid "error saving config file: %s\n"
 msgstr ""
 
-#: ../src/rcfile.c:621
+#: ../src/rcfile.c:672
 #, c-format
 msgid ""
 "error saving config file: %s\n"
@@ -5309,417 +5270,430 @@
 msgid "[%d,%d]: RGB(%3d,%3d,%3d)"
 msgstr ""
 
-#: ../src/remote.c:834 ../src/remote.c:839
+#: ../src/remote.c:708
+#, c-format
+msgid "%dx%d+%d+%d"
+msgstr ""
+
+#: ../src/remote.c:891 ../src/remote.c:896
 msgid "lua error: no data"
 msgstr ""
 
 #. short, long                  callback,               extra, prefer, parameter, description
-#: ../src/remote.c:862
+#: ../src/remote.c:919
 msgid "next image"
 msgstr ""
 
-#: ../src/remote.c:863
+#: ../src/remote.c:920
 msgid "previous image"
 msgstr ""
 
-#: ../src/remote.c:864
+#: ../src/remote.c:921
 msgid "first image"
 msgstr ""
 
-#: ../src/remote.c:865
+#: ../src/remote.c:922
 msgid "last image"
 msgstr ""
 
-#: ../src/remote.c:866
+#: ../src/remote.c:923
 msgid "toggle full screen"
 msgstr ""
 
-#: ../src/remote.c:867
+#: ../src/remote.c:924
 msgid "start full screen"
 msgstr ""
 
-#: ../src/remote.c:868
+#: ../src/remote.c:925
 msgid "stop full screen"
 msgstr ""
 
-#: ../src/remote.c:869
+#: ../src/remote.c:926
 msgid "toggle slide show"
 msgstr ""
 
-#: ../src/remote.c:870
+#: ../src/remote.c:927
 msgid "start slide show"
 msgstr ""
 
-#: ../src/remote.c:871
+#: ../src/remote.c:928
 msgid "stop slide show"
 msgstr ""
 
-#: ../src/remote.c:872
+#: ../src/remote.c:929
 msgid "<FOLDER>"
 msgstr ""
 
-#: ../src/remote.c:872
+#: ../src/remote.c:929
 msgid "start recursive slide show in FOLDER"
 msgstr ""
 
-#: ../src/remote.c:873
+#: ../src/remote.c:930
 msgid "<[H:][M:][N][.M]>"
 msgstr ""
 
-#: ../src/remote.c:873
+#: ../src/remote.c:930
 msgid "set slide show delay to Hrs Mins N.M seconds"
 msgstr ""
 
-#: ../src/remote.c:874
+#: ../src/remote.c:931
 msgid "show tools"
 msgstr ""
 
-#: ../src/remote.c:875
+#: ../src/remote.c:932
 msgid "hide tools"
 msgstr ""
 
-#: ../src/remote.c:876
+#: ../src/remote.c:933
 msgid "quit"
 msgstr ""
 
-#: ../src/remote.c:877 ../src/remote.c:878 ../src/remote.c:879
-#: ../src/remote.c:880 ../src/remote.c:881 ../src/remote.c:884
-#: ../src/remote.c:886
+#: ../src/remote.c:934 ../src/remote.c:935 ../src/remote.c:936
+#: ../src/remote.c:937 ../src/remote.c:938 ../src/remote.c:943
+#: ../src/remote.c:945
 msgid "<FILE>"
 msgstr ""
 
-#: ../src/remote.c:877
+#: ../src/remote.c:934
 msgid "load configuration from FILE"
 msgstr ""
 
-#: ../src/remote.c:878
+#: ../src/remote.c:935
 msgid "get list of sidecars of FILE"
 msgstr ""
 
-#: ../src/remote.c:879
+#: ../src/remote.c:936
 msgid "get destination path of FILE"
 msgstr ""
 
-#: ../src/remote.c:880
+#: ../src/remote.c:937
 msgid "open FILE, bring Geeqie window to the top"
 msgstr ""
 
-#: ../src/remote.c:881
+#: ../src/remote.c:938
 msgid "open FILE, do not bring Geeqie window to the top"
 msgstr ""
 
-#: ../src/remote.c:882
+#: ../src/remote.c:939
 msgid "print filename of current image"
 msgstr ""
 
-#: ../src/remote.c:883
+#: ../src/remote.c:940
 msgid "print pixel info of mouse pointer on current image"
 msgstr ""
 
-#: ../src/remote.c:884
+#: ../src/remote.c:941
+msgid "get rectangle co-ordinates"
+msgstr ""
+
+#: ../src/remote.c:942
+msgid "get render intent"
+msgstr ""
+
+#: ../src/remote.c:943
 msgid "open FILE in new window"
 msgstr ""
 
-#: ../src/remote.c:885
+#: ../src/remote.c:944
 msgid "clear command line collection list"
 msgstr ""
 
-#: ../src/remote.c:886
+#: ../src/remote.c:945
 msgid "add FILE to command line collection list"
 msgstr ""
 
-#: ../src/remote.c:887
+#: ../src/remote.c:946
 msgid "bring the Geeqie window to the top"
 msgstr ""
 
-#: ../src/remote.c:888
+#: ../src/remote.c:947
 msgid "<ID>"
 msgstr ""
 
-#: ../src/remote.c:888
+#: ../src/remote.c:947
 msgid "window id for following commands"
 msgstr ""
 
-#: ../src/remote.c:889
+#: ../src/remote.c:948
 msgid "new window"
 msgstr ""
 
-#: ../src/remote.c:890
+#: ../src/remote.c:949
 msgid "close window"
 msgstr ""
 
-#: ../src/remote.c:891 ../src/remote.c:892
+#: ../src/remote.c:950 ../src/remote.c:951
 msgid "clear|clean"
 msgstr ""
 
-#: ../src/remote.c:891
+#: ../src/remote.c:950
 msgid "clear or clean thumbnail cache"
 msgstr ""
 
-#: ../src/remote.c:892
+#: ../src/remote.c:951
 msgid "clear or clean shared thumbnail cache"
 msgstr ""
 
-#: ../src/remote.c:893
+#: ../src/remote.c:952
 msgid "    clean the metadata cache"
 msgstr ""
 
-#: ../src/remote.c:894
+#: ../src/remote.c:953
 msgid "<folder>  "
 msgstr ""
 
-#: ../src/remote.c:894
+#: ../src/remote.c:953
 msgid " render thumbnails"
 msgstr ""
 
-#: ../src/remote.c:895 ../src/remote.c:896
+#: ../src/remote.c:954 ../src/remote.c:955
 msgid "<folder> "
 msgstr ""
 
-#: ../src/remote.c:895
+#: ../src/remote.c:954
 msgid "render thumbnails recursively"
 msgstr ""
 
-#: ../src/remote.c:896
+#: ../src/remote.c:955
 msgid " render thumbnails (see Help)"
 msgstr ""
 
-#: ../src/remote.c:897
+#: ../src/remote.c:956
 msgid "<folder>"
 msgstr ""
 
-#: ../src/remote.c:897
+#: ../src/remote.c:956
 msgid " render thumbnails recursively (see Help)"
 msgstr ""
 
-#: ../src/remote.c:899
+#: ../src/remote.c:958
 msgid "<FILE>,<lua script>"
 msgstr ""
 
-#: ../src/remote.c:899
+#: ../src/remote.c:958
 msgid "run lua script on FILE"
 msgstr ""
 
-#: ../src/remote.c:965
+#: ../src/remote.c:1024
 msgid "Remote command list:\n"
 msgstr ""
 
-#: ../src/remote.c:984
+#: ../src/remote.c:1043
 msgid ""
 "\n"
 "  All other command line parameters are used as plain files if they exists.\n"
 msgstr ""
 
-#: ../src/remote.c:1034
+#: ../src/remote.c:1093
 #, c-format
 msgid "Remote %s not running, starting..."
 msgstr ""
 
-#: ../src/remote.c:1170
+#: ../src/remote.c:1229
 msgid "Remote not available\n"
 msgstr ""
 
-#: ../src/search.c:254
+#: ../src/search.c:257
 msgid "folder"
 msgstr ""
 
-#: ../src/search.c:255
+#: ../src/search.c:258
 msgid "comments"
 msgstr ""
 
-#: ../src/search.c:256
+#: ../src/search.c:259
 msgid "results"
 msgstr ""
 
-#: ../src/search.c:260 ../src/search.c:285
+#: ../src/search.c:263 ../src/search.c:288
 msgid "contains"
 msgstr ""
 
-#: ../src/search.c:261 ../src/search.c:304 ../src/search.c:309
+#: ../src/search.c:264 ../src/search.c:307 ../src/search.c:312
 msgid "is"
 msgstr ""
 
-#: ../src/search.c:265 ../src/search.c:272 ../src/search.c:291
-msgid "equal to"
-msgstr ""
-
-#: ../src/search.c:266 ../src/search.c:292 ../src/search.c:299
-msgid "less than"
-msgstr ""
-
-#: ../src/search.c:267 ../src/search.c:293 ../src/search.c:300
-msgid "greater than"
-msgstr ""
-
 #: ../src/search.c:268 ../src/search.c:275 ../src/search.c:294
+msgid "equal to"
+msgstr ""
+
+#: ../src/search.c:269 ../src/search.c:295 ../src/search.c:302
+msgid "less than"
+msgstr ""
+
+#: ../src/search.c:270 ../src/search.c:296 ../src/search.c:303
+msgid "greater than"
+msgstr ""
+
+#: ../src/search.c:271 ../src/search.c:278 ../src/search.c:297
 msgid "between"
 msgstr ""
 
-#: ../src/search.c:273
+#: ../src/search.c:276
 msgid "before"
 msgstr ""
 
-#: ../src/search.c:274
+#: ../src/search.c:277
 msgid "after"
 msgstr ""
 
-#: ../src/search.c:279
+#: ../src/search.c:282
 msgid "match all"
 msgstr ""
 
-#: ../src/search.c:280
+#: ../src/search.c:283
 msgid "match any"
 msgstr ""
 
-#: ../src/search.c:281
+#: ../src/search.c:284
 msgid "exclude"
 msgstr ""
 
-#: ../src/search.c:286
+#: ../src/search.c:289
 msgid "miss"
 msgstr ""
 
-#: ../src/search.c:298
+#: ../src/search.c:301
 msgid "not geocoded"
 msgstr ""
 
-#: ../src/search.c:305 ../src/search.c:310
+#: ../src/search.c:308 ../src/search.c:313
 msgid "is not"
 msgstr ""
 
-#: ../src/search.c:361
+#: ../src/search.c:364
 #, c-format
 msgid "%s, %d files (%s, %d)"
 msgstr ""
 
-#: ../src/search.c:366
+#: ../src/search.c:369
 #, c-format
 msgid "%s, %d files"
 msgstr ""
 
-#: ../src/search.c:384
+#: ../src/search.c:387
 msgid "Searching..."
 msgstr ""
 
-#: ../src/search.c:1885
+#: ../src/search.c:1975
 msgid "Changed"
 msgstr ""
 
-#: ../src/search.c:1890 ../src/search.c:3114
+#: ../src/search.c:1980 ../src/search.c:3237
 msgid "Original"
 msgstr ""
 
-#: ../src/search.c:1896 ../src/search.c:3115
+#: ../src/search.c:1986 ../src/search.c:3238
 msgid "Digitized"
 msgstr "Digitised"
 
-#: ../src/search.c:2093 ../src/search.c:3240
+#: ../src/search.c:2183 ../src/search.c:3364
 msgid "Raw Image"
 msgstr ""
 
-#: ../src/search.c:2132 ../src/search.c:3255
+#: ../src/search.c:2222 ../src/search.c:3379
 msgid "Any mark"
 msgstr ""
 
-#: ../src/search.c:2188 ../src/search.c:3213
+#: ../src/search.c:2278 ../src/search.c:3337
 msgid "km"
 msgstr ""
 
-#: ../src/search.c:2193 ../src/search.c:3214
+#: ../src/search.c:2283 ../src/search.c:3338
 msgid "miles"
 msgstr ""
 
-#: ../src/search.c:2485
+#: ../src/search.c:2605
 msgid "File not found"
 msgstr ""
 
-#: ../src/search.c:2486
+#: ../src/search.c:2606
 msgid "Please enter an existing file for image content."
 msgstr ""
 
-#: ../src/search.c:2511
+#: ../src/search.c:2631
 msgid "Entry does not contain a valid lat/long value"
 msgstr ""
 
-#: ../src/search.c:2561
+#: ../src/search.c:2681
 msgid "Please enter an existing folder to search."
 msgstr ""
 
-#: ../src/search.c:3021
+#: ../src/search.c:3143
 msgid "Image search"
 msgstr ""
 
-#: ../src/search.c:3051
+#: ../src/search.c:3173
 msgid "Search:"
 msgstr ""
 
-#: ../src/search.c:3065
+#: ../src/search.c:3187
 msgid "Recurse"
 msgstr ""
 
-#: ../src/search.c:3070
+#: ../src/search.c:3192
 msgid "File name"
 msgstr ""
 
-#: ../src/search.c:3076 ../src/search.c:3184
+#: ../src/search.c:3198 ../src/search.c:3307
 msgid "Match case"
 msgstr ""
 
-#: ../src/search.c:3081
+#: ../src/search.c:3204
 msgid "File size is"
 msgstr ""
 
-#: ../src/search.c:3088 ../src/search.c:3105 ../src/search.c:3134
-#: ../src/search.c:3196
+#: ../src/search.c:3211 ../src/search.c:3228 ../src/search.c:3257
+#: ../src/search.c:3320
 msgid "and"
 msgstr ""
 
-#: ../src/search.c:3094
+#: ../src/search.c:3217
 msgid "File date is"
 msgstr ""
 
-#: ../src/search.c:3112
+#: ../src/search.c:3235
 msgid "Modified"
 msgstr ""
 
-#: ../src/search.c:3113
+#: ../src/search.c:3236
 msgid "Status Changed"
 msgstr ""
 
-#: ../src/search.c:3123
+#: ../src/search.c:3246
 msgid "Image dimensions are"
 msgstr ""
 
-#: ../src/search.c:3144
+#: ../src/search.c:3267
 msgid "Image content is"
 msgstr ""
 
-#: ../src/search.c:3150
+#: ../src/search.c:3273
 #, no-c-format
 msgid "% similar to"
 msgstr ""
 
-#: ../src/search.c:3158
+#: ../src/search.c:3281
 msgid "Ignore rotation"
 msgstr ""
 
-#: ../src/search.c:3189
+#: ../src/search.c:3313
 msgid "Image rating is"
 msgstr ""
 
-#: ../src/search.c:3203
+#: ../src/search.c:3327
 msgid "Image is"
 msgstr ""
 
-#: ../src/search.c:3215
+#: ../src/search.c:3339
 msgid "n.m."
 msgstr ""
 
-#: ../src/search.c:3221
+#: ../src/search.c:3345
 msgid "from"
 msgstr ""
 
-#: ../src/search.c:3226
+#: ../src/search.c:3350
 msgid ""
 "Enter a coordinate in the form:\n"
 "89.123 179.456\n"
@@ -5730,15 +5704,15 @@
 "See the Help file"
 msgstr ""
 
-#: ../src/search.c:3234
+#: ../src/search.c:3358
 msgid "Image class"
 msgstr ""
 
-#: ../src/search.c:3250
+#: ../src/search.c:3374
 msgid "Marks"
 msgstr ""
 
-#: ../src/search.c:3323
+#: ../src/search.c:3447
 msgid "Rank"
 msgstr ""
 
@@ -5786,56 +5760,85 @@
 msgid "Thumbnail image in cache failed to load, trying to recreate.\n"
 msgstr ""
 
-#: ../src/toolbar.c:85
-msgid "Search"
-msgstr ""
-
-#: ../src/toolbar.c:90
-msgid "Configure this window"
-msgstr ""
-
-#: ../src/toolbar.c:91
-msgid "Cache maintenance"
+#: ../src/toolbar.c:87 ../src/ui_pathsel.c:752 ../src/ui_pathsel.c:1058
+#: ../src/utilops.c:2879
+msgid "New folder"
+msgstr ""
+
+#: ../src/toolbar.c:90 ../src/utilops.c:2375 ../src/utilops.c:2841
+msgid "Rename"
+msgstr ""
+
+#: ../src/toolbar.c:92
+msgid "Close Window"
 msgstr ""
 
 #: ../src/toolbar.c:96
-msgid "Fit Horizontaly"
+msgid "Select invert"
 msgstr ""
 
 #: ../src/toolbar.c:97
-msgid "Fit vertically"
+msgid "Show file filter"
+msgstr ""
+
+#: ../src/toolbar.c:98
+msgid "Select rectangle"
+msgstr ""
+
+#: ../src/toolbar.c:99
+msgid "Print"
+msgstr ""
+
+#: ../src/toolbar.c:101
+msgid "Configure this window"
 msgstr ""
 
 #: ../src/toolbar.c:102
-msgid "Zoom1:3"
-msgstr ""
-
-#: ../src/toolbar.c:107
-msgid "Slideshow Faster"
-msgstr ""
-
-#: ../src/toolbar.c:108
-msgid "Slideshow Slower"
-msgstr ""
-
-#: ../src/toolbar.c:110 ../src/window.c:287 ../src/window.c:308
-msgid "Help"
-msgstr ""
-
-#: ../src/toolbar.c:112
-msgid "Show thumbnails"
+msgid "Cache maintenance"
 msgstr ""
 
 #: ../src/toolbar.c:113
+msgid "Fit Horizontaly"
+msgstr ""
+
+#: ../src/toolbar.c:114
+msgid "Fit vertically"
+msgstr ""
+
+#: ../src/toolbar.c:119
+msgid "Zoom1:3"
+msgstr ""
+
+#: ../src/toolbar.c:124
+msgid "Slideshow Faster"
+msgstr ""
+
+#: ../src/toolbar.c:125
+msgid "Slideshow Slower"
+msgstr ""
+
+#: ../src/toolbar.c:127 ../src/window.c:287 ../src/window.c:308
+msgid "Help"
+msgstr ""
+
+#: ../src/toolbar.c:129
+msgid "Show thumbnails"
+msgstr ""
+
+#: ../src/toolbar.c:130
 msgid "Show marks"
 msgstr ""
 
-#: ../src/toolbar.c:503
+#: ../src/toolbar.c:131
+msgid "Show guidelines"
+msgstr ""
+
+#: ../src/toolbar.c:522
 msgid "Add Toolbar Item"
 msgstr ""
 
-#: ../src/trash.c:88 ../src/utilops.c:2645 ../src/utilops.c:2656
-#: ../src/utilops.c:2713
+#: ../src/trash.c:88 ../src/utilops.c:2653 ../src/utilops.c:2664
+#: ../src/utilops.c:2721
 msgid "Delete failed"
 msgstr ""
 
@@ -5843,15 +5846,15 @@
 msgid "Unable to remove old file from trash folder"
 msgstr "Unable to remove old file from Rubbish Bin folder"
 
-#: ../src/trash.c:146
+#: ../src/trash.c:148
 msgid "Could not create folder"
 msgstr ""
 
-#: ../src/trash.c:168
+#: ../src/trash.c:170
 msgid "Permission denied"
 msgstr ""
 
-#: ../src/trash.c:178
+#: ../src/trash.c:180
 #, c-format
 msgid ""
 "Unable to access or create the trash folder.\n"
@@ -5860,32 +5863,28 @@
 "Unable to access or create the Rubbish Bin folder.\n"
 "\"%s\""
 
-#: ../src/trash.c:182
-msgid "Turn off safe delete"
-msgstr ""
-
-#: ../src/trash.c:201
+#: ../src/trash.c:210
 msgid "Deletion by external command"
 msgstr ""
 
-#: ../src/trash.c:209
+#: ../src/trash.c:220
 #, c-format
 msgid " (max. %d MB)"
 msgstr ""
 
-#: ../src/trash.c:213
+#. ~ buf = g_strdup_printf(_("Safe delete: %s%s\nTrash: %s"), _("on"), buf2, options->file_ops.safe_delete_path);
+#: ../src/trash.c:225
 #, c-format
 msgid ""
-"Safe delete: %s%s\n"
-"Trash: %s"
-msgstr ""
-"Safe delete: %s%s\n"
-"Rubbish Bin: %s"
-
-#: ../src/trash.c:218
-#, c-format
-msgid "Safe delete: %s"
-msgstr ""
+"Using Geeqie Trash bin\n"
+"%s"
+msgstr ""
+"Using Geeqie Rubbish bin\n"
+"%s"
+
+#: ../src/trash.c:230
+msgid "Using system Trash bin"
+msgstr "Using system Rubbish bin"
 
 #: ../src/ui_bookmark.c:139 ../src/ui_bookmark.c:202
 msgid "New Bookmark"
@@ -5979,8 +5978,13 @@
 "%s"
 msgstr ""
 
-#: ../src/ui_pathsel.c:433 ../src/ui_pathsel.c:439 ../src/utilops.c:2344
-#: ../src/utilops.c:2371 ../src/utilops.c:2837
+#: ../src/ui_pathsel.c:432
+#, c-format
+msgid "A file with name %s already exists."
+msgstr ""
+
+#: ../src/ui_pathsel.c:433 ../src/ui_pathsel.c:439 ../src/utilops.c:2352
+#: ../src/utilops.c:2379 ../src/utilops.c:2845
 msgid "Rename failed"
 msgstr ""
 
@@ -5997,14 +6001,6 @@
 msgid "Add _Bookmark"
 msgstr ""
 
-#: ../src/ui_pathsel.c:644
-msgid "_Delete"
-msgstr ""
-
-#: ../src/ui_pathsel.c:752 ../src/ui_pathsel.c:1058 ../src/utilops.c:2871
-msgid "New folder"
-msgstr ""
-
 #: ../src/ui_pathsel.c:762
 #, c-format
 msgid ""
@@ -6028,11 +6024,11 @@
 msgid "Filter:"
 msgstr ""
 
-#: ../src/ui_tabcomp.c:941
+#: ../src/ui_tabcomp.c:942
 msgid "Select path"
 msgstr ""
 
-#: ../src/ui_tabcomp.c:963
+#: ../src/ui_tabcomp.c:964
 msgid "All files"
 msgstr ""
 
@@ -6195,121 +6191,121 @@
 msgid "The following metadata tags will be written to the image file itself."
 msgstr ""
 
-#: ../src/utilops.c:2181
+#: ../src/utilops.c:2182
+msgid "This will move the following files to the Trash bin"
+msgstr "This will move the following files to the Rubbish bin"
+
+#: ../src/utilops.c:2186
+msgid "This will permanently delete the following files"
+msgstr ""
+
+#: ../src/utilops.c:2189
 msgid "Delete files?"
 msgstr ""
 
-#: ../src/utilops.c:2182
-msgid "This will delete the following files"
-msgstr ""
-
-#: ../src/utilops.c:2201
+#: ../src/utilops.c:2209
 msgid "Can't write metadata"
 msgstr ""
 
-#: ../src/utilops.c:2224
+#: ../src/utilops.c:2232
 msgid "Write metadata"
 msgstr ""
 
-#: ../src/utilops.c:2225
+#: ../src/utilops.c:2233
 msgid "Write metadata?"
 msgstr ""
 
-#: ../src/utilops.c:2226
+#: ../src/utilops.c:2234
 msgid "This will write the changed metadata into the following files"
 msgstr ""
 
-#: ../src/utilops.c:2228
+#: ../src/utilops.c:2236
 msgid "Metadata writing failed"
 msgstr ""
 
-#: ../src/utilops.c:2247 ../src/utilops.c:2275
+#: ../src/utilops.c:2255 ../src/utilops.c:2283
 msgid "Move failed"
 msgstr ""
 
-#: ../src/utilops.c:2272
+#: ../src/utilops.c:2280
 msgid "Move files?"
 msgstr ""
 
-#: ../src/utilops.c:2273
+#: ../src/utilops.c:2281
 msgid "This will move the following files"
 msgstr ""
 
-#: ../src/utilops.c:2297 ../src/utilops.c:2325
+#: ../src/utilops.c:2305 ../src/utilops.c:2333
 msgid "Copy failed"
 msgstr ""
 
-#: ../src/utilops.c:2322
+#: ../src/utilops.c:2330
 msgid "Copy files?"
 msgstr ""
 
-#: ../src/utilops.c:2323 ../src/utilops.c:2457
+#: ../src/utilops.c:2331 ../src/utilops.c:2465
 msgid "This will copy the following files"
 msgstr ""
 
-#: ../src/utilops.c:2367 ../src/utilops.c:2833
-msgid "Rename"
-msgstr ""
-
-#: ../src/utilops.c:2368
+#: ../src/utilops.c:2376
 msgid "Rename files?"
 msgstr ""
 
-#: ../src/utilops.c:2369
+#: ../src/utilops.c:2377
 msgid "This will rename the following files"
 msgstr ""
 
-#: ../src/utilops.c:2421
+#: ../src/utilops.c:2429
 msgid "Can't run external editor"
 msgstr ""
 
-#: ../src/utilops.c:2455
+#: ../src/utilops.c:2463
 msgid "Editor"
 msgstr ""
 
-#: ../src/utilops.c:2456
+#: ../src/utilops.c:2464
 msgid "Run editor?"
 msgstr ""
 
-#: ../src/utilops.c:2459
+#: ../src/utilops.c:2467
 msgid "External command failed"
 msgstr ""
 
-#: ../src/utilops.c:2628 ../src/utilops.c:2701
+#: ../src/utilops.c:2636 ../src/utilops.c:2709
 msgid "Delete folder"
 msgstr ""
 
-#: ../src/utilops.c:2629
+#: ../src/utilops.c:2637
 msgid "Delete symbolic link?"
 msgstr ""
 
-#: ../src/utilops.c:2631
+#: ../src/utilops.c:2639
 msgid ""
 "This will delete the symbolic link.\n"
 "The folder this link points to will not be deleted."
 msgstr ""
 
-#: ../src/utilops.c:2633
+#: ../src/utilops.c:2641
 msgid "Link deletion failed"
 msgstr ""
 
-#: ../src/utilops.c:2643
+#: ../src/utilops.c:2651
 #, c-format
 msgid ""
 "Unable to remove folder %s\n"
 "Permissions do not allow writing to the folder."
 msgstr ""
 
-#: ../src/utilops.c:2655 ../src/utilops.c:2712
+#: ../src/utilops.c:2663 ../src/utilops.c:2720
 #, c-format
 msgid "Unable to list contents of folder %s"
 msgstr ""
 
-#: ../src/utilops.c:2669 ../src/utilops.c:2677
+#: ../src/utilops.c:2677 ../src/utilops.c:2685
 msgid "Folder contains subfolders"
 msgstr ""
 
-#: ../src/utilops.c:2673
+#: ../src/utilops.c:2681
 #, c-format
 msgid ""
 "Unable to delete the folder:\n"
@@ -6319,140 +6315,136 @@
 "This folder contains subfolders which must be moved before it can be deleted."
 msgstr ""
 
-#: ../src/utilops.c:2681
+#: ../src/utilops.c:2689
 msgid "Subfolders:"
 msgstr ""
 
-#: ../src/utilops.c:2702
+#: ../src/utilops.c:2710
 msgid "Delete folder?"
 msgstr ""
 
-#: ../src/utilops.c:2703
+#: ../src/utilops.c:2711
 msgid "The folder contains these files:"
 msgstr ""
 
-#: ../src/utilops.c:2704
+#: ../src/utilops.c:2712
 msgid ""
 "This will delete the folder.\n"
 "The contents of this folder will also be deleted."
 msgstr ""
 
-#: ../src/utilops.c:2834
+#: ../src/utilops.c:2842
 msgid "Rename folder?"
 msgstr ""
 
-#: ../src/utilops.c:2835
+#: ../src/utilops.c:2843
 msgid "The folder contains the following files"
 msgstr ""
 
-#: ../src/utilops.c:2881
+#: ../src/utilops.c:2889
 msgid "Create Folder"
 msgstr ""
 
-#: ../src/utilops.c:2882
+#: ../src/utilops.c:2890
 msgid "Create folder?"
 msgstr ""
 
-#: ../src/utilops.c:2885
+#: ../src/utilops.c:2893
 msgid "Can't create folder"
 msgstr ""
 
-#: ../src/view_dir.c:406
+#: ../src/view_dir.c:409
 msgid "_Copy"
 msgstr ""
 
-#: ../src/view_dir.c:408
+#: ../src/view_dir.c:411
 msgid "_Move"
 msgstr ""
 
-#: ../src/view_dir.c:662
+#: ../src/view_dir.c:665
 msgid "_Up to parent"
 msgstr ""
 
-#: ../src/view_dir.c:667
+#: ../src/view_dir.c:670
 msgid "_Slideshow"
 msgstr ""
 
-#: ../src/view_dir.c:669
+#: ../src/view_dir.c:672
 msgid "Slideshow recursive"
 msgstr ""
 
-#: ../src/view_dir.c:673
+#: ../src/view_dir.c:676
 msgid "Find _duplicates..."
 msgstr ""
 
-#: ../src/view_dir.c:675
+#: ../src/view_dir.c:678
 msgid "Find duplicates recursive..."
 msgstr ""
 
-#: ../src/view_dir.c:680
+#: ../src/view_dir.c:683
 msgid "_New folder..."
 msgstr ""
 
-#: ../src/view_dir.c:697 ../src/view_file/view_file.c:664
+#: ../src/view_dir.c:700 ../src/view_file/view_file.c:672
 msgid "View as _List"
 msgstr ""
 
-#: ../src/view_dir.c:700
+#: ../src/view_dir.c:703
 msgid "View as _Tree"
 msgstr ""
 
-#: ../src/view_dir.c:705
+#: ../src/view_dir.c:708
 msgid "Show _hidden files"
 msgstr ""
 
-#: ../src/view_dir.c:708 ../src/view_file/view_file.c:694
+#: ../src/view_dir.c:711 ../src/view_file/view_file.c:702
 msgid "Re_fresh"
 msgstr ""
 
-#: ../src/view_file/view_file.c:667
+#: ../src/view_file/view_file.c:675
 msgid "View as _Icons"
 msgstr ""
 
-#: ../src/view_file/view_file.c:673
+#: ../src/view_file/view_file.c:681
 msgid "Show _thumbnails"
 msgstr ""
 
-#: ../src/view_file/view_file.c:685 ../src/view_file/view_file.c:689
-msgid "Show star rating"
-msgstr ""
-
-#: ../src/view_file/view_file.c:809
+#: ../src/view_file/view_file.c:817
 msgid "Mark text"
 msgstr ""
 
-#: ../src/view_file/view_file.c:812
+#: ../src/view_file/view_file.c:820
 msgid "Set mark text"
 msgstr ""
 
-#: ../src/view_file/view_file.c:813
+#: ../src/view_file/view_file.c:821
 msgid "This will set or clear the mark text."
 msgstr ""
 
-#: ../src/view_file/view_file.c:1273
+#: ../src/view_file/view_file.c:1448
 msgid "Loading meta..."
 msgstr ""
 
-#: ../src/view_file/view_file_icon.c:2022 ../src/view_file/view_file_list.c:910
+#: ../src/view_file/view_file_icon.c:2031 ../src/view_file/view_file_list.c:919
 msgid " [NO GROUPING]"
 msgstr ""
 
-#: ../src/view_file/view_file_list.c:511
+#: ../src/view_file/view_file_list.c:513
 #, c-format
 msgid ""
 "Invalid file name:\n"
 "%s"
 msgstr ""
 
-#: ../src/view_file/view_file_list.c:512
+#: ../src/view_file/view_file_list.c:514
 msgid "Error renaming file"
 msgstr ""
 
-#: ../src/view_file/view_file_list.c:2063
+#: ../src/view_file/view_file_list.c:2074
 msgid "NameStars"
 msgstr ""
 
-#: ../src/view_file/view_file_list.c:2067
+#: ../src/view_file/view_file_list.c:2078
 msgid "Stars"
 msgstr ""
 
@@ -6467,3 +6459,16 @@
 #: ../src/window.c:387
 msgid "Search terms:"
 msgstr ""
+
+#~ msgid ""
+#~ "Safe delete: %s%s\n"
+#~ "Trash: %s"
+#~ msgstr ""
+#~ "Safe delete: %s%s\n"
+#~ "Rubbish Bin: %s"
+
+#~ msgid "millimeters"
+#~ msgstr "millimetres"
+
+#~ msgid "centimeters"
+#~ msgstr "centimetres"
--- a/src/Makefile.am	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/Makefile.am	Wed Dec 12 21:56:30 2018 +0200
@@ -222,6 +222,8 @@
 	misc.h		\
 	options.c	\
 	options.h	\
+	osd.c 	\
+	osd.h	\
 	pan-view.h	\
 	pixbuf-renderer.c	\
 	pixbuf-renderer.h	\
--- a/src/bar_exif.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/bar_exif.c	Wed Dec 12 21:56:30 2018 +0200
@@ -709,6 +709,7 @@
 	write_char_option(outstr, indent, "id", ped->pane.id);
 	write_char_option(outstr, indent, "title", gtk_label_get_text(GTK_LABEL(ped->pane.title)));
 	WRITE_BOOL(ped->pane, expanded);
+	WRITE_BOOL(*ped, show_all);
 	WRITE_STRING(">");
 	indent++;
 
@@ -802,7 +803,7 @@
 #endif
 }
 
-static GtkWidget *bar_pane_exif_new(const gchar *id, const gchar *title, gboolean expanded)
+static GtkWidget *bar_pane_exif_new(const gchar *id, const gchar *title, gboolean expanded, gboolean show_all)
 {
 	PaneExifData *ped;
 
@@ -815,6 +816,7 @@
 	ped->pane.id = g_strdup(id);
 	ped->pane.expanded = expanded;
 	ped->pane.type = PANE_EXIF;
+	ped->show_all = show_all;
 
 	ped->size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 	ped->widget = gtk_event_box_new();
@@ -850,6 +852,7 @@
 	gchar *title = NULL;
 	gchar *id = g_strdup("exif");
 	gboolean expanded = TRUE;
+	gboolean show_all = FALSE;
 	GtkWidget *ret;
 
 	while (*attribute_names)
@@ -860,12 +863,13 @@
 		if (READ_CHAR_FULL("id", id)) continue;
 		if (READ_CHAR_FULL("title", title)) continue;
 		if (READ_BOOL_FULL("expanded", expanded)) continue;
+		if (READ_BOOL_FULL("show_all", show_all)) continue;
 
 		log_printf("unknown attribute %s = %s\n", option, value);
 		}
 
 	bar_pane_translate_title(PANE_EXIF, id, &title);
-	ret = bar_pane_exif_new(id, title, expanded);
+	ret = bar_pane_exif_new(id, title, expanded, show_all);
 	g_free(title);
 	g_free(id);
 	return ret;
@@ -886,6 +890,7 @@
 
 		if (READ_CHAR_FULL("title", title)) continue;
 		if (READ_BOOL_FULL("expanded", ped->pane.expanded)) continue;
+		if (READ_BOOL_FULL("show_all", ped->show_all)) continue;
 		if (READ_CHAR_FULL("id", ped->pane.id)) continue;
 
 
--- a/src/bar_sort.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/bar_sort.c	Wed Dec 12 21:56:30 2018 +0200
@@ -260,6 +260,7 @@
 					work = g_list_append(work, file_data_new_group(delete_list->data));
 					delete_list = delete_list->next;
 					}
+				options->file_ops.safe_delete_enable = TRUE;
 				file_util_delete(NULL, work, button);
 				}
 			break;
--- a/src/collect-table.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/collect-table.c	Wed Dec 12 21:56:30 2018 +0200
@@ -34,6 +34,7 @@
 #include "layout_image.h"
 #include "menu.h"
 #include "metadata.h"
+#include "pixbuf_util.h"
 #include "print.h"
 #include "utilops.h"
 #include "ui_fileops.h"
@@ -733,6 +734,15 @@
 {
 	CollectTable *ct = data;
 
+	options->file_ops.safe_delete_enable = FALSE;
+	file_util_delete(NULL, collection_table_popup_file_list(ct), ct->listview);
+}
+
+static void collection_table_popup_move_to_trash_cb(GtkWidget *widget, gpointer data)
+{
+	CollectTable *ct = data;
+
+	options->file_ops.safe_delete_enable = TRUE;
 	file_util_delete(NULL, collection_table_popup_file_list(ct), ct->listview);
 }
 
@@ -994,10 +1004,18 @@
 				G_CALLBACK(collection_table_popup_copy_path_cb), ct);
 	menu_item_add_sensitive(menu, _("_Copy path unquoted"), over_icon,
 				G_CALLBACK(collection_table_popup_copy_path_unquoted_cb), ct);
-	menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, over_icon,
-			G_CALLBACK(collection_table_popup_delete_cb), ct);
+
 	menu_item_add_divider(menu);
-
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_move_to_trash ? _("Move to Trash...") :
+					_("Move to Trash"), PIXBUF_INLINE_ICON_TRASH, over_icon,
+				G_CALLBACK(collection_table_popup_move_to_trash_cb), ct);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_delete ? _("_Delete...") :
+					_("_Delete"), GTK_STOCK_DELETE, over_icon,
+				G_CALLBACK(collection_table_popup_delete_cb), ct);
+
+	menu_item_add_divider(menu);
 	submenu = submenu_add_sort(NULL, G_CALLBACK(collection_table_popup_sort_cb), ct, FALSE, TRUE, FALSE, 0);
 	menu_item_add_divider(submenu);
 	menu_item_add(submenu, _("Randomize"),
--- a/src/collect.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/collect.c	Wed Dec 12 21:56:30 2018 +0200
@@ -923,6 +923,7 @@
 				file_util_rename(NULL, collection_table_selection_get_list(cw->table), cw->window);
 				break;
 			case 'D': case 'd':
+				options->file_ops.safe_delete_enable = TRUE;
 				file_util_delete(NULL, collection_table_selection_get_list(cw->table), cw->window);
 				break;
 			case 'S': case 's':
--- a/src/desktop_file.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/desktop_file.c	Wed Dec 12 21:56:30 2018 +0200
@@ -414,6 +414,7 @@
 {
 	gint n = GPOINTER_TO_INT(data);
 	gint ret = 0;
+	gboolean bool1, bool2;
 
 	switch (n)
 		{
@@ -441,6 +442,25 @@
 			g_free(s2);
 			}
 			break;
+		case DESKTOP_FILE_COLUMN_DISABLED:
+			{
+			gtk_tree_model_get(model, a, n, &bool1, -1);
+			gtk_tree_model_get(model, b, n, &bool2, -1);
+
+			if (bool1 == bool2)
+				{
+				ret = 0;
+				}
+			else if (bool1 > bool2)
+				{
+				ret = -1;
+				}
+			else
+				{
+				ret = 1;
+				}
+			break;
+			}
 
     		default:
        			g_return_val_if_reached(0);
@@ -449,6 +469,67 @@
 	return ret;
 }
 
+static void plugin_disable_cb(GtkCellRendererToggle *renderer, gchar *path_str, gpointer data)
+{
+	EditorListWindow *ewl = data;
+	GtkTreePath *tpath;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	gboolean disabled;
+	gchar *path;
+	GList *list;
+	gchar *haystack;
+
+	tpath = gtk_tree_path_new_from_string(path_str);
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(ewl->view));
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);
+	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, DESKTOP_FILE_COLUMN_DISABLED, &disabled, -1);
+	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, DESKTOP_FILE_COLUMN_PATH, &path, -1);
+
+	gtk_list_store_set(GTK_LIST_STORE(desktop_file_list), &iter, DESKTOP_FILE_COLUMN_DISABLED, !disabled, -1);
+
+	if (!disabled)
+		{
+		options->disabled_plugins = g_list_append((options->disabled_plugins), g_strdup(path));
+		}
+	else
+		{
+		list = options->disabled_plugins;
+		while (list)
+			{
+			haystack = list->data;
+
+			if (haystack && strcmp(haystack, path) == 0)
+				{
+				g_free(haystack);
+				options->disabled_plugins = g_list_remove(options->disabled_plugins, haystack);
+				}
+
+			list = list->next;
+			}
+		}
+
+	layout_editors_reload_start();
+	layout_editors_reload_finish();
+}
+
+static void plugin_disable_set_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
+							GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
+{
+	gboolean disabled;
+
+	gtk_tree_model_get(tree_model, iter, DESKTOP_FILE_COLUMN_DISABLED, &disabled, -1);
+
+	if (disabled)
+		{
+		g_object_set(GTK_CELL_RENDERER(cell), "active", TRUE, NULL);
+		}
+	else
+		{
+		g_object_set(GTK_CELL_RENDERER(cell), "active", FALSE, NULL);
+		}
+}
+
 static void editor_list_window_create(void)
 {
 	GtkWidget *win_vbox;
@@ -532,6 +613,19 @@
 	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(ewl->view), FALSE);
 
 	column = gtk_tree_view_column_new();
+	gtk_tree_view_column_set_title(column, _("Disabled"));
+	gtk_tree_view_column_set_resizable(column, TRUE);
+
+	renderer = gtk_cell_renderer_toggle_new();
+	g_signal_connect(G_OBJECT(renderer), "toggled",
+			 G_CALLBACK(plugin_disable_cb), ewl);
+	gtk_tree_view_column_pack_start(column, renderer, FALSE);
+	gtk_tree_view_column_set_cell_data_func(column, renderer, plugin_disable_set_func,
+						NULL, NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(ewl->view), column);
+	gtk_tree_view_column_set_sort_column_id(column, DESKTOP_FILE_COLUMN_DISABLED);
+
+	column = gtk_tree_view_column_new();
 	gtk_tree_view_column_set_title(column, _("Name"));
 	gtk_tree_view_column_set_resizable(column, TRUE);
 	renderer = gtk_cell_renderer_text_new();
@@ -579,6 +673,8 @@
 					GINT_TO_POINTER(DESKTOP_FILE_COLUMN_NAME), NULL);
 	gtk_tree_sortable_set_sort_func(sortable, DESKTOP_FILE_COLUMN_PATH, editor_list_window_sort_cb,
 					GINT_TO_POINTER(DESKTOP_FILE_COLUMN_PATH), NULL);
+	gtk_tree_sortable_set_sort_func(sortable, DESKTOP_FILE_COLUMN_DISABLED, editor_list_window_sort_cb,
+					GINT_TO_POINTER(DESKTOP_FILE_COLUMN_DISABLED), NULL);
 
 	/* set initial sort order */
     gtk_tree_sortable_set_sort_column_id(sortable, DESKTOP_FILE_COLUMN_NAME, GTK_SORT_ASCENDING);
--- a/src/dupe.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/dupe.c	Wed Dec 12 21:56:30 2018 +0200
@@ -36,6 +36,7 @@
 #include "md5-util.h"
 #include "menu.h"
 #include "misc.h"
+#include "pixbuf_util.h"
 #include "print.h"
 #include "thumb.h"
 #include "ui_fileops.h"
@@ -2249,6 +2250,15 @@
 {
 	DupeWindow *dw = data;
 
+	options->file_ops.safe_delete_enable = FALSE;
+	file_util_delete(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window);
+}
+
+static void dupe_menu_move_to_trash_cb(GtkWidget *widget, gpointer data)
+{
+	DupeWindow *dw = data;
+
+	options->file_ops.safe_delete_enable = TRUE;
 	file_util_delete(NULL, dupe_listview_get_selection(dw, dw->listview), dw->window);
 }
 
@@ -2379,8 +2389,17 @@
 				G_CALLBACK(dupe_menu_copy_path_cb), dw);
 	menu_item_add_sensitive(menu, _("_Copy path unquoted"), on_row,
 				G_CALLBACK(dupe_menu_copy_path_unquoted_cb), dw);
-	menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, on_row,
+
+	menu_item_add_divider(menu);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_move_to_trash ? _("Move to Trash...") :
+					_("Move to Trash"), PIXBUF_INLINE_ICON_TRASH, on_row,
+				G_CALLBACK(dupe_menu_move_to_trash_cb), dw);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_delete ? _("_Delete...") :
+					_("_Delete"), GTK_STOCK_DELETE, on_row,
 				G_CALLBACK(dupe_menu_delete_cb), dw);
+
 	menu_item_add_divider(menu);
 	menu_item_add_stock_sensitive(menu, _("Rem_ove"), GTK_STOCK_REMOVE, on_row,
 				G_CALLBACK(dupe_menu_remove_cb), dw);
@@ -3069,6 +3088,7 @@
 					file_util_rename(NULL, dupe_listview_get_selection(dw, listview), dw->window);
 					break;
 				case 'D': case 'd':
+					options->file_ops.safe_delete_enable = TRUE;
 					file_util_delete(NULL, dupe_listview_get_selection(dw, listview), dw->window);
 					break;
 				default:
--- a/src/editors.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/editors.c	Wed Dec 12 21:56:30 2018 +0200
@@ -185,6 +185,8 @@
 	gchar *try_exec;
 	GtkTreeIter iter;
 	gboolean category_geeqie = FALSE;
+	GList *work;
+	gboolean disabled;
 
 	if (g_hash_table_lookup(editors, key)) return FALSE; /* the file found earlier wins */
 
@@ -353,9 +355,25 @@
 
 	if (editor->ignored) return TRUE;
 
+	work = options->disabled_plugins;
+
+	disabled = FALSE;
+	while (work)
+		{
+		if (g_strcmp0(path, work->data) == 0)
+			{
+			disabled = TRUE;
+			break;
+			}
+		work = work->next;
+		}
+
+	editor->disabled = disabled;
+
 	gtk_list_store_append(desktop_file_list, &iter);
 	gtk_list_store_set(desktop_file_list, &iter,
 			   DESKTOP_FILE_COLUMN_KEY, key,
+			   DESKTOP_FILE_COLUMN_DISABLED, editor->disabled,
 			   DESKTOP_FILE_COLUMN_NAME, editor->name,
 			   DESKTOP_FILE_COLUMN_HIDDEN, editor->hidden ? _("yes") : _("no"),
 			   DESKTOP_FILE_COLUMN_WRITABLE, access_file(path, W_OK),
@@ -384,7 +402,7 @@
 		}
 	else
 		{
-		desktop_file_list = gtk_list_store_new(DESKTOP_FILE_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
+		desktop_file_list = gtk_list_store_new(DESKTOP_FILE_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
 		}
 	if (editors)
 		{
@@ -471,6 +489,11 @@
 	    strcmp(editor->key, CMD_DELETE) == 0 ||
 	    strcmp(editor->key, CMD_FOLDER) == 0) return;
 
+	if (editor->disabled)
+		{
+		return;
+		}
+
 	*listp = g_list_prepend(*listp, editor);
 }
 
--- a/src/editors.h	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/editors.h	Wed Dec 12 21:56:30 2018 +0200
@@ -58,6 +58,7 @@
 	EditorFlags flags;
 	gboolean hidden;	/* explicitly hidden, shown in configuration dialog */
 	gboolean ignored;	/* not interesting, do not show at all */
+	gboolean disabled;	/* display disabled by user */
 };
 
 #define EDITOR_ERRORS(flags) ((flags) & EDITOR_ERROR_MASK)
@@ -74,6 +75,7 @@
 
 enum {
 	DESKTOP_FILE_COLUMN_KEY,
+	DESKTOP_FILE_COLUMN_DISABLED,
 	DESKTOP_FILE_COLUMN_NAME,
 	DESKTOP_FILE_COLUMN_HIDDEN,
 	DESKTOP_FILE_COLUMN_WRITABLE,
--- a/src/exif-common.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/exif-common.c	Wed Dec 12 21:56:30 2018 +0200
@@ -662,7 +662,7 @@
 /**
  * @brief Gets timezone data from an exif structure
  * @param[in] exif
- * @returns TRUE if timezone data found
+ * @returns TRUE if timezone data found AND GPS date and time found
  * @param[out] exif_date_time exif date/time in the form 2018:11:30:17:05:04
  * @param[out] timezone in the form "Europe/London"
  * @param[out] countryname in the form "United Kingdom"
@@ -696,11 +696,8 @@
 	text_date = exif_get_data_as_text(exif, "Exif.GPSInfo.GPSDateStamp");
 	text_time = exif_get_data_as_text(exif, "Exif.GPSInfo.GPSTimeStamp");
 
-	if (text_latitude && text_longitude && text_latitude_ref &&
-						text_longitude_ref && text_date && text_time)
+	if (text_latitude && text_longitude && text_latitude_ref && text_longitude_ref)
 		{
-		*exif_date_time = g_strconcat(text_date, ":", text_time, NULL);
-
 		lat_deg = strtok(text_latitude, "deg'");
 		lat_min = strtok(NULL, "deg'");
 		latitude = atof(lat_deg) + atof(lat_min) / 60;
@@ -738,6 +735,14 @@
 		g_free(zd_path);
 		}
 
+	if (ret && text_date && text_time)
+		{
+		*exif_date_time = g_strconcat(text_date, ":", text_time, NULL);
+		}
+	else
+		{
+		ret = FALSE;
+		}
 	return ret;
 }
 
--- a/src/icons/Makefile.am	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/icons/Makefile.am	Wed Dec 12 21:56:30 2018 +0200
@@ -40,8 +40,14 @@
 	icon_select_none.png \
 	icon_select_invert.png \
 	icon_select_rectangle.png \
-	icon_file_filter.png
-
+	icon_file_filter.png \
+	icon_rotate_clockwise.png \
+	icon_rotate_counter_clockwise.png \
+	icon_rotate_180.png \
+	icon_mirror.png \
+	icon_flip.png \
+	icon_original.png \
+	icon_trash.png
 
 ICONS_INLINE_PAIRS = \
 	folder_closed		$(srcdir)/folder_closed.png	\
@@ -80,7 +86,14 @@
 	icon_select_none	$(srcdir)/icon_select_none.png \
 	icon_select_invert	$(srcdir)/icon_select_invert.png \
 	icon_select_rectangle	$(srcdir)/icon_select_rectangle.png \
-	icon_file_filter	$(srcdir)/icon_file_filter.png
+	icon_file_filter	$(srcdir)/icon_file_filter.png \
+	icon_rotate_clockwise	$(srcdir)/icon_rotate_clockwise.png \
+	icon_rotate_counter_clockwise	$(srcdir)/icon_rotate_counter_clockwise.png \
+	icon_rotate_180	$(srcdir)/icon_rotate_180.png \
+	icon_mirror	$(srcdir)/icon_mirror.png \
+	icon_flip	$(srcdir)/icon_flip.png \
+	icon_original	$(srcdir)/icon_original.png \
+	icon_trash	$(srcdir)/icon_trash.png
 
 icons_inline.h: $(ICONS_INLINE) Makefile.in
 	@sh -ec "echo '/* Auto generated file, do not edit */'; echo; \
Binary file src/icons/icon_flip.png has changed
Binary file src/icons/icon_mirror.png has changed
Binary file src/icons/icon_original.png has changed
Binary file src/icons/icon_rotate_180.png has changed
Binary file src/icons/icon_rotate_clockwise.png has changed
Binary file src/icons/icon_rotate_counter_clockwise.png has changed
Binary file src/icons/icon_trash.png has changed
--- a/src/image-overlay.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/image-overlay.c	Wed Dec 12 21:56:30 2018 +0200
@@ -22,19 +22,16 @@
 #include "main.h"
 #include "image-overlay.h"
 
-#include "collect.h"
-#include "exif.h"
 #include "filedata.h"
 #include "histogram.h"
 #include "image.h"
 #include "img-view.h"
 #include "layout.h"
-#include "metadata.h"
+#include "osd.h"
 #include "pixbuf-renderer.h"
 #include "pixbuf_util.h"
 #include "ui_fileops.h"
 #include "image-load.h"
-#include "glua.h"
 
 /*
  *----------------------------------------------------------------------------
@@ -232,287 +229,6 @@
 		}
 }
 
-static gchar *keywords_to_string(FileData *fd)
-{
-	GList *keywords;
-	GString *kwstr = NULL;
-	gchar *ret = NULL;
-
-	g_assert(fd);
-
-	keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN);
-
-	if (keywords)
-		{
-		GList *work = keywords;
-
-		while (work)
-			{
-			gchar *kw = work->data;
-			work = work->next;
-
-			if (!kw) continue;
-			if (!kwstr)
-				kwstr = g_string_new("");
-			else
-				g_string_append(kwstr, ", ");
-
-			g_string_append(kwstr, kw);
-			}
-		string_list_free(keywords);
-		}
-
-	if (kwstr)
-		{
-		ret = kwstr->str;
-		g_string_free(kwstr, FALSE);
-		}
-
-	return ret;
-}
-
-static gchar *image_osd_mkinfo(const gchar *str, ImageWindow *imd, GHashTable *vars)
-{
-	gchar delim = '%', imp = '|', sep[] = " - ";
-	gchar *start, *end;
-	guint pos, prev;
-	gboolean want_separator = FALSE;
-	gchar *name, *data;
-	GString *new;
-	gchar *ret;
-
-	if (!str || !*str) return g_strdup("");
-
-	new = g_string_new(str);
-
-	prev = -1;
-
-	while (TRUE)
-		{
-		guint limit = 0;
-		gchar *trunc = NULL;
-		gchar *limpos = NULL;
-		gchar *extra = NULL;
-		gchar *extrapos = NULL;
-		gchar *p;
-
-		start = strchr(new->str + (prev + 1), delim);
-		if (!start)
-			break;
-		end = strchr(start+1, delim);
-		if (!end)
-			break;
-
-		/* Search for optionnal modifiers
-		 * %name:99:extra% -> name = "name", limit=99, extra = "extra"
-		 */
-		for (p = start + 1; p < end; p++)
-			{
-			if (p[0] == ':')
-				{
-				if (g_ascii_isdigit(p[1]) && !limpos)
-					{
-					limpos = p + 1;
-					if (!trunc) trunc = p;
-					}
-				else
-					{
-					extrapos = p + 1;
-					if (!trunc) trunc = p;
-					break;
-					}
-				}
-			}
-
-		if (limpos)
-			limit = (guint) atoi(limpos);
-
-		if (extrapos)
-			extra = g_strndup(extrapos, end - extrapos);
-
-		name = g_strndup(start+1, (trunc ? trunc : end)-start-1);
-		pos = start - new->str;
-		data = NULL;
-
-		if (strcmp(name, "keywords") == 0)
-			{
-			data = keywords_to_string(imd->image_fd);
-			}
-		else if (strcmp(name, "comment") == 0)
-			{
-			data = metadata_read_string(imd->image_fd, COMMENT_KEY, METADATA_PLAIN);
-			}
-		else if (strcmp(name, "imagecomment") == 0)
-			{
-			data = exif_get_image_comment(imd->image_fd);
-			}
-		else if (strcmp(name, "rating") == 0)
-			{
-			data = metadata_read_string(imd->image_fd, RATING_KEY, METADATA_PLAIN);
-			}
-#ifdef HAVE_LUA
-		else if (strncmp(name, "lua/", 4) == 0)
-			{
-			gchar *tmp;
-			tmp = strchr(name+4, '/');
-			if (!tmp)
-				break;
-			*tmp = '\0';
-			data = lua_callvalue(imd->image_fd, name+4, tmp+1);
-			}
-#endif
-		else
-			{
-			data = g_strdup(g_hash_table_lookup(vars, name));
-			if (!data)
-				data = metadata_read_string(imd->image_fd, name, METADATA_FORMATTED);
-			}
-
-		if (data && *data && limit > 0 && strlen(data) > limit + 3)
-			{
-			gchar *new_data = g_strdup_printf("%-*.*s...", limit, limit, data);
-			g_free(data);
-			data = new_data;
-			}
-
-		if (data)
-			{
-			/* Since we use pango markup to display, we need to escape here */
-			gchar *escaped = g_markup_escape_text(data, -1);
-			g_free(data);
-			data = escaped;
-			}
-
-		if (extra)
-			{
-			if (data && *data)
-				{
-				/* Display data between left and right parts of extra string
-				 * the data is expressed by a '*' character. A '*' may be escaped
-				 * by a \. You should escape all '*' characters, do not rely on the
-				 * current implementation which only replaces the first unescaped '*'.
-				 * If no "*" is present, the extra string is just appended to data string.
-				 * Pango mark up is accepted in left and right parts.
-				 * Any \n is replaced by a newline
-				 * Examples:
-				 * "<i>*</i>\n" -> data is displayed in italics ended with a newline
-				 * "\n" 	-> ended with newline
-				 * "ISO *"	-> prefix data with "ISO " (ie. "ISO 100")
-				 * "\**\*"	-> prefix data with a star, and append a star (ie. "*100*")
-				 * "\\*"	-> prefix data with an anti slash (ie "\100")
-				 * "Collection <b>*</b>\n" -> display data in bold prefixed by "Collection " and a newline is appended
-				 *
-				 * FIXME: using background / foreground colors lead to weird results.
-				 */
-				gchar *new_data;
-				gchar *left = NULL;
-				gchar *right = extra;
-				gchar *p;
-				guint len = strlen(extra);
-
-				/* Search for left and right parts and unescape characters */
-				for (p = extra; *p; p++, len--)
-					if (p[0] == '\\')
-						{
-						if (p[1] == 'n')
-							{
-							memmove(p+1, p+2, --len);
-							p[0] = '\n';
-							}
-						else if (p[1] != '\0')
-							memmove(p, p+1, len--); // includes \0
-						}
-					else if (p[0] == '*' && !left)
-						{
-						right = p + 1;
-						left = extra;
-						}
-
-				if (left) right[-1] = '\0';
-
-				new_data = g_strdup_printf("%s%s%s", left ? left : "", data, right);
-				g_free(data);
-				data = new_data;
-				}
-			g_free(extra);
-			}
-
-		g_string_erase(new, pos, end-start+1);
-		if (data && *data)
-			{
-			if (want_separator)
-				{
-				/* insert separator */
-				g_string_insert(new, pos, sep);
-				pos += strlen(sep);
-				want_separator = FALSE;
-				}
-
-			g_string_insert(new, pos, data);
-			pos += strlen(data);
-		}
-
-		if (pos-prev >= 1 && new->str[pos] == imp)
-			{
-			/* pipe character is replaced by a separator, delete it
-			 * and raise a flag if needed */
-			g_string_erase(new, pos--, 1);
-			want_separator |= (data && *data);
-			}
-
-		if (new->str[pos] == '\n') want_separator = FALSE;
-
-		prev = pos - 1;
-
-		g_free(name);
-		g_free(data);
-		}
-
-	/* search and destroy empty lines */
-	end = new->str;
-	while ((start = strchr(end, '\n')))
-		{
-		end = start;
-		while (*++(end) == '\n')
-			;
-		g_string_erase(new, start-new->str, end-start-1);
-		}
-
-	g_strchomp(new->str);
-
-	ret = new->str;
-	g_string_free(new, FALSE);
-
-	return ret;
-}
-
-typedef enum {
-	OSDT_NONE 	= 0,
-	OSDT_FREE 	= 1 << 0,
-	OSDT_NO_DUP 	= 1 << 1
-} OsdTemplateFlags;
-
-static void osd_template_insert(GHashTable *vars, gchar *keyword, gchar *value, OsdTemplateFlags flags)
-{
-	if (!value)
-		{
-		g_hash_table_insert(vars, keyword, g_strdup(""));
-		return;
-		}
-
-	if (flags & OSDT_NO_DUP)
-		{
-		g_hash_table_insert(vars, keyword, value);
-		return;
-		}
-	else
-		{
-		g_hash_table_insert(vars, keyword, g_strdup(value));
-		}
-
-	if (flags & OSDT_FREE) g_free((gpointer) value);
-}
-
 static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
 {
 	GdkPixbuf *pixbuf = NULL;
@@ -624,7 +340,7 @@
 	 		osd_template_insert(vars, "res", NULL, OSDT_NONE);
 			}
 
-	 	text = image_osd_mkinfo(options->image_overlay.template_string, imd, vars);
+		text = image_osd_mkinfo(options->image_overlay.template_string, imd->image_fd, vars);
 		g_hash_table_destroy(vars);
 
 	} else {
--- a/src/image.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/image.c	Wed Dec 12 21:56:30 2018 +0200
@@ -154,8 +154,24 @@
 
 		pixbuf_start_x = event->x;
 		pixbuf_start_y = event->y;
-		image_start_x = x_pixel;
-		image_start_y = y_pixel;
+
+		if (x_pixel == -1)
+			{
+			image_start_x = 0;
+			}
+		else
+			{
+			image_start_x = x_pixel;
+			}
+
+		if (y_pixel == -1)
+			{
+			image_start_y = 0;
+			}
+		else
+			{
+			image_start_y = y_pixel;
+			}
 		}
 
 	if (rect_id)
@@ -180,13 +196,32 @@
 	gint rect_height;
 	GdkPixbuf *rect_pixbuf;
 	gint x_pixel, y_pixel;
+	gint image_x_pixel, image_y_pixel;
 
 	if (options->draw_rectangle)
 		{
 		pixbuf_renderer_get_image_size(pr, &width, &height);
 		pixbuf_renderer_get_mouse_position(pr, &x_pixel, &y_pixel);
-		switch_coords_orientation(imd, x_pixel, y_pixel, width, height);
+
+		if (x_pixel == -1)
+			{
+			image_x_pixel = width;
+			}
+		else
+			{
+			image_x_pixel = x_pixel;
+			}
 
+		if (y_pixel == -1)
+			{
+			image_y_pixel = height;
+			}
+		else
+			{
+			image_y_pixel = y_pixel;
+			}
+
+		switch_coords_orientation(imd, image_x_pixel, image_y_pixel, width, height);
 		if (rect_id)
 			{
 			pixbuf_renderer_overlay_remove((PixbufRenderer *)imd->pr, rect_id);
@@ -1121,6 +1156,8 @@
 void image_attach_window(ImageWindow *imd, GtkWidget *window,
 			 const gchar *title, const gchar *title_right, gboolean show_zoom)
 {
+	LayoutWindow *lw;
+
 	imd->top_window = window;
 	g_free(imd->title);
 	imd->title = g_strdup(title);
@@ -1128,7 +1165,9 @@
 	imd->title_right = g_strdup(title_right);
 	imd->title_show_zoom = show_zoom;
 
-	if (!options->image.fit_window_to_image) window = NULL;
+	lw = layout_find_by_image(imd);
+
+	if (!(options->image.fit_window_to_image && lw && lw->options.tools_float)) window = NULL;
 
 	pixbuf_renderer_set_parent((PixbufRenderer *)imd->pr, (GtkWindow *)window);
 
--- a/src/img-view.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/img-view.c	Wed Dec 12 21:56:30 2018 +0200
@@ -29,6 +29,7 @@
 #include "filedata.h"
 #include "fullscreen.h"
 #include "image.h"
+#include "image-load.h"
 #include "image-overlay.h"
 #include "layout.h"
 #include "layout_image.h"
@@ -406,6 +407,7 @@
 				file_util_rename(image_get_fd(imd), NULL, imd->widget);
 				break;
 			case 'D': case 'd':
+				options->file_ops.safe_delete_enable = TRUE;
 				file_util_delete(image_get_fd(imd), NULL, imd->widget);
 				break;
 			case 'W': case 'w':
@@ -445,6 +447,13 @@
 						 filelist_copy(vw->list), vw->window);
 				}
 				break;
+			case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
+				if (options->file_ops.enable_delete_key)
+					{
+					options->file_ops.safe_delete_enable = FALSE;
+					file_util_delete(image_get_fd(imd), NULL, imd->widget);
+					}
+				break;
 			default:
 				stop_signal = FALSE;
 				break;
@@ -540,6 +549,7 @@
 			case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
 				if (options->file_ops.enable_delete_key)
 					{
+					options->file_ops.safe_delete_enable = TRUE;
 					file_util_delete(image_get_fd(imd), NULL, imd->widget);
 					}
 				break;
@@ -861,6 +871,9 @@
 	if (cd && info)
 		{
 		image_change_from_collection(vw->imd, cd, info, image_zoom_get_default(NULL));
+		/* Grab the fd so we can correctly size the window in
+		   the call to image_load_dimensions() below. */
+		fd = info->fd;
 		if (options->image.enable_read_ahead)
 			{
 			CollectInfo * r_info = collection_next_by_info(cd, info);
@@ -886,21 +899,8 @@
 		}
 
 	/* Wait until image is loaded otherwise size is not defined */
-	int count;
-	for (count = 10; count && !w && !h; count++)
-		{
-		image_get_image_size(vw->imd, &w, &h);
-		usleep(100000);
-		}
+	image_load_dimensions(fd, &w, &h);
 
-	if (image_zoom_get(vw->imd) == 0.0)
-		{
-		image_get_image_size(vw->imd, &w, &h);
-		}
-	else
-		{
-		pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(vw->imd->pr), &w, &h);
-		}
 	if (options->image.limit_window_size)
 		{
 		gint mw = gdk_screen_width() * options->image.max_window_size / 100;
@@ -920,6 +920,7 @@
 	gtk_widget_set_size_request(vw->imd->pr, w, h);
 #endif
 
+	gtk_window_set_focus_on_map(GTK_WINDOW(vw->window), FALSE);
 	gtk_widget_show(vw->window);
 
 	view_window_list = g_list_append(view_window_list, vw);
@@ -1170,6 +1171,17 @@
 	ImageWindow *imd;
 
 	imd = view_window_active_image(vw);
+	options->file_ops.safe_delete_enable = FALSE;
+	file_util_delete(image_get_fd(imd), NULL, imd->widget);
+}
+
+static void view_move_to_trash_cb(GtkWidget *widget, gpointer data)
+{
+	ViewWindow *vw = data;
+	ImageWindow *imd;
+
+	imd = view_window_active_image(vw);
+	options->file_ops.safe_delete_enable = TRUE;
 	file_util_delete(image_get_fd(imd), NULL, imd->widget);
 }
 
@@ -1334,7 +1346,16 @@
 	menu_item_add(menu, _("_Rename..."), G_CALLBACK(view_rename_cb), vw);
 	menu_item_add(menu, _("_Copy path"), G_CALLBACK(view_copy_path_cb), vw);
 	menu_item_add(menu, _("_Copy path unquoted"), G_CALLBACK(view_copy_path_unquoted_cb), vw);
-	menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(view_delete_cb), vw);
+
+	menu_item_add_divider(menu);
+	menu_item_add_stock(menu,
+				options->file_ops.confirm_move_to_trash ? _("Move to Trash...") :
+					_("Move to Trash"), PIXBUF_INLINE_ICON_TRASH,
+				G_CALLBACK(view_move_to_trash_cb), vw);
+	menu_item_add_stock(menu,
+				options->file_ops.confirm_delete ? _("_Delete...") :
+					_("_Delete"), GTK_STOCK_DELETE,
+				G_CALLBACK(view_delete_cb), vw);
 
 	menu_item_add_divider(menu);
 
--- a/src/layout.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/layout.c	Wed Dec 12 21:56:30 2018 +0200
@@ -2532,6 +2532,14 @@
 
 	WRITE_NL(); WRITE_BOOL(*layout, toolbar_hidden);
 	WRITE_NL(); WRITE_BOOL(*layout, show_info_pixel);
+	WRITE_SEPARATOR();
+
+	WRITE_NL(); WRITE_BOOL(*layout, bars_state.info);
+	WRITE_NL(); WRITE_BOOL(*layout, bars_state.sort);
+	WRITE_NL(); WRITE_BOOL(*layout, bars_state.tools_float);
+	WRITE_NL(); WRITE_BOOL(*layout, bars_state.tools_hidden);
+	WRITE_NL(); WRITE_BOOL(*layout, bars_state.hidden);
+	WRITE_SEPARATOR();
 
 	WRITE_NL(); WRITE_UINT(*layout, image_overlay.state);
 	WRITE_NL(); WRITE_INT(*layout, image_overlay.histogram_channel);
@@ -2618,6 +2626,12 @@
 		if (READ_BOOL(*layout, toolbar_hidden)) continue;
 		if (READ_BOOL(*layout, show_info_pixel)) continue;
 
+		if (READ_BOOL(*layout, bars_state.info)) continue;
+		if (READ_BOOL(*layout, bars_state.sort)) continue;
+		if (READ_BOOL(*layout, bars_state.tools_float)) continue;
+		if (READ_BOOL(*layout, bars_state.tools_hidden)) continue;
+		if (READ_BOOL(*layout, bars_state.hidden)) continue;
+
 		if (READ_UINT(*layout, image_overlay.state)) continue;
 		if (READ_INT(*layout, image_overlay.histogram_channel)) continue;
 		if (READ_INT(*layout, image_overlay.histogram_mode)) continue;
--- a/src/layout_image.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/layout_image.c	Wed Dec 12 21:56:30 2018 +0200
@@ -544,6 +544,16 @@
 {
 	LayoutWindow *lw = data;
 
+	options->file_ops.safe_delete_enable = FALSE;
+	file_util_delete(layout_image_get_fd(lw), NULL,
+			 li_pop_menu_click_parent(widget, lw));
+}
+
+static void li_pop_menu_move_to_trash_cb(GtkWidget *widget, gpointer data)
+{
+	LayoutWindow *lw = data;
+
+	options->file_ops.safe_delete_enable = TRUE;
 	file_util_delete(layout_image_get_fd(lw), NULL,
 			 li_pop_menu_click_parent(widget, lw));
 }
@@ -705,7 +715,17 @@
 	item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(li_pop_menu_copy_path_cb), lw);
 	item = menu_item_add(menu, _("_Copy path unquoted"), G_CALLBACK(li_pop_menu_copy_path_unquoted_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);
+	menu_item_add_divider(menu);
+
+	item = menu_item_add_stock(menu,
+				options->file_ops.confirm_move_to_trash ? _("Move to Trash...") :
+					_("Move to Trash"), PIXBUF_INLINE_ICON_TRASH,
+								G_CALLBACK(li_pop_menu_move_to_trash_cb), lw);
+	if (!path) gtk_widget_set_sensitive(item, FALSE);
+	item = menu_item_add_stock(menu,
+				options->file_ops.confirm_delete ? _("_Delete...") :
+					_("_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);
 
--- a/src/layout_util.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/layout_util.c	Wed Dec 12 21:56:30 2018 +0200
@@ -372,6 +372,15 @@
 {
 	LayoutWindow *lw = data;
 
+	options->file_ops.safe_delete_enable = FALSE;
+	file_util_delete(NULL, layout_selection_list(lw), layout_window(lw));
+}
+
+static void layout_menu_move_to_trash_cb(GtkAction *action, gpointer data)
+{
+	LayoutWindow *lw = data;
+
+	options->file_ops.safe_delete_enable = TRUE;
 	file_util_delete(NULL, layout_selection_list(lw), layout_window(lw));
 }
 
@@ -381,6 +390,17 @@
 
 	if (options->file_ops.enable_delete_key)
 		{
+		options->file_ops.safe_delete_enable = FALSE;
+		file_util_delete(NULL, layout_selection_list(lw), layout_window(lw));
+		}
+}
+static void layout_menu_move_to_trash_key_cb(GtkAction *action, gpointer data)
+{
+	LayoutWindow *lw = data;
+
+	if (options->file_ops.enable_delete_key)
+		{
+		options->file_ops.safe_delete_enable = TRUE;
 		file_util_delete(NULL, layout_selection_list(lw), layout_window(lw));
 		}
 }
@@ -1094,6 +1114,10 @@
 {
 	LayoutWindow *lw = data;
 
+	if (lw->options.bars_state.hidden == gtk_toggle_action_get_active(action))
+		{
+		return;
+		}
 	layout_bars_hide_toggle(lw);
 }
 
@@ -1877,16 +1901,17 @@
   { "Copy",		GTK_STOCK_COPY,		N_("_Copy..."),				"<control>C",		N_("Copy..."),				CB(layout_menu_copy_cb) },
   { "Move",	PIXBUF_INLINE_ICON_MOVE,			N_("_Move..."),				"<control>M",		N_("Move..."),				CB(layout_menu_move_cb) },
   { "Rename",	PIXBUF_INLINE_ICON_RENAME,	N_("_Rename..."),			"<control>R",		N_("Rename..."),			CB(layout_menu_rename_cb) },
-  { "Delete",		GTK_STOCK_DELETE,	N_("_Delete..."),			"<control>D",		N_("Delete..."),			CB(layout_menu_delete_cb) },
-  { "DeleteAlt1",	GTK_STOCK_DELETE,	N_("_Delete..."),			"Delete",		N_("Delete..."),			CB(layout_menu_delete_key_cb) },
-  { "DeleteAlt2",	GTK_STOCK_DELETE,	N_("_Delete..."),			"KP_Delete",		N_("Delete..."),			CB(layout_menu_delete_key_cb) },
+  { "Delete",	PIXBUF_INLINE_ICON_TRASH,	N_("Move to Trash..."),		"<control>D",	N_("Move to Trash..."),		CB(layout_menu_move_to_trash_cb) },
+  { "DeleteAlt1",	PIXBUF_INLINE_ICON_TRASH,N_("Move to Trash..."),	"Delete",		N_("Move to Trash..."),		CB(layout_menu_move_to_trash_key_cb) },
+  { "DeleteAlt2",	PIXBUF_INLINE_ICON_TRASH,N_("Move to Trash..."),	"KP_Delete",	N_("Move to Trash..."),		CB(layout_menu_move_to_trash_key_cb) },
+  { "PermanentDelete",	GTK_STOCK_DELETE,	N_("Delete..."),			"<shift>Delete",N_("Delete..."),			CB(layout_menu_delete_cb) }, 
   { "EnableGrouping",	NULL,			N_("Enable file _grouping"),		NULL,			N_("Enable file grouping"),		CB(layout_menu_enable_grouping_cb) },
   { "DisableGrouping",	NULL,			N_("Disable file groupi_ng"),		NULL,			N_("Disable file grouping"),		CB(layout_menu_disable_grouping_cb) },
   { "CopyPath",		NULL,			N_("_Copy path to clipboard"),		NULL,			N_("Copy path to clipboard"),		CB(layout_menu_copy_path_cb) },
   { "CopyPathUnquoted",		NULL,			N_("_Copy path unquoted to clipboard"),		NULL,			N_("Copy path unquoted to clipboard"),		CB(layout_menu_copy_path_unquoted_cb) },
   { "CloseWindow",	GTK_STOCK_CLOSE,	N_("C_lose window"),			"<control>W",		N_("Close window"),			CB(layout_menu_close_cb) },
   { "Quit",		GTK_STOCK_QUIT, 	N_("_Quit"),				"<control>Q",		N_("Quit"),				CB(layout_menu_exit_cb) },
-  { "RotateCW",		NULL,			N_("_Rotate clockwise"),		"bracketright",		N_("Rotate clockwise"),			CB(layout_menu_alter_90_cb) },
+  { "RotateCW",		PIXBUF_INLINE_ICON_CW,			N_("_Rotate clockwise"),		"bracketright",		N_("Rotate clockwise"),			CB(layout_menu_alter_90_cb) },
   { "Rating0",		NULL,			N_("_Rating 0"),	"<alt>KP_0",	N_("Rating 0"),			CB(layout_menu_rating_0_cb) },
   { "Rating1",		NULL,			N_("_Rating 1"),	"<alt>KP_1",	N_("Rating 1"),			CB(layout_menu_rating_1_cb) },
   { "Rating2",		NULL,			N_("_Rating 2"),	"<alt>KP_2",	N_("Rating 2"),			CB(layout_menu_rating_2_cb) },
@@ -1894,11 +1919,11 @@
   { "Rating4",		NULL,			N_("_Rating 4"),	"<alt>KP_4",	N_("Rating 4"),			CB(layout_menu_rating_4_cb) },
   { "Rating5",		NULL,			N_("_Rating 5"),	"<alt>KP_5",	N_("Rating 5"),			CB(layout_menu_rating_5_cb) },
   { "RatingM1",		NULL,			N_("_Rating -1"),	"<alt>KP_Subtract",	N_("Rating -1"),	CB(layout_menu_rating_m1_cb) },
-  { "RotateCCW",	NULL,			N_("Rotate _counterclockwise"),		"bracketleft",		N_("Rotate counterclockwise"),		CB(layout_menu_alter_90cc_cb) },
-  { "Rotate180",	NULL,			N_("Rotate 1_80"),			"<shift>R",		N_("Rotate 180"),			CB(layout_menu_alter_180_cb) },
-  { "Mirror",		NULL,			N_("_Mirror"),				"<shift>M",		N_("Mirror"),				CB(layout_menu_alter_mirror_cb) },
-  { "Flip",		NULL,			N_("_Flip"),				"<shift>F",		N_("Flip"),				CB(layout_menu_alter_flip_cb) },
-  { "AlterNone",	NULL,			N_("_Original state"),  		"<shift>O",		N_("Original state"),			CB(layout_menu_alter_none_cb) },
+  { "RotateCCW",	PIXBUF_INLINE_ICON_CCW,	N_("Rotate _counterclockwise"),		"bracketleft",		N_("Rotate counterclockwise"),		CB(layout_menu_alter_90cc_cb) },
+  { "Rotate180",	PIXBUF_INLINE_ICON_180,	N_("Rotate 1_80"),	"<shift>R",		N_("Rotate 180"),			CB(layout_menu_alter_180_cb) },
+  { "Mirror",		PIXBUF_INLINE_ICON_MIRROR,	N_("_Mirror"),	"<shift>M",		N_("Mirror"),				CB(layout_menu_alter_mirror_cb) },
+  { "Flip",		PIXBUF_INLINE_ICON_FLIP,	N_("_Flip"),	"<shift>F",		N_("Flip"),				CB(layout_menu_alter_flip_cb) },
+  { "AlterNone",	PIXBUF_INLINE_ICON_ORIGINAL,	N_("_Original state"), 	"<shift>O",		N_("Original state"),			CB(layout_menu_alter_none_cb) },
   { "SelectAll",	PIXBUF_INLINE_ICON_SELECT_ALL,			N_("Select _all"),			"<control>A",		N_("Select all"),			CB(layout_menu_select_all_cb) },
   { "SelectNone",	PIXBUF_INLINE_ICON_SELECT_NONE,			N_("Select _none"),			"<control><shift>A",	N_("Select none"),			CB(layout_menu_unselect_all_cb) },
   { "SelectInvert",	PIXBUF_INLINE_ICON_SELECT_INVERT,			N_("_Invert Selection"),		"<control><shift>I",	N_("Invert Selection"),			CB(layout_menu_invert_selection_cb) },
@@ -2066,7 +2091,10 @@
 "      <menuitem action='Copy'/>"
 "      <menuitem action='Move'/>"
 "      <menuitem action='Rename'/>"
+"      <separator/>"
 "      <menuitem action='Delete'/>"
+"      <menuitem action='PermanentDelete'/>"
+"      <separator/>"
 "      <placeholder name='FileOpsSection'/>"
 "      <separator/>"
 "      <placeholder name='QuitSection'/>"
@@ -3131,6 +3159,9 @@
 	action = gtk_action_group_get_action(lw->action_group, "ShowFileFilter");
 	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.show_file_filter);
 
+	action = gtk_action_group_get_action(lw->action_group, "HideBars");
+	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), (lw->options.bars_state.hidden));
+
 	if (osd_flags & OSD_SHOW_HISTOGRAM)
 		{
 		action = gtk_action_group_get_action(lw->action_group, "HistogramChanR");
@@ -3383,7 +3414,14 @@
 		lw->options.bars_state.hidden = FALSE;
 		if (lw->options.bars_state.sort)
 			{
-			gtk_widget_show(lw->bar_sort);
+			if (lw->bar_sort)
+				{
+				gtk_widget_show(lw->bar_sort);
+				}
+			else
+				{
+				layout_bar_sort_set_default(lw);
+				}
 			}
 		if (lw->options.bars_state.info)
 			{
@@ -3400,7 +3438,11 @@
 		lw->options.bars_state.tools_float = lw->options.tools_float;
 		lw->options.bars_state.tools_hidden = lw->options.tools_hidden;
 
-		gtk_widget_hide(lw->bar);
+		if (lw->bar)
+			{
+			gtk_widget_hide(lw->bar);
+			}
+
 		if (lw->bar_sort)
 			gtk_widget_hide(lw->bar_sort);
 		layout_tools_float_set(lw, lw->options.tools_float, TRUE);
--- a/src/options.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/options.c	Wed Dec 12 21:56:30 2018 +0200
@@ -65,9 +65,11 @@
 	options->show_window_ids = FALSE;
 
 	options->file_ops.confirm_delete = TRUE;
+	options->file_ops.confirm_move_to_trash = TRUE;
 	options->file_ops.enable_delete_key = TRUE;
+	options->file_ops.use_system_trash = TRUE;
 	options->file_ops.enable_in_place_rename = TRUE;
-	options->file_ops.safe_delete_enable = FALSE;
+	options->file_ops.safe_delete_enable = TRUE;
 	options->file_ops.safe_delete_folder_maxsize = 128;
 	options->file_ops.safe_delete_path = NULL;
 
@@ -195,13 +197,15 @@
 	options->star_rating.star = STAR_RATING_STAR;
 	options->star_rating.rejected = STAR_RATING_REJECTED;
 
+	options->printer.template_string = NULL;
 	options->printer.image_font = g_strdup("Serif 10");
 	options->printer.page_font = g_strdup("Serif 10");
 	options->printer.page_text = NULL;
-	options->printer.text_fields = 1;
 	options->printer.image_text_position = 1;
 	options->printer.page_text_position = 3;
 
+	options->disabled_plugins = NULL;
+
 	return options;
 }
 
--- a/src/options.h	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/options.h	Wed Dec 12 21:56:30 2018 +0200
@@ -95,8 +95,10 @@
 		gboolean enable_in_place_rename;
 
 		gboolean confirm_delete;
+		gboolean confirm_move_to_trash;
 		gboolean enable_delete_key;
 		gboolean safe_delete_enable;
+		gboolean use_system_trash;
 		gchar *safe_delete_path;
 		gint safe_delete_folder_maxsize;
 	} file_ops;
@@ -305,15 +307,17 @@
 	struct {
 		gchar *image_font;
 		gchar *page_font;
-		gint text_fields;
 		gboolean show_image_text;
 		gboolean show_page_text;
 		gchar *page_text;
 		gint image_text_position;
 		gint page_text_position;
+		gchar *template_string;
 	} printer;
 
 	gboolean read_metadata_in_idle;
+
+	GList *disabled_plugins;
 };
 
 ConfOptions *options;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/osd.c	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,486 @@
+/*
+ * Copyright (C) 2018 The Geeqie Team
+ *
+ * Author: Colin Clark
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* Routines for creating the Overlay Screen Display text. Also
+ * used for the same purposes by the Print routines
+ */
+
+#include "main.h"
+#include "osd.h"
+
+#include "dnd.h"
+#include "exif.h"
+#include "glua.h"
+#include "metadata.h"
+#include "ui_fileops.h"
+#include "ui_misc.h"
+
+#include <math.h>
+
+static const gchar *predefined_tags[][2] = {
+	{"%name%",							N_("Name")},
+	{"%path:60%",						N_("Path")},
+	{"%date%",							N_("Date")},
+	{"%size%",							N_("Size")},
+	{"%zoom%",							N_("Zoom")},
+	{"%dimensions%",					N_("Dimensions")},
+	{"%collection%",					N_("Collection")},
+	{"%number%",						N_("Image index")},
+	{"%total%",							N_("Images total")},
+	{"%comment%",						N_("Comment")},
+	{"%keywords%",						N_("Keywords")},
+	{"%file.ctime%",					N_("File ctime")},
+	{"%file.mode%",						N_("File mode")},
+	{"%file.owner%",					N_("File owner")},
+	{"%file.group%",					N_("File group")},
+	{"%file.link%",						N_("File link")},
+	{"%file.class%",					N_("File class")},
+	{"%formatted.DateTime%",			N_("Image date")},
+	{"%formatted.DateTimeDigitized%",	N_("Date digitized")},
+	{"%formatted.ShutterSpeed%",		N_("ShutterSpeed")},
+	{"%formatted.Aperture%",			N_("Aperture")},
+	{"%formatted.ExposureBias%",		N_("Exposure bias")},
+	{"%formatted.Resolution%",			N_("Resolution")},
+	{"%formatted.Camera%",				N_("Camera")},
+	{"%formatted.ISOSpeedRating%",		N_("ISO")},
+	{"%formatted.FocalLength%",			N_("Focal length")},
+	{"%formatted.FocalLength35mmFilm%",	N_("Focal len. 35mm")},
+	{"%formatted.SubjectDistance%",		N_("Subject distance")},
+	{"%formatted.Flash%",				N_("Flash")},
+	{"%formatted.ColorProfile%",		N_("Color profile")},
+	{"%formatted.GPSPosition%",			N_("Lat, Long")},
+	{"%formatted.GPSAltitude%",			N_("Altitude")},
+	{"%formatted.localtime%",			N_("Local time")},
+	{"%formatted.timezone%",			N_("Timezone")},
+	{"%formatted.countryname%",			N_("Country name")},
+	{"%formatted.countrycode%",			N_("Country code")},
+	{"%rating%",						N_("Rating")},
+	{"%formatted.star_rating%",			N_("Star rating")},
+	{"%Xmp.dc.creator%",				N_("© Creator")},
+	{"%Xmp.dc.contributor%",			N_("© Contributor")},
+	{"%Xmp.dc.rights%",					N_("© Rights")},
+	{NULL, NULL}};
+
+static GtkTargetEntry osd_drag_types[] = {
+	{ "text/plain", GTK_TARGET_SAME_APP, TARGET_TEXT_PLAIN }
+};
+
+typedef struct _TagData TagData;
+struct _TagData
+{
+	gchar *key;
+	gchar *title;
+};
+
+static void tag_button_cb(GtkWidget *widget, gpointer data)
+{
+	GtkTextView *image_overlay_template_view = data;
+	GtkTextBuffer *buffer;
+	TagData *td;
+
+	buffer = gtk_text_view_get_buffer(image_overlay_template_view);
+	td = g_object_get_data(G_OBJECT(widget), "tag_data");
+	gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(buffer), td->key, -1);
+
+	gtk_widget_grab_focus(GTK_WIDGET(image_overlay_template_view));
+}
+
+static void osd_dnd_get_cb(GtkWidget *btn, GdkDragContext *context,
+								GtkSelectionData *selection_data, guint info,
+								guint time, gpointer data)
+{
+	TagData *td;
+	GtkTextView *image_overlay_template_view = data;
+
+	td = g_object_get_data(G_OBJECT(btn), "tag_data");
+	gtk_selection_data_set_text(selection_data, td->key, -1);
+
+	gtk_widget_grab_focus(GTK_WIDGET(image_overlay_template_view));
+}
+
+static void osd_btn_destroy_cb(GtkWidget *btn, GdkDragContext *context,
+								GtkSelectionData *selection_data, guint info,
+								guint time, gpointer data)
+{
+	TagData *td;
+
+	td = g_object_get_data(G_OBJECT(btn), "tag_data");
+	g_free(td->key);
+	g_free(td->title);
+}
+
+static void set_osd_button(GtkTable *table, const gint rows, const gint cols, const gchar *key, const gchar *title, GtkWidget *template_view)
+{
+	GtkWidget *new_button;
+	TagData *td;
+
+	new_button = gtk_button_new_with_label(title);
+	g_signal_connect(G_OBJECT(new_button), "clicked", G_CALLBACK(tag_button_cb), template_view);
+	gtk_widget_show(new_button);
+
+	td = g_new0(TagData, 1);
+	td->key = g_strdup(key);
+	td->title = g_strdup(title);
+
+	g_object_set_data(G_OBJECT(new_button), "tag_data", td);
+
+	gtk_drag_source_set(new_button, GDK_BUTTON1_MASK, osd_drag_types, 1, GDK_ACTION_COPY);
+	g_signal_connect(G_OBJECT(new_button), "drag_data_get",
+							G_CALLBACK(osd_dnd_get_cb), template_view);
+	g_signal_connect(G_OBJECT(new_button), "destroy",
+							G_CALLBACK(osd_btn_destroy_cb), new_button);
+
+	gtk_table_attach_defaults(table, new_button, cols, cols+1, rows, rows+1);
+
+}
+
+GtkWidget *osd_new(gint max_cols, GtkWidget *template_view)
+{
+	GtkWidget *hbox;
+	GtkWidget *vbox;
+	GtkWidget *vbox_buttons;
+	GtkWidget *group;
+	GtkWidget *button;
+	GtkWidget *scrolled;
+	GtkTextBuffer *buffer;
+	GtkWidget *label;
+	GtkWidget *	subgroup;
+	gint i = 0;
+	gint rows = 0;
+	gint max_rows = 0;
+	gint col = 0;
+	gint cols = 0;
+	gdouble entries;
+	GtkWidget *viewport;
+
+	vbox = gtk_vbox_new(FALSE, 0);
+
+	pref_label_new(vbox, _("To include predefined tags in the template, click a button or drag-and-drop"));
+
+	scrolled = gtk_scrolled_window_new(NULL, NULL);
+	gtk_box_pack_start(GTK_BOX(vbox), scrolled, FALSE, FALSE, 0);
+	gtk_container_set_border_width(GTK_CONTAINER(scrolled), PREF_PAD_BORDER);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
+				       GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+	label = gtk_label_new("title");
+	gtk_widget_show(scrolled);
+	gtk_widget_set_size_request(scrolled, -1, 140);
+
+	viewport = gtk_viewport_new(NULL, NULL);
+	gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
+	gtk_container_add(GTK_CONTAINER(scrolled), viewport);
+	gtk_widget_show(viewport);
+
+	entries = (sizeof(predefined_tags) / sizeof(predefined_tags[0])) - 1;
+	max_rows = ceil(entries / max_cols);
+
+	GtkTable *table;
+	table = GTK_TABLE(gtk_table_new(max_rows, max_cols, FALSE));
+	gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(table));
+	gtk_widget_show(GTK_WIDGET(table));
+
+	for (rows = 0; rows < max_rows; rows++)
+		{
+		cols = 0;
+
+		while (cols < max_cols && predefined_tags[i][0])
+			{
+			set_osd_button(table, rows, cols, predefined_tags[i][0], predefined_tags[i][1], template_view);
+			i = i + 1;
+			cols++;
+			}
+		}
+	return vbox;
+}
+static gchar *keywords_to_string(FileData *fd)
+{
+	GList *keywords;
+	GString *kwstr = NULL;
+	gchar *ret = NULL;
+
+	g_assert(fd);
+
+	keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN);
+
+	if (keywords)
+		{
+		GList *work = keywords;
+
+		while (work)
+			{
+			gchar *kw = work->data;
+			work = work->next;
+
+			if (!kw) continue;
+			if (!kwstr)
+				kwstr = g_string_new("");
+			else
+				g_string_append(kwstr, ", ");
+
+			g_string_append(kwstr, kw);
+			}
+		string_list_free(keywords);
+		}
+
+	if (kwstr)
+		{
+		ret = kwstr->str;
+		g_string_free(kwstr, FALSE);
+		}
+
+	return ret;
+}
+
+gchar *image_osd_mkinfo(const gchar *str, FileData *fd, GHashTable *vars)
+{
+	gchar delim = '%', imp = '|', sep[] = " - ";
+	gchar *start, *end;
+	guint pos, prev;
+	gboolean want_separator = FALSE;
+	gchar *name, *data;
+	GString *new;
+	gchar *ret;
+
+	if (!str || !*str) return g_strdup("");
+
+	new = g_string_new(str);
+
+	prev = -1;
+
+	while (TRUE)
+		{
+		guint limit = 0;
+		gchar *trunc = NULL;
+		gchar *limpos = NULL;
+		gchar *extra = NULL;
+		gchar *extrapos = NULL;
+		gchar *p;
+
+		start = strchr(new->str + (prev + 1), delim);
+		if (!start)
+			break;
+		end = strchr(start+1, delim);
+		if (!end)
+			break;
+
+		/* Search for optionnal modifiers
+		 * %name:99:extra% -> name = "name", limit=99, extra = "extra"
+		 */
+		for (p = start + 1; p < end; p++)
+			{
+			if (p[0] == ':')
+				{
+				if (g_ascii_isdigit(p[1]) && !limpos)
+					{
+					limpos = p + 1;
+					if (!trunc) trunc = p;
+					}
+				else
+					{
+					extrapos = p + 1;
+					if (!trunc) trunc = p;
+					break;
+					}
+				}
+			}
+
+		if (limpos)
+			limit = (guint) atoi(limpos);
+
+		if (extrapos)
+			extra = g_strndup(extrapos, end - extrapos);
+
+		name = g_strndup(start+1, (trunc ? trunc : end)-start-1);
+		pos = start - new->str;
+		data = NULL;
+
+		if (strcmp(name, "keywords") == 0)
+			{
+			data = keywords_to_string(fd);
+			}
+		else if (strcmp(name, "comment") == 0)
+			{
+			data = metadata_read_string(fd, COMMENT_KEY, METADATA_PLAIN);
+			}
+		else if (strcmp(name, "imagecomment") == 0)
+			{
+			data = exif_get_image_comment(fd);
+			}
+		else if (strcmp(name, "rating") == 0)
+			{
+			data = metadata_read_string(fd, RATING_KEY, METADATA_PLAIN);
+			}
+#ifdef HAVE_LUA
+		else if (strncmp(name, "lua/", 4) == 0)
+			{
+			gchar *tmp;
+			tmp = strchr(name+4, '/');
+			if (!tmp)
+				break;
+			*tmp = '\0';
+			data = lua_callvalue(fd, name+4, tmp+1);
+			}
+#endif
+		else
+			{
+			data = g_strdup(g_hash_table_lookup(vars, name));
+			if (!data)
+				data = metadata_read_string(fd, name, METADATA_FORMATTED);
+			}
+
+		if (data && *data && limit > 0 && strlen(data) > limit + 3)
+			{
+			gchar *new_data = g_strdup_printf("%-*.*s...", limit, limit, data);
+			g_free(data);
+			data = new_data;
+			}
+
+		if (data)
+			{
+			/* Since we use pango markup to display, we need to escape here */
+			gchar *escaped = g_markup_escape_text(data, -1);
+			g_free(data);
+			data = escaped;
+			}
+
+		if (extra)
+			{
+			if (data && *data)
+				{
+				/* Display data between left and right parts of extra string
+				 * the data is expressed by a '*' character. A '*' may be escaped
+				 * by a \. You should escape all '*' characters, do not rely on the
+				 * current implementation which only replaces the first unescaped '*'.
+				 * If no "*" is present, the extra string is just appended to data string.
+				 * Pango mark up is accepted in left and right parts.
+				 * Any \n is replaced by a newline
+				 * Examples:
+				 * "<i>*</i>\n" -> data is displayed in italics ended with a newline
+				 * "\n" 	-> ended with newline
+				 * "ISO *"	-> prefix data with "ISO " (ie. "ISO 100")
+				 * "\**\*"	-> prefix data with a star, and append a star (ie. "*100*")
+				 * "\\*"	-> prefix data with an anti slash (ie "\100")
+				 * "Collection <b>*</b>\n" -> display data in bold prefixed by "Collection " and a newline is appended
+				 *
+				 * FIXME: using background / foreground colors lead to weird results.
+				 */
+				gchar *new_data;
+				gchar *left = NULL;
+				gchar *right = extra;
+				gchar *p;
+				guint len = strlen(extra);
+
+				/* Search for left and right parts and unescape characters */
+				for (p = extra; *p; p++, len--)
+					if (p[0] == '\\')
+						{
+						if (p[1] == 'n')
+							{
+							memmove(p+1, p+2, --len);
+							p[0] = '\n';
+							}
+						else if (p[1] != '\0')
+							memmove(p, p+1, len--); // includes \0
+						}
+					else if (p[0] == '*' && !left)
+						{
+						right = p + 1;
+						left = extra;
+						}
+
+				if (left) right[-1] = '\0';
+
+				new_data = g_strdup_printf("%s%s%s", left ? left : "", data, right);
+				g_free(data);
+				data = new_data;
+				}
+			g_free(extra);
+			}
+
+		g_string_erase(new, pos, end-start+1);
+		if (data && *data)
+			{
+			if (want_separator)
+				{
+				/* insert separator */
+				g_string_insert(new, pos, sep);
+				pos += strlen(sep);
+				want_separator = FALSE;
+				}
+
+			g_string_insert(new, pos, data);
+			pos += strlen(data);
+		}
+
+		if (pos-prev >= 1 && new->str[pos] == imp)
+			{
+			/* pipe character is replaced by a separator, delete it
+			 * and raise a flag if needed */
+			g_string_erase(new, pos--, 1);
+			want_separator |= (data && *data);
+			}
+
+		if (new->str[pos] == '\n') want_separator = FALSE;
+
+		prev = pos - 1;
+
+		g_free(name);
+		g_free(data);
+		}
+
+	/* search and destroy empty lines */
+	end = new->str;
+	while ((start = strchr(end, '\n')))
+		{
+		end = start;
+		while (*++(end) == '\n')
+			;
+		g_string_erase(new, start-new->str, end-start-1);
+		}
+
+	g_strchomp(new->str);
+
+	ret = new->str;
+	g_string_free(new, FALSE);
+
+	return ret;
+}
+
+void osd_template_insert(GHashTable *vars, gchar *keyword, gchar *value, OsdTemplateFlags flags)
+{
+	if (!value)
+		{
+		g_hash_table_insert(vars, keyword, g_strdup(""));
+		return;
+		}
+
+	if (flags & OSDT_NO_DUP)
+		{
+		g_hash_table_insert(vars, keyword, value);
+		return;
+		}
+	else
+		{
+		g_hash_table_insert(vars, keyword, g_strdup(value));
+		}
+
+	if (flags & OSDT_FREE) g_free((gpointer) value);
+}
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/osd.h	Wed Dec 12 21:56:30 2018 +0200
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2018 The Geeqie Team
+ *
+ * Author: Colin Clark
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef OSD_H
+#define OSD_H
+
+typedef enum {
+	OSDT_NONE 	= 0,
+	OSDT_FREE 	= 1 << 0,
+	OSDT_NO_DUP 	= 1 << 1
+} OsdTemplateFlags;
+
+GtkWidget *osd_new(gint max_cols, GtkWidget *template_view);
+gchar *image_osd_mkinfo(const gchar *str, FileData *fd, GHashTable *vars);
+void osd_template_insert(GHashTable *vars, gchar *keyword, gchar *value, OsdTemplateFlags flags);
+#endif
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
--- a/src/pan-view/pan-view.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/pan-view/pan-view.c	Wed Dec 12 21:56:30 2018 +0200
@@ -1211,7 +1211,11 @@
 				if (fd) file_util_rename(fd, NULL, GTK_WIDGET(pr));
 				break;
 			case 'D': case 'd':
-				if (fd) file_util_delete(fd, NULL, GTK_WIDGET(pr));
+				if (fd)
+					{
+					options->file_ops.safe_delete_enable = TRUE;
+					file_util_delete(fd, NULL, GTK_WIDGET(pr));
+					}
 				break;
 			case 'F': case 'f':
 				pan_search_toggle_visible(pw, TRUE);
@@ -2151,7 +2155,24 @@
 	FileData *fd;
 
 	fd = pan_menu_click_fd(pw);
-	if (fd) file_util_delete(fd, NULL, pw->imd->widget);
+	if (fd)
+		{
+		options->file_ops.safe_delete_enable = FALSE;
+		file_util_delete(fd, NULL, pw->imd->widget);
+		}
+}
+
+static void pan_move_to_trash_cb(GtkWidget *widget, gpointer data)
+{
+	PanWindow *pw = data;
+	FileData *fd;
+
+	fd = pan_menu_click_fd(pw);
+	if (fd)
+		{
+		options->file_ops.safe_delete_enable = TRUE;
+		file_util_delete(fd, NULL, pw->imd->widget);
+		}
 }
 
 static void pan_copy_path_cb(GtkWidget *widget, gpointer data)
@@ -2301,8 +2322,16 @@
 				G_CALLBACK(pan_copy_path_cb), pw);
 	menu_item_add_sensitive(menu, _("_Copy path unquoted"), active,
 				G_CALLBACK(pan_copy_path_unquoted_cb), pw);
-	menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active,
-				      G_CALLBACK(pan_delete_cb), pw);
+
+	menu_item_add_divider(menu);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_move_to_trash ? _("Move to Trash...") :
+					_("Move to Trash"), PIXBUF_INLINE_ICON_TRASH, active,
+						G_CALLBACK(pan_move_to_trash_cb), pw);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_delete ? _("_Delete...") :
+					_("_Delete"), GTK_STOCK_DELETE, active,
+						G_CALLBACK(pan_delete_cb), pw);
 
 	menu_item_add_divider(menu);
 
--- a/src/pixbuf-renderer.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/pixbuf-renderer.c	Wed Dec 12 21:56:30 2018 +0200
@@ -2879,10 +2879,15 @@
 	x_pixel_clamped = CLAMP(x_pixel, 0, pr->image_width - 1);
 	y_pixel_clamped = CLAMP(y_pixel, 0, pr->image_height - 1);
 
-	if(x_pixel != x_pixel_clamped || y_pixel != y_pixel_clamped)
+	if (x_pixel != x_pixel_clamped)
 		{
 		/* mouse is not on pr */
-		x_pixel = y_pixel = -1;
+		x_pixel = -1;
+		}
+	if (y_pixel != y_pixel_clamped)
+		{
+		/* mouse is not on pr */
+		y_pixel = -1;
 		}
 
 	*x_pixel_return = x_pixel;
--- a/src/pixbuf_util.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/pixbuf_util.c	Wed Dec 12 21:56:30 2018 +0200
@@ -139,6 +139,13 @@
 	{ PIXBUF_INLINE_ICON_SELECT_INVERT,	icon_select_invert },
 	{ PIXBUF_INLINE_ICON_SELECT_RECTANGLE,	icon_select_rectangle },
 	{ PIXBUF_INLINE_ICON_FILE_FILTER,	icon_file_filter },
+	{ PIXBUF_INLINE_ICON_CW,	icon_rotate_clockwise },
+	{ PIXBUF_INLINE_ICON_CCW,	icon_rotate_counter_clockwise },
+	{ PIXBUF_INLINE_ICON_180,	icon_rotate_180 },
+	{ PIXBUF_INLINE_ICON_MIRROR,	icon_mirror },
+	{ PIXBUF_INLINE_ICON_FLIP,	icon_flip },
+	{ PIXBUF_INLINE_ICON_ORIGINAL,	icon_original },
+	{ PIXBUF_INLINE_ICON_TRASH,	icon_trash },
 	{ NULL, NULL }
 };
 
@@ -228,6 +235,15 @@
 				{
 				DEBUG_1("Couldn't load icon %s: %s", icon2, error->message);
 				g_error_free(error);
+				error = NULL;
+
+				/* try as an absolute path */
+				pixbuf = gdk_pixbuf_new_from_file(icon, &error);
+				if (error)
+					{
+					DEBUG_1("Couldn't load icon as absolute path %s: %s", icon, error->message);
+					g_error_free(error);
+					}
 				}
 			g_free(icon2);
 			}
--- a/src/pixbuf_util.h	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/pixbuf_util.h	Wed Dec 12 21:56:30 2018 +0200
@@ -73,6 +73,14 @@
 #define PIXBUF_INLINE_ICON_SELECT_INVERT	"icon_select_invert"
 #define PIXBUF_INLINE_ICON_SELECT_RECTANGLE	"icon_select_rectangle"
 #define PIXBUF_INLINE_ICON_FILE_FILTER	"icon_file_filter"
+#define PIXBUF_INLINE_ICON_TRASH	"icon_trash"
+
+#define PIXBUF_INLINE_ICON_CW	"icon_rotate_clockwise"
+#define PIXBUF_INLINE_ICON_CCW	"icon_rotate_counter_clockwise"
+#define PIXBUF_INLINE_ICON_180	"icon_rotate_180"
+#define PIXBUF_INLINE_ICON_MIRROR	"icon_mirror"
+#define PIXBUF_INLINE_ICON_FLIP	"icon_flip"
+#define PIXBUF_INLINE_ICON_ORIGINAL	"icon_original"
 
 GdkPixbuf *pixbuf_copy_rotate_90(GdkPixbuf *src, gboolean counter_clockwise);
 GdkPixbuf *pixbuf_copy_mirror(GdkPixbuf *src, gboolean mirror, gboolean flip);
--- a/src/preferences.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/preferences.c	Wed Dec 12 21:56:30 2018 +0200
@@ -39,6 +39,7 @@
 #include "layout_config.h"
 #include "layout_util.h"
 #include "metadata.h"
+#include "osd.h"
 #include "pixbuf_util.h"
 #include "slideshow.h"
 #include "toolbar.h"
@@ -52,8 +53,6 @@
 #include "window.h"
 #include "zonedetect.h"
 
-#include <math.h>
-
 #ifdef HAVE_LCMS
 #ifdef HAVE_LCMS2
 #include <lcms2.h>
@@ -261,7 +260,8 @@
 
 	options->file_ops.confirm_delete = c_options->file_ops.confirm_delete;
 	options->file_ops.enable_delete_key = c_options->file_ops.enable_delete_key;
-	options->file_ops.safe_delete_enable = c_options->file_ops.safe_delete_enable;
+	options->file_ops.confirm_move_to_trash = c_options->file_ops.confirm_move_to_trash;
+	options->file_ops.use_system_trash = c_options->file_ops.use_system_trash;
 	options->file_ops.safe_delete_folder_maxsize = c_options->file_ops.safe_delete_folder_maxsize;
 	options->tools_restore_state = c_options->tools_restore_state;
 	options->save_window_positions = c_options->save_window_positions;
@@ -2055,116 +2055,7 @@
 			      options->fullscreen.disable_saver, &c_options->fullscreen.disable_saver);
 }
 
-/* overlay screen display tab */
-static const gchar *predefined_tags[][2] = {
-	{"%name%",							N_("Name")},
-	{"%path:60%*",						N_("Path")},
-	{"%date%",							N_("Date")},
-	{"%size%",							N_("Size")},
-	{"%zoom%",							N_("Zoom")},
-	{"%dimensions%",					N_("Dimensions")},
-	{"%collection%",					N_("Collection")},
-	{"%number%",						N_("Collection number")},
-	{"%total%",							N_("Collection total")},
-	{"%file.ctime%",					N_("File ctime")},
-	{"%file.mode%",						N_("File mode")},
-	{"%file.owner%",					N_("File owner")},
-	{"%file.group%",					N_("File group")},
-	{"%file.link%",						N_("File link")},
-	{"%file.class%",					N_("File class")},
-	{"%formatted.DateTime%",			N_("Image date")},
-	{"%formatted.DateTimeDigitized%",	N_("Date digitized")},
-	{"%formatted.ShutterSpeed%",		N_("ShutterSpeed")},
-	{"%formatted.Aperture%",			N_("Aperture")},
-	{"%formatted.ExposureBias%",		N_("Exposure bias")},
-	{"%formatted.Resolution%",			N_("Resolution")},
-	{"%formatted.Camera%",				N_("Camera")},
-	{"%formatted.ShutterSpeed%",		N_("Shutter speed")},
-	{"%formatted.ISOSpeedRating%",		N_("ISO")},
-	{"%formatted.FocalLength%",			N_("Focal length")},
-	{"%formatted.FocalLength35mmFilm%",	N_("Focal len. 35mm")},
-	{"%formatted.SubjectDistance%",		N_("Subject distance")},
-	{"%formatted.Flash%",				N_("Flash")},
-	{"%formatted.ColorProfile%",		N_("Color profile")},
-	{"%formatted.GPSPosition%",			N_("Lat, Long")},
-	{"%formatted.GPSAltitude%",			N_("Altitude")},
-	{"%formatted.localtime%",			N_("Local time")},
-	{"%formatted.timezone%",			N_("Timezone")},
-	{"%formatted.countryname%",			N_("Country name")},
-	{"%formatted.countrycode%",			N_("Country code")},
-	{"%formatted.star_rating%",			N_("Star rating")},
-	{NULL, NULL}};
-
-static GtkTargetEntry osd_drag_types[] = {
-	{ "text/plain", GTK_TARGET_SAME_APP, TARGET_TEXT_PLAIN }
-};
-
-typedef struct _TagData TagData;
-struct _TagData
-{
-	gchar *key;
-	gchar *title;
-};
-
-static void tag_button_cb(GtkWidget *widget, gpointer data)
-{
-	GtkTextView *image_overlay_template_view = data;
-	GtkTextBuffer *buffer;
-	TagData *td;
-
-	buffer = gtk_text_view_get_buffer(image_overlay_template_view);
-	td = g_object_get_data(G_OBJECT(widget), "tag_data");
-	gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(buffer), td->key, -1);
-
-	gtk_widget_grab_focus(GTK_WIDGET(image_overlay_template_view));
-}
-
-static void osd_dnd_get_cb(GtkWidget *btn, GdkDragContext *context,
-								GtkSelectionData *selection_data, guint info,
-								guint time, gpointer data)
-{
-	TagData *td;
-	GtkTextView *image_overlay_template_view = data;
-
-	td = g_object_get_data(G_OBJECT(btn), "tag_data");
-	gtk_selection_data_set_text(selection_data, td->key, -1);
-
-	gtk_widget_grab_focus(GTK_WIDGET(image_overlay_template_view));
-}
-
-static void osd_btn_destroy_cb(GtkWidget *btn, GdkDragContext *context,
-								GtkSelectionData *selection_data, guint info,
-								guint time, gpointer data)
-{
-	TagData *td;
-
-	td = g_object_get_data(G_OBJECT(btn), "tag_data");
-	g_free(td->key);
-	g_free(td->title);
-}
-
-static void set_osd_button(GtkWidget *widget, const gchar *key, const gchar *title,
-										GtkWidget *image_overlay_template_view)
-{
-	GtkWidget *new_button;
-	TagData *td;
-
-	new_button = pref_button_new(widget, NULL, _(title), TRUE,
-							G_CALLBACK(tag_button_cb), image_overlay_template_view);
-
-	td = g_new0(TagData, 1);
-	td->key = g_strdup(key);
-	td->title = g_strdup(title);
-
-	g_object_set_data(G_OBJECT(new_button), "tag_data", td);
-
-	gtk_drag_source_set(new_button, GDK_BUTTON1_MASK, osd_drag_types, 1, GDK_ACTION_COPY);
-	g_signal_connect(G_OBJECT(new_button), "drag_data_get",
-							G_CALLBACK(osd_dnd_get_cb), image_overlay_template_view);
-	g_signal_connect(G_OBJECT(new_button), "destroy",
-							G_CALLBACK(osd_btn_destroy_cb), new_button);
-}
-
+#define PRE_FORMATTED_COLUMNS 5
 static void config_tab_osd(GtkWidget *notebook)
 {
 	GtkWidget *hbox;
@@ -2174,6 +2065,7 @@
 	GtkWidget *button;
 	GtkWidget *image_overlay_template_view;
 	GtkWidget *scrolled;
+	GtkWidget *scrolled_pre_formatted;
 	GtkTextBuffer *buffer;
 	GtkWidget *label;
 	GtkWidget *	subgroup;
@@ -2187,33 +2079,13 @@
 
 	group = pref_group_new(vbox, FALSE, _("Overlay Screen Display"), GTK_ORIENTATION_VERTICAL);
 
-	hbox = gtk_hbox_new(FALSE, 0);
-
-	gtk_box_pack_start(GTK_BOX(group), hbox, FALSE, FALSE, 0);
-	gtk_widget_show(hbox);
-
-	pref_label_new(hbox, _("To include predefined tags in the template, click a button or drag-and-drop"));
-
 	subgroup = pref_box_new(group, FALSE, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);
-	hbox = gtk_hbox_new(FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(subgroup), hbox, FALSE, FALSE, 0);
-	gtk_widget_show(hbox);
-
-	for (cols = 0; cols < 6; cols++)
-		{
-		vbox_buttons = gtk_vbox_new(FALSE, 0);
-		rows = 0;
-
-		gtk_box_pack_start(GTK_BOX(hbox), vbox_buttons, FALSE, FALSE, 0);
-
-		while (rows < 6 && predefined_tags[i][0])
-			{
-			set_osd_button(vbox_buttons, predefined_tags[i][0], predefined_tags[i][1], image_overlay_template_view);
-			i = i + 1;
-			rows++;
-			}
-		gtk_widget_show(vbox_buttons);
-		}
+
+	scrolled_pre_formatted = osd_new(PRE_FORMATTED_COLUMNS, image_overlay_template_view);
+	gtk_widget_set_size_request(scrolled_pre_formatted, 200, 150);
+	gtk_box_pack_start(GTK_BOX(subgroup), scrolled_pre_formatted, FALSE, FALSE, 0);
+	gtk_widget_show(scrolled_pre_formatted);
+	gtk_widget_show(subgroup);
 
 	pref_line(group, PREF_PAD_GAP);
 
@@ -3081,6 +2953,22 @@
 }
 
 /* advanced entry tab */
+static void use_geeqie_trash_cb(GtkWidget *widget, gpointer data)
+{
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
+		{
+		c_options->file_ops.use_system_trash = FALSE;
+		}
+}
+
+static void use_system_trash_cb(GtkWidget *widget, gpointer data)
+{
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
+		{
+		c_options->file_ops.use_system_trash = TRUE;
+		}
+}
+
 static void config_tab_behavior(GtkWidget *notebook)
 {
 	GtkWidget *hbox;
@@ -3099,13 +2987,15 @@
 
 	group = pref_group_new(vbox, FALSE, _("Delete"), GTK_ORIENTATION_VERTICAL);
 
-	pref_checkbox_new_int(group, _("Confirm file delete"),
+	pref_checkbox_new_int(group, _("Confirm permanent file delete"),
 			      options->file_ops.confirm_delete, &c_options->file_ops.confirm_delete);
+	pref_checkbox_new_int(group, _("Confirm move file to Trash"),
+			      options->file_ops.confirm_move_to_trash, &c_options->file_ops.confirm_move_to_trash);
 	pref_checkbox_new_int(group, _("Enable Delete key"),
 			      options->file_ops.enable_delete_key, &c_options->file_ops.enable_delete_key);
 
-	ct_button = pref_checkbox_new_int(group, _("Safe delete"),
-					  options->file_ops.safe_delete_enable, &c_options->file_ops.safe_delete_enable);
+	ct_button = pref_radiobutton_new(group, NULL, _("Use Geeqie trash location"),
+					!options->file_ops.use_system_trash, G_CALLBACK(use_geeqie_trash_cb),NULL);
 
 	hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
 	pref_checkbox_link_sensitivity(ct_button, hbox);
@@ -3133,8 +3023,12 @@
 	button = pref_button_new(NULL, GTK_STOCK_CLEAR, NULL, FALSE,
 				 G_CALLBACK(safe_delete_clear_cb), NULL);
 	gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+	pref_radiobutton_new(group, ct_button, _("Use system Trash bin"),
+					options->file_ops.use_system_trash, G_CALLBACK(use_system_trash_cb), NULL);
 	gtk_widget_show(button);
 
+	pref_spacer(group, PREF_PAD_GROUP);
+
 
 	group = pref_group_new(vbox, FALSE, _("Behavior"), GTK_ORIENTATION_VERTICAL);
 
@@ -3168,6 +3062,8 @@
 	table = pref_table_new(group, 2, 1, FALSE, FALSE);
 	add_clipboard_selection_menu(table, 0, 0, _("Copy path clipboard selection:"), options->clipboard_selection, &c_options->clipboard_selection);
 
+	pref_spacer(group, PREF_PAD_GROUP);
+
 	group = pref_group_new(vbox, FALSE, _("Navigation"), GTK_ORIENTATION_VERTICAL);
 
 	pref_checkbox_new_int(group, _("Progressive keyboard scrolling"),
@@ -3185,6 +3081,8 @@
 
 
 #ifdef DEBUG
+	pref_spacer(group, PREF_PAD_GROUP);
+
 	group = pref_group_new(vbox, FALSE, _("Debugging"), GTK_ORIENTATION_VERTICAL);
 
 	pref_spin_new_int(group, _("Debug level:"), NULL,
--- a/src/print.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/print.c	Wed Dec 12 21:56:30 2018 +0200
@@ -21,8 +21,11 @@
 #include "main.h"
 #include "print.h"
 
+#include "exif.h"
 #include "filedata.h"
 #include "image-load.h"
+#include "osd.h"
+#include "pixbuf_util.h"
 #include "ui_misc.h"
 #include "ui_fileops.h"
 
@@ -35,14 +38,6 @@
 /* method to use when scaling down image data */
 #define PRINT_MAX_INTERP GDK_INTERP_HYPER
 
-typedef enum {
-	TEXT_INFO_FILENAME = 1 << 0,
-	TEXT_INFO_FILEDATE = 1 << 1,
-	TEXT_INFO_FILESIZE = 1 << 2,
-	TEXT_INFO_DIMENSIONS = 1 << 3,
-	TEXT_INFO_FILEPATH = 1 << 4
-} TextInfo;
-
 /* reverse order is important */
 typedef enum {
 	FOOTER_2,
@@ -57,9 +52,10 @@
 	GtkWidget *vbox;
 	GList *source_selection;
 
-	TextInfo	text_fields;
-	gint		 job_page;
+	gint job_page;
 	GtkTextBuffer *page_text;
+	gchar *template_string;
+	GtkWidget *parent;
 	ImageLoader	*job_loader;
 
 	GList *print_pixbuf_queue;
@@ -125,63 +121,6 @@
 	return TRUE;
 }
 
-static void print_text_field_set(PrintWindow *pw, TextInfo field, gboolean active)
-{
-	if (active)
-		{
-		pw->text_fields |= field;
-		}
-	else
-		{
-		pw->text_fields &= ~field;
-		}
-}
-
-static void print_text_cb_name(GtkWidget *widget, gpointer data)
-{
-	PrintWindow *pw = data;
-	gboolean active;
-
-	active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
-	print_text_field_set(pw, TEXT_INFO_FILENAME, active);
-}
-
-static void print_text_cb_path(GtkWidget *widget, gpointer data)
-{
-	PrintWindow *pw = data;
-	gboolean active;
-
-	active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
-	print_text_field_set(pw, TEXT_INFO_FILEPATH, active);
-}
-
-static void print_text_cb_date(GtkWidget *widget, gpointer data)
-{
-	PrintWindow *pw = data;
-	gboolean active;
-
-	active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
-	print_text_field_set(pw, TEXT_INFO_FILEDATE, active);
-}
-
-static void print_text_cb_size(GtkWidget *widget, gpointer data)
-{
-	PrintWindow *pw = data;
-	gboolean active;
-
-	active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
-	print_text_field_set(pw, TEXT_INFO_FILESIZE, active);
-}
-
-static void print_text_cb_dims(GtkWidget *widget, gpointer data)
-{
-	PrintWindow *pw = data;
-	gboolean active;
-
-	active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
-	print_text_field_set(pw, TEXT_INFO_DIMENSIONS, active);
-}
-
 static void print_set_font_cb(GtkWidget *widget, gpointer data)
 {
 	gpointer option;
@@ -369,6 +308,32 @@
 		}
 }
 
+static void set_print_image_text_string(gchar **template_string, const gchar *value)
+{
+	g_assert(template_string);
+
+	g_free(*template_string);
+	*template_string = g_strdup(value);
+}
+
+static void image_text_template_view_changed_cb(GtkWidget *widget, gpointer data)
+{
+	GtkWidget *pTextView;
+	GtkTextBuffer *pTextBuffer;
+	GtkTextIter iStart;
+	GtkTextIter iEnd;
+
+	pTextView = GTK_WIDGET(data);
+
+	pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
+	gtk_text_buffer_get_start_iter(pTextBuffer, &iStart);
+	gtk_text_buffer_get_end_iter(pTextBuffer, &iEnd);
+
+	set_print_image_text_string(&options->printer.template_string,
+					  gtk_text_buffer_get_text(pTextBuffer, &iStart, &iEnd, TRUE));
+}
+
+#define PRE_FORMATTED_COLUMNS 4
 static void print_text_menu(GtkWidget *box, PrintWindow *pw)
 {
 	GtkWidget *group;
@@ -380,6 +345,10 @@
 	GtkWidget *page_text_button;
 	GtkWidget *subgroup;
 	GtkWidget *page_text_view;
+	GtkWidget *image_text_template_view;
+	GtkWidget *scrolled;
+	GtkWidget *scrolled_pre_formatted;
+	GtkTextBuffer *buffer;
 
 	group = pref_group_new(box, FALSE, _("Image text"), GTK_ORIENTATION_VERTICAL);
 
@@ -409,16 +378,31 @@
 	gtk_widget_show(hbox);
 	pw->image_group = (gtk_radio_button_get_group(GTK_RADIO_BUTTON(button1)));
 
-	pref_checkbox_new(subgroup, _("Name"), (pw->text_fields & TEXT_INFO_FILENAME),
-			  G_CALLBACK(print_text_cb_name), pw);
-	pref_checkbox_new(subgroup, _("Path"), (pw->text_fields & TEXT_INFO_FILEPATH),
-			  G_CALLBACK(print_text_cb_path), pw);
-	pref_checkbox_new(subgroup, _("Date"), (pw->text_fields & TEXT_INFO_FILEDATE),
-			  G_CALLBACK(print_text_cb_date), pw);
-	pref_checkbox_new(subgroup, _("Size"), (pw->text_fields & TEXT_INFO_FILESIZE),
-			  G_CALLBACK(print_text_cb_size), pw);
-	pref_checkbox_new(subgroup, _("Dimensions"), (pw->text_fields & TEXT_INFO_DIMENSIONS),
-			  G_CALLBACK(print_text_cb_dims), pw);
+	image_text_template_view = gtk_text_view_new();
+
+	scrolled_pre_formatted = osd_new(PRE_FORMATTED_COLUMNS, image_text_template_view);
+	gtk_box_pack_start(GTK_BOX(subgroup), scrolled_pre_formatted, FALSE, FALSE, 0);
+	gtk_widget_show(scrolled_pre_formatted);
+	gtk_widget_show(subgroup);
+
+	gtk_widget_set_tooltip_markup(image_text_template_view,
+					_("Extensive formatting options are shown in the Help file"));
+
+	scrolled = gtk_scrolled_window_new(NULL, NULL);
+	gtk_widget_set_size_request(scrolled, 200, 50);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
+									GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_box_pack_start(GTK_BOX(subgroup), scrolled, TRUE, TRUE, 5);
+	gtk_widget_show(scrolled);
+
+	gtk_container_add(GTK_CONTAINER(scrolled), image_text_template_view);
+	gtk_widget_show(image_text_template_view);
+
+	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(image_text_template_view));
+	if (options->printer.template_string) gtk_text_buffer_set_text(buffer, options->printer.template_string, -1);
+	g_signal_connect(G_OBJECT(buffer), "changed",
+			 G_CALLBACK(image_text_template_view_changed_cb), image_text_template_view);
 
 	hbox = pref_box_new(subgroup, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_BUTTON_GAP);
 
@@ -464,8 +448,6 @@
 	gtk_widget_show(hbox);
 	pw->page_group = (gtk_radio_button_get_group(GTK_RADIO_BUTTON(button2)));
 
-	GtkWidget *scrolled;
-
 	scrolled = gtk_scrolled_window_new(NULL, NULL);
 	gtk_widget_set_size_request(scrolled, 50, 50);
 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);
@@ -515,6 +497,69 @@
 		}
 }
 
+gchar *form_image_text(const gchar *template_string, FileData *fd, PrintWindow *pw, gint page_nr, gint total)
+{
+	const gchar *name;
+	gchar *text = NULL;
+	GHashTable *vars;
+	gchar *window_title;
+	gchar *delimiter;
+	gchar *collection_name;
+
+	if (!fd) return NULL;
+
+	name = fd->name;
+
+	vars = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
+
+	window_title = g_strdup(gtk_window_get_title(GTK_WINDOW(pw->parent)));
+	delimiter = g_strstr_len(window_title, -1, " - Collection - ");
+	if (delimiter)
+		{
+		collection_name = g_strndup(window_title, delimiter - window_title);
+		}
+	else
+		{
+		collection_name = NULL;
+		}
+	g_free(window_title);
+
+	if (collection_name)
+		{
+		osd_template_insert(vars, "collection", collection_name, OSDT_NONE);
+		}
+
+	osd_template_insert(vars, "number", g_strdup_printf("%d", page_nr + 1), OSDT_NO_DUP);
+	osd_template_insert(vars, "total", g_strdup_printf("%d", total), OSDT_NO_DUP);
+	osd_template_insert(vars, "name", (gchar *) name, OSDT_NONE);
+	osd_template_insert(vars, "date", fd ? ((gchar *) text_from_time(fd->date)) : "", OSDT_NONE);
+	osd_template_insert(vars, "size", fd ? (text_from_size_abrev(fd->size)) : g_strdup(""), OSDT_FREE);
+
+	if (fd->pixbuf)
+		{
+		gint w, h;
+		w = gdk_pixbuf_get_width(fd->pixbuf);
+		h = gdk_pixbuf_get_height(fd->pixbuf);
+
+		osd_template_insert(vars, "width", g_strdup_printf("%d", w), OSDT_NO_DUP);
+ 		osd_template_insert(vars, "height", g_strdup_printf("%d", h), OSDT_NO_DUP);
+ 		osd_template_insert(vars, "res", g_strdup_printf("%d × %d", w, h), OSDT_FREE);
+ 		}
+	else
+		{
+		osd_template_insert(vars, "width", NULL, OSDT_NONE);
+ 		osd_template_insert(vars, "height", NULL, OSDT_NONE);
+ 		osd_template_insert(vars, "res", NULL, OSDT_NONE);
+		}
+
+	text = image_osd_mkinfo(template_string, fd, vars);
+	g_hash_table_destroy(vars);
+
+	g_free(collection_name);
+
+	return text;
+}
+
 static void draw_page(GtkPrintOperation *operation, GtkPrintContext *context,
 									gint page_nr, gpointer data)
 {
@@ -527,6 +572,7 @@
 	gdouble height_offset;
 	GdkPixbuf *pixbuf;
 	GdkPixbuf *pixbuf_scaled;
+	GdkPixbuf *rotated = NULL;
 	PangoLayout *layout_image = NULL;
 	PangoLayout *layout_page = NULL;
 	PangoFontDescription *desc;
@@ -542,45 +588,24 @@
 	gdouble pango_page_height;
 	GtkTextIter start, end;
 	gchar *tmp;
+	gint total;
+
+	fd = g_list_nth_data(pw->source_selection, page_nr);
+	total = g_list_length(pw->source_selection);
 
 	pixbuf = g_list_nth_data(pw->print_pixbuf_queue, page_nr);
+	if (fd->exif_orientation != EXIF_ORIENTATION_TOP_LEFT)
+		{
+		rotated = pixbuf_apply_orientation(pixbuf, fd->exif_orientation);
+		pixbuf = rotated;
+		}
+
 	pixbuf_image_width = gdk_pixbuf_get_width(pixbuf);
 	pixbuf_image_height = gdk_pixbuf_get_height(pixbuf);
 
-	fd = g_list_nth_data(pw->source_selection, page_nr);
-
 	if (options->printer.show_image_text)
 		{
-		if (pw->text_fields & TEXT_INFO_FILENAME)
-			{
-			image_text = g_string_append(image_text, g_strdup(fd->name));
-			image_text = g_string_append(image_text, "\n");
-			}
-		if (pw->text_fields & TEXT_INFO_FILEDATE)
-			{
-			image_text = g_string_append(image_text, g_strdup(text_from_time(fd->date)));
-			image_text = g_string_append(image_text, "\n");
-			}
-		if (pw->text_fields & TEXT_INFO_FILESIZE)
-			{
-			image_text = g_string_append(image_text, g_strdup(text_from_size(fd->size)));
-			image_text = g_string_append(image_text, "\n");
-			}
-		if (pw->text_fields & TEXT_INFO_DIMENSIONS)
-			{
-			g_string_append_printf(image_text, "%d x %d", (gint)pixbuf_image_width,
-												(gint)pixbuf_image_height);
-			image_text = g_string_append(image_text, "\n");
-			}
-		if (pw->text_fields & TEXT_INFO_FILEPATH)
-			{
-			image_text = g_string_append(image_text, g_strdup(fd->path));
-			image_text = g_string_append(image_text, "\n");
-			}
-		if (image_text->len > 0)
-			{
-			image_text = g_string_truncate(image_text, image_text->len - 1);
-			}
+		image_text = g_string_append(image_text, form_image_text(options->printer.template_string, fd, pw, page_nr, total));
 		}
 
 	if (options->printer.show_page_text)
@@ -749,6 +774,7 @@
 		}
 
 	g_object_unref(pixbuf_scaled);
+	if (rotated) g_object_unref(rotated);
 
 	return;
 }
@@ -779,8 +805,6 @@
 	gchar *tmp;
 	GtkTextIter start, end;
 
-	options->printer.text_fields = pw->text_fields;
-
 	gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(pw->page_text), &start, &end);
 	tmp = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(pw->page_text), &start, &end, FALSE);
 	g_free(options->printer.page_text);
@@ -857,13 +881,14 @@
 	pw = g_new0(PrintWindow, 1);
 
 	pw->source_selection = file_data_process_groups_in_selection(selection, FALSE, NULL);
-	pw->text_fields = options->printer.text_fields;
 
 	if (print_layout_page_count(pw) == 0)
 		{
 		return;
 		}
 
+	pw->parent = parent;
+
 	vbox = gtk_vbox_new(FALSE, 0);
 	gtk_container_set_border_width(GTK_CONTAINER(vbox), PREF_PAD_BORDER);
 	gtk_widget_show(vbox);
--- a/src/rcfile.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/rcfile.c	Wed Dec 12 21:56:30 2018 +0200
@@ -355,7 +355,9 @@
 	/* File operations Options */
 	WRITE_NL(); WRITE_BOOL(*options, file_ops.enable_in_place_rename);
 	WRITE_NL(); WRITE_BOOL(*options, file_ops.confirm_delete);
+	WRITE_NL(); WRITE_BOOL(*options, file_ops.confirm_move_to_trash);
 	WRITE_NL(); WRITE_BOOL(*options, file_ops.enable_delete_key);
+	WRITE_NL(); WRITE_BOOL(*options, file_ops.use_system_trash);
 	WRITE_NL(); WRITE_BOOL(*options, file_ops.safe_delete_enable);
 	WRITE_NL(); WRITE_CHAR(*options, file_ops.safe_delete_path);
 	WRITE_NL(); WRITE_INT(*options, file_ops.safe_delete_folder_maxsize);
@@ -495,15 +497,18 @@
 	WRITE_NL(); WRITE_CHAR(*options, cp_mv_rn.auto_end);
 	WRITE_NL(); WRITE_INT(*options, cp_mv_rn.formatted_start);
 
-	/* printer */
+	WRITE_SEPARATOR();
+
+	/* Print Text */
+	WRITE_NL(); WRITE_CHAR(*options, printer.template_string);
 	WRITE_NL(); WRITE_CHAR(*options, printer.image_font);
 	WRITE_NL(); WRITE_CHAR(*options, printer.page_font);
 	WRITE_NL(); WRITE_CHAR(*options, printer.page_text);
-	WRITE_NL(); WRITE_INT(*options, printer.text_fields);
 	WRITE_NL(); WRITE_INT(*options, printer.image_text_position);
 	WRITE_NL(); WRITE_INT(*options, printer.page_text_position);
 	WRITE_NL(); WRITE_BOOL(*options, printer.show_image_text);
 	WRITE_NL(); WRITE_BOOL(*options, printer.show_page_text);
+	WRITE_SEPARATOR();
 }
 
 static void write_color_profile(GString *outstr, gint indent)
@@ -551,6 +556,38 @@
 	WRITE_NL(); WRITE_STRING("</marks_tooltips>");
 }
 
+static void write_disabled_plugins(GString *outstr, gint indent)
+{
+	GtkTreeIter iter;
+	gboolean valid;
+	gboolean disabled;
+	gchar *desktop_path;
+
+	WRITE_NL(); WRITE_STRING("<disabled_plugins>");
+	indent++;
+
+	if (desktop_file_list)
+		{
+		valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(desktop_file_list), &iter);
+		while (valid)
+			{
+			gtk_tree_model_get(GTK_TREE_MODEL(desktop_file_list), &iter, DESKTOP_FILE_COLUMN_DISABLED, &disabled, -1);
+			gtk_tree_model_get(GTK_TREE_MODEL(desktop_file_list), &iter, DESKTOP_FILE_COLUMN_PATH, &desktop_path, -1);
+
+			if (disabled)
+				{
+				WRITE_NL();
+				write_char_option(outstr, indent, "<plugin path", desktop_path);
+				WRITE_STRING("/>");
+				}
+			g_free(desktop_path);
+			valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(desktop_file_list), &iter);
+			}
+		}
+
+	indent--;
+	WRITE_NL(); WRITE_STRING("</disabled_plugins>");
+}
 
 /*
  *-----------------------------------------------------------------------------
@@ -608,6 +645,9 @@
 	write_marks_tooltips(outstr, indent);
 
 	WRITE_SEPARATOR();
+	write_disabled_plugins(outstr, indent);
+
+	WRITE_SEPARATOR();
 	keyword_tree_write_config(outstr, indent);
 	indent--;
 	WRITE_NL(); WRITE_STRING("</global>\n");
@@ -751,7 +791,9 @@
 		/* File operations *options */
 		if (READ_BOOL(*options, file_ops.enable_in_place_rename)) continue;
 		if (READ_BOOL(*options, file_ops.confirm_delete)) continue;
+		if (READ_BOOL(*options, file_ops.confirm_move_to_trash)) continue;
 		if (READ_BOOL(*options, file_ops.enable_delete_key)) continue;
+		if (READ_BOOL(*options, file_ops.use_system_trash)) continue;
 		if (READ_BOOL(*options, file_ops.safe_delete_enable)) continue;
 		if (READ_CHAR(*options, file_ops.safe_delete_path)) continue;
 		if (READ_INT(*options, file_ops.safe_delete_folder_maxsize)) continue;
@@ -839,11 +881,11 @@
 		if (READ_CHAR(*options, cp_mv_rn.auto_end)) continue;
 		if (READ_INT(*options, cp_mv_rn.formatted_start)) continue;
 
-		/* printer */
+		/* Printer text */
+		if (READ_CHAR(*options, printer.template_string)) continue;
 		if (READ_CHAR(*options, printer.image_font)) continue;
 		if (READ_CHAR(*options, printer.page_font)) continue;
 		if (READ_CHAR(*options, printer.page_text)) continue;
-		if (READ_INT(*options, printer.text_fields)) continue;
 		if (READ_INT(*options, printer.image_text_position)) continue;
 		if (READ_INT(*options, printer.page_text_position)) continue;
 		if (READ_BOOL(*options, printer.show_image_text)) continue;
@@ -914,6 +956,30 @@
 
 }
 
+static void options_load_disabled_plugins(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
+{
+	gint i = GPOINTER_TO_INT(data);
+	struct {
+		gchar *path;
+	} tmp;
+
+	while (*attribute_names)
+		{
+		const gchar *option = *attribute_names++;
+		const gchar *value = *attribute_values++;
+		tmp.path = NULL;
+		if (READ_CHAR_FULL("path", tmp.path))
+			{
+			options->disabled_plugins = g_list_append(options->disabled_plugins, g_strdup(tmp.path));
+			continue;
+			}
+
+		log_printf("unknown attribute %s = %s\n", option, value);
+		}
+	i++;
+	options_parse_func_set_data(parser_data, GINT_TO_POINTER(i));
+}
+
 /*
  *-----------------------------------------------------------------------------
  * xml file structure (private)
@@ -973,6 +1039,20 @@
 		}
 }
 
+static void options_parse_disabled_plugins(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
+{
+	if (g_ascii_strcasecmp(element_name, "plugin") == 0)
+		{
+		options_load_disabled_plugins(parser_data, context, element_name, attribute_names, attribute_values, data, error);
+		options_parse_func_push(parser_data, options_parse_leaf, NULL, NULL);
+		}
+	else
+		{
+		log_printf("unexpected in <profile>: <%s>\n", element_name);
+		options_parse_func_push(parser_data, options_parse_leaf, NULL, NULL);
+		}
+}
+
 static void options_parse_filter(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
 {
 	if (g_ascii_strcasecmp(element_name, "file_type") == 0)
@@ -1053,6 +1133,11 @@
 		if (!keyword_tree) keyword_tree_new();
 		options_parse_func_push(parser_data, options_parse_keyword_tree, NULL, NULL);
 		}
+	else if (g_ascii_strcasecmp(element_name, "disabled_plugins") == 0)
+		{
+		options_load_disabled_plugins(parser_data, context, element_name, attribute_names, attribute_values, data, error);
+		options_parse_func_push(parser_data, options_parse_disabled_plugins, NULL, NULL);
+		}
 	else
 		{
 		log_printf("unexpected in <global>: <%s>\n", element_name);
--- a/src/remote.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/remote.c	Wed Dec 12 21:56:30 2018 +0200
@@ -718,6 +718,35 @@
 		}
 }
 
+static void gr_render_intent(const gchar *text, GIOChannel *channel, gpointer data)
+{
+	gchar *render_intent;
+
+	switch (options->color_profile.render_intent)
+		{
+		case 0:
+			render_intent = g_strdup("Perceptual");
+			break;
+		case 1:
+			render_intent = g_strdup("Relative Colorimetric");
+			break;
+		case 2:
+			render_intent = g_strdup("Saturation");
+			break;
+		case 3:
+			render_intent = g_strdup("Absolute Colorimetric");
+			break;
+		default:
+			render_intent = g_strdup("none");
+			break;
+		}
+
+	g_io_channel_write_chars(channel, render_intent, -1, NULL, NULL);
+	g_io_channel_write_chars(channel, "\n", -1, NULL, NULL);
+
+	g_free(render_intent);
+}
+
 static void gr_file_tell(const gchar *text, GIOChannel *channel, gpointer data)
 {
 	if (!layout_valid(&lw_id)) return;
@@ -910,6 +939,7 @@
 	{ NULL, "--tell",               gr_file_tell,           FALSE, FALSE, NULL, N_("print filename of current image") },
 	{ NULL, "--pixel-info",         gr_pixel_info,          FALSE, FALSE, NULL, N_("print pixel info of mouse pointer on current image") },
 	{ NULL, "--get-rectangle",      gr_rectangle,           FALSE, FALSE, NULL, N_("get rectangle co-ordinates") },
+	{ NULL, "--get-render-intent",  gr_render_intent,       FALSE, FALSE, NULL, N_("get render intent") },
 	{ NULL, "view:",                gr_file_view,           TRUE,  FALSE, N_("<FILE>"), N_("open FILE in new window") },
 	{ NULL, "--list-clear",         gr_list_clear,          FALSE, FALSE, NULL, N_("clear command line collection list") },
 	{ NULL, "--list-add:",          gr_list_add,            TRUE,  FALSE, N_("<FILE>"), N_("add FILE to command line collection list") },
--- a/src/search.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/search.c	Wed Dec 12 21:56:30 2018 +0200
@@ -37,6 +37,7 @@
 #include "menu.h"
 #include "metadata.h"
 #include "misc.h"
+#include "pixbuf_util.h"
 #include "print.h"
 #include "thumb.h"
 #include "ui_bookmark.h"
@@ -1015,6 +1016,15 @@
 {
 	SearchData *sd = data;
 
+	options->file_ops.safe_delete_enable = FALSE;
+	file_util_delete(NULL, search_result_selection_list(sd), sd->window);
+}
+
+static void sr_menu_move_to_trash_cb(GtkWidget *widget, gpointer data)
+{
+	SearchData *sd = data;
+
+	options->file_ops.safe_delete_enable = TRUE;
 	file_util_delete(NULL, search_result_selection_list(sd), sd->window);
 }
 
@@ -1128,13 +1138,16 @@
 				G_CALLBACK(sr_menu_copy_path_cb), sd);
 	menu_item_add_sensitive(menu, _("_Copy path unquoted"), on_row,
 				G_CALLBACK(sr_menu_copy_path_unquoted_cb), sd);
-	menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, on_row,
-				      G_CALLBACK(sr_menu_delete_cb), sd);
+
 	menu_item_add_divider(menu);
-	menu_item_add_stock_sensitive(menu, _("Rem_ove"), GTK_STOCK_REMOVE, on_row,
-				      G_CALLBACK(sr_menu_remove_cb), sd);
-	menu_item_add_stock_sensitive(menu, _("C_lear"), GTK_STOCK_CLEAR, !empty,
-				      G_CALLBACK(sr_menu_clear_cb), sd);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_move_to_trash ? _("Move to Trash...") :
+					_("Move to Trash"), PIXBUF_INLINE_ICON_TRASH, on_row,
+				G_CALLBACK(sr_menu_move_to_trash_cb), sd);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_delete ? _("_Delete...") :
+					_("_Delete"), GTK_STOCK_DELETE, on_row,
+				G_CALLBACK(sr_menu_delete_cb), sd);
 
 	return menu;
 }
@@ -1345,6 +1358,7 @@
 				file_util_rename(NULL, search_result_selection_list(sd), widget);
 				break;
 			case 'D': case 'd':
+				options->file_ops.safe_delete_enable = TRUE;
 				file_util_delete(NULL, search_result_selection_list(sd), widget);
 				break;
 			case 'A': case 'a':
--- a/src/toolbar.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/toolbar.c	Wed Dec 12 21:56:30 2018 +0200
@@ -100,6 +100,12 @@
 	{"Preferences",	N_("Preferences"), GTK_STOCK_PREFERENCES},
 	{"LayoutConfig",	N_("Configure this window"), GTK_STOCK_PREFERENCES},
 	{"Maintenance",	N_("Cache maintenance"), PIXBUF_INLINE_ICON_MAINTENANCE},
+	{"RotateCW",	N_("Rotate clockwise"), PIXBUF_INLINE_ICON_CW},
+	{"RotateCCW",	N_("Rotate counterclockwise"), PIXBUF_INLINE_ICON_CCW},
+	{"Rotate180",	N_("Rotate 180"), PIXBUF_INLINE_ICON_180},
+	{"Mirror",	N_("Mirror"), PIXBUF_INLINE_ICON_MIRROR},
+	{"Flip",	N_("Flip"), PIXBUF_INLINE_ICON_FLIP},
+	{"AlterNone",	N_("Original state"), PIXBUF_INLINE_ICON_ORIGINAL},
 	{"ZoomIn",	N_("Zoom in"), GTK_STOCK_ZOOM_IN},
 	{"ZoomOut",	N_("Zoom out"), GTK_STOCK_ZOOM_OUT},
 	{"Zoom100",	N_("Zoom 1:1"), GTK_STOCK_ZOOM_100},
--- a/src/trash.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/trash.c	Wed Dec 12 21:56:30 2018 +0200
@@ -118,11 +118,6 @@
 	return dest;
 }
 
-static void file_util_safe_del_toggle_cb(GtkWidget *button, gpointer data)
-{
-	options->file_ops.safe_delete_enable = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
-}
-
 static void file_util_safe_del_close_cb(GtkWidget *dialog, gpointer data)
 {
 	GenericDialog **gd = data;
@@ -138,55 +133,55 @@
 
 	if (!isfile(path)) return FALSE;
 
-	if (!isdir(options->file_ops.safe_delete_path))
-		{
-		DEBUG_1("creating trash: %s", options->file_ops.safe_delete_path);
-		if (!options->file_ops.safe_delete_path || !mkdir_utf8(options->file_ops.safe_delete_path, 0755))
-			{
-			result = _("Could not create folder");
-			success = FALSE;
-			}
-		}
-
-	if (success)
+	if (!options->file_ops.use_system_trash)
 		{
-		gchar *dest;
-
-		dest = file_util_safe_dest(path);
-		if (dest)
+		if (!isdir(options->file_ops.safe_delete_path))
 			{
-			DEBUG_1("safe deleting %s to %s", path, dest);
-			success = move_file(path, dest);
-			}
-		else
-			{
-			success = FALSE;
+			DEBUG_1("creating trash: %s", options->file_ops.safe_delete_path);
+			if (!options->file_ops.safe_delete_path || !mkdir_utf8(options->file_ops.safe_delete_path, 0755))
+				{
+				result = _("Could not create folder");
+				success = FALSE;
+				}
 			}
 
-		if (!success && !access_file(path, W_OK))
+		if (success)
 			{
-			result = _("Permission denied");
-			}
-		g_free(dest);
-		}
+			gchar *dest;
 
-	if (result && !gd)
-		{
-		GtkWidget *button;
-		gchar *buf;
+			dest = file_util_safe_dest(path);
+			if (dest)
+				{
+				DEBUG_1("safe deleting %s to %s", path, dest);
+				success = move_file(path, dest);
+				}
+			else
+				{
+				success = FALSE;
+				}
 
-		buf = g_strdup_printf(_("Unable to access or create the trash folder.\n\"%s\""), options->file_ops.safe_delete_path);
-		gd = file_util_warning_dialog(result, buf, GTK_STOCK_DIALOG_WARNING, NULL);
-		g_free(buf);
+			if (!success && !access_file(path, W_OK))
+				{
+				result = _("Permission denied");
+				}
+			g_free(dest);
+			}
 
-		button = gtk_check_button_new_with_label(_("Turn off safe delete"));
-		g_signal_connect(G_OBJECT(button), "toggled",
-				 G_CALLBACK(file_util_safe_del_toggle_cb), NULL);
-		gtk_box_pack_start(GTK_BOX(gd->vbox), button, FALSE, FALSE, 0);
-		gtk_widget_show(button);
+		if (result && !gd)
+			{
+			GtkWidget *button;
+			gchar *buf;
 
-		g_signal_connect(G_OBJECT(gd->dialog), "destroy",
-				 G_CALLBACK(file_util_safe_del_close_cb), &gd);
+			buf = g_strdup_printf(_("Unable to access or create the trash folder.\n\"%s\""), options->file_ops.safe_delete_path);
+			gd = file_util_warning_dialog(result, buf, GTK_STOCK_DIALOG_WARNING, NULL);
+			g_free(buf);
+			}
+		}
+	else
+		{
+		GFile *tmp = g_file_new_for_path (path);
+		g_file_trash(tmp, FALSE, NULL);
+		g_object_unref(tmp);
 		}
 
 	return success;
@@ -194,7 +189,7 @@
 
 gchar *file_util_safe_delete_status(void)
 {
-	gchar *buf;
+	gchar *buf = NULL;
 
 	if (is_valid_editor_command(CMD_DELETE))
 		{
@@ -204,18 +199,21 @@
 		{
 		if (options->file_ops.safe_delete_enable)
 			{
-			gchar *buf2;
-			if (options->file_ops.safe_delete_folder_maxsize > 0)
-				buf2 = g_strdup_printf(_(" (max. %d MB)"), options->file_ops.safe_delete_folder_maxsize);
-			else
-				buf2 = g_strdup("");
+			if (!options->file_ops.use_system_trash)
+				{
+				gchar *buf2;
+				if (options->file_ops.safe_delete_folder_maxsize > 0)
+					buf2 = g_strdup_printf(_(" (max. %d MB)"), options->file_ops.safe_delete_folder_maxsize);
+				else
+					buf2 = g_strdup("");
 
-			buf = g_strdup_printf(_("Safe delete: %s%s\nTrash: %s"), _("on"), buf2, options->file_ops.safe_delete_path);
-			g_free(buf2);
-			}
-		else
-			{
-			buf = g_strdup_printf(_("Safe delete: %s"), _("off"));
+				buf = g_strdup_printf(_("Using Geeqie Trash bin\n%s"), buf2);
+				g_free(buf2);
+				}
+			else
+				{
+				buf = g_strdup(_("Using system Trash bin"));
+				}
 			}
 		}
 
--- a/src/typedefs.h	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/typedefs.h	Wed Dec 12 21:56:30 2018 +0200
@@ -992,6 +992,7 @@
 	GdkPixbuf *open;
 	GdkPixbuf *deny;
 	GdkPixbuf *parent;
+	GdkPixbuf *link;
 };
 
 struct _SecureSaveInfo {
--- a/src/ui_fileops.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/ui_fileops.c	Wed Dec 12 21:56:30 2018 +0200
@@ -570,36 +570,27 @@
 			{
 			gchar *absolute;
 
-			char *lastslash = strrchr(sl, G_DIR_SEPARATOR);
-			int len = lastslash - sl + 1;
+			gchar *lastslash = strrchr(sl, G_DIR_SEPARATOR);
+			gint len = lastslash - sl + 1;
 
-			int path_max;
-#ifdef PATH_MAX
-			path_max = PATH_MAX;
-#else
-			path_max = pathconf(sl, _PC_PATH_MAX);
-			if (path_max <= 0)
-				path_max = 4096;
-#endif
-
-			absolute = g_malloc(path_max + 1);
-
+			absolute = g_malloc(len + st.st_size + 1);
 			strncpy(absolute, sl, len);
 			strcpy(absolute + len, link_target);
-			strcpy(link_target, absolute);
+			g_free(link_target);
+			link_target = absolute;
 
-			char *realPath;
-			realPath = realpath(link_target, absolute);
+			gchar *realPath;
+			realPath = realpath(link_target, NULL);
 
 			if (realPath != NULL) // successfully resolved into an absolute path
 				{
 				g_free(link_target);
-				link_target = absolute;
+				link_target = g_strdup(realPath);
+				g_free(realPath);
 				}
 			else                 // could not get absolute path, got some error instead
 				{
 				g_free(link_target);
-				g_free(absolute);
 				goto orig_copy;  // so try a "normal" copy
 				}
 			}
--- a/src/utilops.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/utilops.c	Wed Dec 12 21:56:30 2018 +0200
@@ -2144,6 +2144,7 @@
 {
 	UtilityData *ud;
 	GList *ungrouped = NULL;
+	gchar *message;
 
 	if (source_fd)
 		flist = g_list_append(flist, file_data_ref(source_fd));
@@ -2176,10 +2177,17 @@
 	ud->parent = parent;
 
 	ud->details_func = file_util_details_dialog;
-
+	if(options->file_ops.safe_delete_enable)
+		{
+		message = _("This will move the following files to the Trash bin");
+		}
+	else
+		{
+		message = _("This will permanently delete the following files");
+		}
 	ud->messages.title = _("Delete");
 	ud->messages.question = _("Delete files?");
-	ud->messages.desc_flist = _("This will delete the following files");
+	ud->messages.desc_flist = message;
 	ud->messages.desc_source_fd = "";
 	ud->messages.fail = _("File deletion failed");
 
--- a/src/view_dir.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/view_dir.c	Wed Dec 12 21:56:30 2018 +0200
@@ -49,6 +49,8 @@
 	pf->open   = gtk_widget_render_icon(widget, GTK_STOCK_OPEN, size, NULL);
 	pf->deny   = gtk_widget_render_icon(widget, GTK_STOCK_STOP, size, NULL);
 	pf->parent = gtk_widget_render_icon(widget, GTK_STOCK_GO_UP, size, NULL);
+	/* FIXME: this is not a suitable icon */
+	pf->link = gtk_widget_render_icon(widget, GTK_STOCK_REDO, size, NULL);
 #else
 	/* GQView legacy icons */
 	pf->close  = pixbuf_inline(PIXBUF_INLINE_FOLDER_CLOSED);
@@ -67,6 +69,7 @@
 	g_object_unref(pf->open);
 	g_object_unref(pf->deny);
 	g_object_unref(pf->parent);
+	g_object_unref(pf->link);
 
 	g_free(pf);
 }
--- a/src/view_dir.h	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/view_dir.h	Wed Dec 12 21:56:30 2018 +0200
@@ -27,6 +27,7 @@
 	DIR_COLUMN_NAME,
 	DIR_COLUMN_COLOR,
 	DIR_COLUMN_DATE,
+	DIR_COLUMN_LINK,
 	DIR_COLUMN_COUNT
 };
 
--- a/src/view_dir_list.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/view_dir_list.c	Wed Dec 12 21:56:30 2018 +0200
@@ -149,6 +149,7 @@
 	FileData *fd;
 	SortType sort_type = SORT_NAME;
 	gboolean sort_ascend = TRUE;
+	gchar *link;
 
 	old_list = VDLIST(vd)->list;
 
@@ -190,7 +191,11 @@
 
 		if (access_file(fd->path, R_OK | X_OK) && fd->name)
 			{
-			if (fd->name[0] == '.' && fd->name[1] == '\0')
+			if (islink(fd->path))
+				{
+				pixbuf = vd->pf->link;
+				}
+			else if (fd->name[0] == '.' && fd->name[1] == '\0')
 				{
 				pixbuf = vd->pf->open;
 				}
@@ -237,6 +242,15 @@
 				match = -1;
 				}
 
+			if (islink(fd->path))
+				{
+				link = realpath(fd->path, NULL);
+				}
+			else
+				{
+				link = NULL;
+				}
+
 			if (match < 0)
 				{
 				GtkTreeIter new;
@@ -254,6 +268,7 @@
 						   DIR_COLUMN_POINTER, fd,
 						   DIR_COLUMN_ICON, pixbuf,
 						   DIR_COLUMN_NAME, fd->name,
+						   DIR_COLUMN_LINK, link,
 						   DIR_COLUMN_DATE, date,
 						   -1);
 
@@ -268,6 +283,7 @@
 				gtk_list_store_set(store, &iter,
 						   DIR_COLUMN_ICON, pixbuf,
 						   DIR_COLUMN_NAME, fd->name,
+						   DIR_COLUMN_LINK, link,
 						   DIR_COLUMN_DATE, date,
 						   -1);
 
@@ -292,6 +308,7 @@
 	vd->drop_fd = NULL;
 
 	filelist_free(old_list);
+	g_free(link);
 	return ret;
 }
 
@@ -433,7 +450,7 @@
 
 	vd->type = DIRVIEW_LIST;
 
-	store = gtk_list_store_new(5, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
+	store = gtk_list_store_new(6, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING);
 	vd->view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
 	g_object_unref(store);
 
@@ -463,6 +480,8 @@
 
 	gtk_tree_view_append_column(GTK_TREE_VIEW(vd->view), column);
 
+	gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(vd->view), DIR_COLUMN_LINK);
+
 	return vd;
 }
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
--- a/src/view_dir_tree.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/view_dir_tree.c	Wed Dec 12 21:56:30 2018 +0200
@@ -133,6 +133,8 @@
 {
 	GtkTreeModel *store;
 	GtkTreePath *tpath;
+	NodeData *nd;
+	FileData *fd = NULL;
 
 	store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
 	tpath = gtk_tree_model_get_path(store, iter);
@@ -143,7 +145,18 @@
 		   that the iter is populated */
 		g_signal_handlers_block_by_func(G_OBJECT(vd->view), vdtree_row_expanded, vd);
 		gtk_tree_view_expand_row(GTK_TREE_VIEW(vd->view), tpath, FALSE);
-		vdtree_icon_set_by_iter(vd, iter, vd->pf->open);
+		gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
+		fd = (nd) ? nd->fd : NULL;
+
+		if (fd && islink(fd->path))
+			{
+			vdtree_icon_set_by_iter(vd, iter, vd->pf->link);
+			}
+		else
+			{
+			vdtree_icon_set_by_iter(vd, iter, vd->pf->open);
+			}
+
 		g_signal_handlers_unblock_by_func(G_OBJECT(vd->view), vdtree_row_expanded, vd);
 		}
 	else
@@ -379,12 +392,20 @@
 	GdkPixbuf *pixbuf;
 	NodeData *end;
 	GtkTreeIter empty;
+	gchar *link = NULL;
 
 	if (!fd) return;
 
 	if (access_file(fd->path, R_OK | X_OK))
 		{
-		pixbuf = vd->pf->close;
+		if (islink(fd->path))
+			{
+			pixbuf = vd->pf->link;
+			}
+		else
+			{
+			pixbuf = vd->pf->close;
+			}
 		}
 	else
 		{
@@ -397,11 +418,21 @@
 	nd->expanded = FALSE;
 	nd->last_update = time(NULL);
 
+	if (islink(fd->path))
+		{
+		link = realpath(fd->path, NULL);
+		}
+	else
+		{
+		link = NULL;
+		}
+
 	store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)));
 	gtk_tree_store_append(store, &child, parent);
 	gtk_tree_store_set(store, &child, DIR_COLUMN_POINTER, nd,
 					 DIR_COLUMN_ICON, pixbuf,
 					 DIR_COLUMN_NAME, nd->fd->name,
+					 DIR_COLUMN_LINK, link,
 					 DIR_COLUMN_COLOR, FALSE, -1);
 
 	/* all nodes are created with an "empty" node, so that the expander is shown
@@ -429,6 +460,8 @@
 			}
 		gtk_tree_path_free(tpath);
 		}
+
+	g_free(link);
 }
 
 gboolean vdtree_populate_path_by_iter(ViewDir *vd, GtkTreeIter *iter, gboolean force, FileData *target_fd)
@@ -441,6 +474,7 @@
 	GtkTreeIter child;
 	NodeData *nd;
 	gboolean add_hidden = FALSE;
+	gchar *link = NULL;
 
 	store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
 	gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
@@ -542,6 +576,18 @@
 					}
 
 				gtk_tree_store_set(GTK_TREE_STORE(store), &child, DIR_COLUMN_NAME, fd->name, -1);
+
+				if (islink(fd->path))
+					{
+					link = realpath(fd->path, NULL);
+					}
+				else
+					{
+					link = NULL;
+					}
+
+				gtk_tree_store_set(GTK_TREE_STORE(store), &child, DIR_COLUMN_LINK, link, -1);
+
 				cnd->version = fd->version;
 				old = g_list_remove(old, cnd);
 				file_data_unref(fd);
@@ -577,6 +623,8 @@
 	nd->expanded = TRUE;
 	nd->last_update = current_time;
 
+	g_free(link);
+
 	return TRUE;
 }
 
@@ -783,7 +831,15 @@
 			if (fd)
 				{
 				vdtree_populate_path_by_iter(vd, &iter, FALSE, vd->dir_fd);
-				vdtree_icon_set_by_iter(vd, &iter, vd->pf->open);
+
+				if (islink(fd->path))
+					{
+					vdtree_icon_set_by_iter(vd, &iter, vd->pf->link);
+					}
+				else
+					{
+					vdtree_icon_set_by_iter(vd, &iter, vd->pf->open);
+					}
 				}
 			break;
 		}
@@ -822,6 +878,7 @@
 	GtkTreeViewColumn *column;
 	GtkTreeIter iter;
 	NodeData *nd = NULL;
+	FileData *fd;
 
 	if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,
 					  &tpath, &column, NULL, NULL))
@@ -846,7 +903,16 @@
 			    !gtk_tree_view_row_expanded(GTK_TREE_VIEW(vd->view), tpath))
 				{
 				vdtree_populate_path_by_iter(vd, &iter, FALSE, vd->dir_fd);
-				vdtree_icon_set_by_iter(vd, &iter, vd->pf->open);
+
+				fd = (nd) ? nd->fd : NULL;
+				if (fd && islink(fd->path))
+					{
+					vdtree_icon_set_by_iter(vd, &iter, vd->pf->link);
+					}
+				else
+					{
+					vdtree_icon_set_by_iter(vd, &iter, vd->pf->open);
+					}
 				}
 
 			gtk_tree_path_free(tpath);
@@ -872,16 +938,51 @@
 static void vdtree_row_expanded(GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *tpath, gpointer data)
 {
 	ViewDir *vd = data;
+	GtkTreeModel *store;
+	NodeData *nd = NULL;
+	FileData *fd;
+
+	gtk_tree_view_set_tooltip_column(treeview, DIR_COLUMN_LINK);
 
 	vdtree_populate_path_by_iter(vd, iter, FALSE, NULL);
-	vdtree_icon_set_by_iter(vd, iter, vd->pf->open);
+	store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+
+	gtk_tree_model_get_iter(store, iter, tpath);
+	gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
+
+	fd = (nd) ? nd->fd : NULL;
+	if (fd && islink(fd->path))
+		{
+		vdtree_icon_set_by_iter(vd, iter, vd->pf->link);
+		}
+	else
+		{
+		vdtree_icon_set_by_iter(vd, iter, vd->pf->open);
+		}
 }
 
 static void vdtree_row_collapsed(GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *tpath, gpointer data)
 {
 	ViewDir *vd = data;
+	GtkTreeModel *store;
+	NodeData *nd = NULL;
+	FileData *fd;
 
-	vdtree_icon_set_by_iter(vd, iter, vd->pf->close);
+	vdtree_populate_path_by_iter(vd, iter, FALSE, NULL);
+	store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+
+	gtk_tree_model_get_iter(store, iter, tpath);
+	gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
+
+	fd = (nd) ? nd->fd : NULL;
+	if (fd && islink(fd->path))
+		{
+		vdtree_icon_set_by_iter(vd, iter, vd->pf->link);
+		}
+	else
+		{
+		vdtree_icon_set_by_iter(vd, iter, vd->pf->close);
+		}
 }
 
 static gint vdtree_sort_cb(GtkTreeModel *store, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
@@ -958,7 +1059,7 @@
 	vd->dnd_drop_leave_func = vdtree_dnd_drop_expand_cancel;
 	vd->dnd_drop_update_func = vdtree_dnd_drop_expand;
 
-	store = gtk_tree_store_new(4, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
+	store = gtk_tree_store_new(6, G_TYPE_POINTER, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING);
 	vd->view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
 	g_object_unref(store);
 
@@ -987,6 +1088,8 @@
 
 	gtk_tree_view_append_column(GTK_TREE_VIEW(vd->view), column);
 
+	gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(vd->view), DIR_COLUMN_LINK);
+
 	vdtree_setup_root(vd);
 
 	g_signal_connect(G_OBJECT(vd->view), "row_expanded",
--- a/src/view_file.h	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/view_file.h	Wed Dec 12 21:56:30 2018 +0200
@@ -54,7 +54,6 @@
 guint vf_count(ViewFile *vf, gint64 *bytes);
 GList *vf_get_list(ViewFile *vf);
 
-gint vf_index_is_selected(ViewFile *vf, gint row);
 guint vf_selection_count(ViewFile *vf, gint64 *bytes);
 GList *vf_selection_get_list(ViewFile *vf);
 GList *vf_selection_get_list_by_index(ViewFile *vf);
--- a/src/view_file/view_file.c	Tue Oct 02 22:50:14 2018 +0300
+++ b/src/view_file/view_file.c	Wed Dec 12 21:56:30 2018 +0200
@@ -28,6 +28,7 @@
 #include "history_list.h"
 #include "layout.h"
 #include "menu.h"
+#include "pixbuf_util.h"
 #include "thumb.h"
 #include "ui_menu.h"
 #include "ui_fileops.h"
@@ -170,16 +171,6 @@
  *-----------------------------------------------------------------------------
  */
 
-gboolean vf_index_is_selected(ViewFile *vf, gint row)
-{
-	switch (vf->type)
-	{
-	case FILEVIEW_LIST: return vflist_index_is_selected(vf, row);
-	case FILEVIEW_ICON: return vficon_index_is_selected(vf, row);
-	}
-}
-
-
 guint vf_selection_count(ViewFile *vf, gint64 *bytes)
 {
 	switch (vf->type)
@@ -353,6 +344,15 @@
 {
 	ViewFile *vf = data;
 
+	options->file_ops.safe_delete_enable = FALSE;
+	file_util_delete(NULL, vf_pop_menu_file_list(vf), vf->listview);
+}
+
+static void vf_pop_menu_move_to_trash_cb(GtkWidget *widget, gpointer data)
+{
+	ViewFile *vf = data;
+
+	options->file_ops.safe_delete_enable = TRUE;
 	file_util_delete(NULL, vf_pop_menu_file_list(vf), vf->listview);
 }
 
@@ -634,8 +634,15 @@
 				G_CALLBACK(vf_pop_menu_copy_path_cb), vf);
 	menu_item_add_sensitive(menu, _("_Copy path unquoted"), active,
 				G_CALLBACK(vf_pop_menu_copy_path_unquoted_cb), vf);
-	menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active,
-				      G_CALLBACK(vf_pop_menu_delete_cb), vf);
+	menu_item_add_divider(menu);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_move_to_trash ? _("Move to Trash...") :
+					_("Move to Trash"), PIXBUF_INLINE_ICON_TRASH, active,
+				G_CALLBACK(vf_pop_menu_move_to_trash_cb), vf);
+	menu_item_add_stock_sensitive(menu,
+				options->file_ops.confirm_delete ? _("_Delete...") :
+					_("_Delete"), GTK_STOCK_DELETE, active,
+				G_CALLBACK(vf_pop_menu_delete_cb), vf);
 	menu_item_add_divider(menu);
 
 	menu_item_add_sensitive(menu, _("Enable file _grouping"), active,
--- a/web/geeqie-install-debian.sh	Tue Oct 02 22:50:14 2018 +0300
+++ b/web/geeqie-install-debian.sh	Wed Dec 12 21:56:30 2018 +0200
@@ -1,5 +1,5 @@
 #!/bin/bash
-version="2018-08-20"
+version="2018-10-23"
 description=$'
 Geeqie is an image viewer.
 This script will download, compile, and install Geeqie on Debian-based systems.
@@ -51,8 +51,16 @@
 "imagemagick"
 "ufraw (for RAW file handling)"
 "ufraw"
+"exiv2 command line (for jpeg export)"
+"exiv2"
+"jpgicc (for jpeg export color correction)"
+"liblcms2-utils"
 "markdown (for generating README help file)"
 "markdown"
+"gphoto2 (for tethered photography and camera download plugins)"
+"gphoto2"
+"libimage-exiftool-perl (for jpeg extraction plugin)"
+"libimage-exiftool-perl"
 )
 
 # Optional for GTK3 only
--- a/web/help/GuideOptionsBehavior.html	Tue Oct 02 22:50:14 2018 +0300
+++ b/web/help/GuideOptionsBehavior.html	Wed Dec 12 21:56:30 2018 +0200
@@ -477,12 +477,18 @@
 <a name="Delete"></a><div class="header"><h2 class="section title"><span class="title"><span class="label">11.11.1. </span>Delete</span></h2></div>
 <div class="block list variablelist"><dl class="variablelist">
 <dt class="term dt-first">
-          <span class="guilabel">Confirm file delete</span>
+          <span class="guilabel">Confirm permanent file delete</span>
         </dt>
 <dd>
           <p class="para block block-first">Prompts for confirmation before deleting files.</p>
         </dd>
 <dt class="term">
+          <span class="guilabel">Confirm move file to Trash</span>
+        </dt>
+<dd>
+          <p class="para block block-first">Prompts for confirmation before moving files to the trash bin.</p>
+        </dd>
+<dt class="term">
           <span class="guilabel">
             Enable
             <span class="keycap">Delete key</span>
@@ -510,7 +516,7 @@
           </p>
         </dd>
 <dt class="term">
-          <span class="guilabel">Safe Delete</span>
+          <span class="guilabel">Use Geeqie trash location</span>
         </dt>
 <dd>
           <p class="para block block-first">Moves deleted files to a temporary folder, for easy retrieval of deleted files. Files in the temporary folder are retained until the maximum size is reached, at which point deleting additional files will result in the removal of the oldest files to reclaim the space needed for the new files.</p>
@@ -526,6 +532,12 @@
           </div></div>
         </dd>
 <dt class="term">
+          <span class="guilabel">Use system Trash bin</span>
+        </dt>
+<dd>
+          <p class="para block block-first">Moves deleted files to the system-defined trash bin.</p>
+        </dd>
+<dt class="term">
           <span class="guilabel">Folder</span>
         </dt>
 <dd>
--- a/web/help/GuidePluginsConfig.html	Tue Oct 02 22:50:14 2018 +0300
+++ b/web/help/GuidePluginsConfig.html	Wed Dec 12 21:56:30 2018 +0200
@@ -492,6 +492,12 @@
     </p>
 <div class="block list variablelist"><dl class="variablelist">
 <dt class="term dt-first">
+          <span class="guilabel">Disabled</span>
+        </dt>
+<dd>
+          <p class="para block block-first">If the checkbox is ticked, the plugin will not be displayed in Geeqie menus.</p>
+        </dd>
+<dt class="term">
           <span class="guilabel">Name</span>
         </dt>
 <dd>
--- a/web/help/GuideReferenceKeyboardShortcuts.html	Tue Oct 02 22:50:14 2018 +0300
+++ b/web/help/GuideReferenceKeyboardShortcuts.html	Wed Dec 12 21:56:30 2018 +0200
@@ -894,11 +894,20 @@
               </span>
             </td>
 <td class="td-colsep td-rowsep"></td>
-<td class="td-rowsep">Delete selected images.</td>
+<td class="td-rowsep">Move selected images to trash bin.</td>
 </tr>
 <tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
+                Shift + Delete
+              </span>
+            </td>
+<td class="td-colsep td-rowsep"></td>
+<td class="td-rowsep">Permanently delete selected images.</td>
+</tr>
+<tr>
+<td class="td-colsep td-rowsep">
+              <span class="code" dir="ltr">
                 Ctrl +
                 <span class="keycap">W</span>
               </span>
@@ -906,7 +915,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Close window, Geeqie exits when last window is closed.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -916,19 +925,19 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Quit Geeqie.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td></td>
 <td></td>
 <td></td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-rowsep">
               <span class="emphasis emphasis-bold">Edit Menu</span>
             </td>
 <td class="td-rowsep"></td>
 <td class="td-rowsep"></td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -938,7 +947,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Open Geeqie preferences window.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -948,19 +957,19 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Save metadata</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td></td>
 <td></td>
 <td></td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-rowsep">
               <span class="emphasis emphasis-bold">Select Menu</span>
             </td>
 <td class="td-rowsep"></td>
 <td class="td-rowsep"></td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="keycap">1</span>
               ...
@@ -969,7 +978,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle mark 1 ... 6</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -984,7 +993,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Select mark 1 ... 6</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -994,7 +1003,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Select all images.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl + SHIFT +
@@ -1004,7 +1013,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Unselect all images.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl + SHIFT +
@@ -1014,7 +1023,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Invert selection.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Alt +
@@ -1024,33 +1033,33 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle rectangular selection mode in icon view.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="keycap">M</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Show marks.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td></td>
 <td></td>
 <td></td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-rowsep">
               <span class="emphasis emphasis-bold">View Menu</span>
             </td>
 <td class="td-rowsep"></td>
 <td class="td-rowsep"></td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="keycap">T</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle display of thumbnails when in list view.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1060,7 +1069,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Display file list as detailed list view.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1070,7 +1079,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Display file list as icon view.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1080,21 +1089,21 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle folder display between list and tree views.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="keycap">R</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Refresh file list.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="keycap">L</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle floating of file display.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1104,7 +1113,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle hiding of file display.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1114,7 +1123,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle EXIF sidebar.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Shift +
@@ -1124,7 +1133,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle Sort Manager sidebar.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1134,35 +1143,35 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle Keywords sidebar.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="keycap">V</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle full screen.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="keycap">I</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle information overlay.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="keycap">S</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Toggle slideshow.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="keycap">P</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Pause slideshow.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1172,7 +1181,7 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Slideshow faster.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">
                 Ctrl +
@@ -1182,49 +1191,49 @@
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Slideshow slower.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="keycap">E</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Split panes horizontal.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="keycap">U</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Split panes vertical.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="keycap">Y</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Single pane.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">Alt + Right Arrow</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Next split pane.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">Alt + Left Arrow</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Previous split pane.</td>
 </tr>
-<tr class="tr-shade">
+<tr>
 <td class="td-colsep td-rowsep">
               <span class="code" dir="ltr">Alt + Up Arrow</span>
             </td>
 <td class="td-colsep td-rowsep"></td>
 <td class="td-rowsep">Up or previous split pane.</td>
 </tr>
-<tr>
+<tr class="tr-shade">
 <td class="td-colsep">
               <span class="code" dir="ltr">Alt + Down Arrow</span>
             </td>