Merge branch 'master' into ke-lua
authorKlaus Ethgen <Klaus@Ethgen.de>
Tue, 2 Oct 2012 21:19:13 +0000 (22:19 +0100)
committerKlaus Ethgen <Klaus@Ethgen.de>
Tue, 2 Oct 2012 21:23:24 +0000 (22:23 +0100)
* master: (185 commits)
  better fix for big-endian architectures
  Minor indentation fixes.
  Cleanup checker shader code.
  Fix exif orientation in clutter rendering mode.
  Silent 2 warnings using explicit type casting.
  Polish translation was updated, thanks to Grzegorz Gibas.
  Update pt_BR translation.
  Add *~, *.rej, *.orig files to git ignore list.
  Fix for support >=automake-1.11.4
  Trim trailing white spaces on empty lines.
  Trim trailing white spaces.
  Add missing vim modeline.
  Fix indentation and few trailing white spaces.
  Clear few more warnings, unused variables mostly.
  Drop unused variable.
  Remove commented out code.
  Remove commented out code.
  Remove commented out code.
  Remove commented out code.
  Remove commented out code.
  ...

219 files changed:
.cvsignore [deleted file]
.gitignore
CODING
COPYING
ChangeLog
NEWS
README
configure.in
debian/copyright
doc/.cvsignore [deleted file]
doc/Makefile.am
doc/docbook/GuideMainWindowImagePane.xml
doc/docbook/GuideOptionsBehavior.xml
doc/docbook/GuideOptionsImage.xml
doc/docbook/GuideOptionsWindow.xml
geeqie.spec.in
gen_changelog.sh
plugins/rotate/geeqie-rotate
po/.cvsignore [deleted file]
po/LINGUAS
po/ca.po
po/fr.po
po/pl.po
po/pt_BR.po
po/sk.po
po/sv.po
po/zh_CN.po [moved from po/zh_CN.GB2312.po with 100% similarity]
src/.cvsignore [deleted file]
src/Makefile.am
src/advanced_exif.c
src/advanced_exif.h
src/bar.c
src/bar.h
src/bar_comment.c
src/bar_comment.h
src/bar_exif.c
src/bar_exif.h
src/bar_gps.c
src/bar_gps.h
src/bar_histogram.c
src/bar_histogram.h
src/bar_keywords.c
src/bar_keywords.h
src/bar_sort.c
src/bar_sort.h
src/cache-loader.c
src/cache-loader.h
src/cache.c
src/cache.h
src/cache_maint.c
src/cache_maint.h
src/cellrenderericon.c
src/cellrenderericon.h
src/collect-dlg.c
src/collect-dlg.h
src/collect-io.c
src/collect-io.h
src/collect-table.c
src/collect-table.h
src/collect.c
src/collect.h
src/color-man.c
src/color-man.h
src/compat.c
src/compat.h
src/debug.c
src/debug.h
src/desktop_file.c
src/desktop_file.h
src/dnd.c
src/dnd.h
src/dupe.c
src/dupe.h
src/editors.c
src/editors.h
src/exif-common.c
src/exif-int.h
src/exif.c
src/exif.h
src/exiv2.cc
src/filecache.c
src/filecache.h
src/filedata.c
src/filedata.h
src/filefilter.c
src/filefilter.h
src/format_canon.c
src/format_canon.h
src/format_fuji.c
src/format_fuji.h
src/format_nikon.c
src/format_nikon.h
src/format_olympus.c
src/format_olympus.h
src/format_raw.c
src/format_raw.h
src/fullscreen.c
src/fullscreen.h
src/histogram.c
src/histogram.h
src/history_list.c
src/history_list.h
src/icons/.cvsignore [deleted file]
src/icons/svg/.cvsignore [deleted file]
src/image-load.c
src/image-load.h
src/image-overlay.c
src/image-overlay.h
src/image.c
src/image.h
src/image_load_gdk.c
src/image_load_gdk.h
src/image_load_jpeg.c
src/image_load_jpeg.h
src/image_load_tiff.c
src/image_load_tiff.h
src/img-view.c
src/img-view.h
src/jpeg_parser.c
src/jpeg_parser.h
src/layout.c
src/layout.h
src/layout_config.c
src/layout_config.h
src/layout_image.c
src/layout_image.h
src/layout_util.c
src/layout_util.h
src/lirc.c
src/logwindow.c
src/logwindow.h
src/main.c
src/main.h
src/menu.c
src/menu.h
src/metadata.c
src/metadata.h
src/misc.c
src/misc.h
src/options.c
src/options.h
src/pan-calendar.c
src/pan-folder.c
src/pan-grid.c
src/pan-item.c
src/pan-timeline.c
src/pan-types.h
src/pan-util.c
src/pan-view.c
src/pan-view.h
src/pixbuf-renderer.c
src/pixbuf-renderer.h
src/pixbuf_util.c
src/pixbuf_util.h
src/preferences.c
src/preferences.h
src/print.c
src/print.h
src/rcfile.c
src/rcfile.h
src/remote.c
src/remote.h
src/renderer-clutter.c [new file with mode: 0644]
src/renderer-clutter.h [new file with mode: 0644]
src/renderer-tiles.c
src/renderer-tiles.h
src/search.c
src/search.h
src/secure_save.c
src/secure_save.h
src/similar.c
src/similar.h
src/slideshow.c
src/slideshow.h
src/thumb.c
src/thumb.h
src/thumb_standard.c
src/thumb_standard.h
src/trash.c
src/trash.h
src/typedefs.h
src/ui_bookmark.c
src/ui_bookmark.h
src/ui_fileops.c
src/ui_fileops.h
src/ui_help.c
src/ui_help.h
src/ui_menu.c
src/ui_menu.h
src/ui_misc.c
src/ui_misc.h
src/ui_pathsel.c
src/ui_pathsel.h
src/ui_spinner.c
src/ui_spinner.h
src/ui_tabcomp.c
src/ui_tabcomp.h
src/ui_tree_edit.c
src/ui_tree_edit.h
src/ui_utildlg.c
src/ui_utildlg.h
src/uri_utils.c
src/uri_utils.h
src/utilops.c
src/utilops.h
src/view_dir.c
src/view_dir.h
src/view_dir_list.c
src/view_dir_list.h
src/view_dir_tree.c
src/view_dir_tree.h
src/view_file.c
src/view_file.h
src/view_file_icon.c
src/view_file_icon.h
src/view_file_list.c
src/view_file_list.h
src/window.c
src/window.h

diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644 (file)
index 7b1b792..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Makefile
-Makefile.in
-aclocal.m4
-autom4te.cache
-config.cache
-config.guess
-config.h
-config.h.in
-config.log
-config.status
-config.sub
-configure
-configure.scan
-missing
-mkinstalldirs
-COPYING
-install-sh
-stamp-h
-stamp-h.in
-INSTALL
-gqview.spec
-intl
-ABOUT-NLS
-depcomp
index 27b2b99..2564f48 100644 (file)
@@ -2,6 +2,9 @@
 *.bak
 Makefile
 Makefile.in
+*~
+*.rej
+*.orig
 
 # /
 /aclocal.m4
diff --git a/CODING b/CODING
index 09173b6..2db8111 100644 (file)
--- a/CODING
+++ b/CODING
@@ -11,7 +11,7 @@ GPL header, in every file, like this:
 
 /*
  *  This file is a part of Geeqie project (http://geeqie.sourceforge.net/).
- *  Copyright (C) 2008 - 2010 The Geeqie Team
+ *  Copyright (C) 2008 - 2012 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
diff --git a/COPYING b/COPYING
index d60c31a..d159169 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,12 +1,12 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
 
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-                           Preamble
+                            Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users.  This
 General Public License applies to most of the Free Software
 Foundation's software and to any other program whose authors commit to
 using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
+the GNU Lesser General Public License instead.)  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
 
   The precise terms and conditions for copying, distribution and
 modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
+
+                    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
     License.  (Exception: if the Program itself is interactive but
     does not normally print such an announcement, your work based on
     the Program is not required to print an announcement.)
-\f
+
 These requirements apply to the modified work as a whole.  If
 identifiable sections of that work are not derived from the Program,
 and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
 access to copy the source code from the same place counts as
 distribution of the source code, even though third parties are not
 compelled to copy the source along with the object code.
-\f
+
   4. You may not copy, modify, sublicense, or distribute the Program
 except as expressly provided under this License.  Any attempt
 otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
 
 This section is intended to make thoroughly clear what is believed to
 be a consequence of the rest of this License.
-\f
+
   8. If the distribution and/or use of the Program is restricted in
 certain countries either by patents or by copyrighted interfaces, the
 original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this.  Our decision will be guided by the two goals
 of preserving the free status of all derivatives of our free software and
 of promoting the sharing and reuse of software generally.
 
-                           NO WARRANTY
+                            NO WARRANTY
 
   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGES.
 
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Programs
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
@@ -303,17 +303,16 @@ the "copyright" line and a pointer to where the full notice is found.
     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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
+    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.
 
 Also add information on how to contact you by electronic and paper mail.
 
 If the program is interactive, make it output a short notice like this
 when it starts in an interactive mode:
 
-    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision version 69, Copyright (C) year name of author
     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
@@ -336,5 +335,5 @@ necessary.  Here is a sample; alter the names:
 This General Public License does not permit incorporating your program into
 proprietary programs.  If your program is a subroutine library, you may
 consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
+library.  If this is what you want to do, use the GNU Lesser General
 Public License instead of this License.
index 7711f1a..fbad872 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-------------------------------------------------------------------------
-r1907 | nadvornik | 2010-02-16 22:18:03 +0100 (Tue, 16 Feb 2010) | 2 lines
+commit 529b1126534cc664e8f88f028fa56190cc8debf3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 12 22:06:03 2012 +0200
 
-added 2010 to copyright text
+    updated NEWS file
 
-------------------------------------------------------------------------
-r1906 | nadvornik | 2010-02-16 22:10:12 +0100 (Tue, 16 Feb 2010) | 2 lines
+commit 9d940b7df273544d99d87699986c2eca9e9c4bfd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 10 21:20:07 2012 +0200
 
-updated version string
+    make sure fd is referenced
+    
+    file_data_disconnect_sidecar_file may free a fd with zero references
+    we have to ref it if we want to use it later
 
-------------------------------------------------------------------------
-r1905 | zas_ | 2010-02-16 21:07:05 +0100 (Tue, 16 Feb 2010) | 1 line
+commit ebc790ba2080dc8abd9cc880ead7a0acc120dd64
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Aug 9 17:32:36 2012 +0200
 
-Restore translators list, removed by revision 1899.
-------------------------------------------------------------------------
-r1904 | zas_ | 2010-02-16 20:55:35 +0100 (Tue, 16 Feb 2010) | 1 line
+    fixed file_data_check_sidecars
+    
+    use more clear algorithm:
+    if the group has changed
+       disconnect everything
+       create new group
 
-Update russian translation. Thanks to Denis Silakov.
-------------------------------------------------------------------------
-r1903 | nadvornik | 2010-02-14 23:00:23 +0100 (Sun, 14 Feb 2010) | 4 lines
+commit fa99aa221843e0e371edf910a8a39c91451691fb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Aug 9 17:30:12 2012 +0200
 
-fixed segfault in exif parser
+    fixed exif_read_fd
+    
+    - add fd to cache immediately
+    - do not check file presence, the result could be inconsistent with the cache
 
-http://sourceforge.net/tracker/index.php?func=detail&aid=2950617&group_id=222125&atid=1054682
+commit 5ab7044678cf35dff14c06d9031a2791fd563fec
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 7 10:21:29 2012 +0200
 
-------------------------------------------------------------------------
-r1902 | nadvornik | 2010-02-14 22:35:11 +0100 (Sun, 14 Feb 2010) | 6 lines
+    replaced assert with g_assert
 
-fixed reference count
+commit 5fd7dc2e202ea131aa0d9d399a17066c3be56393
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 5 20:46:05 2012 +0200
 
-there was a bug in reference count on writting unsaved metadata
-before starting an external editor
+    updated README file
 
+commit 672c7918e805f090e7848a9ce62cae61f29652fe
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 5 20:40:07 2012 +0200
 
-------------------------------------------------------------------------
-r1901 | nadvornik | 2010-02-07 14:16:35 +0100 (Sun, 07 Feb 2010) | 2 lines
+    fixed gen_changelog for git
 
-test gnome-doc-tool in configure
+commit 7b53b482ac007e2d2a8bbd27f7c2bee0ed10103c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 31 19:10:15 2012 +0200
 
-------------------------------------------------------------------------
-r1900 | nadvornik | 2010-02-07 13:44:55 +0100 (Sun, 07 Feb 2010) | 2 lines
+    spec file cleanup
 
-dropped obsolete sections, gqview changelog moved to wiki
+commit 7f398f978cfbbea7b72d714a0e8b595c6f2e833a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 31 19:09:43 2012 +0200
 
-------------------------------------------------------------------------
-r1899 | zas_ | 2010-02-02 21:21:11 +0100 (Tue, 02 Feb 2010) | 9 lines
+    use GPLv2 copy with new FSF address
 
-Brazilian Portuguese translation was updated. 
+commit 27c86debac68cd20d7e2a7381833f3cf6245b114
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 31 18:20:06 2012 +0200
+
+    renamed zh_CN.GB2312.po to zh_CN.po
 
-Thanks to Sergio Cipolla.
+commit b286338544a2c60acb1332f3cb90f6b355af00fb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 31 17:41:47 2012 +0200
 
-References:
-http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=567824
+    updated version and copyright notice
+
+commit 27bec4237fa34883854d8c83ce1484fcc0aef165
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jul 30 18:21:13 2012 +0200
+
+    prevent crash in g_utf8_collate_key
+    
+    https://sourceforge.net/tracker/?func=detail&aid=3330014&group_id=222125&atid=1054680
 
+commit 16bb1afa0623d20923b31c95f4ddf45441b2b5d3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jul 30 16:31:04 2012 +0200
 
+    use AC_SYS_LARGEFILE
+    
+    Subject: Build with large file support
+    From: Michal Čihař <nijel@debian.org>
+    Forwarded: https://sourceforge.net/tracker/?func=detail&aid=3026317&group_id=222125&atid=1054682
 
-------------------------------------------------------------------------
-r1898 | nadvornik | 2010-01-27 23:27:10 +0100 (Wed, 27 Jan 2010) | 2 lines
+commit 27cdadd96d24077e3bca57ae4f4d2aa97e413612
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 29 19:07:39 2012 +0200
 
-czech translation fixes
+    update file data structure
+    
+    update file data structure in view_dir_tree when a new directory
+    is created
 
-------------------------------------------------------------------------
-r1897 | zas_ | 2010-01-27 20:58:11 +0100 (Wed, 27 Jan 2010) | 1 line
+commit 99d04b829d846921ddff3f8d268a8e2f08fe64cd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 29 19:05:58 2012 +0200
+
+    statusbar fix
+    
+    make sure layout_status_update_image is called only on valid
+    statusbar
 
-Update catalan translation, by angel mompo.
-------------------------------------------------------------------------
-r1896 | zas_ | 2010-01-17 14:34:48 +0100 (Sun, 17 Jan 2010) | 1 line
+commit cce7db24ab6fc622b0b87cbc31d9cd3cf2abb5b1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 29 15:02:56 2012 +0200
 
-Fix osd zoom level refreshing (it was broken since some times).
-------------------------------------------------------------------------
-r1895 | zas_ | 2010-01-13 20:49:39 +0100 (Wed, 13 Jan 2010) | 5 lines
+    update statusbar after changing active image
+    
+    https://sourceforge.net/tracker/?func=detail&aid=3531954&group_id=222125&atid=1054680
 
-Update dutch translation. Work in progress.
+commit f4245483e556c3a31ce53f39c4cfa78c805f85ca
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 27 16:28:48 2012 +0200
 
-Patch by Marcel Pol.
+    changed "readonly destination directory" to a warning
 
+commit 3e0e566eca5097f546eb5989196722ac6c1f732c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 27 15:03:58 2012 +0200
 
-------------------------------------------------------------------------
-r1894 | mow | 2010-01-11 15:10:49 +0100 (Mon, 11 Jan 2010) | 1 line
+    fixed bug in cache handling
+    
+    changed files stayed in cache, but they were reported as not found,
+    this caused leaks and crashes
+    bug introduced by change of notification function,
+    commit 78cde6934008f79fe498e4adc64d187b0ed47417
 
-Wops, typo...
-------------------------------------------------------------------------
-r1893 | zas_ | 2010-01-10 15:23:29 +0100 (Sun, 10 Jan 2010) | 10 lines
+commit d17c428da1a3a25b1a24f50470f14e98e8cbd226
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 26 16:02:52 2012 +0200
 
-copy_file(): remove incomplete file on error (bug 2890715)
+    initialize default options before commandline parsing
+    
+    this fixes a crash on images specified on commandline
 
-The behavior changed, data is first written to a temporary file,
-which is unlinked in case of error, then the tempfile is renamed
-to the final name.
-Size of buffer was increased from 4k to 16k.
+commit cb758c2979a2a096c45ab0cb691cd063d81ae703
+Merge: af76525 6f70188
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Thu May 17 18:28:56 2012 +0100
 
+    Merge commit 'refs/merge-requests/1' of git://gitorious.org/geeqie/geeqie into merge-requests/1
+    
+    * git://gitorious.org/geeqie/geeqie:
+      Ignore duplicates with same path
 
+commit af76525a87cc636cdf7f5454f4e32969ef903534
+Merge: 5ef3084 dc3dea1
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon May 14 17:33:21 2012 +0100
 
+    Merge remote-tracking branch 'origin/toer'
+    
+    * origin/toer:
+      Complete Swedish translation including bugs based on 55de20b 2010-12-11 version
+      Almost complete Swedish translation
+      Started with Swedish translation
+    
+    Merged on request of Tore.
 
-------------------------------------------------------------------------
-r1892 | zas_ | 2010-01-09 12:44:27 +0100 (Sat, 09 Jan 2010) | 1 line
+commit 5ef30846a7bc94585771a6d08284b771320b33d4
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Fri Jan 6 02:23:57 2012 +0100
 
-Workaround intltoolize 0.40.6 bug related to LINGUAS, see bug 2817602.
-------------------------------------------------------------------------
-r1891 | zas_ | 2010-01-09 11:37:48 +0100 (Sat, 09 Jan 2010) | 1 line
+    Fix directory walking bug
+    
+    There was a annoying bug when walking up more than one directory level.
 
-Log a message when EOVERFLOW error is set by stat() when building files lists. See bug 2876142.
-------------------------------------------------------------------------
-r1890 | zas_ | 2010-01-05 23:28:11 +0100 (Tue, 05 Jan 2010) | 8 lines
+commit 6f701885de29cc7ce188fdd3be50cdab253d5f98
+Author: cybjit <cybjit@gmail.com>
+Date:   Mon Apr 25 12:53:35 2011 +0200
 
-Add Serbian translation.
+    Ignore duplicates with same path
 
-Note there are two *.po files, one for Cyrilic and one for Latin
-letters.
+commit ce2d11c4d9df655a4fff053373b724d985a25db0
+Author: Vincent Blut <vincent.debian@free.fr>
+Date:   Sat Dec 3 15:46:20 2011 +0100
 
-Thanks to Milos Popovic.
+    Various errors in the translation (typo, etc.)
+    
+    Patch submitted by Vincent Blut that fix some typo in French locales.
+    Closes Debian bug #620895.
 
+commit bc3ed05a47d86ee3ec78d166df17d1f446f2d0cd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Nov 12 11:36:18 2011 +0100
 
-------------------------------------------------------------------------
-r1889 | zas_ | 2010-01-05 23:26:03 +0100 (Tue, 05 Jan 2010) | 1 line
+    call size signal indirectly via idle_call
+    
+    image_loader_size_cb is called from a second thread, so it can't
+    use any gtk functions directly or via signals
+    this fixes random crashes in gtk code introduced by commit e24281e5
 
-Update README about translations.
-------------------------------------------------------------------------
-r1888 | zas_ | 2010-01-05 18:49:50 +0100 (Tue, 05 Jan 2010) | 13 lines
+commit 4cbe6b68b12b1102fcdc2dcec99e6b03c74291a1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Nov 12 11:34:55 2011 +0100
 
-Allow to switch to fullscreen mode using LIRC.
+    call log window functions indirectly via idle callbacks
 
-Imagine the following situation (which happened to me several times) :
-you want to see photos from your bed or your sofa so you launch geeqie
-and go to the right directory, then you take your remote control and sit
-comfortably far from your keyboard and mouse. And when you want to begin
-to watch photos, you realize you forgot to enable full screen! You have
-to stand up and to go until your computer and come back, whereas you
-could have done it with your remote control.
+commit 04bb6f2326f58139c22d3bb8de7e639c8efb40ba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Oct 4 22:09:55 2011 +0200
 
-Patch by Bernard Massot.
+    rename file_data_new_simple to file_data_new_group, filedata.c cleanup
 
+commit 58e4671ba18ae3b3a996f3f518151fc6fb2bbdf0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Oct 2 11:55:34 2011 +0200
 
-------------------------------------------------------------------------
-r1887 | zas_ | 2010-01-02 13:38:55 +0100 (Sat, 02 Jan 2010) | 1 line
+    recognize all registered extensions, even if they contain dots
 
-Get rid of Geeqie version and beta release message. It clutters command line usage, and is not that useful. Suggested by Michal ?\196?\140iha?\197?\153.
-------------------------------------------------------------------------
-r1881 | zas_ | 2009-12-19 13:53:20 +0100 (Sat, 19 Dec 2009) | 9 lines
+commit 52d7c7d5a99e904839c0497f32ca6d2586b9a14f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Oct 2 11:16:03 2011 +0200
 
-Fix bug 2917164.
-g_utf8_collate_key_for_filename() don't give sort order one
-may expect. Using g_utf8_collate_key() make things closer
-to many other programs output (ie. ls and gqview).
+    sidecar_file_priority function is already called with extension as an argument
 
-Thanks to Michael pointing this out.
+commit 78cde6934008f79fe498e4adc64d187b0ed47417
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Oct 2 11:12:44 2011 +0200
 
+    call notify functions in in an idle call
 
+commit 5276a3faf1ab551a34acb45e72ae15213a7ccbfc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 1 23:21:08 2011 +0200
 
-------------------------------------------------------------------------
-r1880 | zas_ | 2009-12-19 13:49:19 +0100 (Sat, 19 Dec 2009) | 1 line
+    move the grouping code from file_data_new to filelist_read
 
-Store sort parameters in appropriate variables.
-------------------------------------------------------------------------
-r1879 | zas_ | 2009-12-10 18:48:43 +0100 (Thu, 10 Dec 2009) | 4 lines
+commit aff67e653215952b4766cf33bfdfa24cd93949b3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 1 20:58:34 2011 +0200
 
-Move "Add Keyword" menu item at top of Keywords bar contextual menu.
+    separate function fortesting changed files without sidecars
 
-Suggested by Lars T?\195?\164uber.
+commit 21a8bc375e28b4950bac3a1a3e1aef1f734d9c63
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 1 17:11:10 2011 +0200
 
-------------------------------------------------------------------------
-r1878 | zas_ | 2009-12-10 18:44:31 +0100 (Thu, 10 Dec 2009) | 7 lines
+    consistent use of fd->extension
 
-Fix contextual menus in lateral bars.
+commit e6308d6f082ede8e9d6e57b14806356c8923c65d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 1 16:31:58 2011 +0200
 
-Use button_release_event instead of button_press_event,
-this makes contextual menus persistent until an option
-is selected or the menu is closed.
+    simplified grouping of sidecars
 
+commit 18d80ca385e38b3bf9bc4ef36264bb4d430aa1f6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Sep 30 23:57:31 2011 +0200
 
-------------------------------------------------------------------------
-r1877 | zas_ | 2009-12-04 22:01:11 +0100 (Fri, 04 Dec 2009) | 1 line
+    fixed filelist_sort_compare_filedata to not return 0 no different files
 
-Some systems do not have SA_SIGINFO (siginfo_t), like GNU/Hurd, so just test if defined or not. Patch by Michal ?\196?\140iha?\197?\153 (Bug ID: 2894271).
-------------------------------------------------------------------------
-r1876 | zas_ | 2009-12-04 21:40:02 +0100 (Fri, 04 Dec 2009) | 1 line
+commit efc8096527d6f743d17c44b9982616a169973f39
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Sep 30 23:02:26 2011 +0200
 
-Editors: disable Delete button if a .desktop file is not writeable and disable Edit button when no entry is selected.
-------------------------------------------------------------------------
-r1875 | zas_ | 2009-12-04 20:45:09 +0100 (Fri, 04 Dec 2009) | 1 line
+    always check for sidecars by readdir
 
-Add Opera to the list of browsers. Patch by Christian Heckendorf (feature request ID: 2908469).
-------------------------------------------------------------------------
-r1874 | nadvornik | 2009-11-28 00:27:35 +0100 (Sat, 28 Nov 2009) | 2 lines
+commit 7bb3871e21c03b7103792524458eddf0616880db
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Sep 30 10:54:32 2011 +0200
 
-build documentation with gnome-doc-tool in makefile
+    do not use FileData entries with empty path
 
-------------------------------------------------------------------------
-r1873 | nadvornik | 2009-11-22 10:12:22 +0100 (Sun, 22 Nov 2009) | 2 lines
+commit 559683ddda8610a986ea1355dc191e8e20f77a23
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 29 17:17:20 2011 +0200
 
-scripts for converting wiki documentation to docbook
+    updated copyright notice
 
-------------------------------------------------------------------------
-r1872 | nadvornik | 2009-11-21 21:08:51 +0100 (Sat, 21 Nov 2009) | 5 lines
+commit 4f028fb255a5edaeb2aec25d2e87ef4b8a2aa44d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 29 17:14:36 2011 +0200
 
-check gtk_clutter_init return value
+    added custom tiff loader
 
-https://sourceforge.net/tracker/index.php?func=detail&aid=2899866&group_id=222125&atid=1054680
+commit 25d02a83df709d2852f4cb90867aa261b80280ca
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 29 12:36:08 2011 +0200
 
+    added long-term cache for keywords
 
-------------------------------------------------------------------------
-r1871 | nadvornik | 2009-11-18 13:34:30 +0100 (Wed, 18 Nov 2009) | 2 lines
+commit bdea8db7b066162269cc1d9d09d745983e5fadb0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Sep 27 22:06:09 2011 +0200
 
-changed https to http in wiki links
+    set stereo.fixed default values to hdmi stereo standard
 
-------------------------------------------------------------------------
-r1870 | zas_ | 2009-11-13 19:37:31 +0100 (Fri, 13 Nov 2009) | 1 line
+commit 216a72fa46b4f35d8b4f36dfb7b7a227300faa4c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Sep 27 22:03:47 2011 +0200
 
-Spanish translation was updated. Thanks to Redy Rodriguez.
-------------------------------------------------------------------------
-r1869 | zas_ | 2009-11-07 22:31:23 +0100 (Sat, 07 Nov 2009) | 1 line
+    fixed stereo.fixed preferences
 
-Updated spanish translation. Thanks to Redy Rodriguez.
-------------------------------------------------------------------------
-r1868 | mow | 2009-10-13 23:49:42 +0200 (Tue, 13 Oct 2009) | 1 line
+commit 1c4103ded9b34d240b76779d5ea8a5c16bbf1924
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Sep 27 21:12:02 2011 +0200
 
-German translation update
-------------------------------------------------------------------------
-r1867 | mow | 2009-10-13 23:49:21 +0200 (Tue, 13 Oct 2009) | 8 lines
+    fixed stereo_temp_disable functionality
 
-Add compatibility for GTK 2.18
+commit f5470bbc26b15ce585c8f1cedfad3adfa611ef85
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Sep 27 10:29:36 2011 +0200
 
-With 2.18 some functions are deprecated. With geeqie that are two at the
-moment.
-- gtk_tree_view_column_get_cell_renderers - which can be replaced by
-  gtk_cell_layout_get_cells
-- gdk_event_get_graphics_expose - I just commented it as there seems to
-  be no replacement in GTK 2.18
-------------------------------------------------------------------------
-r1866 | nadvornik | 2009-10-10 17:01:41 +0200 (Sat, 10 Oct 2009) | 2 lines
+    added panorama .pto file to the list of known files
 
-added a workaround for https://bugzilla.gnome.org/show_bug.cgi?id=590692
+commit 0736b5d6b3b31bb24531284b44b90b7b225d9e7c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 29 15:27:09 2011 +0200
 
-------------------------------------------------------------------------
-r1865 | nadvornik | 2009-10-10 12:15:23 +0200 (Sat, 10 Oct 2009) | 4 lines
+    fixed crash on incomplete jpeg file
 
-use text renderer for editor->hidden
+commit 10f4b603e6b8ad553a7b9c9afb4aa92e43dccae6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 14 22:16:49 2011 +0200
 
-The toggle was too confusing because it was not dirrectly editable.
+    added Cycle through stereo modes menu entry
 
-------------------------------------------------------------------------
-r1864 | nadvornik | 2009-10-01 20:40:34 +0200 (Thu, 01 Oct 2009) | 7 lines
+commit e9780e09d7e57bd5f5c3594bdd773bb2541ec232
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 14 21:53:45 2011 +0200
 
-ignored multiple directories specified on commandline
+    do not mix autodetected and user-defined stereo mode
 
-IMHO this was inconsistent - specifying one directory had completely
-different effect than specifying two or more directories. Moreover,
-it segfaulted.
-Now only one directory is allowed.
+commit c447b43b8f8291da9d941718afaa0b2c9d950efc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 10 21:11:50 2011 +0200
 
-------------------------------------------------------------------------
-r1863 | nadvornik | 2009-10-01 19:37:51 +0200 (Thu, 01 Oct 2009) | 2 lines
+    more compilation fixes
 
-fixed tree_store reordering
+commit 7a8a4c7e4448572ba18d4ded8cf7e86dbd5bf8e7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 10 20:30:17 2011 +0200
 
-------------------------------------------------------------------------
-r1862 | nadvornik | 2009-09-28 14:04:35 +0200 (Mon, 28 Sep 2009) | 2 lines
+    compilation fixes
 
-do not cache incomplete thumbnails
+commit 0ec34da9df56efdd6963a0f3569fe24299a8ba0d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 9 19:27:43 2011 +0200
 
-------------------------------------------------------------------------
-r1861 | nadvornik | 2009-09-28 11:57:06 +0200 (Mon, 28 Sep 2009) | 2 lines
+    fixed libjpeg in autoconf
 
-consider sidecars in layout_image popup menu
+commit 18f8e33ac8681cd297a980a936bd2ce2467614da
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 9 16:07:31 2011 +0200
 
-------------------------------------------------------------------------
-r1860 | nadvornik | 2009-09-26 13:37:09 +0200 (Sat, 26 Sep 2009) | 6 lines
+    improved mpo parser, consider individual image type code
 
-bar_gps cleanup
+commit e5235578ba189827610cec22c9ca8bc17c433113
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 8 21:16:41 2011 +0200
 
-- removed the scrollbar
-- do not set decel-rate,
-  https://bugzilla.gnome.org/show_bug.cgi?id=596419
+    fixed to compile with other libjpeg versions
 
-------------------------------------------------------------------------
-r1859 | nadvornik | 2009-09-26 10:47:28 +0200 (Sat, 26 Sep 2009) | 8 lines
+commit dd008ca74ba4a924b202021a7d0dbd11cf0dc542
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 19:22:29 2011 +0200
 
-print text using pango renderer
+    allocate tile pixbuf allways
 
-- the text is sent to postscript as a bitmap
-- this fixes printing of non-ascii characters
+commit 43b479c1042930d616cb4c8fb9e80ee5fd0900ec
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 18:20:19 2011 +0200
 
-http://sourceforge.net/tracker/index.php?func=detail&aid=2836135&group_id=222125&atid=1054680
+    updated copyright notices
 
+commit a7efe96305e0e1847c2e20b119c86cac03fd9e56
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 18:14:17 2011 +0200
 
-------------------------------------------------------------------------
-r1858 | nadvornik | 2009-09-25 22:39:15 +0200 (Fri, 25 Sep 2009) | 8 lines
+    free mpo data
 
-require libchamplain 0.4
+commit 85dbc07da126d6229f37821e5dd49c3b8546e80e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 13:53:23 2011 +0200
 
-- check for libchamplain 0.4
-- dropped libchamplain 0.3.x support
+    fixed jpeg_segment_find to support more app2 segments with different signatures
 
-http://sourceforge.net/tracker/index.php?func=detail&aid=2861847&group_id=222125&atid=1054680
+commit c2378af08d9bb0b9ee1f958c9a4b50bc65abbed8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 12:52:09 2011 +0200
 
+    store stereo flag in loader data
 
-------------------------------------------------------------------------
-r1857 | nadvornik | 2009-09-24 23:52:44 +0200 (Thu, 24 Sep 2009) | 2 lines
+commit 2f3197170c42959552141b2600c9d828542792a8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 12:02:30 2011 +0200
 
-fixed and simplified sidecar grouping code
+    fixed freed data access
 
-------------------------------------------------------------------------
-r1856 | nadvornik | 2009-09-24 20:02:29 +0200 (Thu, 24 Sep 2009) | 2 lines
+commit 091dae0b7d6e602da76f624ddac3e335e262e1fa
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 11:58:29 2011 +0200
 
-fixed emitting of error signal from image loader
+    load mpo files as SBS
 
-------------------------------------------------------------------------
-r1855 | nadvornik | 2009-09-21 20:48:32 +0200 (Mon, 21 Sep 2009) | 5 lines
+commit c546114c635f93ff254b4d479a1b6370377d054b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 27 10:57:08 2011 +0200
 
-fixed pan-view popup menu
+    added mpo parser
 
-- removed wrong callback
-- consider sidecar files in the editor popup
+commit 3b1800b11fd5f98ce268b358f17585d43641c3ea
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 26 22:13:39 2011 +0100
 
-------------------------------------------------------------------------
-r1854 | nadvornik | 2009-09-14 23:25:10 +0200 (Mon, 14 Sep 2009) | 2 lines
+    split jpeg parser functions to separate file
 
-fixed selection handling in sidebar
+commit ec75c814d6f79ec16426ee40aacbf7d0aded8e41
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 26 22:03:30 2011 +0100
 
-------------------------------------------------------------------------
-r1853 | nadvornik | 2009-09-13 23:08:40 +0200 (Sun, 13 Sep 2009) | 5 lines
+    added custom jpeg loader
 
-fixed editor list in popup menu
+commit b5b810393f0fae5071a0263db376dadaf595d4c5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 26 17:57:25 2011 +0100
 
-- show an editor if any of selected files matches
-- added debug messages
+    infrastructure for image loader backend
 
-------------------------------------------------------------------------
-r1852 | nadvornik | 2009-09-13 23:03:17 +0200 (Sun, 13 Sep 2009) | 2 lines
+commit 09037ad50bd7a839794df37034bcd3dd378cab13
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 25 23:25:15 2011 +0100
 
-fixed incorrect translation
+    renderer interface cleanup
 
-------------------------------------------------------------------------
-r1851 | nadvornik | 2009-09-13 22:00:08 +0200 (Sun, 13 Sep 2009) | 2 lines
+commit c9965882aeed23e72cf019f6d3859a69d1d4aebd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 25 23:14:01 2011 +0100
 
-fixed filelist refresh
+    fixed redrawing on expose event
 
-------------------------------------------------------------------------
-r1850 | nadvornik | 2009-09-13 14:33:11 +0200 (Sun, 13 Sep 2009) | 2 lines
+commit a5a53debed949e9511e6e6fcd454aa324334a8cf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 25 22:09:59 2011 +0100
 
-preserve histmap on NOTIFY_CHANGE
+    fixed area_changed handling
 
-------------------------------------------------------------------------
-r1849 | nadvornik | 2009-09-13 11:55:21 +0200 (Sun, 13 Sep 2009) | 2 lines
+commit 8a3733bbabbca537e1f741984fa8b5e94cca08c6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 19:16:07 2011 +0100
 
-added possibility to use geeqie-rotate as a standalone script
+    added more anaglyph modes
 
-------------------------------------------------------------------------
-r1848 | nadvornik | 2009-09-12 18:37:05 +0200 (Sat, 12 Sep 2009) | 2 lines
+commit 19f041e7e105a568a57b22cc36e30590ccc75de7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 12:49:00 2011 +0100
 
-strip the "lang=" prefix from exiv2 in all metadata formats
+    added half-size (3dtv) stereo mode
 
-------------------------------------------------------------------------
-r1847 | nadvornik | 2009-09-12 18:03:09 +0200 (Sat, 12 Sep 2009) | 2 lines
+commit 797e4dbd59e944c3d3b78d25b44dfe7ae8bb287e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 11:31:08 2011 +0100
 
-simplified template
+    fixed sbs mode
 
-------------------------------------------------------------------------
-r1846 | nadvornik | 2009-09-12 17:51:37 +0200 (Sat, 12 Sep 2009) | 5 lines
+commit e82e902ed059b5ed4e12a1c48e816cdf3c514940
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 11:11:08 2011 +0100
 
-editor fixes
+    save and load stereo options
 
-- fixed editor loading order
-- fixed EditorWindow->modified flag handling
+commit f2ee23371ea8a95eb54cd39bf191e658f99cae7e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 10:52:41 2011 +0100
 
-------------------------------------------------------------------------
-r1845 | nadvornik | 2009-09-12 17:31:24 +0200 (Sat, 12 Sep 2009) | 2 lines
+    improved preferences dialog
 
-fixed reloading of editors
+commit bd4b6cfb641e52f646931b69ddccbcacb0f85a5f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 10:15:07 2011 +0100
 
-------------------------------------------------------------------------
-r1844 | nadvornik | 2009-09-09 20:16:09 +0200 (Wed, 09 Sep 2009) | 2 lines
+    added fixed stereo mode
 
-advertisment added
+commit 826ea8c822093a131c5c44c9c02252aff5d60d2e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 00:23:54 2011 +0100
 
-------------------------------------------------------------------------
-r1843 | nadvornik | 2009-09-07 22:44:29 +0200 (Mon, 07 Sep 2009) | 5 lines
+    removed 'swap' entry from menu
 
-start_editor_from_filelist_full fixes
+commit 28fd30edc8bf0a4d0a62c2732d37f512affaf87b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 20 00:18:13 2011 +0100
 
-fixed return value from start_editor_from_filelist_full()
-call editor_command_parse to detect possible problems early enough
+    temporarily disable stereo mode, added more stereo prefs
 
-------------------------------------------------------------------------
-r1842 | nadvornik | 2009-09-07 22:04:22 +0200 (Mon, 07 Sep 2009) | 2 lines
+commit 623bc05945e68c9242a69290de12501435a1bc18
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 19 21:42:13 2011 +0100
 
-fixed list of possible editors in popup menu
+    type of source stereo image made adjustable from menu
 
-------------------------------------------------------------------------
-r1841 | nadvornik | 2009-09-07 21:48:05 +0200 (Mon, 07 Sep 2009) | 5 lines
+commit bab7032f6f11847e68ce1ac42d68a18d50aed220
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 19 19:53:30 2011 +0100
 
-fixes sidecar file grouping
+    stereo mode preferences
 
-files with a number in extension were listed twice, it 
-caused problems later
+commit f5f37819bf9ede89c68114b079feb24d19e49343
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 5 22:22:12 2011 +0100
 
-------------------------------------------------------------------------
-r1840 | zas_ | 2009-09-07 10:24:09 +0200 (Mon, 07 Sep 2009) | 1 line
+    change stereo mode from menu
 
-Comment out unused functions, silenting related compilation warnings.
-------------------------------------------------------------------------
-r1839 | zas_ | 2009-09-07 10:18:18 +0200 (Mon, 07 Sep 2009) | 1 line
+commit 68dc88956d7b42a3ced0e0256d075307e866494f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 5 18:20:16 2011 +0100
 
-Remove an unused variable and minor code cleanup.
-------------------------------------------------------------------------
-r1838 | nadvornik | 2009-09-06 16:29:19 +0200 (Sun, 06 Sep 2009) | 2 lines
+    swap stereo images
 
-improved editor loading
+commit 8ea74ae53b6c32d3d5492340fe16fdeeedd12f26
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Feb 4 23:49:13 2011 +0100
 
-------------------------------------------------------------------------
-r1837 | nadvornik | 2009-09-06 16:21:19 +0200 (Sun, 06 Sep 2009) | 2 lines
+    added mirrored stereo mode
 
-fixed unnecessary image reloads in color menu
+commit 086196582749a9f9fd254399665c56a892348ce3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 29 17:43:05 2011 +0100
 
-------------------------------------------------------------------------
-r1836 | nadvornik | 2009-09-06 16:01:03 +0200 (Sun, 06 Sep 2009) | 9 lines
+    fixed overlay position - part2
 
-load desktop files in idle time
+commit a081296160a39396e395eab36c091cddfb9f216e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 29 17:35:29 2011 +0100
 
-- scanning all desktop files takes a lot of time because of hdd seek
-- this change moves the scanning to idle time
-- the editors appears in the menus some time after startup
+    fixed overlay position
 
-https://sourceforge.net/tracker/index.php?func=detail&aid=2852522&group_id=222125&atid=1054680
+commit cb324a14505d277f8c2def3512e71f64d151531b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 29 17:15:39 2011 +0100
 
+    do not draw tiles outside the viewport
 
-------------------------------------------------------------------------
-r1835 | nadvornik | 2009-09-06 11:08:37 +0200 (Sun, 06 Sep 2009) | 2 lines
+commit 589a4cb49ae1b9c0a8618ca3918a579ef9e517ae
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 29 14:49:38 2011 +0100
 
-added messages for debugging startup time
+    display pixel aspect ratio support
 
-------------------------------------------------------------------------
-r1834 | zas_ | 2009-09-05 15:48:21 +0200 (Sat, 05 Sep 2009) | 1 line
+commit 0a5ec68af089d4b79c3816d3e7df0434ea0ad5e8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 28 14:34:57 2011 +0100
 
-Update svn ignore lists.
-------------------------------------------------------------------------
-r1833 | zas_ | 2009-09-04 17:53:04 +0200 (Fri, 04 Sep 2009) | 5 lines
+    anaglyph support
 
-Fix up compilation issues related to libchamplain.
+commit fa7103087ac4eaf5d2ddd560fa472d4c4d8a1fa2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 28 13:13:27 2011 +0100
 
-See http://sourceforge.net/tracker/index.php?func=detail&aid=2848469&group_id=222125&atid=1054680
+    rt_tile_render cleanup part 3
 
+commit 3dd0e08368b389250b15790036be7f00075a1d74
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 28 13:05:14 2011 +0100
 
-------------------------------------------------------------------------
-r1832 | nadvornik | 2009-09-03 22:00:40 +0200 (Thu, 03 Sep 2009) | 2 lines
+    rt_tile_render cleanup part 2
 
-fixed in-place rename
+commit 808d8558b3d5e2ec8791ca3ea2a0ba14e5e18823
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 28 12:44:32 2011 +0100
 
-------------------------------------------------------------------------
-r1831 | nadvornik | 2009-09-03 21:18:20 +0200 (Thu, 03 Sep 2009) | 5 lines
+    rt_tile_render cleanup part 1
 
-do not reload image on copy, move, rename and external editor
+commit 6b9ed5a71fc7230c795e4edd541fb79a5d022220
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 28 11:05:07 2011 +0100
 
-changed files should be detected anyway
-http://sourceforge.net/tracker/index.php?func=detail&aid=2848373&group_id=222125&atid=1054680
+    first stereo support
 
-------------------------------------------------------------------------
-r1830 | nadvornik | 2009-08-29 01:09:05 +0200 (Sat, 29 Aug 2009) | 2 lines
+commit 63fdb63ce1470f08c4be2d7a2ff02582c331560e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jan 27 13:40:05 2011 +0100
 
-fixed vd_notify_cb leak
+    separated tile renderer
 
-------------------------------------------------------------------------
-r1829 | nadvornik | 2009-08-28 23:01:29 +0200 (Fri, 28 Aug 2009) | 2 lines
+commit a8c5cb269996f35d4877e31514956c198c3bd2e5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 26 15:02:05 2011 +0200
 
-improved printing of selection
+    ignore raw image support reported by the pixbuf loader
 
-------------------------------------------------------------------------
-r1828 | nadvornik | 2009-08-28 22:18:46 +0200 (Fri, 28 Aug 2009) | 2 lines
+commit d2c78b7a8dadc45b958e1b74242d64766e9f6e9f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 9 16:38:46 2011 +0200
 
-improved the sidecar grouping algorithm
+    fixed using DEBUG_N from multiple threads
 
-------------------------------------------------------------------------
-r1827 | nadvornik | 2009-08-27 22:23:28 +0200 (Thu, 27 Aug 2009) | 4 lines
+commit 8a55b69211b5866025f66c514f34ad697d3d1909
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Dec 16 22:26:36 2010 +0100
 
-fixed toggle_slideshow function
+    Fix bug 3006812: ensure exif cache is initialized even when all files are unreadable.
+    
+    Add a new function exif_init_cache() and call it at top of exif_read_fd(),
+    the issue was caused by a return NULL on unreadable file, before initializinf exif_cache
+    and when exif_free_fd() is called, file_cache_put() was called on invalid cache.
 
-https://sourceforge.net/tracker/index.php?func=detail&aid=2844302&group_id=222125&atid=1054680
+commit 138e31f328408ac88f1162999c8fcb24298ab37a
+Author: Vladislav Naumov <vnaum@vnaum.com>
+Date:   Thu Dec 16 21:55:03 2010 +0100
 
-------------------------------------------------------------------------
-r1826 | nadvornik | 2009-08-26 21:19:06 +0200 (Wed, 26 Aug 2009) | 2 lines
+    Fix bug 2999830: do not report failed chown() on copy.
+    
+    Debian bug 574853 reported by Ian Zimmerman <itz@buug.org>
+    
+    I was trying to copy images from my camera which is mounted as a USB
+    mass storage device.  The files on the mount are owned by root, and
+    geeqie tries to chown (and chgrp) the copy, fails, and displays an
+    error message.  This is only mildly annoying when copying a single
+    file, but when I want to copy multiple files the failure stops the
+    operation after the first file.
+    
+    Patch by Vladislav Naumov <vnaum@vnaum.com>
+    
+    This patch ignores chown errors, while still doing chown
+    (so root still can copy files preserving ownership).
+    
+    http://sourceforge.net/tracker/?func=detail&aid=2999830&group_id=222125&atid=1054680
+    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=574853 (original report)
 
-updated version message
+commit bd374b070d437d6319946c49ae0166ee4621e737
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun Jul 24 13:17:34 2011 +0100
+
+    Change the image size from 10×20 to 20×20
+    
+    Now the image should not be scaled anymore. Fix Bug Debian:614607 and
+    SF:3191174.
+
+commit 8f9ba4127954be5e04ac4c8b1822399a435af1ed
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun May 15 19:44:04 2011 +0100
+
+    Fix a remote command bug
+
+commit 31f6b82dbee7f4456371a1b527161ebc81342577
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Apr 9 19:47:30 2011 +0100
+
+    Do not delete path settings when adding new directory
+    
+    This patch will change the way, geeqie is mangling the path name in the
+    rename (copy) dialog when creating new directory. Will fix the bugs
+    Debian:529531 and SF:2795791.
+
+commit a4270acba9810bb6307e7d8da1334211898d8fb5
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Fri Jul 16 13:30:53 2010 +0100
+
+    Fix compiling issue
+    
+    img-view.c: In function 'real_view_window_new':
+    img-view.c:889: error: 'for' loop initial declarations are only allowed in C99 mode
+    img-view.c:889: note: use option -std=c99 or -std=gnu99 to compile your code
+
+commit e24281e5b7b6a70c47eeb46c4857913b5eec10a8
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat May 8 23:52:09 2010 +0100
+
+    Fix the windowsize
+    
+    Opening a new window from a collection should not set the default size.
+    Unfortunately the size of the image is not available in the early state.
+
+commit c971abea1cfb4b4d85e1c67dba2d443ebd5e9f86
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Thu Apr 21 18:44:15 2011 +0100
+
+    Fix wrong line ending
+
+commit dc3dea1297365981d2e206fd8afbb84a781ced20
+Author: Tore Ericsson <tore.ericsson@telia.com>
+Date:   Mon Feb 14 21:21:55 2011 +0100
+
+    Complete Swedish translation including bugs based on 55de20b 2010-12-11 version
+
+commit 236bc4c0e943f91e022c1c792a0267688e492f1d
+Author: Tore Ericsson <tore.ericsson@telia.com>
+Date:   Mon Feb 14 15:04:07 2011 +0100
+
+    Almost complete Swedish translation
+    
+    Could not translate dialogue button texts, such as Apply, Close, Cancel, New,
+    Edit, Delete, etc. Also remains three entries where I don't know the meaning
+    on lines 1550, 1558, and 5229. The English text seems to be completely out of
+    order on lines 5601 and 5606. -- Note also: The first cache path in the
+    thumbnail dialogue window appears having a duplication error.
+
+commit 8c25cb5a376d19f3db0b5d8b98a4c16fa8799e9e
+Author: Tore Ericsson <tore.ericsson@telia.com>
+Date:   Mon Feb 14 14:51:44 2011 +0100
+
+    Started with Swedish translation
+
+commit 55de20b6bd7a666ab63ee9d1f60e8fd1833a74c5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Dec 11 20:09:43 2010 +0100
+
+    Convert svn:ignore properties to .gitignore
+    
+    Simplify .gitignore and add few forgotten entries
+
+commit b71da225f077c5268a525886967be68739c5be94
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon May 10 11:33:13 2010 +0000
+
+    Some small logic mistakes
+    
+    Use boolean operators for booleans and bitwise otherwise only.
+
+commit dd54e571eb1cd5ffc55a97edecc777180d0dddb4
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon May 10 11:32:56 2010 +0000
+
+    GTK marks several functions as deprecated
+    
+    The following functions has been replaced and deprecated by version
+    2.20:
+       - GTK_WIDGET_CAN_FOCUS
+       - GTK_WIDGET_DRAWABLE
+       - GTK_WIDGET_HAS_FOCUS
+       - GTK_WIDGET_HAS_GRAB
+       - GTK_WIDGET_IS_SENSITIVE
+       - GTK_WIDGET_NO_WINDOW
+       - GTK_WIDGET_REALIZED
+       - GTK_WIDGET_SENSITIVE
+       - GTK_WIDGET_STATE
+       - GTK_WIDGET_TOPLEVEL
+       - GTK_WIDGET_VISIBLE
 
-------------------------------------------------------------------------
-r1825 | nadvornik | 2009-08-26 21:16:02 +0200 (Wed, 26 Aug 2009) | 2 lines
+commit 7a426d74379c2728ffe2bd0b5a33fd9bb473d7fb
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun Feb 28 22:55:37 2010 +0000
 
-save one unnecessary call to stat_utf8
+    Add unknown file class to grouping
 
-------------------------------------------------------------------------
-r1824 | nadvornik | 2009-08-26 00:21:46 +0200 (Wed, 26 Aug 2009) | 4 lines
+commit b71f37b8dbfd89c79a407698293cc3de44b4f645
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun Feb 28 15:17:12 2010 +0000
 
-use name as a tooltip of external editor if comment is missing
+    Fix a small issue with strptime
+    
+    strptime do not initialize all fields. So the undefined fields could end
+    in crash later on.
 
-the hotkey dialog ignores entries with empty tooltip
+commit fc390bb82685262d7fc073f0571e39c2fcc1c8c3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 27 23:31:07 2010 +0000
 
-------------------------------------------------------------------------
-r1823 | nadvornik | 2009-08-25 23:30:50 +0200 (Tue, 25 Aug 2009) | 7 lines
+    Allow scrollview to grow when generic dialog is resized (ie. Metadata write ? dialog). Do not force scrollbar if not needed.
 
-write metadata before another opeation
+commit 34c581a990f3b8f76084e0379282cb6bf8eb9606
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Feb 27 20:35:26 2010 +0000
 
-- this is implemented for copy and external editor
-- the unsaved metadata should survive operations like move or rename
-- saving metadata before delete is pointless
+    Add the feature to add single keywords to selection
+    
+    This patch adds a context menu entry to keywords to ad the current
+    keyword to all selected images.
 
+commit bbcf58c3c476cbff706e04295c028da8239d3e70
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Feb 27 20:35:09 2010 +0000
 
-------------------------------------------------------------------------
-r1822 | nadvornik | 2009-08-23 16:10:56 +0200 (Sun, 23 Aug 2009) | 4 lines
+    Little macro correction
 
-workaround for xpm loader
+commit de8ed72a941ef92c51ceca084b66dc7828cb90ab
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Feb 27 20:34:54 2010 +0000
 
-https://sourceforge.net/tracker/?func=detail&aid=2824016&group_id=222125&atid=1054680
+    Unifying the datetime output
+    
+    The output of %date% and %formatted.DateTime% should be equivalent.
 
-------------------------------------------------------------------------
-r1821 | nadvornik | 2009-08-23 15:37:15 +0200 (Sun, 23 Aug 2009) | 4 lines
+commit 7cabd51896c7a9411de0336ade042f4e726fe3e1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 17 21:05:10 2010 +0000
 
-fixed moving and maintenance of std. thumbnails
+    updated ChangeLog file
 
-https://sourceforge.net/tracker/?func=detail&aid=2836224&group_id=222125&atid=1054680
+commit c704896fdb0d0d5b5e2d2205c9d57a4382d343d7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Feb 16 21:18:03 2010 +0000
 
-------------------------------------------------------------------------
-r1820 | nadvornik | 2009-08-22 23:58:49 +0200 (Sat, 22 Aug 2009) | 2 lines
+    added 2010 to copyright text
 
-remove deleted files from metadata queue
+commit 7bea2e9641e42a79bf6bc89a7b9d86d68e671b87
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Feb 16 21:10:12 2010 +0000
 
-------------------------------------------------------------------------
-r1819 | nadvornik | 2009-08-22 22:20:19 +0200 (Sat, 22 Aug 2009) | 6 lines
+    updated version string
 
-fixed sidecar grouping
+commit 43c48179f5b7249ea13b918d0e6cdb156ce3011f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 16 20:07:05 2010 +0000
 
-this fixes grouping of files which differs only
-in upper/lowercase extension. The old code stopped scanning
-when the first file was found.
+    Restore translators list, removed by revision 1899.
 
-------------------------------------------------------------------------
-r1818 | nadvornik | 2009-08-18 22:19:23 +0200 (Tue, 18 Aug 2009) | 2 lines
+commit 113b2377405d3652e66bb547bdf58f981ef6f606
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 16 19:55:35 2010 +0000
 
-fixed possible crash in exif_item_get_integer
+    Update russian translation. Thanks to Denis Silakov.
 
-------------------------------------------------------------------------
-r1817 | nadvornik | 2009-08-03 22:47:14 +0200 (Mon, 03 Aug 2009) | 2 lines
+commit 4261dfa3f5aaf091e97daeb0f99dd020672fe37b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 14 22:00:23 2010 +0000
 
-updated links
+    fixed segfault in exif parser
+    
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2950617&group_id=222125&atid=1054682
 
-------------------------------------------------------------------------
-r1816 | mow | 2009-08-03 14:34:57 +0200 (Mon, 03 Aug 2009) | 1 line
+commit b6a2a9d69377da28b4dacdc3630e68e5cb7869ef
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 14 21:35:11 2010 +0000
 
-Fixing libexiv2 bug
-------------------------------------------------------------------------
-r1815 | mow | 2009-08-02 00:37:57 +0200 (Sun, 02 Aug 2009) | 3 lines
+    fixed reference count
+    
+    there was a bug in reference count on writting unsaved metadata
+    before starting an external editor
 
-Fix a small problem with casefull keywords
+commit aa1e53ca14dcd9a75a717792be8a4d5fc735a5eb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 7 13:16:35 2010 +0000
 
-In @1636 I miss one check for keyword case. Now it should be all fixed.
-------------------------------------------------------------------------
-r1814 | mow | 2009-08-02 00:37:37 +0200 (Sun, 02 Aug 2009) | 1 line
+    test gnome-doc-tool in configure
 
-This function is never used anymore: file_maint_removed
-------------------------------------------------------------------------
-r1813 | nadvornik | 2009-07-31 22:46:55 +0200 (Fri, 31 Jul 2009) | 2 lines
+commit 78b77ae3833bfa191aa94531e5b5ba0765b0cc6e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 7 12:44:55 2010 +0000
 
-updated project status
+    dropped obsolete sections, gqview changelog moved to wiki
 
-------------------------------------------------------------------------
-r1812 | nadvornik | 2009-07-31 22:31:56 +0200 (Fri, 31 Jul 2009) | 4 lines
+commit f977ad15657970ebb4621ba46e005cefc0b218ae
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 2 20:21:11 2010 +0000
 
-added project web page under version control
+    Brazilian Portuguese translation was updated.
+    
+    Thanks to Sergio Cipolla.
+    
+    References:
+    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=567824
 
+commit 0e32e4d57426c075fa4d9f3cee75c5bdd897df48
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jan 27 22:27:10 2010 +0000
 
+    czech translation fixes
 
-------------------------------------------------------------------------
-r1811 | zas_ | 2009-07-30 19:59:20 +0200 (Thu, 30 Jul 2009) | 1 line
+commit b015822f5751b6ad105ad607d196320574d30806
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jan 27 19:58:11 2010 +0000
 
-Some systems (BSD,MacOsX,HP-UX,...) define MAP_ANON and not MAP_ANONYMOUS. Make each an alias of other to be sure. issue reported by Martin Proetzsch.
-------------------------------------------------------------------------
-r1810 | nadvornik | 2009-07-29 23:03:38 +0200 (Wed, 29 Jul 2009) | 2 lines
+    Update catalan translation, by angel mompo.
 
-updated czech translation
+commit 6088a5dd735b2bea2b1a8b4606b3c32e89b86999
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jan 17 13:34:48 2010 +0000
 
-------------------------------------------------------------------------
-r1809 | nadvornik | 2009-07-29 00:27:24 +0200 (Wed, 29 Jul 2009) | 4 lines
+    Fix osd zoom level refreshing (it was broken since some times).
 
-improved scroll on slower machines
+commit 615b0fbae5303c71ce20356036d89d8d5a23261e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jan 13 19:49:39 2010 +0000
 
-patch by Stanislav Brabec
+    Update dutch translation. Work in progress.
+    
+    Patch by Marcel Pol.
 
-------------------------------------------------------------------------
-r1808 | nadvornik | 2009-07-29 00:14:26 +0200 (Wed, 29 Jul 2009) | 4 lines
+commit 141a854c9b4b80132cb0be2cfd45122e41157531
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon Jan 11 14:10:49 2010 +0000
 
-do not process sidecar files in bar_gps
+    Wops, typo...
 
-patch by Colin Clark
+commit 36ee9c9dcd360e1d6847f4fd9b899c70875cc23f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jan 10 14:23:29 2010 +0000
 
-------------------------------------------------------------------------
-r1807 | nadvornik | 2009-07-29 00:03:54 +0200 (Wed, 29 Jul 2009) | 2 lines
+    copy_file(): remove incomplete file on error (bug 2890715)
+    
+    The behavior changed, data is first written to a temporary file,
+    which is unlinked in case of error, then the tempfile is renamed
+    to the final name.
+    Size of buffer was increased from 4k to 16k.
 
-run the scripts with /bin/sh
+commit 8ce20c203c0b7e91eed065d5163bd2ad8e183eb3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jan 9 11:44:27 2010 +0000
 
-------------------------------------------------------------------------
-r1806 | zas_ | 2009-07-25 10:23:23 +0200 (Sat, 25 Jul 2009) | 1 line
+    Workaround intltoolize 0.40.6 bug related to LINGUAS, see bug 2817602.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1805 | zas_ | 2009-07-25 10:13:13 +0200 (Sat, 25 Jul 2009) | 1 line
+commit 5a1662366440a908c9af77b57ccd00472ea0d3cc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jan 9 10:37:48 2010 +0000
 
-Remove some bashisms from configure.in. Patch by Greg Troxel.
-------------------------------------------------------------------------
-r1804 | zas_ | 2009-07-25 10:00:07 +0200 (Sat, 25 Jul 2009) | 1 line
+    Log a message when EOVERFLOW error is set by stat() when building files lists. See bug 2876142.
 
-Romanian translation was completed. Thanks to Sabin Iacob.
-------------------------------------------------------------------------
-r1803 | nadvornik | 2009-07-24 16:07:54 +0200 (Fri, 24 Jul 2009) | 2 lines
+commit a1c2ef4506fae105f7ca76463fe21c84bd283cb3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jan 5 22:28:11 2010 +0000
 
-update column sizes after toggling thumbnails
+    Add Serbian translation.
+    
+    Note there are two *.po files, one for Cyrilic and one for Latin
+    letters.
+    
+    Thanks to Milos Popovic.
 
-------------------------------------------------------------------------
-r1802 | nadvornik | 2009-07-24 15:32:37 +0200 (Fri, 24 Jul 2009) | 2 lines
+commit 59801852932ec6a13f43b1e3f4beb42631906070
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jan 5 22:26:03 2010 +0000
 
-fixed switching of multiline texts
+    Update README about translations.
 
-------------------------------------------------------------------------
-r1801 | nadvornik | 2009-07-24 14:56:54 +0200 (Fri, 24 Jul 2009) | 5 lines
+commit f9feac4ff37cc70a0b601c1e839f4e37ff2b5072
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jan 5 17:49:50 2010 +0000
 
-do not try to reload deleted image
+    Allow to switch to fullscreen mode using LIRC.
+    
+    Imagine the following situation (which happened to me several times) :
+    you want to see photos from your bed or your sofa so you launch geeqie
+    and go to the right directory, then you take your remote control and sit
+    comfortably far from your keyboard and mouse. And when you want to begin
+    to watch photos, you realize you forgot to enable full screen! You have
+    to stand up and to go until your computer and come back, whereas you
+    could have done it with your remote control.
+    
+    Patch by Bernard Massot.
 
-deleted image is replaced by the next one from the list, keep
-the old image displayed until the new one is set
+commit f1c7e5da546938446317b7af5ca2c06996bed93a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jan 2 12:38:55 2010 +0000
 
-------------------------------------------------------------------------
-r1800 | nadvornik | 2009-07-24 14:45:42 +0200 (Fri, 24 Jul 2009) | 6 lines
+    Get rid of Geeqie version and beta release message. It clutters command line usage, and is not that useful. Suggested by Michal Čihař.
 
-call gtk_tree_view_columns_autosize only when reall needed
+commit bd34c324c92456f5182579d6922d7aba664f93c3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Dec 19 12:53:20 2009 +0000
 
-gtk_tree_view_columns_autosize is rather expensive, call it only
-afrer directory change or after user-requested refresh
+    Fix bug 2917164.
+    g_utf8_collate_key_for_filename() don't give sort order one
+    may expect. Using g_utf8_collate_key() make things closer
+    to many other programs output (ie. ls and gqview).
+    
+    Thanks to Michael pointing this out.
 
+commit 99766f9e671fc24106db4104fa468192686e5629
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Dec 19 12:49:19 2009 +0000
 
-------------------------------------------------------------------------
-r1799 | nadvornik | 2009-07-24 14:21:23 +0200 (Fri, 24 Jul 2009) | 5 lines
+    Store sort parameters in appropriate variables.
 
-do not use cell_data_func
+commit 7ec5e57c11590f5d44bb96865e279de8d03c49cf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Dec 10 17:48:43 2009 +0000
 
-cell_data_func is too slow, store formatted string in the tree_store
-instead
+    Move "Add Keyword" menu item at top of Keywords bar contextual menu.
+    
+    Suggested by Lars Täuber.
 
-------------------------------------------------------------------------
-r1798 | nadvornik | 2009-07-21 16:17:01 +0200 (Tue, 21 Jul 2009) | 10 lines
+commit e6fe9db8a728c2188e7276f3cea001981120ed80
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Dec 10 17:44:31 2009 +0000
 
-fixed destroying of menu data
+    Fix contextual menus in lateral bars.
+    
+    Use button_release_event instead of button_press_event,
+    this makes contextual menus persistent until an option
+    is selected or the menu is closed.
 
-Make sure that menu destroy functions do not access parent widget
-structures that are already destroyed
-There are 2 ways to achieve this:
-- use g_signal_handlers_disconnect_matched() like in vf_destroy_cb()
-- use separate data structure passed to *_popup_menu_destroy_cb()
-  like in img-view.
+commit 17f461e047e39b2e6ddfc82192aeb71db32c326d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Dec 4 21:01:11 2009 +0000
 
+    Some systems do not have SA_SIGINFO (siginfo_t), like GNU/Hurd, so just test if defined or not. Patch by Michal Čihař (Bug ID: 2894271).
 
-------------------------------------------------------------------------
-r1797 | mow | 2009-07-18 10:16:54 +0200 (Sat, 18 Jul 2009) | 4 lines
+commit 4bbf6df484aa38c0919ef1c12f25a61e7cb2857b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Dec 4 20:40:02 2009 +0000
 
-Fix a overrun
+    Editors: disable Delete button if a .desktop file is not writeable and disable Edit button when no entry is selected.
 
-data_offset + data_length could be bigger than guint which makes the
-calculation overflow to a value smaller then size.
-------------------------------------------------------------------------
-r1795 | nadvornik | 2009-07-02 19:37:05 +0200 (Thu, 02 Jul 2009) | 2 lines
+commit 4ba3a4841437e510a1c2904ac2991debb2d1071a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Dec 4 19:45:09 2009 +0000
 
-updated ChangeLog file
+    Add Opera to the list of browsers. Patch by Christian Heckendorf (feature request ID: 2908469).
 
-------------------------------------------------------------------------
-r1794 | nadvornik | 2009-07-02 19:31:38 +0200 (Thu, 02 Jul 2009) | 2 lines
+commit 1f4fdf05a9d2f0ec98fc4a9c17172138e60a9e1f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Nov 27 23:27:35 2009 +0000
 
-updated ca.po - submitted by Mecatxis
+    build documentation with gnome-doc-tool in makefile
 
-------------------------------------------------------------------------
-r1793 | nadvornik | 2009-07-01 22:55:37 +0200 (Wed, 01 Jul 2009) | 2 lines
+commit 3f39e625a89f647d3963770bfc1222ef3f2b8a98
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Nov 22 09:12:22 2009 +0000
 
-make sure that automake and config.h uses the same installation paths
+    scripts for converting wiki documentation to docbook
 
-------------------------------------------------------------------------
-r1792 | nadvornik | 2009-07-01 21:38:17 +0200 (Wed, 01 Jul 2009) | 2 lines
+commit 14fdb79a58c05b2110ccd7a7abc2e31099b74562
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Nov 21 20:08:51 2009 +0000
 
-updated version string
+    check gtk_clutter_init return value
+    
+    https://sourceforge.net/tracker/index.php?func=detail&aid=2899866&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1791 | nadvornik | 2009-07-01 21:33:09 +0200 (Wed, 01 Jul 2009) | 2 lines
+commit 64efa05fe3501bbcdd866156a9c62954d198514a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Nov 18 12:34:30 2009 +0000
 
-fixed mnemonic conflicts
+    changed https to http in wiki links
 
-------------------------------------------------------------------------
-r1790 | nadvornik | 2009-07-01 20:59:39 +0200 (Wed, 01 Jul 2009) | 2 lines
+commit fb7ec61825c021bfbc7431ce7dcbbafc97a8d9c1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Nov 13 18:37:31 2009 +0000
 
-removed msgctxt keyword, older gettext fails on it
+    Spanish translation was updated. Thanks to Redy Rodriguez.
 
-------------------------------------------------------------------------
-r1789 | nadvornik | 2009-07-01 20:32:32 +0200 (Wed, 01 Jul 2009) | 2 lines
+commit 40c05f384b37a3fc91262b033a0603ce376f8ccc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 7 21:31:23 2009 +0000
 
-removed gettext.h reference
+    Updated spanish translation. Thanks to Redy Rodriguez.
 
-------------------------------------------------------------------------
-r1788 | nadvornik | 2009-07-01 09:04:42 +0200 (Wed, 01 Jul 2009) | 2 lines
+commit ec5cfc05e59af8975556ffbc6262252e91172441
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Tue Oct 13 21:49:42 2009 +0000
 
-updated spec file
+    German translation update
 
-------------------------------------------------------------------------
-r1787 | zas_ | 2009-07-01 01:40:37 +0200 (Wed, 01 Jul 2009) | 1 line
+commit 3bd2b7d601d9444418799003a5ae472ac7738d15
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Tue Oct 13 21:49:21 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1786 | nadvornik | 2009-06-30 22:15:33 +0200 (Tue, 30 Jun 2009) | 2 lines
+    Add compatibility for GTK 2.18
+    
+    With 2.18 some functions are deprecated. With geeqie that are two at the
+    moment.
+    - gtk_tree_view_column_get_cell_renderers - which can be replaced by
+      gtk_cell_layout_get_cells
+    - gdk_event_get_graphics_expose - I just commented it as there seems to
+      be no replacement in GTK 2.18
 
-fixed an use of uninitialized value
+commit 84b602a4d3d1156d36c42db6bbd5d811cbe2f255
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 10 15:01:41 2009 +0000
 
-------------------------------------------------------------------------
-r1785 | nadvornik | 2009-06-30 22:12:28 +0200 (Tue, 30 Jun 2009) | 5 lines
+    added a workaround for https://bugzilla.gnome.org/show_bug.cgi?id=590692
 
-fixes for a built without Exiv2
+commit 9d0d6ce6929d7fae161552c1d91ee9ff412b3b2f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 10 10:15:23 2009 +0000
 
-don't try to access XMP metadata if not compiled with Exiv2
-some metadata options are valid without Exiv2, do not disable them
+    use text renderer for editor->hidden
+    
+    The toggle was too confusing because it was not dirrectly editable.
 
-------------------------------------------------------------------------
-r1784 | mow | 2009-06-30 21:53:55 +0200 (Tue, 30 Jun 2009) | 5 lines
+commit a41042b3eed47f80f91448ca4836d09976a238fb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Oct 1 18:40:34 2009 +0000
 
-Revert "Add pgettext for some ambiguous strings"
+    ignored multiple directories specified on commandline
+    
+    IMHO this was inconsistent - specifying one directory had completely
+    different effect than specifying two or more directories. Moreover,
+    it segfaulted.
+    Now only one directory is allowed.
 
-Now there should be all ambiguous strings gone. This reverts commit 1628
+commit 95d62825b5e935186a76211f63bea02b4af88d5a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Oct 1 17:37:51 2009 +0000
 
-With that commit also all ambiguous strings should be solved.
-------------------------------------------------------------------------
-r1783 | nadvornik | 2009-06-30 21:12:25 +0200 (Tue, 30 Jun 2009) | 2 lines
+    fixed tree_store reordering
 
-add desktop.in files to the tarball
+commit 34f3b8a3ff32d1d2c4c77f57dd99344a7443257f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 28 12:04:35 2009 +0000
 
-------------------------------------------------------------------------
-r1782 | nadvornik | 2009-06-29 21:48:14 +0200 (Mon, 29 Jun 2009) | 2 lines
+    do not cache incomplete thumbnails
 
-fixed writting to gqview legacy format
+commit 63420660a443d3a98d556ef90da3d079d058c4cb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 28 09:57:06 2009 +0000
 
-------------------------------------------------------------------------
-r1781 | zas_ | 2009-06-29 18:32:43 +0200 (Mon, 29 Jun 2009) | 1 line
+    consider sidecars in layout_image popup menu
 
-French translation was updated.
-------------------------------------------------------------------------
-r1780 | zas_ | 2009-06-29 18:02:28 +0200 (Mon, 29 Jun 2009) | 1 line
+commit 64cf6613bcea8ae9c8f412255d2132eead0d76e8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Sep 26 11:37:09 2009 +0000
 
-Fix POTFILES.in and update regen_potfiles.sh to add .desktop.in files.
-------------------------------------------------------------------------
-r1779 | nadvornik | 2009-06-28 15:41:51 +0200 (Sun, 28 Jun 2009) | 2 lines
+    bar_gps cleanup
+    
+    - removed the scrollbar
+    - do not set decel-rate,
+      https://bugzilla.gnome.org/show_bug.cgi?id=596419
 
-added geeqie-import-geeqie.desktop.in
+commit 643ae01b588ec9645731f147d82102244ac7dc74
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Sep 26 08:47:28 2009 +0000
 
-------------------------------------------------------------------------
-r1778 | nadvornik | 2009-06-28 13:55:54 +0200 (Sun, 28 Jun 2009) | 2 lines
+    print text using pango renderer
+    
+    - the text is sent to postscript as a bitmap
+    - this fixes printing of non-ascii characters
+    
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2836135&group_id=222125&atid=1054680
 
-libchamplain compatibility fix
+commit 8b6b4b9f42ac74470709bd413f0b5ce5b4190a90
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Sep 25 20:39:15 2009 +0000
 
-------------------------------------------------------------------------
-r1777 | nadvornik | 2009-06-28 11:25:47 +0200 (Sun, 28 Jun 2009) | 2 lines
+    require libchamplain 0.4
+    
+    - check for libchamplain 0.4
+    - dropped libchamplain 0.3.x support
+    
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2861847&group_id=222125&atid=1054680
 
-cleanup: remove some disabled code
+commit b52b036e97cb06283bc2280c432404cba631cbc2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 24 21:52:44 2009 +0000
 
-------------------------------------------------------------------------
-r1776 | nadvornik | 2009-06-28 11:08:25 +0200 (Sun, 28 Jun 2009) | 2 lines
+    fixed and simplified sidecar grouping code
 
-warn if another operation is performed on a file with unsaved metadata
+commit 98cfb648cc4b0173b3e324af8d4c81fa14623124
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 24 18:02:29 2009 +0000
 
-------------------------------------------------------------------------
-r1775 | nadvornik | 2009-06-28 10:49:28 +0200 (Sun, 28 Jun 2009) | 2 lines
+    fixed emitting of error signal from image loader
 
-sync histogram state after enabling it from the menu
+commit f1c57f3c48c0347586e17fdce74e798ab95756ba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 21 18:48:32 2009 +0000
 
-------------------------------------------------------------------------
-r1774 | nadvornik | 2009-06-28 10:32:27 +0200 (Sun, 28 Jun 2009) | 2 lines
+    fixed pan-view popup menu
+    
+    - removed wrong callback
+    - consider sidecar files in the editor popup
 
-added script for importing GQView and Geeqie-alpha metadata
+commit 068a46d7a986f799ada8cc2cc80864c87b4d0741
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 14 21:25:10 2009 +0000
 
-------------------------------------------------------------------------
-r1773 | nadvornik | 2009-06-28 01:12:52 +0200 (Sun, 28 Jun 2009) | 2 lines
+    fixed selection handling in sidebar
 
-put preferences to separate submenu
+commit a65c901d3b70d7b3c2ed08ed89ffc90fac4bccc4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 13 21:08:40 2009 +0000
 
-------------------------------------------------------------------------
-r1772 | mow | 2009-06-28 00:58:20 +0200 (Sun, 28 Jun 2009) | 1 line
+    fixed editor list in popup menu
+    
+    - show an editor if any of selected files matches
+    - added debug messages
 
-German translation update
-------------------------------------------------------------------------
-r1771 | mow | 2009-06-28 00:57:56 +0200 (Sun, 28 Jun 2009) | 8 lines
+commit 1ab4168f7370de7b3370b1b91cb8a052327055b1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 13 21:03:17 2009 +0000
 
-Complete commit @1747 (intltool usage)
+    fixed incorrect translation
 
-With using intltool the localisation will fail cause of missing
-desktop.in file. Also the old desktop files are obsoleted by this
-commit.
+commit 3a4c59562600d7a6b390c702b72c921ade71e3db
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 13 20:00:08 2009 +0000
 
-Also it is not necessary any more to have a './' in front of the files
-in POTFILES.in.
-------------------------------------------------------------------------
-r1770 | mow | 2009-06-28 00:56:50 +0200 (Sun, 28 Jun 2009) | 7 lines
+    fixed filelist refresh
 
-Fix AM_CFLAGS and AM_CXXFLAGS from @1701
+commit 0d3397b546403b2beb64608ab306f1d8ec323b2b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 13 12:33:11 2009 +0000
 
-The commit 1701 did insert wrong lines for AM_CFLAGS and AM_CXXFLAGS to
-src/Makefile.am.
+    preserve histmap on NOTIFY_CHANGE
 
-I also did some minor whitespace fixes and made the internal
-documentation consistent by using \ than @ for doxygen doc.
-------------------------------------------------------------------------
-r1769 | nadvornik | 2009-06-28 00:40:25 +0200 (Sun, 28 Jun 2009) | 2 lines
+commit d88c0197db63c4282f6986112521d45f87c753a6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 13 09:55:21 2009 +0000
 
-added command for editing ufraw id file, changed menu location
+    added possibility to use geeqie-rotate as a standalone script
 
-------------------------------------------------------------------------
-r1768 | nadvornik | 2009-06-27 23:12:07 +0200 (Sat, 27 Jun 2009) | 2 lines
+commit 9f27ef873ac95d800100b3a8702bcbe614a6e49b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Sep 12 16:37:05 2009 +0000
 
-reordered View menu
+    strip the "lang=" prefix from exiv2 in all metadata formats
 
-------------------------------------------------------------------------
-r1767 | nadvornik | 2009-06-27 22:47:17 +0200 (Sat, 27 Jun 2009) | 2 lines
+commit 5773c73278ff455e6b1c96f115509cf24fe89108
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Sep 12 16:03:09 2009 +0000
 
-use radio buttons for file and dir mode in popup menu
+    simplified template
 
-------------------------------------------------------------------------
-r1766 | nadvornik | 2009-06-27 22:12:56 +0200 (Sat, 27 Jun 2009) | 2 lines
+commit fcf4c3852f5993e7cbb0e5f19ae46919c22a4ffd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Sep 12 15:51:37 2009 +0000
 
-simplified menu_item_add_radio usage
+    editor fixes
+    
+    - fixed editor loading order
+    - fixed EditorWindow->modified flag handling
 
-------------------------------------------------------------------------
-r1765 | nadvornik | 2009-06-27 19:54:31 +0200 (Sat, 27 Jun 2009) | 2 lines
+commit 50f55547a981a56f3baa1cd33bc2f3c4139bd695
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Sep 12 15:31:24 2009 +0000
 
-created Files and Folders submenu
+    fixed reloading of editors
 
-------------------------------------------------------------------------
-r1764 | nadvornik | 2009-06-27 17:47:50 +0200 (Sat, 27 Jun 2009) | 6 lines
+commit fbcd54e1b46fb22ca36e031e863af7b5f28b5d3b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 9 18:16:09 2009 +0000
 
-improved overlay menu
+    advertisment added
 
-- indicate overlay and histogram state in toggle and radio entries in
-  the menu
-- all entries have visible effect in all modes
+commit 04d9cb61c50924e4a8a7431e2da696b55693d241
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 7 20:44:29 2009 +0000
 
-------------------------------------------------------------------------
-r1763 | nadvornik | 2009-06-24 22:31:30 +0200 (Wed, 24 Jun 2009) | 9 lines
+    start_editor_from_filelist_full fixes
+    
+    fixed return value from start_editor_from_filelist_full()
+    call editor_command_parse to detect possible problems early enough
 
-test if an accelerator can be stored
+commit 89d76d7da4f277010901baaf80c239c057d7da70
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 7 20:04:22 2009 +0000
 
-gtk_accel_map_change_entry can't change accelerators 
-to keys like arrows. Test this and show the keys in the list
-only if they can be really changed.
+    fixed list of possible editors in popup menu
 
-https://sourceforge.net/tracker/?func=detail&aid=2805139&group_id=222125&atid=1054680
+commit 23f8333708ae73bb3332c1cd6f1033fd9bf9cdfd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 7 19:48:05 2009 +0000
 
+    fixes sidecar file grouping
+    
+    files with a number in extension were listed twice, it
+    caused problems later
 
-------------------------------------------------------------------------
-r1762 | nadvornik | 2009-06-23 21:20:48 +0200 (Tue, 23 Jun 2009) | 2 lines
+commit b319e56a6f2a4018c385fe0b8eb085724dd33da5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Sep 7 08:24:09 2009 +0000
 
-improved description string
+    Comment out unused functions, silenting related compilation warnings.
 
-------------------------------------------------------------------------
-r1761 | mow | 2009-06-22 00:52:45 +0200 (Mon, 22 Jun 2009) | 1 line
+commit 6178ce7ae0e76e7e4d348681969e6dd31235c8ad
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Sep 7 08:18:18 2009 +0000
 
-Localizing one string
-------------------------------------------------------------------------
-r1760 | mow | 2009-06-22 00:52:08 +0200 (Mon, 22 Jun 2009) | 11 lines
+    Remove an unused variable and minor code cleanup.
 
-Fix two memory failures
+commit 9cfd6cc0d65835a221e710c14941591543597145
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 6 14:29:19 2009 +0000
 
-1. if the description field for a exif information is empty the program
-   dumps core when trying to change this. The reason is a strcmp with a
-   NULL value.
+    improved editor loading
 
-   The fix add the small functionality to set the field to default when
-   it is set empty.
+commit 687a891871bd2c41ecb7f955b80910c941427353
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 6 14:21:19 2009 +0000
 
-2. There was a g_strdup miss in exif.c which could end in memory
-   corruption.
-------------------------------------------------------------------------
-r1759 | nadvornik | 2009-06-21 22:14:53 +0200 (Sun, 21 Jun 2009) | 5 lines
+    fixed unnecessary image reloads in color menu
 
-improved file list update priority
+commit e0fd3c772a12fdb3c6155b90b587c6dbaa418a82
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 6 14:01:03 2009 +0000
 
-- update list with lower priority than the priority of file operations
-- make sure that it is updated at least once per 2 seconds
+    load desktop files in idle time
+    
+    - scanning all desktop files takes a lot of time because of hdd seek
+    - this change moves the scanning to idle time
+    - the editors appears in the menus some time after startup
+    
+    https://sourceforge.net/tracker/index.php?func=detail&aid=2852522&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1758 | nadvornik | 2009-06-21 15:28:02 +0200 (Sun, 21 Jun 2009) | 2 lines
+commit 397dd167416368a4d102b051352add5ed2982414
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 6 09:08:37 2009 +0000
 
-fixed jumping of filelist on focus_in event
+    added messages for debugging startup time
 
-------------------------------------------------------------------------
-r1757 | nadvornik | 2009-06-21 14:39:58 +0200 (Sun, 21 Jun 2009) | 2 lines
+commit a9030eea34458fb630d338c042311e3904110eef
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Sep 5 13:48:21 2009 +0000
 
-fixed updating of marks in sidecars
+    Update svn ignore lists.
 
-------------------------------------------------------------------------
-r1756 | nadvornik | 2009-06-21 01:15:11 +0200 (Sun, 21 Jun 2009) | 6 lines
+commit dcadde2b6220414d6fc833c97a31b33fa0995d87
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Sep 4 15:53:04 2009 +0000
 
-various geeqie-ufraw improvements
+    Fix up compilation issues related to libchamplain.
+    
+    See http://sourceforge.net/tracker/index.php?func=detail&aid=2848469&group_id=222125&atid=1054680
 
-- handle xmp sidecars
-- commandline options, help
+commit 049463614a739625303f0edb6a8cf1ee90219833
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 3 20:00:40 2009 +0000
 
+    fixed in-place rename
 
-------------------------------------------------------------------------
-r1755 | nadvornik | 2009-06-20 20:42:23 +0200 (Sat, 20 Jun 2009) | 6 lines
+commit 6f6186dad0150ef4f37eca53c0cf22cbfd0cd7a0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 3 19:18:20 2009 +0000
 
-fixed leak in file_util_* functions
+    do not reload image on copy, move, rename and external editor
+    
+    changed files should be detected anyway
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2848373&group_id=222125&atid=1054680
 
-- file_util_* are changed to take over the filelist and free it when
-  done
-- make sure that these functions are called correctly
+commit 2b239ea29ca6de434c05482d27abf55df26d35f0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 28 23:09:05 2009 +0000
 
-------------------------------------------------------------------------
-r1754 | nadvornik | 2009-06-20 18:46:32 +0200 (Sat, 20 Jun 2009) | 5 lines
+    fixed vd_notify_cb leak
 
-improved list view
+commit 1dc77a83b26aed8ff77e59837bf03e77789cb6b7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 28 21:01:29 2009 +0000
 
-- do the string formatting in the cell_data callback
-- show the sidecar list only in collapsed entries
+    improved printing of selection
 
-------------------------------------------------------------------------
-r1753 | nadvornik | 2009-06-20 10:51:07 +0200 (Sat, 20 Jun 2009) | 2 lines
+commit fbfb356c4e58eaf760c363caa8cbb3e6a45bd8ed
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 28 20:18:46 2009 +0000
 
-always check for deleted sidecar files
+    improved the sidecar grouping algorithm
 
-------------------------------------------------------------------------
-r1752 | nadvornik | 2009-06-20 00:37:30 +0200 (Sat, 20 Jun 2009) | 2 lines
+commit 7cc27f48539b28a84af54e72c687276b729465bb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Aug 27 20:23:28 2009 +0000
 
-fixed regexp usage
+    fixed toggle_slideshow function
+    
+    https://sourceforge.net/tracker/index.php?func=detail&aid=2844302&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1751 | nadvornik | 2009-06-20 00:34:52 +0200 (Sat, 20 Jun 2009) | 2 lines
+commit ca1e575f63e3e5f39dafdb4c512f8e7672237ee0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Aug 26 19:19:06 2009 +0000
 
-run external commands from current directory even with no files
+    updated version message
 
-------------------------------------------------------------------------
-r1750 | nadvornik | 2009-06-18 22:46:33 +0200 (Thu, 18 Jun 2009) | 8 lines
+commit ccc188ca0606d79f1fe7e84e96a995acd96aca42
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Aug 26 19:16:02 2009 +0000
 
-ufraw-batch script
+    save one unnecessary call to stat_utf8
 
-added a more complicated script that demonstrates advanced
-features of external editors:
-- create a jpeg + ufraw id file for each raw file
-- update the jpeg if the id file was modified
+commit 04c030835380e4223ea2902c4cea0283bbce9895
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 25 22:21:46 2009 +0000
 
+    use name as a tooltip of external editor if comment is missing
+    
+    the hotkey dialog ignores entries with empty tooltip
 
-------------------------------------------------------------------------
-r1749 | nadvornik | 2009-06-17 20:41:10 +0200 (Wed, 17 Jun 2009) | 2 lines
+commit da53e4e5a7a067aea6961ea89a35098a68562196
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 25 21:30:50 2009 +0000
 
-made file_util_start_editor_from_file consider also sidecars
+    write metadata before another opeation
+    
+    - this is implemented for copy and external editor
+    - the unsaved metadata should survive operations like move or rename
+    - saving metadata before delete is pointless
 
-------------------------------------------------------------------------
-r1748 | nadvornik | 2009-06-17 20:19:11 +0200 (Wed, 17 Jun 2009) | 7 lines
+commit 22679396edba29418ca66fb4a1e9238386ae13d5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 23 14:10:56 2009 +0000
 
-fixed problems with floor/ceil
+    workaround for xpm loader
+    
+    https://sourceforge.net/tracker/?func=detail&aid=2824016&group_id=222125&atid=1054680
 
-- introduce macros ROUND_DOWN, ROUND_UP
-- fixed incorrect usage of floor/ceil functions on int arguments
+commit 399428f6412a8c2866ec65738ca12bccd374fe73
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 23 13:37:15 2009 +0000
 
-patch by  Yuriy Kaminskiy
+    fixed moving and maintenance of std. thumbnails
+    
+    https://sourceforge.net/tracker/?func=detail&aid=2836224&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1747 | nadvornik | 2009-06-15 22:50:35 +0200 (Mon, 15 Jun 2009) | 6 lines
+commit e284087c3e3d8714587fecdbb81d6328d3376b19
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 22 21:58:49 2009 +0000
 
-use intltool for desktop file translation
+    remove deleted files from metadata queue
 
-- desktop files are translated via .po files together with other strings
-- make update-po is replaced with intltool-update [lang]
+commit a20b1c7d57bc9f5e189b957942665d0856617b4e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 22 20:20:19 2009 +0000
 
+    fixed sidecar grouping
+    
+    this fixes grouping of files which differs only
+    in upper/lowercase extension. The old code stopped scanning
+    when the first file was found.
 
-------------------------------------------------------------------------
-r1746 | nadvornik | 2009-06-15 21:13:45 +0200 (Mon, 15 Jun 2009) | 5 lines
+commit 4fd2d2e9ae0d08ec04f1b893c08a315be6837abc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 18 20:19:23 2009 +0000
 
-improved rotation script
+    fixed possible crash in exif_item_get_integer
 
-- applies the orientation from metadata
-- uses exiftran for jpeg an ImageMagick for other files
+commit c1371f79e488f152db06c61f821469fe59331ade
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Aug 3 20:47:14 2009 +0000
 
-------------------------------------------------------------------------
-r1745 | zas_ | 2009-06-14 10:49:39 +0200 (Sun, 14 Jun 2009) | 1 line
+    updated links
 
-French translation was updated.
-------------------------------------------------------------------------
-r1744 | mow | 2009-06-14 00:19:57 +0200 (Sun, 14 Jun 2009) | 8 lines
+commit 6873f89855794d502a5098369ba8b79fa4794392
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon Aug 3 12:34:57 2009 +0000
 
-Update documentation
+    Fixing libexiv2 bug
 
-Now it holds a more verbose doxygen description as discussed in mailing
-list.
+commit 95f139cb78e9e71ee9c8978fe70885537d265092
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Aug 1 22:37:57 2009 +0000
 
-- Doxygen style description
-- Small visibility changes
-- Commit message change
-------------------------------------------------------------------------
-r1743 | nadvornik | 2009-06-13 21:26:32 +0200 (Sat, 13 Jun 2009) | 2 lines
+    Fix a small problem with casefull keywords
+    
+    In @1636 I miss one check for keyword case. Now it should be all fixed.
 
-the options for custom border color were made independent
+commit 993581fa3b5a4f2dfe93e6b3ceb03b7219b73f41
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Aug 1 22:37:37 2009 +0000
 
-------------------------------------------------------------------------
-r1742 | zas_ | 2009-06-11 20:18:07 +0200 (Thu, 11 Jun 2009) | 1 line
+    This function is never used anymore: file_maint_removed
 
-French translation was updated.
-------------------------------------------------------------------------
-r1741 | zas_ | 2009-06-11 19:34:37 +0200 (Thu, 11 Jun 2009) | 1 line
+commit 3ba97f11d9ed1b31f4983b6f2b85a1661fd21172
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 31 20:46:55 2009 +0000
 
-Fix up compilation using make -jN: sometimes it fails due to order of headers inclusion.
-------------------------------------------------------------------------
-r1740 | nadvornik | 2009-06-10 22:45:24 +0200 (Wed, 10 Jun 2009) | 2 lines
+    updated project status
 
-make sure that a directory exists on saving desktop files
+commit c57a5a23b7b648f93a7ab9e78d32ea240909a8ef
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 31 20:31:56 2009 +0000
 
-------------------------------------------------------------------------
-r1739 | nadvornik | 2009-06-10 22:26:47 +0200 (Wed, 10 Jun 2009) | 9 lines
+    added project web page under version control
 
-do not install helper scripts into /usr/bin 
+commit 3591c21101f1f1f82eba676b7708f61badc13e0c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jul 30 17:59:20 2009 +0000
 
-- install the helper scripts into pkglibdir, that is /usr/lib/geeqie
-- add the directory to $PATH on startup - the Exec line in desktop files
-  does not have to contain full path
+    Some systems (BSD,MacOsX,HP-UX,...) define MAP_ANON and not MAP_ANONYMOUS. Make each an alias of other to be sure. issue reported by Martin Proetzsch.
 
-fixes
-https://sourceforge.net/tracker/?func=detail&aid=2801121&group_id=222125&atid=1054680
+commit 50d58991a04ea08b245ad359ed7cd399f5e48d2e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 29 21:03:38 2009 +0000
 
-------------------------------------------------------------------------
-r1738 | nadvornik | 2009-06-09 21:12:37 +0200 (Tue, 09 Jun 2009) | 4 lines
+    updated czech translation
 
-enabled color management in img-view
+commit e01d567728c83465fd4bd657233f07b6a1d47403
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 28 22:27:24 2009 +0000
 
-patch by Omari Stephens
+    improved scroll on slower machines
+    
+    patch by Stanislav Brabec
 
-------------------------------------------------------------------------
-r1737 | nadvornik | 2009-06-09 21:08:52 +0200 (Tue, 09 Jun 2009) | 4 lines
+commit 41599122ba313c5806555c6f1e241ed09ff37177
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 28 22:14:26 2009 +0000
 
-fixed leak in image_post_process_color
+    do not process sidecar files in bar_gps
+    
+    patch by Colin Clark
 
-patch by Omari Stephens
+commit 5d66be285cb060db3db2202a7ee3b79cacfd9769
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 28 22:03:54 2009 +0000
 
-------------------------------------------------------------------------
-r1736 | nadvornik | 2009-06-08 21:05:49 +0200 (Mon, 08 Jun 2009) | 4 lines
+    run the scripts with /bin/sh
 
-unify code paths for New directory
-keep the directory visible after rename
-https://sourceforge.net/tracker/?func=detail&aid=1951183&group_id=222125&atid=1054680
+commit 9ac5bc9898dd722a4b1bbc175ac2d777ec3d53e3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jul 25 08:23:23 2009 +0000
 
-------------------------------------------------------------------------
-r1735 | nadvornik | 2009-06-07 12:11:05 +0200 (Sun, 07 Jun 2009) | 4 lines
+    French translation was updated.
 
-do not show wide frame in single image mode
-it partially fixes
-https://sourceforge.net/tracker/?func=detail&aid=2797348&group_id=222125&atid=1054683
+commit 6c06cb33020b4045625a56baae23b1fef36c8618
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jul 25 08:13:13 2009 +0000
 
-------------------------------------------------------------------------
-r1734 | nadvornik | 2009-06-07 00:51:55 +0200 (Sun, 07 Jun 2009) | 2 lines
+    Remove some bashisms from configure.in. Patch by Greg Troxel.
 
-added mark filter to menu - now it is possible to assign hotkeys
+commit 5495e01cd0d7eec14da56600599aaa7c5876299b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jul 25 08:00:07 2009 +0000
 
-------------------------------------------------------------------------
-r1733 | nadvornik | 2009-06-06 21:39:46 +0200 (Sat, 06 Jun 2009) | 3 lines
+    Romanian translation was completed. Thanks to Sabin Iacob.
 
-preserve zoom value on fullscreen startup
+commit 206a227078812c68c76b4a233cd877639a8b49bf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 24 14:07:54 2009 +0000
 
+    update column sizes after toggling thumbnails
 
-------------------------------------------------------------------------
-r1732 | nadvornik | 2009-06-06 19:28:16 +0200 (Sat, 06 Jun 2009) | 4 lines
+commit 3374e3d5b309aa51edbaf5b4a9a7beeb084452f9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 24 13:32:37 2009 +0000
 
-swap x and y scale when scaling rotated images - it fixes tiles that were
-sometimes off by 1 pixel - thanks Petr for reporting,
-code cleanup
+    fixed switching of multiline texts
 
-------------------------------------------------------------------------
-r1731 | zas_ | 2009-06-06 19:02:21 +0200 (Sat, 06 Jun 2009) | 1 line
+commit 2d113f07405e4579f942e247297cc0ff66227935
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 24 12:56:54 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1730 | nadvornik | 2009-06-06 18:14:07 +0200 (Sat, 06 Jun 2009) | 5 lines
+    do not try to reload deleted image
+    
+    deleted image is replaced by the next one from the list, keep
+    the old image displayed until the new one is set
 
-better implementation of tree_view_row_get_visibility,
-gtk_tree_view_set_cursor is not sufficient in some cases, call also
-tree_view_row_make_visible
+commit 00c99d21f60a5771bdecff3fd77a6636cdbb685f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 24 12:45:42 2009 +0000
 
+    call gtk_tree_view_columns_autosize only when reall needed
+    
+    gtk_tree_view_columns_autosize is rather expensive, call it only
+    afrer directory change or after user-requested refresh
 
-------------------------------------------------------------------------
-r1729 | nadvornik | 2009-06-06 17:33:56 +0200 (Sat, 06 Jun 2009) | 3 lines
+commit 66643fc83bc4568484894ae282c1cc1b1f83d31f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 24 12:21:23 2009 +0000
 
-do not call signal handler from vdtree_row_expanded
-it fixes tree view for user-entered hidden directories
+    do not use cell_data_func
+    
+    cell_data_func is too slow, store formatted string in the tree_store
+    instead
 
-------------------------------------------------------------------------
-r1728 | nadvornik | 2009-06-06 13:15:09 +0200 (Sat, 06 Jun 2009) | 2 lines
+commit 8494a934706a0fa7c16e83df36d2d4fec7a61184
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 21 14:17:01 2009 +0000
 
-reduced jumping of directory tree when user clicks on folders
+    fixed destroying of menu data
+    
+    Make sure that menu destroy functions do not access parent widget
+    structures that are already destroyed
+    There are 2 ways to achieve this:
+    - use g_signal_handlers_disconnect_matched() like in vf_destroy_cb()
+    - use separate data structure passed to *_popup_menu_destroy_cb()
+      like in img-view.
 
-------------------------------------------------------------------------
-r1727 | nadvornik | 2009-06-05 23:52:37 +0200 (Fri, 05 Jun 2009) | 2 lines
+commit 7c7eb0a20e26e0b16c90ec2882559344ac537c1d
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Jul 18 08:16:54 2009 +0000
 
-simplified the code around vd_select_row
+    Fix a overrun
+    
+    data_offset + data_length could be bigger than guint which makes the
+    calculation overflow to a value smaller then size.
 
-------------------------------------------------------------------------
-r1726 | nadvornik | 2009-06-04 23:07:03 +0200 (Thu, 04 Jun 2009) | 7 lines
+commit 6e739c902d1e5cfec08c44348536b5d0c2d23199
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 2 17:37:05 2009 +0000
 
-use layout_set_fd() for changing images from a slideshow
-- this updates folder and icon in recursive slideshow mode
+    updated ChangeLog file
 
-preserve slideshow on layout change - fixes
-  https://sourceforge.net/tracker/?func=detail&aid=1998513&group_id=222125&atid=1054680
+commit 08f70c1da91476bc46ab020ba54f929ca991af5c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 2 17:31:38 2009 +0000
 
+    updated ca.po - submitted by Mecatxis
 
-------------------------------------------------------------------------
-r1725 | zas_ | 2009-06-04 21:51:20 +0200 (Thu, 04 Jun 2009) | 1 line
+commit ecfe3d0ad28feebc56f32610d9707309243a051c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 1 20:55:37 2009 +0000
 
-Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
-------------------------------------------------------------------------
-r1724 | mow | 2009-06-04 18:07:41 +0200 (Thu, 04 Jun 2009) | 4 lines
+    make sure that automake and config.h uses the same installation paths
 
-Ongoing translation
+commit 2e37aa4a9f0235e9ffe2a2daf09d85caa54c303a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 1 19:38:17 2009 +0000
 
-Now the most is translated to German language. Just the photographic
-notions are missing.
-------------------------------------------------------------------------
-r1723 | mow | 2009-06-04 18:07:16 +0200 (Thu, 04 Jun 2009) | 1 line
+    updated version string
 
-Change the order of columns for editors dialogue
-------------------------------------------------------------------------
-r1722 | nadvornik | 2009-06-03 22:05:19 +0200 (Wed, 03 Jun 2009) | 2 lines
+commit b514d250a6bf056da22f144876fb3a367c35e943
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 1 19:33:09 2009 +0000
 
-regroup sidecar files when an operation on partial group is finished
+    fixed mnemonic conflicts
 
-------------------------------------------------------------------------
-r1721 | nadvornik | 2009-06-03 00:33:53 +0200 (Wed, 03 Jun 2009) | 11 lines
+commit 9c0ca8a14835d15472fc1453bc62cd7403cb9a7a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 1 18:59:39 2009 +0000
 
-changed selection behavior as requested at
-http://sourceforge.net/tracker/?func=detail&aid=2789933&group_id=222125&atid=1054680
+    removed msgctxt keyword, older gettext fails on it
 
-file view - sidecars are added to the selection if they were expicitly selected
-            or if the entry is collapsed
-icon view - selection always contains sidecars
+commit a781a6fa2d8dfd1a452ffd0242eb6e420ec4ee80
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 1 18:32:32 2009 +0000
 
-file operations splits partially selected groups - selected files have
-disabled grouping
+    removed gettext.h reference
 
+commit 0ec10ddfd8183dfcef9e9651d86ee1dd6fab82e9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 1 07:04:42 2009 +0000
 
-------------------------------------------------------------------------
-r1720 | zas_ | 2009-06-01 18:37:30 +0200 (Mon, 01 Jun 2009) | 1 line
+    updated spec file
 
-Minor code cleanup and redundancy reduction.
-------------------------------------------------------------------------
-r1719 | nadvornik | 2009-05-31 16:32:39 +0200 (Sun, 31 May 2009) | 2 lines
+commit 21797ad0d7c06e997ca15031f3634f7992acaef2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 30 23:40:37 2009 +0000
 
-fixed incorrect type conversion
+    French translation was updated.
 
-------------------------------------------------------------------------
-r1718 | nadvornik | 2009-05-31 15:32:09 +0200 (Sun, 31 May 2009) | 3 lines
+commit 0bf27305767735ad7b0ebbd8f18ab4d0b24a5614
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 30 20:15:33 2009 +0000
 
-do not display menus ("FileMenu" etc.) in accelerator configuration
-improved tooltip texts
+    fixed an use of uninitialized value
 
-------------------------------------------------------------------------
-r1717 | nadvornik | 2009-05-31 13:08:00 +0200 (Sun, 31 May 2009) | 2 lines
+commit b5b0a8583f3e0201b0257e21546e1620d71e73e0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 30 20:12:28 2009 +0000
 
-do not block the files sent to external editors like gimp
+    fixes for a built without Exiv2
+    
+    don't try to access XMP metadata if not compiled with Exiv2
+    some metadata options are valid without Exiv2, do not disable them
 
-------------------------------------------------------------------------
-r1716 | nadvornik | 2009-05-30 22:18:22 +0200 (Sat, 30 May 2009) | 5 lines
+commit f70e420d4bffd932e7cf9d70debb74df1e96011e
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Tue Jun 30 19:53:55 2009 +0000
 
-preserve image center over short periods when the "broken image" icon is
-displayed
-http://sourceforge.net/tracker/?func=detail&aid=2793057&group_id=222125&atid=1054680
+    Revert "Add pgettext for some ambiguous strings"
+    
+    Now there should be all ambiguous strings gone. This reverts commit 1628
+    
+    With that commit also all ambiguous strings should be solved.
 
+commit ed08c31a1b8e1b458f69605e1756af6460b363e0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 30 19:12:25 2009 +0000
 
-------------------------------------------------------------------------
-r1714 | zas_ | 2009-05-26 21:41:22 +0200 (Tue, 26 May 2009) | 1 line
+    add desktop.in files to the tarball
 
-Add .desktop files to restore lossless jpeg rotation via editors.
-------------------------------------------------------------------------
-r1713 | nadvornik | 2009-05-23 23:23:06 +0200 (Sat, 23 May 2009) | 4 lines
+commit 84d6dfa42fdb4560cc895f8346256b80cbc2deeb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 29 19:48:14 2009 +0000
 
-added doxygen.conf
-https://sourceforge.net/tracker/?func=detail&aid=2795068&group_id=222125&atid=1054680
+    fixed writting to gqview legacy format
 
+commit b1e7867f8a5174e1b9650a4f9703efc3b94d20b9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jun 29 16:32:43 2009 +0000
 
-------------------------------------------------------------------------
-r1712 | nadvornik | 2009-05-23 23:07:21 +0200 (Sat, 23 May 2009) | 3 lines
+    French translation was updated.
 
-enabled PageSize code
-https://bugzilla.redhat.com/show_bug.cgi?id=222639
+commit c278582ae1a6dfa2c1b12ce3af4554b28db37d27
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jun 29 16:02:28 2009 +0000
 
-------------------------------------------------------------------------
-r1711 | zas_ | 2009-05-21 11:54:20 +0200 (Thu, 21 May 2009) | 1 line
+    Fix POTFILES.in and update regen_potfiles.sh to add .desktop.in files.
 
-Add missing vim modeline.
-------------------------------------------------------------------------
-r1710 | zas_ | 2009-05-21 11:20:48 +0200 (Thu, 21 May 2009) | 1 line
+commit f8f76cde319631e0147a286966ca7af0b13f747c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 28 13:41:51 2009 +0000
 
-Attempt to use stock gtk icons for directory list and tree views.
-------------------------------------------------------------------------
-r1709 | zas_ | 2009-05-16 13:31:48 +0200 (Sat, 16 May 2009) | 1 line
+    added geeqie-import-geeqie.desktop.in
 
-Fix up too short array, reported by Michael Schwendt.
-------------------------------------------------------------------------
-r1708 | zas_ | 2009-05-16 10:48:21 +0200 (Sat, 16 May 2009) | 11 lines
+commit 8bb48410fde2352746c65072c38331ec17faa329
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 28 11:55:54 2009 +0000
 
-Fix geeqie.desktop to match spec. Patch by Michael Schwendt.
+    libchamplain compatibility fix
 
+commit cf4208a56c616bb3dcaae93de5274dfc219a0313
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 28 09:25:47 2009 +0000
 
-$ desktop-file-validate geeqie.desktop
-geeqie.desktop: warning: value "Application;Graphics;Viewer;" for key
-"Categories" in group "Desktop Entry" contains a deprecated value
-"Application"
+    cleanup: remove some disabled code
 
-http://standards.freedesktop.org/menu-spec/menu-spec-1.0.html
+commit 3ad0a54de0b397a1f8d7ca8cb487633150060032
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 28 09:08:25 2009 +0000
 
+    warn if another operation is performed on a file with unsaved metadata
 
-------------------------------------------------------------------------
-r1707 | zas_ | 2009-05-14 22:45:34 +0200 (Thu, 14 May 2009) | 1 line
+commit dadc45eb233a88708878440db9dc0746206f6246
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 28 08:49:28 2009 +0000
 
-Fix up unused variables warnings.
-------------------------------------------------------------------------
-r1706 | zas_ | 2009-05-14 22:32:14 +0200 (Thu, 14 May 2009) | 1 line
+    sync histogram state after enabling it from the menu
 
-Merge common thumb code from view_file_list and view_file_icon to view_file.
-------------------------------------------------------------------------
-r1704 | nadvornik | 2009-05-12 22:54:58 +0200 (Tue, 12 May 2009) | 2 lines
+commit a61e74ef49b2910e1c2b52699455707a110344ba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 28 08:32:27 2009 +0000
 
-added some notes to README file
+    added script for importing GQView and Geeqie-alpha metadata
 
-------------------------------------------------------------------------
-r1703 | nadvornik | 2009-05-12 22:38:26 +0200 (Tue, 12 May 2009) | 2 lines
+commit db44d472fbb0f81ba00ac282b9e4fa04fd37d64e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 27 23:12:52 2009 +0000
 
-fixed compilation with older gtk
+    put preferences to separate submenu
 
-------------------------------------------------------------------------
-r1702 | nadvornik | 2009-05-12 22:17:03 +0200 (Tue, 12 May 2009) | 2 lines
+commit d960407def39b244453756528e281209f1c47135
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Jun 27 22:58:20 2009 +0000
 
-updated TODO list
+    German translation update
 
-------------------------------------------------------------------------
-r1701 | nadvornik | 2009-05-12 20:25:18 +0200 (Tue, 12 May 2009) | 2 lines
+commit 6595653e7fdcd3f9126e2382e61309a6fddceec7
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Jun 27 22:57:56 2009 +0000
 
-added GPS map support - patch by Colin Clark 
+    Complete commit @1747 (intltool usage)
+    
+    With using intltool the localisation will fail cause of missing
+    desktop.in file. Also the old desktop files are obsoleted by this
+    commit.
+    
+    Also it is not necessary any more to have a './' in front of the files
+    in POTFILES.in.
 
-------------------------------------------------------------------------
-r1700 | zas_ | 2009-05-12 08:54:05 +0200 (Tue, 12 May 2009) | 1 line
+commit 3000474f9d40efec1c4167fe3c87dce3e2814d18
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Jun 27 22:56:50 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1699 | zas_ | 2009-05-12 08:42:20 +0200 (Tue, 12 May 2009) | 1 line
+    Fix AM_CFLAGS and AM_CXXFLAGS from @1701
+    
+    The commit 1701 did insert wrong lines for AM_CFLAGS and AM_CXXFLAGS to
+    src/Makefile.am.
+    
+    I also did some minor whitespace fixes and made the internal
+    documentation consistent by using \ than @ for doxygen doc.
 
-Fix up tooltip text: Color _Management -> Color Management.
-------------------------------------------------------------------------
-r1698 | nadvornik | 2009-05-11 22:50:13 +0200 (Mon, 11 May 2009) | 5 lines
+commit 1282982b76068795acda07efe761286c1d850927
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 27 22:40:25 2009 +0000
 
-added keyboard configuration dialog 
-mostly written by Petr Ostadal
-alternate keys are not yet fully configurable - the corresponding code
-is commented out
+    added command for editing ufraw id file, changed menu location
 
-------------------------------------------------------------------------
-r1697 | zas_ | 2009-05-11 12:10:13 +0200 (Mon, 11 May 2009) | 1 line
+commit 5865742b0f0e0d9e89c6f8cfc8789e37ab3cfc09
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 27 21:12:07 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1696 | zas_ | 2009-05-11 11:55:39 +0200 (Mon, 11 May 2009) | 1 line
+    reordered View menu
 
-Include missing header file.
-------------------------------------------------------------------------
-r1695 | nadvornik | 2009-05-09 21:45:24 +0200 (Sat, 09 May 2009) | 2 lines
+commit 2c3454d78f2e002ad86059746d6dbc15070110d0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 27 20:47:17 2009 +0000
 
-expose the file grouping flag to the user
+    use radio buttons for file and dir mode in popup menu
 
-------------------------------------------------------------------------
-r1694 | nadvornik | 2009-05-09 21:25:51 +0200 (Sat, 09 May 2009) | 2 lines
+commit 9ef0898770dc7fb0e286c777a1ece3896f22a1ca
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 27 20:12:56 2009 +0000
 
-extended the list of grouped metadata tags
+    simplified menu_item_add_radio usage
 
-------------------------------------------------------------------------
-r1693 | nadvornik | 2009-05-09 19:02:35 +0200 (Sat, 09 May 2009) | 2 lines
+commit f9509525508c1f38a99edf06d5203f2cb063b81a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 27 17:54:31 2009 +0000
 
-added some structure to the metadata preferences dialog
+    created Files and Folders submenu
 
-------------------------------------------------------------------------
-r1692 | nadvornik | 2009-05-08 20:29:09 +0200 (Fri, 08 May 2009) | 2 lines
+commit 8948dca3981a8f5484d8cc658dd5253cf9bc9f85
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 27 15:47:50 2009 +0000
 
-better tooltip for disabled lcms
+    improved overlay menu
+    
+    - indicate overlay and histogram state in toggle and radio entries in
+      the menu
+    - all entries have visible effect in all modes
 
-------------------------------------------------------------------------
-r1691 | nadvornik | 2009-05-07 22:24:35 +0200 (Thu, 07 May 2009) | 2 lines
+commit a374a03dd9be5d447a8a0f0d45b4a2b7a6725cb1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 24 20:31:30 2009 +0000
 
-limit metadata details dialog size
+    test if an accelerator can be stored
+    
+    gtk_accel_map_change_entry can't change accelerators
+    to keys like arrows. Test this and show the keys in the list
+    only if they can be really changed.
+    
+    https://sourceforge.net/tracker/?func=detail&aid=2805139&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1690 | nadvornik | 2009-05-07 21:52:38 +0200 (Thu, 07 May 2009) | 2 lines
+commit 7bbcd188f372a89bc2ff72d80ed8a20fec5b95ca
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 23 19:20:48 2009 +0000
 
-fixed keyword tree initialization
+    improved description string
 
-------------------------------------------------------------------------
-r1689 | nadvornik | 2009-05-07 21:38:07 +0200 (Thu, 07 May 2009) | 2 lines
+commit 5a18119c672fff2fb43b3789ffedb8932c960e37
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun Jun 21 22:52:45 2009 +0000
 
-updated version string to beta1
+    Localizing one string
 
-------------------------------------------------------------------------
-r1688 | nadvornik | 2009-05-07 21:34:33 +0200 (Thu, 07 May 2009) | 2 lines
+commit d820c538051df54a6316047a3da7ce77414fa980
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun Jun 21 22:52:08 2009 +0000
 
-enabled XDG directory layout
+    Fix two memory failures
+    
+    1. if the description field for a exif information is empty the program
+       dumps core when trying to change this. The reason is a strcmp with a
+       NULL value.
+    
+       The fix add the small functionality to set the field to default when
+       it is set empty.
+    
+    2. There was a g_strdup miss in exif.c which could end in memory
+       corruption.
+
+commit 48de954045b9d2f5e00ef8ef1be0c23f1babf8ec
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 21 20:14:53 2009 +0000
+
+    improved file list update priority
+    
+    - update list with lower priority than the priority of file operations
+    - make sure that it is updated at least once per 2 seconds
+
+commit 8f5b864badbfce732abf5f389688052ece5ce8c1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 21 13:28:02 2009 +0000
+
+    fixed jumping of filelist on focus_in event
+
+commit 624256fd4593dec4dda712194794a3bf85bcdb7f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 21 12:39:58 2009 +0000
 
-------------------------------------------------------------------------
-r1687 | nadvornik | 2009-05-07 21:30:15 +0200 (Thu, 07 May 2009) | 2 lines
+    fixed updating of marks in sidecars
 
-use "keywords" instead of "tags" in option name, it is more consistent
+commit 8c5f76523ca80ce6b73e625ad8304af1e2acb88e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 20 23:15:11 2009 +0000
 
-------------------------------------------------------------------------
-r1686 | zas_ | 2009-05-03 19:54:37 +0200 (Sun, 03 May 2009) | 1 line
+    various geeqie-ufraw improvements
+    
+    - handle xmp sidecars
+    - commandline options, help
+
+commit ad121b74463720f97b4ff342580227d07b30d52c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 20 18:42:23 2009 +0000
+
+    fixed leak in file_util_* functions
+    
+    - file_util_* are changed to take over the filelist and free it when
+      done
+    - make sure that these functions are called correctly
+
+commit 64ac3a19f5d513a64d8824bbc131323341f82f49
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 20 16:46:32 2009 +0000
+
+    improved list view
+    
+    - do the string formatting in the cell_data callback
+    - show the sidecar list only in collapsed entries
+
+commit 689f00cfe4b24d5a3c9adbe90faa1127b01edc88
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 20 08:51:07 2009 +0000
+
+    always check for deleted sidecar files
+
+commit 2ac559008ae7dd561c191ee59e2ca0bf23536f06
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 19 22:37:30 2009 +0000
+
+    fixed regexp usage
+
+commit f553c1adfbaefb4e6c6e5f63243d7045298c1fb0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 19 22:34:52 2009 +0000
+
+    run external commands from current directory even with no files
+
+commit 6b90e03b1485fc0bb2c97369c9b78e520fa6d641
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jun 18 20:46:33 2009 +0000
+
+    ufraw-batch script
+    
+    added a more complicated script that demonstrates advanced
+    features of external editors:
+    - create a jpeg + ufraw id file for each raw file
+    - update the jpeg if the id file was modified
+
+commit ce28ddc9eb3aa2525c3264a5d108ad0c0663b01c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 17 18:41:10 2009 +0000
+
+    made file_util_start_editor_from_file consider also sidecars
+
+commit 74888a81cf4563307c3f5814f571aaa47b72de72
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 17 18:19:11 2009 +0000
+
+    fixed problems with floor/ceil
+    
+    - introduce macros ROUND_DOWN, ROUND_UP
+    - fixed incorrect usage of floor/ceil functions on int arguments
+    
+    patch by  Yuriy Kaminskiy
+
+commit a9e0a03817c421da14093d05e41970da740c44a0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 15 20:50:35 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1685 | nadvornik | 2009-05-03 00:34:46 +0200 (Sun, 03 May 2009) | 2 lines
+    use intltool for desktop file translation
+    
+    - desktop files are translated via .po files together with other strings
+    - make update-po is replaced with intltool-update [lang]
 
-added stock icons for slideshow
+commit f63a2dd3fa1b61bec9a04c877f3ca9953b467133
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 15 19:13:45 2009 +0000
 
-------------------------------------------------------------------------
-r1684 | nadvornik | 2009-05-03 00:19:42 +0200 (Sun, 03 May 2009) | 2 lines
+    improved rotation script
+    
+    - applies the orientation from metadata
+    - uses exiftran for jpeg an ImageMagick for other files
 
-updated czech translation
+commit 2900ceba02cd5b6c5d7c1d818dacecc9a65720d4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jun 14 08:49:39 2009 +0000
 
-------------------------------------------------------------------------
-r1683 | nadvornik | 2009-05-02 13:14:24 +0200 (Sat, 02 May 2009) | 2 lines
+    French translation was updated.
 
-force the metadata dialog if it was triggered by the menu or the button
+commit 1401afe8606b92cfa9f3b52989448e86833ed248
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Jun 13 22:19:57 2009 +0000
 
-------------------------------------------------------------------------
-r1682 | nadvornik | 2009-05-02 12:59:36 +0200 (Sat, 02 May 2009) | 2 lines
+    Update documentation
+    
+    Now it holds a more verbose doxygen description as discussed in mailing
+    list.
+    
+    - Doxygen style description
+    - Small visibility changes
+    - Commit message change
 
-action table clean up
+commit 369eab0297a8ba20f117db5c4c751907e22479ed
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 13 19:26:32 2009 +0000
 
-------------------------------------------------------------------------
-r1681 | nadvornik | 2009-05-02 11:15:56 +0200 (Sat, 02 May 2009) | 3 lines
+    the options for custom border color were made independent
 
-improved pixel info, changed the menu entry from "Hide" to "Show",
-added it on default status bar
+commit 1283b61934436f9ba1563633c0892ba8245b16aa
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 11 18:18:07 2009 +0000
 
-------------------------------------------------------------------------
-r1680 | nadvornik | 2009-05-02 01:40:01 +0200 (Sat, 02 May 2009) | 3 lines
+    French translation was updated.
 
-"<control>S" seems to be hardcoded hotkey for GTK_STOCK_SAVE
-use <shift>S for sort manager
+commit 420f3600446e33397c93fe631e2fffb5b8a6f43d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 11 17:34:37 2009 +0000
 
-------------------------------------------------------------------------
-r1679 | nadvornik | 2009-05-02 01:15:51 +0200 (Sat, 02 May 2009) | 3 lines
+    Fix up compilation using make -jN: sometimes it fails due to order of headers inclusion.
 
-- handle color profile and write metadata buttons on statusbar by ui_manager
-- statusbar buttons made configurable
+commit f5dbedfb0a27731a28584e4734b7fd548222140e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 10 20:45:24 2009 +0000
 
-------------------------------------------------------------------------
-r1678 | nadvornik | 2009-05-01 11:49:27 +0200 (Fri, 01 May 2009) | 3 lines
+    make sure that a directory exists on saving desktop files
 
-allow external editors without parameters, as long as they are in
-category 'X-Geeqie'
+commit 545a2c2ca86722831c57ff5f5d8b1c641e6d6988
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 10 20:26:47 2009 +0000
 
-------------------------------------------------------------------------
-r1677 | nadvornik | 2009-04-29 22:28:54 +0200 (Wed, 29 Apr 2009) | 2 lines
+    do not install helper scripts into /usr/bin
+    
+    - install the helper scripts into pkglibdir, that is /usr/lib/geeqie
+    - add the directory to $PATH on startup - the Exec line in desktop files
+      does not have to contain full path
+    
+    fixes
+    https://sourceforge.net/tracker/?func=detail&aid=2801121&group_id=222125&atid=1054680
 
-updated czech translation, not yet complete
+commit c266b1d322f46134d567ce59168746575944e3d1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 9 19:12:37 2009 +0000
 
-------------------------------------------------------------------------
-r1676 | zas_ | 2009-04-28 23:40:00 +0200 (Tue, 28 Apr 2009) | 1 line
+    enabled color management in img-view
+    
+    patch by Omari Stephens
 
-French translation was updated.
-------------------------------------------------------------------------
-r1675 | zas_ | 2009-04-28 23:38:20 +0200 (Tue, 28 Apr 2009) | 1 line
+commit 0dbb46cefd841e6fff6ea1bd002829db6f519bdf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 9 19:08:52 2009 +0000
 
-Update POTFILES.in: cellrenderericon.c removed, color-man.c added.
-------------------------------------------------------------------------
-r1674 | zas_ | 2009-04-28 23:37:27 +0200 (Tue, 28 Apr 2009) | 1 line
+    fixed leak in image_post_process_color
+    
+    patch by Omari Stephens
 
-Fix up po/Makefile to rebuild geeqie.pot when POTFILES.in was modified. Without this change, new translatable strings in recently added files were not available for translation in various .po files after a make update-po. Makefile.in.in.patch was modified to include this fix plus some minor cleanups.
-------------------------------------------------------------------------
-r1673 | nadvornik | 2009-04-28 22:09:41 +0200 (Tue, 28 Apr 2009) | 2 lines
+commit 3c31271012cd131271872a32dc5214a81010d665
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 8 19:05:49 2009 +0000
 
-do not translate internal strings
+    unify code paths for New directory
+    keep the directory visible after rename
+    https://sourceforge.net/tracker/?func=detail&aid=1951183&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1672 | nadvornik | 2009-04-28 08:55:56 +0200 (Tue, 28 Apr 2009) | 2 lines
+commit 0128d5e7deb6ec5772daeb22edcb5c5efc918996
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 7 10:11:05 2009 +0000
 
-added new files
+    do not show wide frame in single image mode
+    it partially fixes
+    https://sourceforge.net/tracker/?func=detail&aid=2797348&group_id=222125&atid=1054683
 
-------------------------------------------------------------------------
-r1671 | nadvornik | 2009-04-28 08:54:59 +0200 (Tue, 28 Apr 2009) | 2 lines
+commit 831963138ddff7c9d9d29e39ecf677535e679ec3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 6 22:51:55 2009 +0000
 
-compilation fixes for older glib and gtk
+    added mark filter to menu - now it is possible to assign hotkeys
 
-------------------------------------------------------------------------
-r1670 | zas_ | 2009-04-28 01:07:59 +0200 (Tue, 28 Apr 2009) | 1 line
+commit da1d8ad7407bec7c000684ad9466c45a03243467
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 6 19:39:46 2009 +0000
 
-French translation was updated: fix few main menu mnenonics.
-------------------------------------------------------------------------
-r1669 | nadvornik | 2009-04-27 23:39:56 +0200 (Mon, 27 Apr 2009) | 2 lines
+    preserve zoom value on fullscreen startup
 
-compilation fixes
+commit 0b06a8bd76d495c199fabad762571a4f9df9a175
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 6 17:28:16 2009 +0000
 
-------------------------------------------------------------------------
-r1668 | nadvornik | 2009-04-27 22:19:21 +0200 (Mon, 27 Apr 2009) | 2 lines
+    swap x and y scale when scaling rotated images - it fixes tiles that were
+    sometimes off by 1 pixel - thanks Petr for reporting,
+    code cleanup
 
-"make dist" fixes
+commit 538eafee798a9adc76f91daa7b0b7ee31405e89f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jun 6 17:02:21 2009 +0000
 
-------------------------------------------------------------------------
-r1667 | zas_ | 2009-04-26 16:08:44 +0200 (Sun, 26 Apr 2009) | 1 line
+    French translation was updated.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1666 | nadvornik | 2009-04-26 13:38:28 +0200 (Sun, 26 Apr 2009) | 2 lines
+commit 0b3615164ce594afae630a1e652099d14308c356
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 6 16:14:07 2009 +0000
 
-small fixes
+    better implementation of tree_view_row_get_visibility,
+    gtk_tree_view_set_cursor is not sufficient in some cases, call also
+    tree_view_row_make_visible
 
-------------------------------------------------------------------------
-r1665 | nadvornik | 2009-04-26 11:25:52 +0200 (Sun, 26 Apr 2009) | 2 lines
+commit 2ca07031f3571cee3851b885ac9eb466d0485648
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 6 15:33:56 2009 +0000
 
-fixed return from metadata_write_revert
+    do not call signal handler from vdtree_row_expanded
+    it fixes tree view for user-entered hidden directories
 
-------------------------------------------------------------------------
-r1664 | nadvornik | 2009-04-26 11:01:35 +0200 (Sun, 26 Apr 2009) | 2 lines
+commit 1bd43a679034412c6ee7f82676c027f7db73a602
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 6 11:15:09 2009 +0000
 
-added an option to write image orientation to the metadata
+    reduced jumping of directory tree when user clicks on folders
 
-------------------------------------------------------------------------
-r1663 | nadvornik | 2009-04-26 00:08:09 +0200 (Sun, 26 Apr 2009) | 3 lines
+commit 2aa7548fca3a27dfb8b891d36507adc918e258ad
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 5 21:52:37 2009 +0000
 
-separated Orientation and Grayscale functions
-moved Grayscale to Color management menu
+    simplified the code around vd_select_row
 
-------------------------------------------------------------------------
-r1662 | nadvornik | 2009-04-25 22:55:11 +0200 (Sat, 25 Apr 2009) | 2 lines
+commit e88a00bed30f1083f221a96876a0ddd84f44623f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jun 4 21:07:03 2009 +0000
 
-added more info to the details dialog
+    use layout_set_fd() for changing images from a slideshow
+    - this updates folder and icon in recursive slideshow mode
+    
+    preserve slideshow on layout change - fixes
+      https://sourceforge.net/tracker/?func=detail&aid=1998513&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1661 | nadvornik | 2009-04-25 01:26:49 +0200 (Sat, 25 Apr 2009) | 2 lines
+commit f333692b5cb1214bfc7b5e890894c7cb8a7c49a0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 4 19:51:20 2009 +0000
 
-added details dialog for other operations too
+    Add an option to Image preferences to restrict custom border to fullscreen mode only. Bug 2798062.
 
-------------------------------------------------------------------------
-r1660 | nadvornik | 2009-04-25 00:51:00 +0200 (Sat, 25 Apr 2009) | 2 lines
+commit 4751713609feee94ac540b8d57ebbdf65b9bb55d
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Thu Jun 4 16:07:41 2009 +0000
 
-added possibility to exclude individual files
+    Ongoing translation
+    
+    Now the most is translated to German language. Just the photographic
+    notions are missing.
 
-------------------------------------------------------------------------
-r1659 | nadvornik | 2009-04-23 23:15:14 +0200 (Thu, 23 Apr 2009) | 2 lines
+commit 8e6775025b5874e2bb686854009a4fb07dd74909
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Thu Jun 4 16:07:16 2009 +0000
 
-fixed writting metadata behavior at exit
+    Change the order of columns for editors dialogue
 
-------------------------------------------------------------------------
-r1658 | nadvornik | 2009-04-23 23:12:19 +0200 (Thu, 23 Apr 2009) | 2 lines
+commit 21b5ebf3430ded75165d2b4caf8baef41dce6bae
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 3 20:05:19 2009 +0000
 
-added an image to the file details dialog
+    regroup sidecar files when an operation on partial group is finished
 
-------------------------------------------------------------------------
-r1657 | nadvornik | 2009-04-23 22:48:03 +0200 (Thu, 23 Apr 2009) | 2 lines
+commit 347fc7ce81fd08f1a8977f67cff7ae18e9d175c6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 2 22:33:53 2009 +0000
 
-differentiate between "Cancel" and "Discard changes"
+    changed selection behavior as requested at
+    http://sourceforge.net/tracker/?func=detail&aid=2789933&group_id=222125&atid=1054680
+    
+    file view - sidecars are added to the selection if they were expicitly selected
+                or if the entry is collapsed
+    icon view - selection always contains sidecars
+    
+    file operations splits partially selected groups - selected files have
+    disabled grouping
 
-------------------------------------------------------------------------
-r1656 | zas_ | 2009-04-21 23:47:11 +0200 (Tue, 21 Apr 2009) | 1 line
+commit 5a743f0af211c998eb7c38a6f5736fff5ca22899
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jun 1 16:37:30 2009 +0000
 
-Fix up few warnings (especially on 64bits platforms).
-------------------------------------------------------------------------
-r1655 | nadvornik | 2009-04-21 23:16:32 +0200 (Tue, 21 Apr 2009) | 2 lines
+    Minor code cleanup and redundancy reduction.
 
-fixed metadata.confirm_on_dir_change
+commit ce00bafc5df7e6b25402cd9017618b9e57f0b9f0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun May 31 14:32:39 2009 +0000
 
-------------------------------------------------------------------------
-r1654 | nadvornik | 2009-04-21 23:07:28 +0200 (Tue, 21 Apr 2009) | 2 lines
+    fixed incorrect type conversion
 
-added possibility to show modifiied metadata before write
+commit 7c03436375c2931a9ebe20706648ea9f40195265
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun May 31 13:32:09 2009 +0000
 
-------------------------------------------------------------------------
-r1653 | nadvornik | 2009-04-20 23:34:16 +0200 (Mon, 20 Apr 2009) | 8 lines
+    do not display menus ("FileMenu" etc.) in accelerator configuration
+    improved tooltip texts
 
-added remote interface for exporting additional info (sidecars,
-destination) to external commands
+commit 7166e8e6822956cfc657744e4257af67f6152542
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun May 31 11:08:00 2009 +0000
 
-see the symlink command for an example
+    do not block the files sent to external editors like gimp
 
-http://sourceforge.net/tracker/?func=detail&aid=2488845&group_id=222125&atid=1054680
+commit f6b5317b9869a7640793c47eda0bbd39253ad363
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 30 20:18:22 2009 +0000
 
+    preserve image center over short periods when the "broken image" icon is
+    displayed
+    http://sourceforge.net/tracker/?func=detail&aid=2793057&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1652 | nadvornik | 2009-04-20 23:07:52 +0200 (Mon, 20 Apr 2009) | 2 lines
+commit 894ebcaf7da4ea3b72486192c43c15922a3bb68b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 26 19:41:22 2009 +0000
 
-write info and debugging messages to stderr
+    Add .desktop files to restore lossless jpeg rotation via editors.
 
-------------------------------------------------------------------------
-r1651 | nadvornik | 2009-04-20 21:44:50 +0200 (Mon, 20 Apr 2009) | 2 lines
+commit 257284ed5d98e13733f90bff28124cdc75c85238
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 23 21:23:06 2009 +0000
 
-improved remote protocol to allow bidirectional communication
+    added doxygen.conf
+    https://sourceforge.net/tracker/?func=detail&aid=2795068&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1650 | nadvornik | 2009-04-17 22:26:22 +0200 (Fri, 17 Apr 2009) | 2 lines
+commit 701705f5255fb572f11beb9cb167a4b1729b61fc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 23 21:07:21 2009 +0000
 
-fixed tests for vd_find_row return value
+    enabled PageSize code
+    https://bugzilla.redhat.com/show_bug.cgi?id=222639
 
-------------------------------------------------------------------------
-r1649 | mow | 2009-04-14 23:51:29 +0200 (Tue, 14 Apr 2009) | 3 lines
+commit 94698117d7c312c420ae83d26bb80fd973a16b90
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 21 09:54:20 2009 +0000
 
-German translation updated
+    Add missing vim modeline.
 
-With some help from de.alt.rec.digitalfotografie.
-------------------------------------------------------------------------
-r1648 | zas_ | 2009-04-14 22:54:50 +0200 (Tue, 14 Apr 2009) | 1 line
+commit 8b292110747064f281bd8ebb58be68f35ba5ea62
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 21 09:20:48 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1647 | nadvornik | 2009-04-14 00:40:47 +0200 (Tue, 14 Apr 2009) | 2 lines
+    Attempt to use stock gtk icons for directory list and tree views.
 
-color profile fixes
+commit 2a1d12620e62c03dc69d958dd861e8506146b03c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 16 11:31:48 2009 +0000
 
-------------------------------------------------------------------------
-r1646 | nadvornik | 2009-04-13 16:39:50 +0200 (Mon, 13 Apr 2009) | 2 lines
+    Fix up too short array, reported by Michael Schwendt.
 
-show color management status on statusbar
+commit db09073d27d708eec901db85729b7c96d513cae8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 16 08:48:21 2009 +0000
 
-------------------------------------------------------------------------
-r1645 | nadvornik | 2009-04-13 12:55:49 +0200 (Mon, 13 Apr 2009) | 3 lines
+    Fix geeqie.desktop to match spec. Patch by Michael Schwendt.
+    
+    
+    $ desktop-file-validate geeqie.desktop
+    geeqie.desktop: warning: value "Application;Graphics;Viewer;" for key
+    "Categories" in group "Desktop Entry" contains a deprecated value
+    "Application"
+    
+    http://standards.freedesktop.org/menu-spec/menu-spec-1.0.html
 
-support X11 screen profile
-http://freedesktop.org/wiki/ICC_Profiles_in_X_Specification_0.3
+commit 939990870184f816d033427411963290f6ade227
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 14 20:45:34 2009 +0000
 
-------------------------------------------------------------------------
-r1644 | nadvornik | 2009-04-13 10:09:56 +0200 (Mon, 13 Apr 2009) | 2 lines
+    Fix up unused variables warnings.
 
-moved color profiles from statusbar to View menu
+commit 93e62dee098e12678bee8560811f2676d66a169c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 14 20:32:14 2009 +0000
 
-------------------------------------------------------------------------
-r1643 | mow | 2009-04-12 19:58:55 +0200 (Sun, 12 Apr 2009) | 1 line
+    Merge common thumb code from view_file_list and view_file_icon to view_file.
 
-German translation updated
-------------------------------------------------------------------------
-r1642 | zas_ | 2009-04-12 17:06:43 +0200 (Sun, 12 Apr 2009) | 1 line
+commit 63ea2c8531d9336883dfeacf232c15e71fe93d90
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 12 20:54:58 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1641 | mow | 2009-04-12 13:02:03 +0200 (Sun, 12 Apr 2009) | 3 lines
+    added some notes to README file
 
-Update POTFILES.in
+commit e0541d552647c5878d8ce21e111563837e0c9d9b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 12 20:38:26 2009 +0000
 
-metadata.c was not in the POTFILES.in.
-------------------------------------------------------------------------
-r1640 | nadvornik | 2009-04-12 10:36:53 +0200 (Sun, 12 Apr 2009) | 2 lines
+    fixed compilation with older gtk
 
-fixed ambiguous strings
+commit ff49d58f802d8a012bc0ffb56826047f40e97be6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 12 20:17:03 2009 +0000
 
-------------------------------------------------------------------------
-r1639 | nadvornik | 2009-04-11 23:28:46 +0200 (Sat, 11 Apr 2009) | 2 lines
+    updated TODO list
 
-improved default keyword tree
+commit 19db93d6eb70f5163b098be3390476c19f10b54e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 12 18:25:18 2009 +0000
 
-------------------------------------------------------------------------
-r1638 | mow | 2009-04-11 22:46:37 +0200 (Sat, 11 Apr 2009) | 4 lines
+    added GPS map support - patch by Colin Clark
 
-Fix that the output of msgfmt could be singular
+commit f0115682dc9aa6726bb6f582af15eae5b62bb0c1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 12 06:54:05 2009 +0000
 
-The output of msgfmt could be singular if there is only one translation
-of the given type.
-------------------------------------------------------------------------
-r1636 | mow | 2009-04-11 21:51:03 +0200 (Sat, 11 Apr 2009) | 4 lines
+    French translation was updated.
 
-Allow to configure case handling of keywords
+commit d9ddcf2b5bfe86a11a674269b2b0ba3d1e41a694
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 12 06:42:20 2009 +0000
 
-Sometimes I use just different case for keywords. This should be
-chooseable.
-------------------------------------------------------------------------
-r1635 | nadvornik | 2009-04-11 21:35:03 +0200 (Sat, 11 Apr 2009) | 2 lines
+    Fix up tooltip text: Color _Management -> Color Management.
 
-fixed updating of filelist marks
+commit b8f9d00fd3a2a654b5b7121a520da9ed1e6c6a96
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon May 11 20:50:13 2009 +0000
 
-------------------------------------------------------------------------
-r1634 | mow | 2009-04-11 20:34:12 +0200 (Sat, 11 Apr 2009) | 9 lines
+    added keyboard configuration dialog
+    mostly written by Petr Ostadal
+    alternate keys are not yet fully configurable - the corresponding code
+    is commented out
 
-Adding debian packaging informations
+commit 59e6c19758556f5b4bfaccfdce0ec356289c0b66
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 11 10:10:13 2009 +0000
 
-Adding debian control directory to create a geeqie debian package.
+    French translation was updated.
 
-NOTES: (To be fixed in autoconf)
-   - LIRC must be explicit _enabled_ instead of disable. This is wrong
-     documented.
-   - It might be a good idea to derivate the readmedir and the htmldir
-     from docdir.
-------------------------------------------------------------------------
-r1633 | mow | 2009-04-11 18:34:25 +0200 (Sat, 11 Apr 2009) | 4 lines
+commit b8baff4dae2056c190eb6274bf48764521192aa0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 11 09:55:39 2009 +0000
 
-Implementing CTRL-W to close advanced exif window
+    Include missing header file.
 
-In fact, this implements keypress event handling in the advanced exif
-window to handle CTRL-W event.
-------------------------------------------------------------------------
-r1632 | mow | 2009-04-10 15:54:08 +0200 (Fri, 10 Apr 2009) | 5 lines
+commit 8ae8938d7f55e6b8b1db3a5d699366cc2068baab
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 9 19:45:24 2009 +0000
 
-Just update the internal sort method
+    expose the file grouping flag to the user
 
-There is no other use of the internal sort method than speeding up the
-sorting of a collection. So setting it to SORT_NONE is the better
-choice.
-------------------------------------------------------------------------
-r1631 | mow | 2009-04-10 15:44:37 +0200 (Fri, 10 Apr 2009) | 4 lines
+commit 70138111fc44652288eb415f4c3587b0a69a661b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 9 19:25:51 2009 +0000
 
-Implement random sort method for collections
+    extended the list of grouped metadata tags
 
-This patch allows to randomize the collections. (Closes: #2497413)
-https://sourceforge.net/tracker/?func=detail&aid=2497413&group_id=222125&atid=1054683
-------------------------------------------------------------------------
-r1630 | mow | 2009-04-10 12:18:42 +0200 (Fri, 10 Apr 2009) | 9 lines
+commit 5a13c696e65d72adc9b75d8955903a857ee845a1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 9 17:02:35 2009 +0000
 
-Fix the broken statistic generation
+    added some structure to the metadata preferences dialog
 
-The output of msgfmt has different format if no fuzzy translations (or
-even no translated) are available. I fixed that by parsing the output of
-msgfmt more intelligent.
+commit 6736cd683214e6d52b2784866f710f8a4a1adc48
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 8 18:29:09 2009 +0000
 
-Drawback of the solution is that the parsing will not work if the output
-of msgfmt use not the strings "translated messages", "fuzzy
-translations" and "untranslated messages".
-------------------------------------------------------------------------
-r1629 | mow | 2009-04-10 11:47:40 +0200 (Fri, 10 Apr 2009) | 4 lines
+    better tooltip for disabled lcms
 
-German translation updated
+commit 38d38b50801979777ad5eca4bf18ac5769cab5ba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu May 7 20:24:35 2009 +0000
 
-Also included a update in the README file. Finally I add myself to that
-file. :-)
-------------------------------------------------------------------------
-r1628 | mow | 2009-04-10 11:47:20 +0200 (Fri, 10 Apr 2009) | 8 lines
+    limit metadata details dialog size
 
-Add pgettext for some ambiguous strings
+commit ecf3f93d54ef1c36365811d00e1a810a1656a189
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu May 7 19:52:38 2009 +0000
 
-There are some strings which are ambiguous to translate. There is the
-pgettext function to solf that problem.
+    fixed keyword tree initialization
 
-For example, locations can be translated to german by Ortsangaben
-(geographical) or by Pfad (filesystem). I am sure there are also some
-ambiguous in other languages.
-------------------------------------------------------------------------
-r1627 | zas_ | 2009-04-09 22:40:16 +0200 (Thu, 09 Apr 2009) | 1 line
+commit dee4299ea23692b3aefb7f29b12918fa05aed927
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu May 7 19:38:07 2009 +0000
 
-Minor french translations fixes.
-------------------------------------------------------------------------
-r1626 | zas_ | 2009-04-09 22:07:16 +0200 (Thu, 09 Apr 2009) | 1 line
+    updated version string to beta1
 
-Fix histogram labels in french.
-------------------------------------------------------------------------
-r1625 | zas_ | 2009-04-09 21:58:03 +0200 (Thu, 09 Apr 2009) | 1 line
+commit 0dfdc453bc25ed4a2e1fde1ccf2ddf5f73e5604e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu May 7 19:34:33 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1624 | nadvornik | 2009-04-08 21:32:30 +0200 (Wed, 08 Apr 2009) | 4 lines
+    enabled XDG directory layout
 
-improved Exiv2 error reporting:
-- use correct charset
-- respect --debug
+commit 34a545b2adf71400fa340ad002f6b893d5e8dda3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu May 7 19:30:15 2009 +0000
 
-------------------------------------------------------------------------
-r1623 | mow | 2009-04-07 01:59:54 +0200 (Tue, 07 Apr 2009) | 4 lines
+    use "keywords" instead of "tags" in option name, it is more consistent
 
-Nest new keywords inside existing
+commit fb440ecd8db37f9b877bfb702b97e91422cd334f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 3 17:54:37 2009 +0000
 
-It is boring to first add a bunch of keywords and then move them to the
-new location. It is more natural to add them as child to existing ons.
-------------------------------------------------------------------------
-r1622 | mow | 2009-04-07 01:59:38 +0200 (Tue, 07 Apr 2009) | 4 lines
+    French translation was updated.
 
-Fix the is_keyword bug
+commit bcc9ac0c44afd4282d63ea05e889ec19cf1cf458
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 2 22:34:46 2009 +0000
 
-The is_keyword would be new set when placing the radio buttons. This
-Patch fix it by setting the variable afterwards.
-------------------------------------------------------------------------
-r1621 | mow | 2009-04-07 01:39:27 +0200 (Tue, 07 Apr 2009) | 1 line
+    added stock icons for slideshow
 
-Set the focus for new keyword dialog
-------------------------------------------------------------------------
-r1620 | zas_ | 2009-04-07 00:18:13 +0200 (Tue, 07 Apr 2009) | 1 line
+commit b9dbcccc72df0cf7e537ae9acc776c582d44a24b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 2 22:19:42 2009 +0000
 
-Disable unused functions when compiled without threads support, prevents few warnings.
-------------------------------------------------------------------------
-r1619 | zas_ | 2009-04-07 00:13:54 +0200 (Tue, 07 Apr 2009) | 10 lines
+    updated czech translation
 
-Fix up event source ids type: gint -> guint.
-Functions like g_timeout_add() or g_idle_add() return a guint
-greater than 0, but in most places it was wrongly stored as int
-and initialized to -1.
-This broke assertions matching in g_source_remove() for example
-since id was always greater than 0 even when timer was not set
-(-1 was casted to the biggest guint).
+commit baf66bb1af89cfb58a59eb324ef21484c5bca379
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 2 11:14:24 2009 +0000
 
+    force the metadata dialog if it was triggered by the menu or the button
 
+commit 034c8455de62bcdf0b0e5bb7741e3625b911bfc0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 2 10:59:36 2009 +0000
 
-------------------------------------------------------------------------
-r1618 | nadvornik | 2009-04-06 23:52:49 +0200 (Mon, 06 Apr 2009) | 2 lines
+    action table clean up
 
-re-ordered some options, improved descriptions
+commit bf8cb167b7ccb92cc324ade7ae0af00cca98f2e2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 2 09:15:56 2009 +0000
 
-------------------------------------------------------------------------
-r1617 | nadvornik | 2009-04-06 22:38:54 +0200 (Mon, 06 Apr 2009) | 2 lines
+    improved pixel info, changed the menu entry from "Hide" to "Show",
+    added it on default status bar
 
-unconditionally enable fast jpeg thumbnailing
+commit 022c685ad3ea779b5d173483deb75f19434ccac2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 1 23:40:01 2009 +0000
 
-------------------------------------------------------------------------
-r1616 | nadvornik | 2009-04-06 21:53:59 +0200 (Mon, 06 Apr 2009) | 2 lines
+    "<control>S" seems to be hardcoded hotkey for GTK_STOCK_SAVE
+    use <shift>S for sort manager
 
-added pane_notify_selection to pane API
+commit c95bd69965832c1cc0b82683888759057cc37b85
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 1 23:15:51 2009 +0000
 
-------------------------------------------------------------------------
-r1615 | zas_ | 2009-04-06 21:13:35 +0200 (Mon, 06 Apr 2009) | 1 line
+    - handle color profile and write metadata buttons on statusbar by ui_manager
+    - statusbar buttons made configurable
 
-Remove unused field in IconData.
-------------------------------------------------------------------------
-r1614 | nadvornik | 2009-04-06 21:09:55 +0200 (Mon, 06 Apr 2009) | 2 lines
+commit b4760e25a6f8e62c950bc9e32f5f4af7c17cdda0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 1 09:49:27 2009 +0000
 
-optimized sidecar file check
+    allow external editors without parameters, as long as they are in
+    category 'X-Geeqie'
 
-------------------------------------------------------------------------
-r1613 | nadvornik | 2009-04-05 11:46:49 +0200 (Sun, 05 Apr 2009) | 2 lines
+commit b2025397567ecf8ba11b9372e2161ffd78e33d94
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 29 20:28:54 2009 +0000
 
-fixed bug in overlay drawing
+    updated czech translation, not yet complete
 
-------------------------------------------------------------------------
-r1612 | nadvornik | 2009-04-05 11:25:48 +0200 (Sun, 05 Apr 2009) | 2 lines
+commit 6739de52b94a36b0a4fd316444cb00ad06571181
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 28 21:40:00 2009 +0000
 
-improved Scroll reset method in preferences dialog
+    French translation was updated.
 
-------------------------------------------------------------------------
-r1611 | nadvornik | 2009-04-05 01:12:19 +0200 (Sun, 05 Apr 2009) | 3 lines
+commit baa6516063591b9c127a76be15b6d53851cd6c43
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 28 21:38:20 2009 +0000
 
-disabled 2-pass rendering also affect color correction
-https://sourceforge.net/tracker/?func=detail&aid=2689249&group_id=222125&atid=1054683
+    Update POTFILES.in: cellrenderericon.c removed, color-man.c added.
 
-------------------------------------------------------------------------
-r1610 | nadvornik | 2009-04-05 00:29:25 +0200 (Sun, 05 Apr 2009) | 2 lines
+commit 563caeb60cdd5d6c438a22b1a3571f1e044d06b8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 28 21:37:27 2009 +0000
 
-added option that simplifies saving of multi-window configurations
+    Fix up po/Makefile to rebuild geeqie.pot when POTFILES.in was modified. Without this change, new translatable strings in recently added files were not available for translation in various .po files after a make update-po. Makefile.in.in.patch was modified to include this fix plus some minor cleanups.
 
-------------------------------------------------------------------------
-r1609 | nadvornik | 2009-04-05 00:09:50 +0200 (Sun, 05 Apr 2009) | 2 lines
+commit 90c899b61dfae05e879b336adf05b189f90f8cb4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 28 20:09:41 2009 +0000
 
-dropped show_copy_path option
+    do not translate internal strings
 
-------------------------------------------------------------------------
-r1608 | nadvornik | 2009-04-04 23:53:12 +0200 (Sat, 04 Apr 2009) | 2 lines
+commit cdf39c97d14024d0b0f2922e8d9ac5468d6de829
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 28 06:55:56 2009 +0000
 
-dropped read_buffer options - they don't have any significant effect
+    added new files
 
-------------------------------------------------------------------------
-r1607 | nadvornik | 2009-04-04 23:14:34 +0200 (Sat, 04 Apr 2009) | 2 lines
+commit 05a40a1d54061fb85a3f8b55d6eee745edc0ba9e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 28 06:54:59 2009 +0000
 
-startup path options simplified and moved to layout options
+    compilation fixes for older glib and gtk
 
-------------------------------------------------------------------------
-r1606 | nadvornik | 2009-04-04 22:20:17 +0200 (Sat, 04 Apr 2009) | 4 lines
+commit a39d10df5963b157a0010f5e0bf6d1a589a2367d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 27 23:07:59 2009 +0000
 
-moved options from Advanced tab to other tabs
-TODO: add Advanced section on each tab
+    French translation was updated: fix few main menu mnenonics.
 
+commit e83d047474df3181e844ded3d6341d00a1f06cb2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 27 21:39:56 2009 +0000
 
-------------------------------------------------------------------------
-r1605 | nadvornik | 2009-04-04 21:10:49 +0200 (Sat, 04 Apr 2009) | 2 lines
+    compilation fixes
 
-added metadata_read_GPS_coord
+commit 3e0cad19e6dfe8df7783655fa39e30a2d46b5095
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 27 20:19:21 2009 +0000
 
-------------------------------------------------------------------------
-r1604 | nadvornik | 2009-04-04 18:42:54 +0200 (Sat, 04 Apr 2009) | 3 lines
+    "make dist" fixes
 
-set current fd when the bar is shown again
-https://sourceforge.net/tracker/?func=detail&atid=1054680&aid=2729157&group_id=222125
+commit 2dfdfc1d4999579bde942798ac654840c1c05d0d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 26 14:08:44 2009 +0000
 
-------------------------------------------------------------------------
-r1603 | nadvornik | 2009-04-03 21:35:34 +0200 (Fri, 03 Apr 2009) | 2 lines
+    French translation was updated.
 
-convert commandline to utf8
+commit 81620ce969208f28075c74e05bee39161c567f5c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 26 11:38:28 2009 +0000
 
-------------------------------------------------------------------------
-r1602 | zas_ | 2009-04-03 01:11:07 +0200 (Fri, 03 Apr 2009) | 1 line
+    small fixes
 
-Force thumbnails refreshing when thumbnails dimensions are modified through Preferences.
-------------------------------------------------------------------------
-r1601 | zas_ | 2009-04-02 18:10:12 +0200 (Thu, 02 Apr 2009) | 5 lines
+commit 61f861ddcb3092f4a243a0220bfd2322ad5dc196
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 26 09:25:52 2009 +0000
 
-Use full path in genmarshal.
-This allows out of source builds with fakeroot.
-Patch by Lukas Jirkovsky.
+    fixed return from metadata_write_revert
 
+commit 86da9a1f10413fa132785cdf4d210c0caed1d8d0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 26 09:01:35 2009 +0000
 
-------------------------------------------------------------------------
-r1600 | zas_ | 2009-04-01 00:23:33 +0200 (Wed, 01 Apr 2009) | 1 line
+    added an option to write image orientation to the metadata
 
-Cleanup.
-------------------------------------------------------------------------
-r1599 | nadvornik | 2009-03-31 23:33:54 +0200 (Tue, 31 Mar 2009) | 6 lines
+commit f62a4ec8486bc8489420e73e3981ccde92395342
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 25 22:08:09 2009 +0000
 
-improved next/prev operation on sidecar files
+    separated Orientation and Grayscale functions
+    moved Grayscale to Color management menu
 
-all operations with list index seem to be broken but IMHO this fix is
-sufficient for 1.0. Then it definitely needs a better interface.
+commit a0f54dffd9713fc6ae22a46467371500623ad197
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 25 20:55:11 2009 +0000
 
+    added more info to the details dialog
 
-------------------------------------------------------------------------
-r1598 | zas_ | 2009-03-31 22:57:31 +0200 (Tue, 31 Mar 2009) | 1 line
+commit 81e98ec340104f7f64eb907a60ccecd02319fe7a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 24 23:26:49 2009 +0000
 
-Add and install a template to be used as new editor. Need more work.
-------------------------------------------------------------------------
-r1597 | nadvornik | 2009-03-31 22:53:37 +0200 (Tue, 31 Mar 2009) | 2 lines
+    added details dialog for other operations too
 
-fixed vdlist_find_row return value
+commit 6ac87bdbb778288847a0aa31fd288a95abdf01d0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 24 22:51:00 2009 +0000
 
-------------------------------------------------------------------------
-r1596 | nadvornik | 2009-03-31 22:35:04 +0200 (Tue, 31 Mar 2009) | 2 lines
+    added possibility to exclude individual files
 
-use a better signal
+commit 6d5b363690423b2dffaf34296d520d11fe7c348a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Apr 23 21:15:14 2009 +0000
 
-------------------------------------------------------------------------
-r1595 | zas_ | 2009-03-31 22:22:47 +0200 (Tue, 31 Mar 2009) | 1 line
+    fixed writting metadata behavior at exit
 
-Make desktop window list checkboxes centered and not activatable.
-------------------------------------------------------------------------
-r1594 | nadvornik | 2009-03-31 22:05:16 +0200 (Tue, 31 Mar 2009) | 2 lines
+commit 92d41d67e666813d5c5534214555b6f840924f6b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Apr 23 21:12:19 2009 +0000
 
-improved debug messages
+    added an image to the file details dialog
 
-------------------------------------------------------------------------
-r1593 | nadvornik | 2009-03-31 21:34:39 +0200 (Tue, 31 Mar 2009) | 4 lines
+commit b6e52aecca0dfc39c4e27fdd9aa15f9677fb4f19
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Apr 23 20:48:03 2009 +0000
 
-report pixbuf loader errors
-https://sourceforge.net/tracker/?func=detail&aid=2720577&group_id=222125&atid=1054680
+    differentiate between "Cancel" and "Discard changes"
 
+commit 7ff04bed4bde4c74de4ed48a28f0538e8ed4955d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 21 21:47:11 2009 +0000
 
-------------------------------------------------------------------------
-r1592 | zas_ | 2009-03-31 20:45:33 +0200 (Tue, 31 Mar 2009) | 1 line
+    Fix up few warnings (especially on 64bits platforms).
 
-Allow to delete an editor's desktop file from editors list window.
-------------------------------------------------------------------------
-r1591 | zas_ | 2009-03-30 22:42:06 +0200 (Mon, 30 Mar 2009) | 1 line
+commit a58c2dc7c6be53eb1b58d3eae0198ee102d593ac
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 21 21:16:32 2009 +0000
 
-Update POTFILES.in and french translation.
-------------------------------------------------------------------------
-r1590 | zas_ | 2009-03-30 22:01:27 +0200 (Mon, 30 Mar 2009) | 1 line
+    fixed metadata.confirm_on_dir_change
 
-French translation was updated.
-------------------------------------------------------------------------
-r1589 | zas_ | 2009-03-30 21:57:44 +0200 (Mon, 30 Mar 2009) | 1 line
+commit ba226375e73ade36cdad0d3acc95a96ebec3ef42
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 21 21:07:28 2009 +0000
 
-Update Changelog file.
-------------------------------------------------------------------------
-r1588 | zas_ | 2009-03-30 21:01:09 +0200 (Mon, 30 Mar 2009) | 7 lines
+    added possibility to show modifiied metadata before write
 
-Fixed bug where pixel/color information at x=0 coordinates werent shown:
-- pixel-coordinates now calculated with floor
-- guard for update in layout does not apply for 0 coordinates anymore
+commit 97517b5bdf8f3a555a086b15ded0748aa700979c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 20 21:34:16 2009 +0000
 
-Patch by Ruben Stein.
+    added remote interface for exporting additional info (sidecars,
+    destination) to external commands
+    
+    see the symlink command for an example
+    
+    http://sourceforge.net/tracker/?func=detail&aid=2488845&group_id=222125&atid=1054680
 
+commit be3cde059c7592a31a839c4da5d38e85bdff68e9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 20 21:07:52 2009 +0000
 
-------------------------------------------------------------------------
-r1587 | zas_ | 2009-03-30 19:52:14 +0200 (Mon, 30 Mar 2009) | 1 line
+    write info and debugging messages to stderr
 
-Fix up previous patch.
-------------------------------------------------------------------------
-r1586 | zas_ | 2009-03-30 19:05:31 +0200 (Mon, 30 Mar 2009) | 1 line
+commit 4d953e1706d4c1eadf93172438635b4dfa3e9c5f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 20 19:44:50 2009 +0000
 
-Desktop files window: make columns sortable, replace Apply and OK buttons by one Save button which is made sensitive when needed.
-------------------------------------------------------------------------
-r1585 | nadvornik | 2009-03-29 22:06:21 +0200 (Sun, 29 Mar 2009) | 2 lines
+    improved remote protocol to allow bidirectional communication
 
-improved bar_pane_comment_notify_cb
+commit 119665d75960040f13b9a40ecdf0515e4405b49e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 17 20:26:22 2009 +0000
 
-------------------------------------------------------------------------
-r1584 | nadvornik | 2009-03-29 21:57:19 +0200 (Sun, 29 Mar 2009) | 2 lines
+    fixed tests for vd_find_row return value
 
-fixed a typo
+commit fe28f85563b7bff64ccad3a7280aadaeb4aff8c0
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Tue Apr 14 21:51:29 2009 +0000
 
-------------------------------------------------------------------------
-r1583 | nadvornik | 2009-03-29 21:40:16 +0200 (Sun, 29 Mar 2009) | 2 lines
+    German translation updated
+    
+    With some help from de.alt.rec.digitalfotografie.
 
-fixed possible crash
+commit 2517907d2cb2e80808e33e63b0dd1895b8d53fa5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 14 20:54:50 2009 +0000
 
-------------------------------------------------------------------------
-r1582 | nadvornik | 2009-03-29 18:39:42 +0200 (Sun, 29 Mar 2009) | 2 lines
+    French translation was updated.
 
-added UfRaw ID files to known filetypes
+commit 3ad776526060f2004ff824ac4a7e88c3df6c43eb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 13 22:40:47 2009 +0000
 
-------------------------------------------------------------------------
-r1581 | nadvornik | 2009-03-29 16:26:44 +0200 (Sun, 29 Mar 2009) | 2 lines
+    color profile fixes
 
-pane interface cleanup
+commit 75909b6dbed56995f8d6abc9f917ac13de1c576c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 13 14:39:50 2009 +0000
 
-------------------------------------------------------------------------
-r1580 | nadvornik | 2009-03-29 16:20:44 +0200 (Sun, 29 Mar 2009) | 2 lines
+    show color management status on statusbar
 
-improved sidebar configuration
+commit a512de6dffd96f4a2273aaa088d339e20fc865c1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 13 10:55:49 2009 +0000
 
-------------------------------------------------------------------------
-r1579 | nadvornik | 2009-03-29 12:36:13 +0200 (Sun, 29 Mar 2009) | 2 lines
+    support X11 screen profile
+    http://freedesktop.org/wiki/ICC_Profiles_in_X_Specification_0.3
 
-re-added possibility to display basic file info (size, mode, date)
+commit 6fa6bdcca280c06ce42c9061caa76890e4cca19e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 13 08:09:56 2009 +0000
 
-------------------------------------------------------------------------
-r1578 | nadvornik | 2009-03-28 16:51:21 +0100 (Sat, 28 Mar 2009) | 3 lines
+    moved color profiles from statusbar to View menu
 
-fixed keyboard focus on start-up
-https://sourceforge.net/tracker/?func=detail&aid=2707025&group_id=222125&atid=1054680
+commit 9d1fd8df2610693a3c68e31faaf42ce419f09c5e
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun Apr 12 17:58:55 2009 +0000
 
-------------------------------------------------------------------------
-r1577 | nadvornik | 2009-03-28 16:31:04 +0100 (Sat, 28 Mar 2009) | 2 lines
+    German translation updated
 
-active image follows keyboard focus
+commit 6b5add467cb7bd1f7752dc4c8a25cd6e1535f76d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 12 15:06:43 2009 +0000
 
-------------------------------------------------------------------------
-r1576 | nadvornik | 2009-03-28 16:09:09 +0100 (Sat, 28 Mar 2009) | 2 lines
+    French translation was updated.
 
-split-mode cleanup and improvements
+commit 9907bdcd3b84735d887aec962bf3ab8c8afb6213
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sun Apr 12 11:02:03 2009 +0000
 
-------------------------------------------------------------------------
-r1575 | nadvornik | 2009-03-27 09:05:14 +0100 (Fri, 27 Mar 2009) | 2 lines
+    Update POTFILES.in
+    
+    metadata.c was not in the POTFILES.in.
 
-added simple desktop file editor
+commit 6fc844092598a09b07c51f3ca9434d84dc1f7723
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 12 08:36:53 2009 +0000
 
-------------------------------------------------------------------------
-r1574 | zas_ | 2009-03-26 22:49:20 +0100 (Thu, 26 Mar 2009) | 7 lines
+    fixed ambiguous strings
 
-Improve editors through .desktop files implementation:
-- stricter Exec parameters detection
-- correct Icon key handling (absolute file vs name and --icon prefix)
-- improved escape, single, double quotes handling and escaping
+commit 9483a82f6efbc103eccf69be8ffa2f827b2d89bf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 11 21:28:46 2009 +0000
 
+    improved default keyword tree
 
+commit 957656a98cb956da53e2e52cb025c2f93dd170cf
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Apr 11 20:46:37 2009 +0000
 
-------------------------------------------------------------------------
-r1573 | nadvornik | 2009-03-26 08:56:01 +0100 (Thu, 26 Mar 2009) | 2 lines
+    Fix that the output of msgfmt could be singular
+    
+    The output of msgfmt could be singular if there is only one translation
+    of the given type.
 
-fixed histogram drawing
+commit 1a73f69002e383830604ccc14c925f2967ede8df
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Apr 11 19:51:03 2009 +0000
 
-------------------------------------------------------------------------
-r1572 | zas_ | 2009-03-23 19:49:23 +0100 (Mon, 23 Mar 2009) | 1 line
+    Allow to configure case handling of keywords
+    
+    Sometimes I use just different case for keywords. This should be
+    chooseable.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1571 | nadvornik | 2009-03-22 00:16:38 +0100 (Sun, 22 Mar 2009) | 2 lines
+commit 66ad4aee7a6471f5a7f336fce6937182dc83c538
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 11 19:35:03 2009 +0000
 
-more consistent remote options naming
+    fixed updating of filelist marks
 
-------------------------------------------------------------------------
-r1570 | nadvornik | 2009-03-21 21:19:11 +0100 (Sat, 21 Mar 2009) | 3 lines
+commit cceb6eee1213706de3b08a08b6410c433b5f64fb
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Apr 11 18:34:12 2009 +0000
 
-fixed segfault in histogram
-http://sourceforge.net/tracker/index.php?func=detail&aid=2690498&group_id=222125&atid=1054680
+    Adding debian packaging informations
+    
+    Adding debian control directory to create a geeqie debian package.
+    
+    NOTES: (To be fixed in autoconf)
+       - LIRC must be explicit _enabled_ instead of disable. This is wrong
+         documented.
+       - It might be a good idea to derivate the readmedir and the htmldir
+         from docdir.
 
-------------------------------------------------------------------------
-r1569 | nadvornik | 2009-03-21 20:51:07 +0100 (Sat, 21 Mar 2009) | 2 lines
+commit e91e0ff929d92d40c2dc25d4850729214ccee9cd
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Sat Apr 11 16:34:25 2009 +0000
 
-layout id "_current_" matches the currently active layout window
+    Implementing CTRL-W to close advanced exif window
+    
+    In fact, this implements keypress event handling in the advanced exif
+    window to handle CTRL-W event.
 
-------------------------------------------------------------------------
-r1568 | nadvornik | 2009-03-21 19:22:04 +0100 (Sat, 21 Mar 2009) | 2 lines
+commit f43df7469ca80ae712259e6234fde3e194219b8d
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Fri Apr 10 13:54:08 2009 +0000
+
+    Just update the internal sort method
+    
+    There is no other use of the internal sort method than speeding up the
+    sorting of a collection. So setting it to SORT_NONE is the better
+    choice.
+
+commit 6bbb74b31e8fad738645bb98ff008b7e241da279
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Fri Apr 10 13:44:37 2009 +0000
+
+    Implement random sort method for collections
+    
+    This patch allows to randomize the collections. (Closes: #2497413)
+    https://sourceforge.net/tracker/?func=detail&aid=2497413&group_id=222125&atid=1054683
+
+commit 0977d77b3e2bff165ba6e73f0a4fc032b2c34daf
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Fri Apr 10 10:18:42 2009 +0000
+
+    Fix the broken statistic generation
+    
+    The output of msgfmt has different format if no fuzzy translations (or
+    even no translated) are available. I fixed that by parsing the output of
+    msgfmt more intelligent.
+    
+    Drawback of the solution is that the parsing will not work if the output
+    of msgfmt use not the strings "translated messages", "fuzzy
+    translations" and "untranslated messages".
+
+commit 16e5361e36e314401b1d2528b5b672786d112dd0
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Fri Apr 10 09:47:40 2009 +0000
+
+    German translation updated
+    
+    Also included a update in the README file. Finally I add myself to that
+    file. :-)
+
+commit a9076f2dddc84408b88da2017b77242ac2fc8a24
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Fri Apr 10 09:47:20 2009 +0000
+
+    Add pgettext for some ambiguous strings
+    
+    There are some strings which are ambiguous to translate. There is the
+    pgettext function to solf that problem.
+    
+    For example, locations can be translated to german by Ortsangaben
+    (geographical) or by Pfad (filesystem). I am sure there are also some
+    ambiguous in other languages.
+
+commit b2d63b670cc70a0d0714f378aa4809e386cac2a0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 9 20:40:16 2009 +0000
+
+    Minor french translations fixes.
+
+commit edae49861932cea9597cba0e9dab3186538eed59
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 9 20:07:16 2009 +0000
 
-do not copy existing layout id to new window
+    Fix histogram labels in french.
+
+commit e6fbbd4293cbfa1b4e6ecfd1f0a3c5cfebc20364
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 9 19:58:03 2009 +0000
 
-------------------------------------------------------------------------
-r1567 | nadvornik | 2009-03-21 18:47:50 +0100 (Sat, 21 Mar 2009) | 2 lines
+    French translation was updated.
 
-update translated pane titles
+commit 672e4f69f438098a1552531fd6882e404e3e606f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 8 19:32:30 2009 +0000
 
-------------------------------------------------------------------------
-r1566 | nadvornik | 2009-03-20 23:48:01 +0100 (Fri, 20 Mar 2009) | 2 lines
+    improved Exiv2 error reporting:
+    - use correct charset
+    - respect --debug
 
-do not re-create ui_manager at layout change
+commit fc1b420298aad46578404e56b0396182c1f4c393
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon Apr 6 23:59:54 2009 +0000
 
-------------------------------------------------------------------------
-r1565 | nadvornik | 2009-03-20 22:28:31 +0100 (Fri, 20 Mar 2009) | 2 lines
+    Nest new keywords inside existing
+    
+    It is boring to first add a bunch of keywords and then move them to the
+    new location. It is more natural to add them as child to existing ons.
 
-added a possibility to update existing bars from config
+commit 81bcaeeeed18b732259e69d645da59cf953e484c
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon Apr 6 23:59:38 2009 +0000
 
-------------------------------------------------------------------------
-r1564 | nadvornik | 2009-03-20 18:02:00 +0100 (Fri, 20 Mar 2009) | 3 lines
+    Fix the is_keyword bug
+    
+    The is_keyword would be new set when placing the radio buttons. This
+    Patch fix it by setting the variable afterwards.
 
-added tooltips to external editors on toolbar
-- patch by Colin Clark
+commit 80f4d7efaec01b04310602fc82d571d178f797cd
+Author: Klaus Ethgen <Klaus@Ethgen.de>
+Date:   Mon Apr 6 23:39:27 2009 +0000
 
-------------------------------------------------------------------------
-r1563 | nadvornik | 2009-03-20 17:28:43 +0100 (Fri, 20 Mar 2009) | 2 lines
+    Set the focus for new keyword dialog
 
-added "load config" command to remote control
+commit 6224bad98e1263b2ff9d2f431efcd601f74121a3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 6 22:18:13 2009 +0000
 
-------------------------------------------------------------------------
-r1562 | nadvornik | 2009-03-20 15:36:59 +0100 (Fri, 20 Mar 2009) | 2 lines
+    Disable unused functions when compiled without threads support, prevents few warnings.
 
-added possibility to update existing layout window from config
+commit 14946850539ebb7317fb81add299cb19bacd085a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 6 22:13:54 2009 +0000
 
-------------------------------------------------------------------------
-r1561 | nadvornik | 2009-03-20 12:52:29 +0100 (Fri, 20 Mar 2009) | 2 lines
+    Fix up event source ids type: gint -> guint.
+    Functions like g_timeout_add() or g_idle_add() return a guint
+    greater than 0, but in most places it was wrongly stored as int
+    and initialized to -1.
+    This broke assertions matching in g_source_remove() for example
+    since id was always greater than 0 even when timer was not set
+    (-1 was casted to the biggest guint).
 
-do not add duplicate keywords from config file
+commit bc94042180f920c3bf111578a565a450c177f613
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 6 21:52:49 2009 +0000
 
-------------------------------------------------------------------------
-r1560 | nadvornik | 2009-03-20 11:12:29 +0100 (Fri, 20 Mar 2009) | 2 lines
+    re-ordered some options, improved descriptions
 
-be more verbose on parse errors
+commit 9e28ad2ad370fa1f0baad1d82adaada56f21ec4d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 6 20:38:54 2009 +0000
 
-------------------------------------------------------------------------
-r1559 | nadvornik | 2009-03-20 10:46:35 +0100 (Fri, 20 Mar 2009) | 3 lines
+    unconditionally enable fast jpeg thumbnailing
 
-added function to reload external editors at any time
-eliminated init_after_global_options()
+commit 61856b1efe4b60ad03ffeaee4766e7c011fd12ce
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 6 19:53:59 2009 +0000
 
-------------------------------------------------------------------------
-r1558 | nadvornik | 2009-03-19 23:58:28 +0100 (Thu, 19 Mar 2009) | 2 lines
+    added pane_notify_selection to pane API
 
-initialization clean-up
+commit 3b39f3a69f6c153b8501f2b887fc0b0fa46e6298
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 6 19:13:35 2009 +0000
 
-------------------------------------------------------------------------
-r1557 | nadvornik | 2009-03-19 23:12:14 +0100 (Thu, 19 Mar 2009) | 2 lines
+    Remove unused field in IconData.
 
-improved config file formatting
+commit d7f366685b907de7dd3fa4c264104bd4979beb2c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 6 19:09:55 2009 +0000
 
-------------------------------------------------------------------------
-r1556 | nadvornik | 2009-03-18 00:03:07 +0100 (Wed, 18 Mar 2009) | 2 lines
+    optimized sidecar file check
 
-added more IPTC tags
+commit c1209c2edb4c045e50e2a0ce3d8826deabc17ef0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 5 09:46:49 2009 +0000
 
-------------------------------------------------------------------------
-r1555 | nadvornik | 2009-03-17 23:41:09 +0100 (Tue, 17 Mar 2009) | 2 lines
+    fixed bug in overlay drawing
 
-implemented editing support in exif pane
+commit 51a9455bd33f439da36889109602a6a2b081b18d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 5 09:25:48 2009 +0000
 
-------------------------------------------------------------------------
-r1554 | nadvornik | 2009-03-17 20:52:56 +0100 (Tue, 17 Mar 2009) | 2 lines
+    improved Scroll reset method in preferences dialog
 
-fixed loading of desktop file icons, gtk seems to expect an icon name without extension
+commit 7ba4f8b997ed526c7bae4f6a076a27f53cc8324a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 23:12:19 2009 +0000
 
-------------------------------------------------------------------------
-r1553 | nadvornik | 2009-03-17 20:09:34 +0100 (Tue, 17 Mar 2009) | 2 lines
+    disabled 2-pass rendering also affect color correction
+    https://sourceforge.net/tracker/?func=detail&aid=2689249&group_id=222125&atid=1054683
 
-simplified code
+commit 71cf89dfdd1e65f09f810d3f21ff887249e7bc8f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 22:29:25 2009 +0000
 
-------------------------------------------------------------------------
-r1552 | nadvornik | 2009-03-17 19:58:15 +0100 (Tue, 17 Mar 2009) | 2 lines
+    added option that simplifies saving of multi-window configurations
 
-improved expanding and hiding of helper keywords
+commit 282436623f1d51df1cd6acd812d79467dccbd3af
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 22:09:50 2009 +0000
 
-------------------------------------------------------------------------
-r1551 | nadvornik | 2009-03-17 19:30:53 +0100 (Tue, 17 Mar 2009) | 2 lines
+    dropped show_copy_path option
 
-fixed keyword tree redrawing
+commit 33d633ef9aa9b25e585da6f0ff0a486aed4ee2a3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 21:53:12 2009 +0000
 
-------------------------------------------------------------------------
-r1550 | zas_ | 2009-03-17 01:05:13 +0100 (Tue, 17 Mar 2009) | 1 line
+    dropped read_buffer options - they don't have any significant effect
 
-Preliminary support for doxygen: make doxygen-doc will create documentation from sources in doc/doxygen directory.
-------------------------------------------------------------------------
-r1549 | zas_ | 2009-03-16 21:39:09 +0100 (Mon, 16 Mar 2009) | 1 line
+commit 5a3320536bd7974f2a29a3fcc8690ffb277fbd1e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 21:14:34 2009 +0000
 
-gint -> gboolean where applicable. The end (ouf!).
-------------------------------------------------------------------------
-r1548 | zas_ | 2009-03-16 20:11:39 +0100 (Mon, 16 Mar 2009) | 1 line
+    startup path options simplified and moved to layout options
 
-gint -> gboolean where applicable.
-------------------------------------------------------------------------
-r1547 | zas_ | 2009-03-16 19:19:11 +0100 (Mon, 16 Mar 2009) | 1 line
+commit c4b18aa94892e17fe1d1922ebc9fdf298aeab082
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 20:20:17 2009 +0000
 
-gint -> gboolean where applicable.
-------------------------------------------------------------------------
-r1546 | nadvornik | 2009-03-16 00:22:17 +0100 (Mon, 16 Mar 2009) | 2 lines
+    moved options from Advanced tab to other tabs
+    TODO: add Advanced section on each tab
 
-improved pane_keywords notification
+commit c66eafd0dfccc52bbeccef99066654aa061971a9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 19:10:49 2009 +0000
 
-------------------------------------------------------------------------
-r1545 | nadvornik | 2009-03-15 23:46:25 +0100 (Sun, 15 Mar 2009) | 4 lines
+    added metadata_read_GPS_coord
 
-call the notify function just once when the keywords are pushed to the
-textarea
+commit a5a0e4b5c4d69dcc28639ac21ad33be2400e7d61
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 4 16:42:54 2009 +0000
 
+    set current fd when the bar is shown again
+    https://sourceforge.net/tracker/?func=detail&atid=1054680&aid=2729157&group_id=222125
 
-------------------------------------------------------------------------
-r1544 | zas_ | 2009-03-15 21:16:20 +0100 (Sun, 15 Mar 2009) | 1 line
+commit fc76e6d11d10c311f3aa5b2cf81edef98e53ee86
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 3 19:35:34 2009 +0000
 
-gint -> gboolean.
-------------------------------------------------------------------------
-r1543 | nadvornik | 2009-03-15 19:41:25 +0100 (Sun, 15 Mar 2009) | 3 lines
+    convert commandline to utf8
 
-fixed segfault in osd called from img-view
-http://sourceforge.net/tracker/index.php?func=detail&aid=2684068&group_id=222125&atid=1054680
+commit 5f808326c11b02c6b427614e3c2eaee3c0275cf7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 2 23:11:07 2009 +0000
 
-------------------------------------------------------------------------
-r1542 | zas_ | 2009-03-15 19:06:41 +0100 (Sun, 15 Mar 2009) | 1 line
+    Force thumbnails refreshing when thumbnails dimensions are modified through Preferences.
 
-gint -> gboolean.
-------------------------------------------------------------------------
-r1541 | nadvornik | 2009-03-15 18:40:04 +0100 (Sun, 15 Mar 2009) | 2 lines
+commit 8d622ad68bbee6f4671dec964fedde21e1095d7f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 2 16:10:12 2009 +0000
 
-fixed viewing image from dupe and search windows
+    Use full path in genmarshal.
+    This allows out of source builds with fakeroot.
+    Patch by Lukas Jirkovsky.
 
-------------------------------------------------------------------------
-r1540 | zas_ | 2009-03-15 16:01:07 +0100 (Sun, 15 Mar 2009) | 1 line
+commit f1b49514000a0db194e68800348c5033e1bb30b7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Mar 31 22:23:33 2009 +0000
 
-gint -> gboolean.
-------------------------------------------------------------------------
-r1539 | zas_ | 2009-03-15 14:33:56 +0100 (Sun, 15 Mar 2009) | 1 line
+    Cleanup.
 
-gint -> gboolean.
-------------------------------------------------------------------------
-r1538 | nadvornik | 2009-03-15 13:41:39 +0100 (Sun, 15 Mar 2009) | 2 lines
+commit dc03f50c8796196722ddc1f794280887d489e5fa
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 31 21:33:54 2009 +0000
 
-fixed XMP and IPTC entry names in exif pane
+    improved next/prev operation on sidecar files
+    
+    all operations with list index seem to be broken but IMHO this fix is
+    sufficient for 1.0. Then it definitely needs a better interface.
 
-------------------------------------------------------------------------
-r1537 | nadvornik | 2009-03-15 13:20:14 +0100 (Sun, 15 Mar 2009) | 2 lines
+commit 91a89497f621323b40f3cd5f35bb1e3ab3c8a232
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Mar 31 20:57:31 2009 +0000
 
-added notification to the exif pane
+    Add and install a template to be used as new editor. Need more work.
 
-------------------------------------------------------------------------
-r1536 | nadvornik | 2009-03-15 12:58:46 +0100 (Sun, 15 Mar 2009) | 2 lines
+commit 23e172eca263571aeddf10792887edf91dcfee7d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 31 20:53:37 2009 +0000
 
-fixed a bug in osd updating, it seems that the osd icons work again
+    fixed vdlist_find_row return value
 
-------------------------------------------------------------------------
-r1535 | nadvornik | 2009-03-15 12:34:09 +0100 (Sun, 15 Mar 2009) | 2 lines
+commit 0ba13b956a7ffdcba1646f1a57ca88b743c2c9b2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 31 20:35:04 2009 +0000
 
-compute histogram in idle time
+    use a better signal
 
-------------------------------------------------------------------------
-r1534 | nadvornik | 2009-03-15 10:06:13 +0100 (Sun, 15 Mar 2009) | 2 lines
+commit e2c72d45a22214bd7c079ffe9f59d6047daf69a9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Mar 31 20:22:47 2009 +0000
 
-fixed possible deadlock with multiple thumb loaders in parallel
+    Make desktop window list checkboxes centered and not activatable.
 
-------------------------------------------------------------------------
-r1533 | zas_ | 2009-03-15 08:07:52 +0100 (Sun, 15 Mar 2009) | 1 line
+commit f1ff99e0a8a6d4b0c132d6ea9a71455ad444b8ce
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 31 20:05:16 2009 +0000
 
-gint -> gboolean.
-------------------------------------------------------------------------
-r1532 | nadvornik | 2009-03-15 00:26:42 +0100 (Sun, 15 Mar 2009) | 3 lines
+    improved debug messages
 
-completely separated global and layout window options
-layout window configuration is available under separate menu entry
+commit 193a5482a0e2dc7af1c012a2c6bfdfe0c204bd5f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 31 19:34:39 2009 +0000
 
-------------------------------------------------------------------------
-r1531 | zas_ | 2009-03-14 22:12:55 +0100 (Sat, 14 Mar 2009) | 1 line
+    report pixbuf loader errors
+    https://sourceforge.net/tracker/?func=detail&aid=2720577&group_id=222125&atid=1054680
 
-gint -> gboolean.
-------------------------------------------------------------------------
-r1530 | zas_ | 2009-03-14 21:07:23 +0100 (Sat, 14 Mar 2009) | 1 line
+commit c20d6b497d25d8bf6ce4883e3f51d957b9cb8aae
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Mar 31 18:45:33 2009 +0000
 
-More gboolean.
-------------------------------------------------------------------------
-r1529 | zas_ | 2009-03-14 20:25:21 +0100 (Sat, 14 Mar 2009) | 1 line
+    Allow to delete an editor's desktop file from editors list window.
 
-Use gboolean where applicable, minor cleanup and indentations fixes.
-------------------------------------------------------------------------
-r1528 | nadvornik | 2009-03-14 18:21:35 +0100 (Sat, 14 Mar 2009) | 2 lines
+commit 852216c650a242a29ec7e1c2d75e0f8cb8dc2bc6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 30 20:42:06 2009 +0000
 
-improved notification system
+    Update POTFILES.in and french translation.
 
-------------------------------------------------------------------------
-r1527 | zas_ | 2009-03-14 12:26:43 +0100 (Sat, 14 Mar 2009) | 1 line
+commit 3f65637f72150ab18b68aad9c069f1dd8310da3d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 30 20:01:27 2009 +0000
 
-More gboolean and tidy up.
-------------------------------------------------------------------------
-r1526 | nadvornik | 2009-03-14 11:34:42 +0100 (Sat, 14 Mar 2009) | 2 lines
+    French translation was updated.
 
-cleanup, small fixes
+commit 5294d9ad16564425b40a77c671f106c1fbbe8d09
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 30 19:57:44 2009 +0000
 
-------------------------------------------------------------------------
-r1525 | nadvornik | 2009-03-14 00:19:58 +0100 (Sat, 14 Mar 2009) | 2 lines
+    Update Changelog file.
 
-do not allow to add keywords with the same name as siblings
+commit be6f51861124a8e5f4c10fcc4fdd9df1cf0613ca
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 30 19:01:09 2009 +0000
 
-------------------------------------------------------------------------
-r1524 | nadvornik | 2009-03-13 17:45:21 +0100 (Fri, 13 Mar 2009) | 2 lines
+    Fixed bug where pixel/color information at x=0 coordinates werent shown:
+    - pixel-coordinates now calculated with floor
+    - guard for update in layout does not apply for 0 coordinates anymore
+    
+    Patch by Ruben Stein.
 
-added keyword tree filtering
+commit 9ec7080489b3089207f5146f8d4a9f18b0275add
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 30 17:52:14 2009 +0000
 
-------------------------------------------------------------------------
-r1523 | nadvornik | 2009-03-13 13:06:01 +0100 (Fri, 13 Mar 2009) | 2 lines
+    Fix up previous patch.
 
-show file name in advanced_exif
+commit 054df7368da1e35ebf7a1ff5321203acd01acbb3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 30 17:05:31 2009 +0000
 
-------------------------------------------------------------------------
-r1522 | nadvornik | 2009-03-13 11:36:32 +0100 (Fri, 13 Mar 2009) | 2 lines
+    Desktop files window: make columns sortable, replace Apply and OK buttons by one Save button which is made sensitive when needed.
 
-handle sidecar files for raw formats that are not known to exiv2
+commit 5ccbedf9691a490bb70a89139ab058d1f7f642e7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 29 20:06:21 2009 +0000
 
-------------------------------------------------------------------------
-r1521 | nadvornik | 2009-03-13 10:03:06 +0100 (Fri, 13 Mar 2009) | 2 lines
+    improved bar_pane_comment_notify_cb
 
-fixed keyword to mark connection
+commit 93fcf6a8503b7c431ab384dcc8b1a1da65060ff9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 29 19:57:19 2009 +0000
 
-------------------------------------------------------------------------
-r1520 | zas_ | 2009-03-12 23:44:21 +0100 (Thu, 12 Mar 2009) | 1 line
+    fixed a typo
 
-Use gboolean where applicable.
-------------------------------------------------------------------------
-r1519 | zas_ | 2009-03-12 23:39:06 +0100 (Thu, 12 Mar 2009) | 1 line
+commit 41513c5c7bafd1843d763f0cc05873d8e29d93cb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 29 19:40:16 2009 +0000
 
-Make ishidden() static to filedata.c and rename it is_hidden_file().
-------------------------------------------------------------------------
-r1518 | zas_ | 2009-03-12 23:35:45 +0100 (Thu, 12 Mar 2009) | 1 line
+    fixed possible crash
 
-gint -> gboolean and tidy up.
-------------------------------------------------------------------------
-r1517 | nadvornik | 2009-03-12 22:27:13 +0100 (Thu, 12 Mar 2009) | 2 lines
+commit 0fe6e0a143b17894ea7ca13cc337e6bbccfbc640
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 29 16:39:42 2009 +0000
 
-added a dialog for editing keyword tree
+    added UfRaw ID files to known filetypes
 
-------------------------------------------------------------------------
-r1516 | zas_ | 2009-03-12 22:06:37 +0100 (Thu, 12 Mar 2009) | 1 line
+commit ab645c958e18abe067b0af7dc62307f6f3b2a50b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 29 14:26:44 2009 +0000
 
-Use gboolean where applicable, for the sake of consistency.
-------------------------------------------------------------------------
-r1515 | zas_ | 2009-03-12 00:36:01 +0100 (Thu, 12 Mar 2009) | 1 line
+    pane interface cleanup
 
-Code cleanup.
-------------------------------------------------------------------------
-r1514 | zas_ | 2009-03-12 00:35:31 +0100 (Thu, 12 Mar 2009) | 1 line
+commit 0ceba72258134a7379e5d42ceda33967bad55b08
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 29 14:20:44 2009 +0000
 
-Fix bug when adding a new collection through sort manager. Tidy up.
-------------------------------------------------------------------------
-r1513 | zas_ | 2009-03-12 00:04:30 +0100 (Thu, 12 Mar 2009) | 1 line
+    improved sidebar configuration
 
-Tidy up.
-------------------------------------------------------------------------
-r1512 | zas_ | 2009-03-11 23:56:56 +0100 (Wed, 11 Mar 2009) | 1 line
+commit 7958ba1b7c05bb847a4c68f004314316d5936946
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 29 10:36:13 2009 +0000
 
-Use gboolean pseudo type where applicable.
-------------------------------------------------------------------------
-r1511 | zas_ | 2009-03-11 23:28:37 +0100 (Wed, 11 Mar 2009) | 1 line
+    re-added possibility to display basic file info (size, mode, date)
 
-Remove useless functions.
-------------------------------------------------------------------------
-r1510 | nadvornik | 2009-03-11 22:54:54 +0100 (Wed, 11 Mar 2009) | 2 lines
+commit dd3442ea73ca4f99d1dff6ad59c6d48f3479db60
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 28 15:51:21 2009 +0000
 
-added a popup menu in keyword tree
+    fixed keyboard focus on start-up
+    https://sourceforge.net/tracker/?func=detail&aid=2707025&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r1509 | zas_ | 2009-03-11 18:38:20 +0100 (Wed, 11 Mar 2009) | 1 line
+commit c717291bff504bb1e563e7b0b035906742c582ba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 28 15:31:04 2009 +0000
 
-Use dynamic allocation for editor key passed to various callbacks.
-------------------------------------------------------------------------
-r1508 | nadvornik | 2009-03-10 23:52:12 +0100 (Tue, 10 Mar 2009) | 2 lines
+    active image follows keyboard focus
 
-fixed saving of file_view_type
+commit 78a1719a4343eef75f0c3d156827013d7b43aaa4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 28 15:09:09 2009 +0000
 
-------------------------------------------------------------------------
-r1507 | zas_ | 2009-03-10 18:58:30 +0100 (Tue, 10 Mar 2009) | 1 line
+    split-mode cleanup and improvements
 
-Remove now useless element.
-------------------------------------------------------------------------
-r1506 | zas_ | 2009-03-10 18:22:17 +0100 (Tue, 10 Mar 2009) | 1 line
+commit 4602b028bc005271b0a4e62dc039e665aecc9444
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 27 08:05:14 2009 +0000
 
-Remove the toggle on advanced exif window menu item.
-------------------------------------------------------------------------
-r1505 | zas_ | 2009-03-09 20:37:58 +0100 (Mon, 09 Mar 2009) | 1 line
+    added simple desktop file editor
 
-Add missing g_key_file_free() call.
-------------------------------------------------------------------------
-r1504 | zas_ | 2009-03-09 20:35:53 +0100 (Mon, 09 Mar 2009) | 1 line
+commit e68bdda5abf8afc998fb49d43868900f01ed559c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Mar 26 21:49:20 2009 +0000
 
-Fix editor_command_path_parse().
-------------------------------------------------------------------------
-r1503 | zas_ | 2009-03-09 20:34:26 +0100 (Mon, 09 Mar 2009) | 1 line
+    Improve editors through .desktop files implementation:
+    - stricter Exec parameters detection
+    - correct Icon key handling (absolute file vs name and --icon prefix)
+    - improved escape, single, double quotes handling and escaping
 
-Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
-------------------------------------------------------------------------
-r1502 | zas_ | 2009-03-09 13:44:06 +0100 (Mon, 09 Mar 2009) | 1 line
+commit f38f31b17fe21623f2d74d82613afea09b05892c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Mar 26 07:56:01 2009 +0000
 
-Only store editors if they match criterias to not be hidden from start, it makes more sense. Fix editor_command_path_parse().
-------------------------------------------------------------------------
-r1501 | zas_ | 2009-03-09 00:12:49 +0100 (Mon, 09 Mar 2009) | 1 line
+    fixed histogram drawing
 
-Introduce EditorFlags type, cleanup.
-------------------------------------------------------------------------
-r1500 | nadvornik | 2009-03-09 00:09:27 +0100 (Mon, 09 Mar 2009) | 2 lines
+commit 507f2bf998627d8856a9ea1388ac04390a1a835e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 23 18:49:23 2009 +0000
 
-save and restore the keyword tree
+    French translation was updated.
 
-------------------------------------------------------------------------
-r1499 | nadvornik | 2009-03-08 22:12:45 +0100 (Sun, 08 Mar 2009) | 2 lines
+commit abc71f71e6fb0fe732843d06a2100eec2aced123
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 21 23:16:38 2009 +0000
 
-fixed crash with certain layout configurations
+    more consistent remote options naming
 
-------------------------------------------------------------------------
-r1498 | zas_ | 2009-03-08 21:49:48 +0100 (Sun, 08 Mar 2009) | 1 line
+commit c4330fbf13587f5b60c285016f666b95c9f25b98
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 21 20:19:11 2009 +0000
 
-Cleanup and minor fixes.
-------------------------------------------------------------------------
-r1497 | zas_ | 2009-03-08 18:51:03 +0100 (Sun, 08 Mar 2009) | 1 line
+    fixed segfault in histogram
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2690498&group_id=222125&atid=1054680
 
-Advanced exif window: make all columns sortable and resizable.
-------------------------------------------------------------------------
-r1496 | zas_ | 2009-03-08 16:30:15 +0100 (Sun, 08 Mar 2009) | 1 line
+commit 9266c3eaa397463d1345f472d69dc1d0894e123b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 21 19:51:07 2009 +0000
 
-Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
-------------------------------------------------------------------------
-r1495 | zas_ | 2009-03-08 16:02:18 +0100 (Sun, 08 Mar 2009) | 1 line
+    layout id "_current_" matches the currently active layout window
 
-Fix up editor execution.
-------------------------------------------------------------------------
-r1494 | zas_ | 2009-03-08 15:27:19 +0100 (Sun, 08 Mar 2009) | 1 line
+commit aa2fd4c36b2b82e5c288dbc8d09478245f4ba929
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 21 18:22:04 2009 +0000
 
-Display icons in edit contextual menu.
-------------------------------------------------------------------------
-r1493 | zas_ | 2009-03-08 14:23:25 +0100 (Sun, 08 Mar 2009) | 1 line
+    do not copy existing layout id to new window
 
-In various Edit context menus, only display editors that match the file types in the selection.
-------------------------------------------------------------------------
-r1492 | nadvornik | 2009-03-08 13:42:23 +0100 (Sun, 08 Mar 2009) | 2 lines
+commit 9b9f197ef970ef521bd9e780f85ea5c1c63a900e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 21 17:47:50 2009 +0000
 
-dnd fixes
+    update translated pane titles
 
-------------------------------------------------------------------------
-r1491 | nadvornik | 2009-03-08 12:32:12 +0100 (Sun, 08 Mar 2009) | 2 lines
+commit 4f46f6cca2dbc4423ee371e47877fd1bbf4a57a4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 22:48:01 2009 +0000
 
-dnd fixes
+    do not re-create ui_manager at layout change
 
-------------------------------------------------------------------------
-r1490 | nadvornik | 2009-03-08 11:38:51 +0100 (Sun, 08 Mar 2009) | 2 lines
+commit 223d36e4c7eae2144f2eb20c6f0c77e27bbe743e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 21:28:31 2009 +0000
 
-allow dropping of multiple keywords
+    added a possibility to update existing bars from config
 
-------------------------------------------------------------------------
-r1489 | nadvornik | 2009-03-08 11:25:24 +0100 (Sun, 08 Mar 2009) | 2 lines
+commit 61ff1c806812b340b30a891b933ed52c2c033207
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 17:02:00 2009 +0000
 
-show a label instead of the default drag icon
+    added tooltips to external editors on toolbar
+    - patch by Colin Clark
 
-------------------------------------------------------------------------
-r1488 | nadvornik | 2009-03-08 10:56:40 +0100 (Sun, 08 Mar 2009) | 3 lines
+commit da76910fc5992b93d09257b8386bbcd6b1a54a88
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 16:28:43 2009 +0000
 
-dnd in keywords tree
-improved dnd in advanced exif
+    added "load config" command to remote control
 
-------------------------------------------------------------------------
-r1487 | nadvornik | 2009-03-07 18:02:59 +0100 (Sat, 07 Mar 2009) | 5 lines
+commit e63d1ab169ffd77e2a0691eee92aee94484e8401
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 14:36:59 2009 +0000
 
-implemented keywords editor as described at
-http://geeqie.wiki.sourceforge.net/keywords
-keyword tree is hardcoded for now
-TODO: configuration
+    added possibility to update existing layout window from config
 
-------------------------------------------------------------------------
-r1486 | zas_ | 2009-03-07 11:32:04 +0100 (Sat, 07 Mar 2009) | 1 line
+commit f85c331b6bdca1a07e38a196e93562448b4c1048
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 11:52:29 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1485 | zas_ | 2009-03-07 11:31:30 +0100 (Sat, 07 Mar 2009) | 1 line
+    do not add duplicate keywords from config file
 
-Use a common function bar_pane_expander_title() to set expanders title widget.
-------------------------------------------------------------------------
-r1484 | zas_ | 2009-03-06 23:34:38 +0100 (Fri, 06 Mar 2009) | 1 line
+commit edddb38414fcaf01150e7b3b1ee0175cf8f72ac2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 10:12:29 2009 +0000
 
-Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
-------------------------------------------------------------------------
-r1483 | nadvornik | 2009-03-06 16:52:47 +0100 (Fri, 06 Mar 2009) | 2 lines
+    be more verbose on parse errors
 
-simplified bar interface
+commit db9583d155f876dcf8ecdba06de8c41bf6363955
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 20 09:46:35 2009 +0000
 
-------------------------------------------------------------------------
-r1482 | zas_ | 2009-03-06 16:04:35 +0100 (Fri, 06 Mar 2009) | 1 line
+    added function to reload external editors at any time
+    eliminated init_after_global_options()
 
-Add debug versions of path_to_utf8() and path_from_utf8() which allows to report the caller file and line, this is enabled with --enable-debug-flags (and developer mode too).
-------------------------------------------------------------------------
-r1481 | zas_ | 2009-03-06 15:53:32 +0100 (Fri, 06 Mar 2009) | 1 line
+commit a043fedcd1fa348548988b8c157f60a7b585539d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Mar 19 22:58:28 2009 +0000
 
-Fix utf8/locale conversion warning: the path passed to isdir() is not in UTF8 (if local fs is not in UFT8) so do not use it (isdir() uses stat_utf8() which calls path_from_utf8()).
-------------------------------------------------------------------------
-r1480 | nadvornik | 2009-03-06 15:42:32 +0100 (Fri, 06 Mar 2009) | 2 lines
+    initialization clean-up
 
-enable wrap mode in comment pane
+commit 75ad70e81b5f541c6b57bf514a6363df919c102b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Mar 19 22:12:14 2009 +0000
 
-------------------------------------------------------------------------
-r1479 | nadvornik | 2009-03-06 15:24:11 +0100 (Fri, 06 Mar 2009) | 2 lines
+    improved config file formatting
 
-use standard GtkHPaned for sidebar width
+commit 5cd0768160f389b85802e2c44a568837b0f8e2b8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 17 23:03:07 2009 +0000
 
-------------------------------------------------------------------------
-r1478 | zas_ | 2009-03-06 12:42:25 +0100 (Fri, 06 Mar 2009) | 1 line
+    added more IPTC tags
 
-Fix tab completion when entering "/et[TAB]" it was changed to "et", this is fixed.
-------------------------------------------------------------------------
-r1477 | nadvornik | 2009-03-06 00:32:56 +0100 (Fri, 06 Mar 2009) | 2 lines
+commit c4397842e058064be7c5e3f43a7f0334cc0ffb3d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 17 22:41:09 2009 +0000
 
-do not crash if an exif entry is deleted during editing
+    implemented editing support in exif pane
 
-------------------------------------------------------------------------
-r1476 | nadvornik | 2009-03-06 00:02:15 +0100 (Fri, 06 Mar 2009) | 2 lines
+commit 4bb3d0e135ca5c31daea4beaebda72905dccf5a0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 17 19:52:56 2009 +0000
 
-added popup menu to the exif pane
+    fixed loading of desktop file icons, gtk seems to expect an icon name without extension
 
-------------------------------------------------------------------------
-r1475 | nadvornik | 2009-03-04 23:44:35 +0100 (Wed, 04 Mar 2009) | 2 lines
+commit 8b21951c112cda8df9ab0d7e21ec024952fec965
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 17 19:09:34 2009 +0000
 
-indicate that the exif pane is empty
+    simplified code
 
-------------------------------------------------------------------------
-r1474 | nadvornik | 2009-03-04 23:34:11 +0100 (Wed, 04 Mar 2009) | 2 lines
+commit 914fa4e1207fe6f882dca6aa6da0c4306fb0ec63
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 17 18:58:15 2009 +0000
 
-prepared exif pane for popup menu
+    improved expanding and hiding of helper keywords
 
-------------------------------------------------------------------------
-r1473 | zas_ | 2009-03-04 22:33:19 +0100 (Wed, 04 Mar 2009) | 1 line
+commit 48a18d514775969bd21ce0bd154d454af5182ed8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 17 18:30:53 2009 +0000
 
-layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
-------------------------------------------------------------------------
-r1472 | nadvornik | 2009-03-04 22:19:12 +0100 (Wed, 04 Mar 2009) | 2 lines
+    fixed keyword tree redrawing
 
-dnd from advanced exif window to exif pane
+commit a142c98b0d4a45084b3fbb698bae2f650846673c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Mar 17 00:05:13 2009 +0000
 
-------------------------------------------------------------------------
-r1471 | nadvornik | 2009-03-04 19:53:47 +0100 (Wed, 04 Mar 2009) | 2 lines
+    Preliminary support for doxygen: make doxygen-doc will create documentation from sources in doc/doxygen directory.
 
-Display pixel coordinates and rgb - patch by Ruben Stein
+commit 496826c114d4a8f9040bb1ef40e10f5782b3fe15
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 16 20:39:09 2009 +0000
 
-------------------------------------------------------------------------
-r1470 | nadvornik | 2009-03-04 00:17:07 +0100 (Wed, 04 Mar 2009) | 2 lines
+    gint -> gboolean where applicable. The end (ouf!).
 
-reorder exif pane entries with drag and drop
+commit 0b6b9778a54d91e2cfd39e9609ff9a784d2cbd7f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 16 19:11:39 2009 +0000
 
-------------------------------------------------------------------------
-r1469 | nadvornik | 2009-03-02 23:48:04 +0100 (Mon, 02 Mar 2009) | 2 lines
+    gint -> gboolean where applicable.
 
-overlay now survives image split
+commit 4cd4d86404984c4696fc26e3968e5b17ff998d44
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 16 18:19:11 2009 +0000
 
-------------------------------------------------------------------------
-r1468 | zas_ | 2009-03-02 22:06:32 +0100 (Mon, 02 Mar 2009) | 1 line
+    gint -> gboolean where applicable.
 
-Random tidy up.
-------------------------------------------------------------------------
-r1467 | zas_ | 2009-03-02 22:05:57 +0100 (Mon, 02 Mar 2009) | 1 line
+commit 049a021e2221f7de3df81ce6c64b77c424ce0dac
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 23:22:17 2009 +0000
 
-Fix memleak in previous patch.
-------------------------------------------------------------------------
-r1466 | zas_ | 2009-03-02 22:04:38 +0100 (Mon, 02 Mar 2009) | 1 line
+    improved pane_keywords notification
 
-Add a directory separator at the end of names in tab completion list to indicate directories.
-------------------------------------------------------------------------
-r1465 | zas_ | 2009-03-02 00:38:36 +0100 (Mon, 02 Mar 2009) | 1 line
+commit bdb1e4f3ca99abb0a9869a9bc872bc5b0b6f60b3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 22:46:25 2009 +0000
 
-Align exif labels vertically (visually better since name is now smaller than value).
-------------------------------------------------------------------------
-r1464 | zas_ | 2009-03-02 00:28:53 +0100 (Mon, 02 Mar 2009) | 1 line
+    call the notify function just once when the keywords are pushed to the
+    textarea
 
-Update POTFILES.in and french translation.
-------------------------------------------------------------------------
-r1463 | zas_ | 2009-03-02 00:14:19 +0100 (Mon, 02 Mar 2009) | 1 line
+commit 5c5e09cfb61bea28413a35b616540d4fea4710e9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 15 20:16:20 2009 +0000
 
-When g_new0() is used, drop redundant initializations to NULL, FALSE or 0, second pass.
-------------------------------------------------------------------------
-r1462 | nadvornik | 2009-03-01 22:35:18 +0100 (Sun, 01 Mar 2009) | 2 lines
+    gint -> gboolean.
 
-make the exif pane grow-only - this reduces sidebar jumping
+commit 5f2862f720cdf6e5b001b0235f54dd3115378edc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 18:41:25 2009 +0000
 
-------------------------------------------------------------------------
-r1461 | zas_ | 2009-03-01 22:06:55 +0100 (Sun, 01 Mar 2009) | 1 line
+    fixed segfault in osd called from img-view
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2684068&group_id=222125&atid=1054680
 
-When g_new0() is used, drop redundant initializations to NULL, FALSE or 0.
-------------------------------------------------------------------------
-r1460 | zas_ | 2009-03-01 20:48:38 +0100 (Sun, 01 Mar 2009) | 1 line
+commit a83ce8127733fe662f70e27e4861923525924d2a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 15 18:06:41 2009 +0000
 
-Clarify colorspace determination (exif 2.2/2.21).
-------------------------------------------------------------------------
-r1459 | zas_ | 2009-03-01 18:58:19 +0100 (Sun, 01 Mar 2009) | 1 line
+    gint -> gboolean.
 
-Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
-------------------------------------------------------------------------
-r1458 | zas_ | 2009-03-01 18:13:14 +0100 (Sun, 01 Mar 2009) | 1 line
+commit e297b62d130c7fd6a2d4f7d959b1d2c2a0ed0a29
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 17:40:04 2009 +0000
 
-Improve file checks using is_readable_file().
-------------------------------------------------------------------------
-r1457 | zas_ | 2009-03-01 18:11:51 +0100 (Sun, 01 Mar 2009) | 1 line
+    fixed viewing image from dupe and search windows
 
-Only attempt to read exif if the file is readable.
-------------------------------------------------------------------------
-r1456 | zas_ | 2009-03-01 18:10:45 +0100 (Sun, 01 Mar 2009) | 1 line
+commit e4ec9f2c3d3c8a79dd7741b2b7e7d4bd6825c758
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 15 15:01:07 2009 +0000
 
-Introduce is_readable_file() which test if file exists, is regular and readable.
-------------------------------------------------------------------------
-r1455 | zas_ | 2009-03-01 17:46:40 +0100 (Sun, 01 Mar 2009) | 1 line
+    gint -> gboolean.
 
-image_select(), image_set_selectable(): tidy up.
-------------------------------------------------------------------------
-r1454 | zas_ | 2009-03-01 17:43:48 +0100 (Sun, 01 Mar 2009) | 1 line
+commit 54797050cd64429ea6a90ee4d8882b0542d634ae
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 15 13:33:56 2009 +0000
 
-Indentation fixes.
-------------------------------------------------------------------------
-r1453 | zas_ | 2009-03-01 16:54:37 +0100 (Sun, 01 Mar 2009) | 1 line
+    gint -> gboolean.
 
-image_post_process_color(): remove exif parameter, just extract it when needed.
-------------------------------------------------------------------------
-r1452 | zas_ | 2009-03-01 16:41:51 +0100 (Sun, 01 Mar 2009) | 1 line
+commit 1e7fe2f0bce7e8b4959c6d0e82259617a5224e1c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 12:41:39 2009 +0000
 
-Slightly modify access_file() and use it to test profile files existence and read access.
-------------------------------------------------------------------------
-r1451 | zas_ | 2009-03-01 16:28:06 +0100 (Sun, 01 Mar 2009) | 1 line
+    fixed XMP and IPTC entry names in exif pane
 
-Add an ellipse when the file name is truncated.
-------------------------------------------------------------------------
-r1450 | zas_ | 2009-03-01 16:15:37 +0100 (Sun, 01 Mar 2009) | 1 line
+commit 972f0c276d31a7510ce0a26e15b4925a6a0c1ab3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 12:20:14 2009 +0000
 
-In the side bar, display the filename without the 'Filename:' prefix and makes it centered. Allow to select it for copy'n'paste.
-------------------------------------------------------------------------
-r1449 | nadvornik | 2009-03-01 14:37:30 +0100 (Sun, 01 Mar 2009) | 2 lines
+    added notification to the exif pane
 
-dropped ExifUIList
+commit 7c3dc4dc86dff4853269bbe8341b71f1110d5709
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 11:58:46 2009 +0000
 
-------------------------------------------------------------------------
-r1448 | nadvornik | 2009-03-01 12:59:32 +0100 (Sun, 01 Mar 2009) | 2 lines
+    fixed a bug in osd updating, it seems that the osd icons work again
 
-do not use separate list of entries, rely on vbox
+commit 04e5dfcf4a9d04ec83be00b15c53a35cdec49f79
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 11:34:09 2009 +0000
 
-------------------------------------------------------------------------
-r1447 | nadvornik | 2009-03-01 01:10:00 +0100 (Sun, 01 Mar 2009) | 2 lines
+    compute histogram in idle time
 
-fixed possible crash
+commit c30d27838ff7606edcfcaae4e2d616370edacc67
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 15 09:06:13 2009 +0000
 
-------------------------------------------------------------------------
-r1446 | nadvornik | 2009-03-01 00:59:02 +0100 (Sun, 01 Mar 2009) | 2 lines
+    fixed possible deadlock with multiple thumb loaders in parallel
 
-rewritten exif pane to support arbitrary number of entries
+commit 3dfd1c11d0f0b11e6627af9b687535dbaf32dee3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 15 07:07:52 2009 +0000
 
-------------------------------------------------------------------------
-r1445 | zas_ | 2009-02-28 21:57:26 +0100 (Sat, 28 Feb 2009) | 1 line
+    gint -> gboolean.
 
-max value -> value. Shorter.
-------------------------------------------------------------------------
-r1444 | zas_ | 2009-02-28 21:53:59 +0100 (Sat, 28 Feb 2009) | 1 line
+commit 2c38cf912ea9c74916ea950f62b1637d26f1a55b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 14 23:26:42 2009 +0000
 
-Add missing space between while and first parenthesis.
-------------------------------------------------------------------------
-r1443 | zas_ | 2009-02-28 21:52:51 +0100 (Sat, 28 Feb 2009) | 1 line
+    completely separated global and layout window options
+    layout window configuration is available under separate menu entry
 
-Add missing space between switch and first parenthesis.
-------------------------------------------------------------------------
-r1442 | zas_ | 2009-02-28 21:48:47 +0100 (Sat, 28 Feb 2009) | 1 line
+commit 869dd50b966b21850457b98a434dcb015158163e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Mar 14 21:12:55 2009 +0000
 
-No space between function name and first parenthesis, it eases greping (see CODING).
-------------------------------------------------------------------------
-r1441 | zas_ | 2009-02-28 21:24:42 +0100 (Sat, 28 Feb 2009) | 1 line
+    gint -> gboolean.
 
-Prevent Gtk assertion failures when no icon is set.
-------------------------------------------------------------------------
-r1440 | nadvornik | 2009-02-28 21:13:11 +0100 (Sat, 28 Feb 2009) | 3 lines
+commit 3707f26ed3f7eb60c321cdef21d58a9ae458c160
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Mar 14 20:07:23 2009 +0000
 
-show histogram label in the title
-adjusted label texts
+    More gboolean.
 
-------------------------------------------------------------------------
-r1439 | nadvornik | 2009-02-28 20:44:58 +0100 (Sat, 28 Feb 2009) | 2 lines
+commit ccbfd10e582b6099d035f09a0e0bd5bc146885cb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Mar 14 19:25:21 2009 +0000
 
-give the panes more control over expander title
+    Use gboolean where applicable, minor cleanup and indentations fixes.
 
-------------------------------------------------------------------------
-r1438 | zas_ | 2009-02-28 20:41:23 +0100 (Sat, 28 Feb 2009) | 1 line
+commit 8e811724d0f95587be393cdb7a677a32ac704d34
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 14 17:21:35 2009 +0000
 
-Color profiles menu: test for file access before allowing to select it as input profile.
-------------------------------------------------------------------------
-r1437 | nadvornik | 2009-02-28 19:51:25 +0100 (Sat, 28 Feb 2009) | 2 lines
+    improved notification system
 
-load icons for external editors
+commit 2770d68d3c1a7e5f7550e4305e8b52aa11487759
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Mar 14 11:26:43 2009 +0000
 
-------------------------------------------------------------------------
-r1436 | zas_ | 2009-02-28 19:01:16 +0100 (Sat, 28 Feb 2009) | 1 line
+    More gboolean and tidy up.
 
-Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
-------------------------------------------------------------------------
-r1435 | nadvornik | 2009-02-28 18:20:16 +0100 (Sat, 28 Feb 2009) | 2 lines
+commit 57236ac4620fce1a918d9c3269c51bcf468e5d22
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 14 10:34:42 2009 +0000
 
-fixed bar_histogram headers
+    cleanup, small fixes
 
-------------------------------------------------------------------------
-r1434 | zas_ | 2009-02-28 18:12:00 +0100 (Sat, 28 Feb 2009) | 1 line
+commit 83a31276f24f79537f8e708cd2cb9b53af5a1470
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 13 23:19:58 2009 +0000
 
-Minor simplification and cleanup.
-------------------------------------------------------------------------
-r1433 | zas_ | 2009-02-28 17:59:20 +0100 (Sat, 28 Feb 2009) | 1 line
+    do not allow to add keywords with the same name as siblings
 
-image_change_complete(): reduce code redundancy and implify.
-------------------------------------------------------------------------
-r1432 | nadvornik | 2009-02-28 15:40:22 +0100 (Sat, 28 Feb 2009) | 3 lines
+commit c27864686704e76f90e3bdc3557537f5fb5086b4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 13 16:45:21 2009 +0000
 
-fixed overlay configuration
-split overlay options between global and layout window
+    added keyword tree filtering
 
-------------------------------------------------------------------------
-r1431 | nadvornik | 2009-02-28 13:50:39 +0100 (Sat, 28 Feb 2009) | 2 lines
+commit dc9042b3bd903090011f945df79e1eeacd3f8e97
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 13 12:06:01 2009 +0000
 
-save and restore toolbar configuration
+    show file name in advanced_exif
 
-------------------------------------------------------------------------
-r1430 | nadvornik | 2009-02-28 10:59:27 +0100 (Sat, 28 Feb 2009) | 2 lines
+commit 3dcfa72047dc28f10b50187c651609ae96cd7065
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 13 10:36:32 2009 +0000
 
-create toolbar from ui_manager
+    handle sidecar files for raw formats that are not known to exiv2
 
-------------------------------------------------------------------------
-r1429 | zas_ | 2009-02-28 00:25:31 +0100 (Sat, 28 Feb 2009) | 1 line
+commit b987ed85c78996f56abc1f3025f36d3c4532d07c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 13 09:03:06 2009 +0000
 
-Really fix up color profiles options tests. Add an indicator of the embedded color profile when recognized (a * just after sRGB or AdobeRGB compatible).
-------------------------------------------------------------------------
-r1428 | zas_ | 2009-02-27 23:28:17 +0100 (Fri, 27 Feb 2009) | 1 line
+    fixed keyword to mark connection
 
-Fix up color profiles menu: mark empty entries (but not NULL) as inactive.
-------------------------------------------------------------------------
-r1427 | nadvornik | 2009-02-27 22:30:28 +0100 (Fri, 27 Feb 2009) | 2 lines
+commit 26823554cdf789efc5c78d6d43a25678b24c76e9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Mar 12 22:44:21 2009 +0000
 
-compute histmap in idle callback and only if the histogram is expanded
+    Use gboolean where applicable.
 
-------------------------------------------------------------------------
-r1426 | zas_ | 2009-02-26 22:46:27 +0100 (Thu, 26 Feb 2009) | 1 line
+commit ce7252908d82484fbad1823b49a9c497ac86d278
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Mar 12 22:39:06 2009 +0000
 
-Add a tooltip showing current histogram state on bar histogram.
-------------------------------------------------------------------------
-r1425 | zas_ | 2009-02-26 21:50:36 +0100 (Thu, 26 Feb 2009) | 1 line
+    Make ishidden() static to filedata.c and rename it is_hidden_file().
 
-Clean up histogram stuff: options saving/restoring, osd histogram separation, tidy up.
-------------------------------------------------------------------------
-r1424 | zas_ | 2009-02-26 18:34:14 +0100 (Thu, 26 Feb 2009) | 1 line
+commit ea7b2e3825efdd3929b5dc5b057fa21b6d89ca3a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Mar 12 22:35:45 2009 +0000
 
-Add .bak and .mo extensions to svn:ignore.
-------------------------------------------------------------------------
-r1423 | nadvornik | 2009-02-26 09:04:52 +0100 (Thu, 26 Feb 2009) | 2 lines
+    gint -> gboolean and tidy up.
 
-quoted_value is no longer needed
+commit 12d44efdf007bf1bb292b450fd575cb007ace3b0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Mar 12 21:27:13 2009 +0000
 
-------------------------------------------------------------------------
-r1422 | zas_ | 2009-02-26 00:04:08 +0100 (Thu, 26 Feb 2009) | 1 line
+    added a dialog for editing keyword tree
 
-Silent a minor warning.
-------------------------------------------------------------------------
-r1421 | nadvornik | 2009-02-25 22:09:17 +0100 (Wed, 25 Feb 2009) | 2 lines
+commit 445675df9548d5b7b765a07c7bfe96faa3e4ab6a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Mar 12 21:06:37 2009 +0000
 
-correctly save and restore overlay string
+    Use gboolean where applicable, for the sake of consistency.
 
-------------------------------------------------------------------------
-r1420 | zas_ | 2009-02-25 21:54:38 +0100 (Wed, 25 Feb 2009) | 1 line
+commit 2814d20328df2cfb3efcd57bdbf6c8a468c94408
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Mar 11 23:36:01 2009 +0000
 
-Save bar pane histogram state to rc file.
-------------------------------------------------------------------------
-r1419 | zas_ | 2009-02-25 21:42:35 +0100 (Wed, 25 Feb 2009) | 1 line
+    Code cleanup.
 
-Fix up bar pane histogram contextual menu: show current state for channel and log mode.
-------------------------------------------------------------------------
-r1418 | nadvornik | 2009-02-25 20:46:03 +0100 (Wed, 25 Feb 2009) | 3 lines
+commit f719019c2a2838f979aaece5ed16e074c544310d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Mar 11 23:35:31 2009 +0000
 
-reuse original utility_box (image + sidebars) on layout change (switch
-from list to icon view etc.)
+    Fix bug when adding a new collection through sort manager. Tidy up.
 
-------------------------------------------------------------------------
-r1417 | nadvornik | 2009-02-25 19:21:20 +0100 (Wed, 25 Feb 2009) | 2 lines
+commit 3ad46d8aff0ddc2fb5489031121c4bc48b7756d3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Mar 11 23:04:30 2009 +0000
 
-fixed filter initialization
+    Tidy up.
 
-------------------------------------------------------------------------
-r1416 | nadvornik | 2009-02-24 23:21:28 +0100 (Tue, 24 Feb 2009) | 2 lines
+commit 0b00a6f6e8da83036bc84c8a47c863721f2a1c14
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Mar 11 22:56:56 2009 +0000
 
-improved bar_sort configuration
+    Use gboolean pseudo type where applicable.
 
-------------------------------------------------------------------------
-r1415 | zas_ | 2009-02-24 22:08:16 +0100 (Tue, 24 Feb 2009) | 1 line
+commit 2f2e14119378d60c52c113078c35999f342b249e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Mar 11 22:28:37 2009 +0000
 
-Add a contextual menu on bar pane histogram allowing to change channels and mode. More work needed.
-------------------------------------------------------------------------
-r1414 | nadvornik | 2009-02-24 21:47:38 +0100 (Tue, 24 Feb 2009) | 2 lines
+    Remove useless functions.
 
-fixed --fullscreen option together with enabled bar 
+commit 53335b4551e6099ecb9a361d87b35487df57101e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 11 21:54:54 2009 +0000
 
-------------------------------------------------------------------------
-r1413 | nadvornik | 2009-02-24 21:34:39 +0100 (Tue, 24 Feb 2009) | 2 lines
+    added a popup menu in keyword tree
 
-simplified and improved bar configuration
+commit 13b5d1f44e4c824a4a48b972e758f2fde80dbc43
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Mar 11 17:38:20 2009 +0000
 
-------------------------------------------------------------------------
-r1412 | zas_ | 2009-02-24 19:00:45 +0100 (Tue, 24 Feb 2009) | 1 line
+    Use dynamic allocation for editor key passed to various callbacks.
 
-Enclose macro parameters names with _ to differentiate them from variable names.
-------------------------------------------------------------------------
-r1411 | zas_ | 2009-02-24 18:47:45 +0100 (Tue, 24 Feb 2009) | 5 lines
+commit 4ae54d3fe9578e43dace94f9fdc9fc4e757a74f9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 10 22:52:12 2009 +0000
 
-Since READ_*() macros are now exported, do not hide
-the if() continue; statement in them.
-Wrap WRITE_STRING() instructions in a safer do {} while (0).
+    fixed saving of file_view_type
 
+commit 7feb265d9809eef4b3c225b6475b83228771d6ea
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Mar 10 17:58:30 2009 +0000
 
-------------------------------------------------------------------------
-r1410 | nadvornik | 2009-02-23 23:13:09 +0100 (Mon, 23 Feb 2009) | 2 lines
+    Remove now useless element.
 
-simplified config writing 
+commit 244bab9b7cc522210cdfbf1432c3a4b7c3ccce77
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Mar 10 17:22:17 2009 +0000
 
-------------------------------------------------------------------------
-r1409 | nadvornik | 2009-02-23 22:21:15 +0100 (Mon, 23 Feb 2009) | 2 lines
+    Remove the toggle on advanced exif window menu item.
 
-enabled commandline again
+commit 0d08080fca58e3ef64ede91c605d46ccb8bb2689
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 9 19:37:58 2009 +0000
 
-------------------------------------------------------------------------
-r1408 | zas_ | 2009-02-23 18:20:40 +0100 (Mon, 23 Feb 2009) | 1 line
+    Add missing g_key_file_free() call.
 
-Introduce helpers histogram_toggle_channel() and histogram_toggle_mode().
-------------------------------------------------------------------------
-r1407 | zas_ | 2009-02-22 18:46:42 +0100 (Sun, 22 Feb 2009) | 1 line
+commit 704c8c788786d55da1a84676cdca7865e85b96da
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 9 19:35:53 2009 +0000
 
-Set svn:ignore on Makefile and Makefile.in.
-------------------------------------------------------------------------
-r1406 | zas_ | 2009-02-22 18:40:32 +0100 (Sun, 22 Feb 2009) | 1 line
+    Fix editor_command_path_parse().
 
-Fix and simplify histogram code, drop histogram based on mean value.
-------------------------------------------------------------------------
-r1405 | nadvornik | 2009-02-22 16:35:37 +0100 (Sun, 22 Feb 2009) | 4 lines
+commit 6829be525a541c8e5b3b9a3d130548434d006587
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 9 19:34:26 2009 +0000
 
-config file format changed to XML
-save and restore all layout windows
-save and restore sidebar configuration
+    Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
 
-------------------------------------------------------------------------
-r1404 | zas_ | 2009-02-22 14:29:49 +0100 (Sun, 22 Feb 2009) | 1 line
+commit 2c12c12f04540a4b3888fde88f88cc93e7adb011
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 9 12:44:06 2009 +0000
 
-Attempt to simplify and fix histrogram code.
-------------------------------------------------------------------------
-r1403 | zas_ | 2009-02-21 21:43:35 +0100 (Sat, 21 Feb 2009) | 1 line
+    Only store editors if they match criterias to not be hidden from start, it makes more sense. Fix editor_command_path_parse().
 
-Glibification again.
-------------------------------------------------------------------------
-r1402 | zas_ | 2009-02-21 19:28:53 +0100 (Sat, 21 Feb 2009) | 1 line
+commit 67e00d0a920b6349e42f86742a18ca50fdc4880e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 8 23:12:49 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1401 | zas_ | 2009-02-21 19:04:52 +0100 (Sat, 21 Feb 2009) | 1 line
+    Introduce EditorFlags type, cleanup.
 
-Glibification.
-------------------------------------------------------------------------
-r1400 | zas_ | 2009-02-21 11:53:18 +0100 (Sat, 21 Feb 2009) | 1 line
+commit 30fc45e64c3dea9841d40ba694d1d2b45d002cc6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 8 23:09:27 2009 +0000
 
-Move grid color setting to histogram_new().
-------------------------------------------------------------------------
-r1399 | zas_ | 2009-02-21 11:33:56 +0100 (Sat, 21 Feb 2009) | 1 line
+    save and restore the keyword tree
 
-Remove histogram_ prefix from struct _Histogram fields names and rename them more properly.
-------------------------------------------------------------------------
-r1398 | zas_ | 2009-02-21 11:29:13 +0100 (Sat, 21 Feb 2009) | 1 line
+commit c00ba73c65a001d5fbf7d7d4c6279c97e6992983
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 8 21:12:45 2009 +0000
 
-Add grid to bar histogram, simplify the code and draw horizontal lines too.
-------------------------------------------------------------------------
-r1397 | zas_ | 2009-02-19 18:36:38 +0100 (Thu, 19 Feb 2009) | 1 line
+    fixed crash with certain layout configurations
 
-Fix bug 2599857: file list sort order was wrong in many cases.
-------------------------------------------------------------------------
-r1396 | nadvornik | 2009-02-16 23:48:30 +0100 (Mon, 16 Feb 2009) | 2 lines
+commit f7dbd69473c9bcdcb08c6b904b11d512e3a2929a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 8 20:49:48 2009 +0000
 
-fixed compiler warning
+    Cleanup and minor fixes.
 
-------------------------------------------------------------------------
-r1395 | nadvornik | 2009-02-16 22:01:27 +0100 (Mon, 16 Feb 2009) | 2 lines
+commit 66f5ea89ccea96c00f371f633fe02142cec8bd05
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 8 17:51:03 2009 +0000
 
-hopefully fixed a freeze on solaris
+    Advanced exif window: make all columns sortable and resizable.
 
-------------------------------------------------------------------------
-r1394 | nadvornik | 2009-02-15 20:25:55 +0100 (Sun, 15 Feb 2009) | 2 lines
+commit 411a041e79c2cb24490d562fdcd05030cbcfff71
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 8 15:30:15 2009 +0000
 
-added histogram pane
+    Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
 
-------------------------------------------------------------------------
-r1393 | nadvornik | 2009-02-15 18:27:48 +0100 (Sun, 15 Feb 2009) | 2 lines
+commit 91b011a25e87aebe4cdc92e2a75db82b872c8302
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 8 15:02:18 2009 +0000
 
-fixed histogram drawing
+    Fix up editor execution.
 
-------------------------------------------------------------------------
-r1392 | zas_ | 2009-02-15 16:58:01 +0100 (Sun, 15 Feb 2009) | 1 line
+commit 3014c4ff1cd8fc5a6ce064e3bcc297417a08a37f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 8 14:27:19 2009 +0000
 
-Remove redundant line of code.
-------------------------------------------------------------------------
-r1391 | zas_ | 2009-02-15 16:56:48 +0100 (Sun, 15 Feb 2009) | 1 line
+    Display icons in edit contextual menu.
 
-Fix up few compilation warnings.
-------------------------------------------------------------------------
-r1390 | nadvornik | 2009-02-15 14:11:21 +0100 (Sun, 15 Feb 2009) | 3 lines
+commit 0205b0af299b580d25846b1fc9c17e7716939341
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 8 13:23:25 2009 +0000
 
-histogram caching
-histogram interface prepared for histogram pane
+    In various Edit context menus, only display editors that match the file types in the selection.
 
-------------------------------------------------------------------------
-r1389 | nadvornik | 2009-02-15 10:36:53 +0100 (Sun, 15 Feb 2009) | 3 lines
+commit 06d738a8072a9eae0765859eecc19c1745cde25b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 8 12:42:23 2009 +0000
 
-separated "normal" and advanced exif, "Normal" exif is now in the
-generic bar, advanced exif is in separate window.
+    dnd fixes
 
-------------------------------------------------------------------------
-r1388 | nadvornik | 2009-02-14 21:26:30 +0100 (Sat, 14 Feb 2009) | 2 lines
+commit e9f2c348743955bcf92c0ef94331d545e7d6f7a1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 8 11:32:12 2009 +0000
 
-droped Preferences dialog, sidebar should replace it completely
+    dnd fixes
 
-------------------------------------------------------------------------
-r1387 | nadvornik | 2009-02-14 20:50:54 +0100 (Sat, 14 Feb 2009) | 4 lines
+commit e0a06986823081a727a4413b7e2ff562fd6618be
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 8 10:38:51 2009 +0000
 
-replaced bar_info with an universal bar, restored the original
-functionality (more or less)
-bar configuration is not yet saved
+    allow dropping of multiple keywords
 
-------------------------------------------------------------------------
-r1386 | zas_ | 2009-02-09 10:02:04 +0100 (Mon, 09 Feb 2009) | 1 line
+commit 3dc57a6704aa6b4b5c94e597dc448ee141d14c15
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 8 10:25:24 2009 +0000
 
-Update ChangeLog using C locale date format, add a script to ease future updates.
-------------------------------------------------------------------------
-r1385 | nadvornik | 2009-02-07 22:03:11 +0100 (Sat, 07 Feb 2009) | 4 lines
+    show a label instead of the default drag icon
 
-force at least one idle call before writting metadata
-(without this the exit_program_write_metadata_cb could be called
-before the exit_program function finished)
+commit 2874d15e958da779066951a0bde3bafe3f9654cb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 8 09:56:40 2009 +0000
 
-------------------------------------------------------------------------
-r1384 | nadvornik | 2009-02-07 20:01:21 +0100 (Sat, 07 Feb 2009) | 6 lines
+    dnd in keywords tree
+    improved dnd in advanced exif
 
-use metadata_read_* functions where possible
-switch exiv2 to utf8 charset
-support for exiv2 formatting that depends on other tags:
-http://dev.robotbattle.com/bugs/view.php?id=0000516
+commit 60a09da7a127ddafeb538ed3d27bff57c65c552a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 7 17:02:59 2009 +0000
 
+    implemented keywords editor as described at
+    http://geeqie.wiki.sourceforge.net/keywords
+    keyword tree is hardcoded for now
+    TODO: configuration
 
-------------------------------------------------------------------------
-r1383 | nadvornik | 2009-02-07 00:49:03 +0100 (Sat, 07 Feb 2009) | 2 lines
+commit 3d687308a8d41f5be0a667c4a470f6391c6e172b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Mar 7 10:32:04 2009 +0000
 
-Start with "Fit to window" in "Leave Zoom at previous setting" mode
+    French translation was updated.
 
-------------------------------------------------------------------------
-r1382 | nadvornik | 2009-02-06 23:56:52 +0100 (Fri, 06 Feb 2009) | 4 lines
+commit fbe133245d32410b958b6fdffecfcd14e2ea2bca
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Mar 7 10:31:30 2009 +0000
 
-do not switch to the next image on mouse click in split mode
-it interferes with image switching too much
+    Use a common function bar_pane_expander_title() to set expanders title widget.
 
+commit e4c7b67ba437b2e4b667b48ed40e50346c3fce45
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Mar 6 22:34:38 2009 +0000
 
-------------------------------------------------------------------------
-r1381 | nadvornik | 2009-02-06 23:41:47 +0100 (Fri, 06 Feb 2009) | 2 lines
+    Try to improve tab completion: when a key is pressed while tab completion menu is shown, the number of entries is reduced, dhowing all matching entries but the menu is no more closed after each key pressure. Number of possible entries in this menu was increased from 500 to 1000. Pressing TAB when path entry is empty now adds / (root directory).
 
-improved labels of some menu items
+commit 0006442fe24f14a1ce2492b73d22c92670bf0974
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 6 15:52:47 2009 +0000
 
-------------------------------------------------------------------------
-r1380 | zas_ | 2009-02-04 18:15:30 +0100 (Wed, 04 Feb 2009) | 1 line
+    simplified bar interface
 
-Add year 2009 to copyright info everywhere.
-------------------------------------------------------------------------
-r1379 | zas_ | 2009-02-04 17:50:24 +0100 (Wed, 04 Feb 2009) | 1 line
+commit 4da29794c4fe3233ac3ecff01019e86d779a8c2b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Mar 6 15:04:35 2009 +0000
 
-Fix up the copyright years info.
-------------------------------------------------------------------------
-r1378 | zas_ | 2009-02-04 17:49:11 +0100 (Wed, 04 Feb 2009) | 1 line
+    Add debug versions of path_to_utf8() and path_from_utf8() which allows to report the caller file and line, this is enabled with --enable-debug-flags (and developer mode too).
 
-Update README header.
-------------------------------------------------------------------------
-r1377 | zas_ | 2009-02-04 17:47:02 +0100 (Wed, 04 Feb 2009) | 1 line
+commit 7b8e46aa208816b61b4c1c852112aeebd3fe8f46
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Mar 6 14:53:32 2009 +0000
 
-Speed up random slideshow, startup time decreases from minutes to seconds when amount of images is big. Patch by Kjell Morgenstern.
-------------------------------------------------------------------------
-r1376 | zas_ | 2009-02-04 15:51:23 +0100 (Wed, 04 Feb 2009) | 1 line
+    Fix utf8/locale conversion warning: the path passed to isdir() is not in UTF8 (if local fs is not in UFT8) so do not use it (isdir() uses stat_utf8() which calls path_from_utf8()).
 
-Do not show geeqie itself in editors menus.
-------------------------------------------------------------------------
-r1375 | nadvornik | 2009-02-03 19:04:10 +0100 (Tue, 03 Feb 2009) | 2 lines
+commit 25962e3530372946ba7c7a051b509ecf7056ac85
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 6 14:42:32 2009 +0000
 
-do not translate already translated texts from desktop files
+    enable wrap mode in comment pane
 
-------------------------------------------------------------------------
-r1374 | zas_ | 2009-02-03 14:52:20 +0100 (Tue, 03 Feb 2009) | 1 line
+commit 55a3179898b348b98a45a58d6f325dbb92026b09
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Mar 6 14:24:11 2009 +0000
 
-Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
-------------------------------------------------------------------------
-r1373 | zas_ | 2009-02-03 14:50:10 +0100 (Tue, 03 Feb 2009) | 1 line
+    use standard GtkHPaned for sidebar width
 
-Reorder fields a bit and make flags field unsigned.
-------------------------------------------------------------------------
-r1372 | zas_ | 2009-02-03 09:41:21 +0100 (Tue, 03 Feb 2009) | 1 line
+commit e8aff8701513b7dd33af46253f588ed93aa26159
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Mar 6 11:42:25 2009 +0000
 
-editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
-------------------------------------------------------------------------
-r1371 | nadvornik | 2009-02-02 21:32:59 +0100 (Mon, 02 Feb 2009) | 3 lines
+    Fix tab completion when entering "/et[TAB]" it was changed to "et", this is fixed.
 
-improved placing of external commands in menu
-small menu improvements
+commit 9169391b4c9254bad5d087ea70eac57e35dafe6e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Mar 5 23:32:56 2009 +0000
 
-------------------------------------------------------------------------
-r1370 | nadvornik | 2009-02-01 23:35:40 +0100 (Sun, 01 Feb 2009) | 3 lines
+    do not crash if an exif entry is deleted during editing
 
-test TryExec,
-xdg_data_home added to the list of directories
+commit cf3ee0a9299dd553165421086ed4b44fe2d27eb6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Mar 5 23:02:15 2009 +0000
 
-------------------------------------------------------------------------
-r1369 | nadvornik | 2009-02-01 19:27:42 +0100 (Sun, 01 Feb 2009) | 2 lines
+    added popup menu to the exif pane
 
-fixed switch from single to split image
+commit 8cb3c38b5b8f7f3a6e02ba780b2d248e16872c3d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 4 22:44:35 2009 +0000
 
-------------------------------------------------------------------------
-r1368 | nadvornik | 2009-02-01 13:48:14 +0100 (Sun, 01 Feb 2009) | 2 lines
+    indicate that the exif pane is empty
 
-read external editors from .desktop files
+commit f4ef41357f991741b70538dd8156161f44e462bb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 4 22:34:11 2009 +0000
 
-------------------------------------------------------------------------
-r1367 | zas_ | 2009-01-29 20:43:34 +0100 (Thu, 29 Jan 2009) | 1 line
+    prepared exif pane for popup menu
 
-Sort the list alphabetically and remove an empty line.
-------------------------------------------------------------------------
-r1366 | nadvornik | 2009-01-29 20:23:39 +0100 (Thu, 29 Jan 2009) | 4 lines
+commit 96f804c86a637788af6faea27f260cca6c596229
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Mar 4 21:33:19 2009 +0000
 
-switched to po/LINGUAS, see http://live.gnome.org/GnomeGoals/PoLinguas
-(new glib-gettextize does not support the old method)
+    layout_status_update_pixel_cb(): cleanup and optimization, drop pango markup in i18n string, use a small function to calculate numbers length, only allocate text when needed.
 
+commit b258d123509caea8cd9fe5d85dd2122d4e353750
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 4 21:19:12 2009 +0000
 
-------------------------------------------------------------------------
-r1365 | zas_ | 2009-01-29 20:07:07 +0100 (Thu, 29 Jan 2009) | 1 line
+    dnd from advanced exif window to exif pane
 
-gint -> gboolean.
-------------------------------------------------------------------------
-r1364 | zas_ | 2009-01-29 20:00:24 +0100 (Thu, 29 Jan 2009) | 1 line
+commit ed17579e62a6cfe5a18915d3bfba80f8bc2ee564
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 4 18:53:47 2009 +0000
 
-Invert Horizontally vs vertically zoom fit, it was a TRUE/FALSE mismatch, reported by Christopher Beland.
-------------------------------------------------------------------------
-r1363 | zas_ | 2009-01-29 19:52:52 +0100 (Thu, 29 Jan 2009) | 1 line
+    Display pixel coordinates and rgb - patch by Ruben Stein
 
-Remove harmful documentation.helpdir and documentation.htmldir options. These paths can still be modified through --with-readmedir and --htmldir configure options. Reported by Christopher Beland.
-------------------------------------------------------------------------
-r1362 | nadvornik | 2009-01-29 19:05:41 +0100 (Thu, 29 Jan 2009) | 2 lines
+commit 82e0b2a4b6099bbe79ae2a0011fbbe4c528e428d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Mar 3 23:17:07 2009 +0000
 
-added SIGBUS handler
+    reorder exif pane entries with drag and drop
 
-------------------------------------------------------------------------
-r1361 | nadvornik | 2009-01-26 22:08:05 +0100 (Mon, 26 Jan 2009) | 2 lines
+commit a899ea58d94c14dc66d34a3567ebdcfa11a6a0f9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 2 22:48:04 2009 +0000
 
-fixed compilation with lirc
+    overlay now survives image split
 
-------------------------------------------------------------------------
-r1360 | zas_ | 2009-01-26 15:59:49 +0100 (Mon, 26 Jan 2009) | 1 line
+commit a4ee370ccd362d7e0c69067dbdad9e0106a1cce4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 2 21:06:32 2009 +0000
 
-Silent two minor warnings: GtkSelectionData data field is guchar* while g_strndup() wants gchar * as first parameter.
-------------------------------------------------------------------------
-r1359 | zas_ | 2009-01-26 15:50:56 +0100 (Mon, 26 Jan 2009) | 1 line
+    Random tidy up.
 
-Remove --enable-compile-warnings from autogen.sh, it was passed to configure which knows nothing about this option.
-------------------------------------------------------------------------
-r1358 | zas_ | 2009-01-26 15:49:09 +0100 (Mon, 26 Jan 2009) | 1 line
+commit da428c44fc7a1da6f146163cb8f484e0fc6676fb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 2 21:05:57 2009 +0000
 
-Move -Wall before -Wno-* options for them to have any effect.
-------------------------------------------------------------------------
-r1357 | zas_ | 2009-01-26 15:18:08 +0100 (Mon, 26 Jan 2009) | 1 line
+    Fix memleak in previous patch.
 
-Keep -O0 over -O2 as requested by Vladimir.
-------------------------------------------------------------------------
-r1356 | zas_ | 2009-01-26 09:36:23 +0100 (Mon, 26 Jan 2009) | 1 line
+commit 0668b940429414b217e330b5351bfca31dda1c4d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 2 21:04:38 2009 +0000
 
-Add -Wformat and -Wformat-security gcc options when --enable-debug-flags is set, move default optimization to -O2 by default (-O0 is only useful for specific debugging purposes).
-------------------------------------------------------------------------
-r1355 | zas_ | 2009-01-26 09:30:30 +0100 (Mon, 26 Jan 2009) | 1 line
+    Add a directory separator at the end of names in tab completion list to indicate directories.
 
-Fix a major bug in utf8_compare(): when case_sensitive is true, s1_t and s2_t were uninitialized, leading to unpredicable results.
-------------------------------------------------------------------------
-r1354 | nadvornik | 2009-01-25 20:38:31 +0100 (Sun, 25 Jan 2009) | 2 lines
+commit 6a8d84391baf8e7bee1160abc4c57eca58987a73
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 23:38:36 2009 +0000
 
-added the original COPYING file from GQview - we can't rely on autogen.sh
+    Align exif labels vertically (visually better since name is now smaller than value).
 
-------------------------------------------------------------------------
-r1352 | nadvornik | 2009-01-25 19:14:08 +0100 (Sun, 25 Jan 2009) | 2 lines
+commit 2a1b48f6079867a09a28067f17a8e7bb47cdbdfd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 23:28:53 2009 +0000
 
-updated ChangeLog from svn log
+    Update POTFILES.in and french translation.
 
-------------------------------------------------------------------------
-r1351 | nadvornik | 2009-01-25 17:58:19 +0100 (Sun, 25 Jan 2009) | 2 lines
+commit 7fbf2e53a3a5ad667bd585d763cf0bff567d672e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 23:14:19 2009 +0000
 
-fixed gthread detection
+    When g_new0() is used, drop redundant initializations to NULL, FALSE or 0, second pass.
 
-------------------------------------------------------------------------
-r1350 | nadvornik | 2009-01-25 10:27:27 +0100 (Sun, 25 Jan 2009) | 2 lines
+commit ac3c275ae53473b6be6f20c1b96a470e156a7fdc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 1 21:35:18 2009 +0000
 
-do not ignore newly created sidecars
+    make the exif pane grow-only - this reduces sidebar jumping
 
-------------------------------------------------------------------------
-r1349 | nadvornik | 2009-01-24 14:46:08 +0100 (Sat, 24 Jan 2009) | 2 lines
+commit 16754fd5f8f49e41f040ed43a28f4c53dfcde982
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 21:06:55 2009 +0000
 
-adjusted marks spacing to align them with the marks filter
+    When g_new0() is used, drop redundant initializations to NULL, FALSE or 0.
 
-------------------------------------------------------------------------
-r1348 | zas_ | 2009-01-24 14:38:53 +0100 (Sat, 24 Jan 2009) | 1 line
+commit 276cb9bb7ccef6bca68564040a2f5908028ebdc1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 19:48:38 2009 +0000
 
-Fix incorrect translation.
-------------------------------------------------------------------------
-r1347 | nadvornik | 2009-01-24 14:05:06 +0100 (Sat, 24 Jan 2009) | 4 lines
+    Clarify colorspace determination (exif 2.2/2.21).
 
-fixed restoring of OSD at layout_image_full_screen_stop
-https://sourceforge.net/tracker/index.php?func=detail&aid=2039839&group_id=222125&atid=1054680
+commit 352ec1b93ed21559a6c2cd9d3b583540bd0de5d9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 17:58:19 2009 +0000
 
+    Enable 'Use profile from image' item of color management menu only if such profile information is available from image.
 
-------------------------------------------------------------------------
-r1346 | nadvornik | 2009-01-24 13:15:01 +0100 (Sat, 24 Jan 2009) | 2 lines
+commit 2f8d1927009893b4562aa1b95ec61b2f4b997d8d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 17:13:14 2009 +0000
 
-fixed glib warning
+    Improve file checks using is_readable_file().
 
-------------------------------------------------------------------------
-r1345 | nadvornik | 2009-01-24 11:09:29 +0100 (Sat, 24 Jan 2009) | 2 lines
+commit 44300b5fd5139f9c485d632207fb7f89cd3c481f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 17:11:51 2009 +0000
 
-updated version string
+    Only attempt to read exif if the file is readable.
 
-------------------------------------------------------------------------
-r1344 | zas_ | 2009-01-24 08:41:23 +0100 (Sat, 24 Jan 2009) | 1 line
+commit f66300e9b42664a35e88c2baefdff57b3a883759
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 17:10:45 2009 +0000
 
-Silent two compilation warnings.
-------------------------------------------------------------------------
-r1343 | zas_ | 2009-01-24 08:36:21 +0100 (Sat, 24 Jan 2009) | 1 line
+    Introduce is_readable_file() which test if file exists, is regular and readable.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1342 | nadvornik | 2009-01-23 23:53:02 +0100 (Fri, 23 Jan 2009) | 2 lines
+commit 2a5590abe04642bb6e1d7abb17a4f12ee9861cd8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 16:46:40 2009 +0000
 
-fixed possible crash
+    image_select(), image_set_selectable(): tidy up.
 
-------------------------------------------------------------------------
-r1341 | nadvornik | 2009-01-21 19:30:54 +0100 (Wed, 21 Jan 2009) | 2 lines
+commit d3aa41bc4406825b23336d561c60a81d6509f523
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 16:43:48 2009 +0000
 
-enable threads by default
+    Indentation fixes.
 
-------------------------------------------------------------------------
-r1340 | nadvornik | 2009-01-21 19:16:26 +0100 (Wed, 21 Jan 2009) | 2 lines
+commit 671c4e59016ad4b13a791d6bf70a1011b9450b62
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 15:54:37 2009 +0000
 
-compilation fixes for older exiv2
+    image_post_process_color(): remove exif parameter, just extract it when needed.
 
-------------------------------------------------------------------------
-r1339 | nadvornik | 2009-01-20 23:53:09 +0100 (Tue, 20 Jan 2009) | 2 lines
+commit bc32699c45cdf3698872449f5b9116a6dd0928a8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 15:41:51 2009 +0000
 
-improved metadata preferences
+    Slightly modify access_file() and use it to test profile files existence and read access.
 
-------------------------------------------------------------------------
-r1338 | nadvornik | 2009-01-20 23:29:31 +0100 (Tue, 20 Jan 2009) | 2 lines
+commit 2a3788f237b9a0e343501213036eb133545754b7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 15:28:06 2009 +0000
 
-fixed possible segfault
+    Add an ellipse when the file name is truncated.
 
-------------------------------------------------------------------------
-r1337 | nadvornik | 2009-01-11 22:28:03 +0100 (Sun, 11 Jan 2009) | 2 lines
+commit 138449b284641d79f8f35dbc47ecff5364f94117
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 1 15:15:37 2009 +0000
 
-show symlinks in filelist
+    In the side bar, display the filename without the 'Filename:' prefix and makes it centered. Allow to select it for copy'n'paste.
 
-------------------------------------------------------------------------
-r1336 | nadvornik | 2009-01-11 22:24:58 +0100 (Sun, 11 Jan 2009) | 2 lines
+commit 86e5ecef8ba0effbc52208fcc9c2c788ede293ff
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 1 13:37:30 2009 +0000
 
-fixed includes
+    dropped ExifUIList
 
-------------------------------------------------------------------------
-r1335 | nadvornik | 2009-01-11 19:58:05 +0100 (Sun, 11 Jan 2009) | 2 lines
+commit 851a261132a08fc1812a73b2c0481d0579a3da0a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 1 11:59:32 2009 +0000
 
-added a status bar button for writting metadata immediately
+    do not use separate list of entries, rely on vbox
 
-------------------------------------------------------------------------
-r1334 | nadvornik | 2009-01-11 13:13:30 +0100 (Sun, 11 Jan 2009) | 3 lines
+commit 411fa489a446dd00e60f1a77791ce26f9e43bb87
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 1 00:10:00 2009 +0000
 
-metadata write mode (direct or sidecar) made configurable for each file
-format
+    fixed possible crash
 
-------------------------------------------------------------------------
-r1333 | nadvornik | 2009-01-10 21:40:37 +0100 (Sat, 10 Jan 2009) | 3 lines
+commit 353d6be218b845a9d974f32d8388867ce2588bbe
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 23:59:02 2009 +0000
 
-simplified metadata interface, dropped metadata_read,
-fixes for older exiv2 versions
+    rewritten exif pane to support arbitrary number of entries
 
-------------------------------------------------------------------------
-r1332 | zas_ | 2009-01-04 18:14:34 +0100 (Sun, 04 Jan 2009) | 1 line
+commit 7cc909a78fa9f5f7c7fc40533978a29d3ad05767
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 20:57:26 2009 +0000
 
-When "Remember print settings" is checked, save _all_ settings. Before this patch, text fields, text size, source, layout and image scale properties were not saved.
-------------------------------------------------------------------------
-r1331 | zas_ | 2009-01-04 11:32:47 +0100 (Sun, 04 Jan 2009) | 1 line
+    max value -> value. Shorter.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1330 | zas_ | 2009-01-03 18:13:20 +0100 (Sat, 03 Jan 2009) | 1 line
+commit bbfd2a7a816e372a04aea99139f835353e4047f8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 20:53:59 2009 +0000
 
-Silent warnings.
-------------------------------------------------------------------------
-r1329 | nadvornik | 2009-01-03 16:29:08 +0100 (Sat, 03 Jan 2009) | 2 lines
+    Add missing space between while and first parenthesis.
 
-write keywords and comments with separate functions
+commit 321ff5bb77411f729fdd38740a02f4de341f77e9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 20:52:51 2009 +0000
 
-------------------------------------------------------------------------
-r1328 | nadvornik | 2009-01-03 00:14:01 +0100 (Sat, 03 Jan 2009) | 2 lines
+    Add missing space between switch and first parenthesis.
 
-fixed updating of selection after deleting the last image from the list
+commit 96a26903f49ddab4a63213310c9da8d2c0457dc0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 20:48:47 2009 +0000
 
-------------------------------------------------------------------------
-r1327 | nadvornik | 2009-01-02 23:57:09 +0100 (Fri, 02 Jan 2009) | 5 lines
+    No space between function name and first parenthesis, it eases greping (see CODING).
 
-do not enter a directory after rename
-fixed dir tree updating
-http://sourceforge.net/tracker/index.php?func=detail&aid=2481287&group_id=222125&atid=1054680
+commit 5ac2ac2a71f6fcc14ad4fc2994c17ea64d415dd5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 20:24:42 2009 +0000
 
+    Prevent Gtk assertion failures when no icon is set.
 
-------------------------------------------------------------------------
-r1326 | nadvornik | 2009-01-02 15:58:21 +0100 (Fri, 02 Jan 2009) | 4 lines
+commit f3d61f44c1bfe05188eb68974737f66ce096656d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 20:13:11 2009 +0000
 
-added done callback to utilops
-used the callback for metadata writting at exit and for renaming new
-folder
+    show histogram label in the title
+    adjusted label texts
 
-------------------------------------------------------------------------
-r1325 | nadvornik | 2009-01-02 10:39:14 +0100 (Fri, 02 Jan 2009) | 2 lines
+commit f9936e38ffc7feb5ca5af211603c682cfb548fee
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 19:44:58 2009 +0000
 
-fixed view_dir notification
+    give the panes more control over expander title
 
-------------------------------------------------------------------------
-r1324 | nadvornik | 2009-01-02 10:26:23 +0100 (Fri, 02 Jan 2009) | 4 lines
+commit 106016c61b873ccc55b515336f5217d7f9fd639e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 19:41:23 2009 +0000
 
-sidecar files grouping was made case-insensitive
-added possibility to use macros %raw, %image, %meta in extensions lists
+    Color profiles menu: test for file access before allowing to select it as input profile.
 
+commit dc4646d5966601b57b5a6ac49aaa7bd4fa14b7f3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 18:51:25 2009 +0000
 
-------------------------------------------------------------------------
-r1323 | nadvornik | 2008-12-27 23:53:07 +0100 (Sat, 27 Dec 2008) | 2 lines
+    load icons for external editors
 
-fixed writting of legacy metadata
+commit 073a65377169492e9843ee4bdd3acf01f0cf6c78
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 18:01:16 2009 +0000
 
-------------------------------------------------------------------------
-r1322 | nadvornik | 2008-12-26 20:04:36 +0100 (Fri, 26 Dec 2008) | 3 lines
+    Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
 
-optimized get_mark_func
-fixed reference counting bug
+commit 42ea998781724458ce55582414b4d1656d244f10
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 17:20:16 2009 +0000
 
-------------------------------------------------------------------------
-r1321 | nadvornik | 2008-12-26 19:54:07 +0100 (Fri, 26 Dec 2008) | 2 lines
+    fixed bar_histogram headers
 
-remove cached entries on all changes
+commit 0520eeff040165801722d408701eae8c94b2f955
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 17:12:00 2009 +0000
 
-------------------------------------------------------------------------
-r1320 | nadvornik | 2008-12-26 18:38:52 +0100 (Fri, 26 Dec 2008) | 2 lines
+    Minor simplification and cleanup.
 
-fixed previous change
+commit df6b9c5b1e3077d19e5c59f2e72e8949da034a08
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 28 16:59:20 2009 +0000
 
-------------------------------------------------------------------------
-r1319 | nadvornik | 2008-12-26 15:12:36 +0100 (Fri, 26 Dec 2008) | 3 lines
+    image_change_complete(): reduce code redundancy and implify.
 
-improved sidecar writting
-private metadata can be saved in xmp format
+commit fa373d7547d5c23f65088dff3df36d43b90b0139
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 14:40:22 2009 +0000
 
-------------------------------------------------------------------------
-r1318 | nadvornik | 2008-12-25 13:39:34 +0100 (Thu, 25 Dec 2008) | 2 lines
+    fixed overlay configuration
+    split overlay options between global and layout window
 
-implemented a possibility to connect keywords with marks
+commit d5b911cd3eca6de811ef53f8cac6a3f84ced1062
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 12:50:39 2009 +0000
 
-------------------------------------------------------------------------
-r1317 | nadvornik | 2008-12-25 13:28:04 +0100 (Thu, 25 Dec 2008) | 2 lines
+    save and restore toolbar configuration
 
-low-level keyword-to-mark functionality
+commit b4581c40f8cb47f32d1102589b005d5435e9e297
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 28 09:59:27 2009 +0000
 
-------------------------------------------------------------------------
-r1316 | nadvornik | 2008-12-25 13:19:37 +0100 (Thu, 25 Dec 2008) | 2 lines
+    create toolbar from ui_manager
 
-perform internal commands in idle call
+commit b24487aa1f5704a788a8f77782edf40850878a63
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Feb 27 23:25:31 2009 +0000
 
-------------------------------------------------------------------------
-r1315 | nadvornik | 2008-12-23 23:42:57 +0100 (Tue, 23 Dec 2008) | 2 lines
+    Really fix up color profiles options tests. Add an indicator of the embedded color profile when recognized (a * just after sRGB or AdobeRGB compatible).
 
-allow writing of empty keywords/comment
+commit bc2d1d0836169d7184c7010e9d01d16837cddbf5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Feb 27 22:28:17 2009 +0000
 
-------------------------------------------------------------------------
-r1314 | nadvornik | 2008-12-23 21:53:44 +0100 (Tue, 23 Dec 2008) | 2 lines
+    Fix up color profiles menu: mark empty entries (but not NULL) as inactive.
 
-added change notification to bar_info.c
+commit 9c93c4f8a9650ce80206755b524244c878e7b61b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Feb 27 21:30:28 2009 +0000
 
-------------------------------------------------------------------------
-r1313 | nadvornik | 2008-12-23 20:15:12 +0100 (Tue, 23 Dec 2008) | 2 lines
+    compute histmap in idle callback and only if the histogram is expanded
 
-improved buffering and notifications
+commit 526bf4edfddf1c63e583a2bf735a4614c55b314b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Feb 26 21:46:27 2009 +0000
 
-------------------------------------------------------------------------
-r1312 | nadvornik | 2008-12-23 20:13:48 +0100 (Tue, 23 Dec 2008) | 3 lines
+    Add a tooltip showing current histogram state on bar histogram.
 
-write changes immediately, the necessary buffering is done on lower
-level in metadata.c
+commit 66b325900212d630b208e1747280767783f01cb9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Feb 26 20:50:36 2009 +0000
 
-------------------------------------------------------------------------
-r1311 | nadvornik | 2008-12-23 00:25:15 +0100 (Tue, 23 Dec 2008) | 2 lines
+    Clean up histogram stuff: options saving/restoring, osd histogram separation, tidy up.
 
-file class made configurable in preferences
+commit 3b4446591720a17e3f0856fc290f85b84a303d12
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Feb 26 17:34:14 2009 +0000
 
-------------------------------------------------------------------------
-r1310 | zas_ | 2008-12-22 20:43:46 +0100 (Mon, 22 Dec 2008) | 1 line
+    Add .bak and .mo extensions to svn:ignore.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1309 | nadvornik | 2008-12-22 19:29:25 +0100 (Mon, 22 Dec 2008) | 2 lines
+commit 84a6a75d10d4aaa99aaa0b9c5e2ded8a2b26f4da
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Feb 26 08:04:52 2009 +0000
 
-write metadata after timeout, image change or dir change
+    quoted_value is no longer needed
 
-------------------------------------------------------------------------
-r1308 | nadvornik | 2008-12-22 19:15:26 +0100 (Mon, 22 Dec 2008) | 2 lines
+commit cffe654128aa1230d98c36f6cc48524d87ab6b69
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 25 23:04:08 2009 +0000
 
-show metadata options in preferences dialog
+    Silent a minor warning.
 
-------------------------------------------------------------------------
-r1307 | nadvornik | 2008-12-21 22:36:58 +0100 (Sun, 21 Dec 2008) | 2 lines
+commit 5651cebff9468fa7cb1275476eea0ccd482cb8df
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 25 21:09:17 2009 +0000
 
-fixed safe delete
+    correctly save and restore overlay string
 
-------------------------------------------------------------------------
-r1306 | nadvornik | 2008-12-21 22:20:36 +0100 (Sun, 21 Dec 2008) | 2 lines
+commit d7b78d9173ebe6d4692dad061a4afe30325d3e23
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 25 20:54:38 2009 +0000
 
-most of the metadata options now works
+    Save bar pane histogram state to rc file.
 
-------------------------------------------------------------------------
-r1305 | nadvornik | 2008-12-21 17:26:03 +0100 (Sun, 21 Dec 2008) | 2 lines
+commit fddb6eb6775e4f70b70cb5373508b0bcb9ed5a04
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 25 20:42:35 2009 +0000
 
-fixed new options
+    Fix up bar pane histogram contextual menu: show current state for channel and log mode.
 
-------------------------------------------------------------------------
-r1304 | zas_ | 2008-12-21 10:28:16 +0100 (Sun, 21 Dec 2008) | 1 line
+commit 4d85c50b6c73874d441f834a9d52f8319082c3e8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 25 19:46:03 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1303 | nadvornik | 2008-12-21 00:18:20 +0100 (Sun, 21 Dec 2008) | 2 lines
+    reuse original utility_box (image + sidebars) on layout change (switch
+    from list to icon view etc.)
 
-added options for metadata - not yet used
+commit f9a9bffc314cd4b1cd5229896286666766f020ca
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 25 18:21:20 2009 +0000
 
-------------------------------------------------------------------------
-r1302 | zas_ | 2008-12-20 22:47:04 +0100 (Sat, 20 Dec 2008) | 1 line
+    fixed filter initialization
 
-Fix two minor compilation warnings.
-------------------------------------------------------------------------
-r1301 | zas_ | 2008-12-20 22:30:27 +0100 (Sat, 20 Dec 2008) | 1 line
+commit b3477302e22f00d62a4f7f9a7ce5a1f8d6a7a142
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Feb 24 22:21:28 2009 +0000
 
-Switch to fullscreen when double clicking on file in icon or list view. Feature request 1966042. The code was there since a long time but disabled, please report any issue.
-------------------------------------------------------------------------
-r1300 | nadvornik | 2008-12-20 21:43:56 +0100 (Sat, 20 Dec 2008) | 3 lines
+    improved bar_sort configuration
 
-use the workflow in utilops.c for metadata approving and writting
-TODO: configuration
+commit da109aa01657b27c22a18bc74bff56e4dae89298
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 24 21:08:16 2009 +0000
 
-------------------------------------------------------------------------
-r1299 | nadvornik | 2008-12-16 13:59:23 +0100 (Tue, 16 Dec 2008) | 2 lines
+    Add a contextual menu on bar pane histogram allowing to change channels and mode. More work needed.
 
-queue metadata and write them in an idle callback 
+commit e84b67aadcdc1ea32b2c53e6b4a2d6a369f51951
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Feb 24 20:47:38 2009 +0000
 
-------------------------------------------------------------------------
-r1298 | nadvornik | 2008-12-15 23:47:31 +0100 (Mon, 15 Dec 2008) | 5 lines
+    fixed --fullscreen option together with enabled bar
 
-prepared infrastructure for delayed metadata writting - refreshing
-metadata immediately before writting is now possible
+commit 5da3477f9b116d0482737510423e5de949f8a0d4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Feb 24 20:34:39 2009 +0000
 
-modified metadata are stored in fd->modified_xmp
+    simplified and improved bar configuration
 
-------------------------------------------------------------------------
-r1297 | zas_ | 2008-12-15 19:04:42 +0100 (Mon, 15 Dec 2008) | 1 line
+commit f215252861f96b1b924b93178a406e2ec7bb6ca2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 24 18:00:45 2009 +0000
 
-Allow to drag keywords on files in list or icon view. Dragged text is appended to keywords list of the destination file.
-------------------------------------------------------------------------
-r1296 | zas_ | 2008-12-09 20:12:38 +0100 (Tue, 09 Dec 2008) | 1 line
+    Enclose macro parameters names with _ to differentiate them from variable names.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1295 | zas_ | 2008-12-09 18:51:28 +0100 (Tue, 09 Dec 2008) | 1 line
+commit a8df53630e1632e65318a1b397ea1a275f4817e5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 24 17:47:45 2009 +0000
 
-Allow to invert the current selection in Collection view. A new Selection submenu was added to the contextual menu, Select All and Select None were moved to it, and Invert selection was added.
-------------------------------------------------------------------------
-r1294 | zas_ | 2008-12-08 22:34:32 +0100 (Mon, 08 Dec 2008) | 1 line
+    Since READ_*() macros are now exported, do not hide
+    the if() continue; statement in them.
+    Wrap WRITE_STRING() instructions in a safer do {} while (0).
 
-Display error dialog with appropriate message when user is trying to open an invalid collection file.
-------------------------------------------------------------------------
-r1293 | zas_ | 2008-12-08 22:33:14 +0100 (Mon, 08 Dec 2008) | 1 line
+commit 1bef8f7ea39aa7652ded34fd2baaa3bf6c28e69d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Feb 23 22:13:09 2009 +0000
 
-Cosmetic fix.
-------------------------------------------------------------------------
-r1292 | zas_ | 2008-12-07 16:51:50 +0100 (Sun, 07 Dec 2008) | 1 line
+    simplified config writing
 
-Fix patch 1290: we only want to remove unused parameter warnings not all warnings produced by -Wextra, so just disable then using -Wno-unused-parameter and re-add -Wextra (was -W, but this is the old name).
-------------------------------------------------------------------------
-r1291 | nadvornik | 2008-12-07 14:28:04 +0100 (Sun, 07 Dec 2008) | 2 lines
+commit c2b4bce2393c142785ac7cef5095a5c06348073b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Feb 23 21:21:15 2009 +0000
 
-handle the case when io.open() fails
+    enabled commandline again
 
-------------------------------------------------------------------------
-r1290 | nadvornik | 2008-12-06 22:24:38 +0100 (Sat, 06 Dec 2008) | 4 lines
+commit 778dcd703998a9d37ea6562228e971827a25044f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Feb 23 17:20:40 2009 +0000
 
-disabled the "unused parameter" warnings, they are harmless and nobody
-is going to fix it ;) 
-(note: -W is equivalent to -Wextra) 
+    Introduce helpers histogram_toggle_channel() and histogram_toggle_mode().
 
-------------------------------------------------------------------------
-r1289 | zas_ | 2008-12-02 20:34:53 +0100 (Tue, 02 Dec 2008) | 1 line
+commit 4b96dffd2f791d4f99a407da3a11cbeede9f5b2c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Feb 22 17:46:42 2009 +0000
 
-Rename few variables to make the code more readable.
-------------------------------------------------------------------------
-r1288 | zas_ | 2008-11-30 22:59:28 +0100 (Sun, 30 Nov 2008) | 1 line
+    Set svn:ignore on Makefile and Makefile.in.
 
-keyword_list_find() -> find_string_in_list(), return gboolean.
-------------------------------------------------------------------------
-r1287 | zas_ | 2008-11-30 22:52:37 +0100 (Sun, 30 Nov 2008) | 1 line
+commit 6be7a5d9435cd61876ec2585d19e6fc4208eb66d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Feb 22 17:40:32 2009 +0000
 
-metadata_set_keywords() -> metadata_set(). Use gboolean type for boolean parameters.
-------------------------------------------------------------------------
-r1286 | zas_ | 2008-11-30 22:43:01 +0100 (Sun, 30 Nov 2008) | 1 line
+    Fix and simplify histogram code, drop histogram based on mean value.
 
-Rename most comment_*() functions to more appropriate metadata_*().
-------------------------------------------------------------------------
-r1285 | zas_ | 2008-11-30 12:46:34 +0100 (Sun, 30 Nov 2008) | 1 line
+commit 9e9712735fb1522f4f081a9e38c38c4d91a09c51
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 22 15:35:37 2009 +0000
 
-File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
-------------------------------------------------------------------------
-r1284 | zas_ | 2008-11-27 20:10:59 +0100 (Thu, 27 Nov 2008) | 1 line
+    config file format changed to XML
+    save and restore all layout windows
+    save and restore sidebar configuration
 
-Do not hardcode exif formatted prefix.
-------------------------------------------------------------------------
-r1283 | zas_ | 2008-11-27 13:34:39 +0100 (Thu, 27 Nov 2008) | 1 line
+commit 179b485a4439fb2e102195fde5b2366a24c5a927
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Feb 22 13:29:49 2009 +0000
 
-Fix up sign-related  warning.
-------------------------------------------------------------------------
-r1282 | zas_ | 2008-11-27 13:34:03 +0100 (Thu, 27 Nov 2008) | 1 line
+    Attempt to simplify and fix histrogram code.
 
-Fix up unsigned expression always true warning.
-------------------------------------------------------------------------
-r1281 | zas_ | 2008-11-27 13:33:07 +0100 (Thu, 27 Nov 2008) | 1 line
+commit c6d4606fb8929b3c6596292a9eae836167729bf8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 21 20:43:35 2009 +0000
 
-Resync .h with .c declarations.
-------------------------------------------------------------------------
-r1280 | zas_ | 2008-11-27 13:31:27 +0100 (Thu, 27 Nov 2008) | 1 line
+    Glibification again.
 
-Fix up pointer signedness warnings.
-------------------------------------------------------------------------
-r1279 | zas_ | 2008-11-27 13:30:49 +0100 (Thu, 27 Nov 2008) | 1 line
+commit 2c9c37c9649ad80e04e14230eebd6584e7de7e8d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 21 18:28:53 2009 +0000
 
-Fix up not a prototype warning.
-------------------------------------------------------------------------
-r1278 | zas_ | 2008-11-27 13:30:10 +0100 (Thu, 27 Nov 2008) | 1 line
+    French translation was updated.
 
-Remove unused variable.
-------------------------------------------------------------------------
-r1277 | zas_ | 2008-11-27 13:29:38 +0100 (Thu, 27 Nov 2008) | 1 line
+commit 4a596674619d5addc6a223fe2be2093c06622a2d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 21 18:04:52 2009 +0000
 
-Fix up deprecated function and not a prototype warnings.
-------------------------------------------------------------------------
-r1276 | zas_ | 2008-11-26 21:39:50 +0100 (Wed, 26 Nov 2008) | 1 line
+    Glibification.
 
-Handle return values better to silent some warnings.
-------------------------------------------------------------------------
-r1275 | zas_ | 2008-11-26 21:38:47 +0100 (Wed, 26 Nov 2008) | 1 line
+commit 144433d8a9eaa43184c844b76665c91fe21f1c07
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 21 10:53:18 2009 +0000
 
-Print a message if chown() or chmod() fail.
-------------------------------------------------------------------------
-r1274 | zas_ | 2008-11-26 21:37:14 +0100 (Wed, 26 Nov 2008) | 1 line
+    Move grid color setting to histogram_new().
 
-Fix up format vs type warning.
-------------------------------------------------------------------------
-r1273 | zas_ | 2008-11-25 18:32:51 +0100 (Tue, 25 Nov 2008) | 1 line
+commit 80547e648cc21fefb1e91f869d90c2ea719a9f6d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 21 10:33:56 2009 +0000
 
-Move comments/keywords read and write stuff to new metadata.{c,h}.
-------------------------------------------------------------------------
-r1272 | zas_ | 2008-11-25 18:01:03 +0100 (Tue, 25 Nov 2008) | 1 line
+    Remove histogram_ prefix from struct _Histogram fields names and rename them more properly.
 
-Fix up unsigned expression always true/false warnings.
-------------------------------------------------------------------------
-r1271 | zas_ | 2008-11-23 23:05:27 +0100 (Sun, 23 Nov 2008) | 1 line
+commit 0f103e1b6b6ab4017d7f677aaea9120dc015906b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Feb 21 10:29:13 2009 +0000
 
-Hide .gqv extension from collection name in collection window title and recent menu list.
-------------------------------------------------------------------------
-r1270 | zas_ | 2008-11-23 17:16:09 +0100 (Sun, 23 Nov 2008) | 1 line
+    Add grid to bar histogram, simplify the code and draw horizontal lines too.
 
-Rename wmsubclass and name to role, which corresponds better to the purpose of the parameter as it ends to be passed to gtk_window_set_role().
-------------------------------------------------------------------------
-r1269 | zas_ | 2008-11-23 17:10:29 +0100 (Sun, 23 Nov 2008) | 1 line
+commit 6b0883bae0f9124a6dcc8fcdd87ab24643a85d2f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Feb 19 17:36:38 2009 +0000
 
-Drop useless wmclass stuff. Gtk will take care of it and as said in the documentation using gtk_window_set_wmclass() is sort of pointless.
-------------------------------------------------------------------------
-r1268 | zas_ | 2008-11-22 23:54:51 +0100 (Sat, 22 Nov 2008) | 1 line
+    Fix bug 2599857: file list sort order was wrong in many cases.
 
-Use the last selected images for the splitted views. Ie. when 5 images are selected, the last one is displayed, split quad while open images 5,4,3,2. It seems better to me.
-------------------------------------------------------------------------
-r1267 | zas_ | 2008-11-22 23:43:18 +0100 (Sat, 22 Nov 2008) | 1 line
+commit 263a050716f3c9fdfced1accb4016fcdd11ade19
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Feb 16 22:48:30 2009 +0000
 
-When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
-------------------------------------------------------------------------
-r1266 | zas_ | 2008-11-22 23:10:10 +0100 (Sat, 22 Nov 2008) | 1 line
+    fixed compiler warning
 
-Tidy up.
-------------------------------------------------------------------------
-r1265 | zas_ | 2008-11-22 23:04:21 +0100 (Sat, 22 Nov 2008) | 1 line
+commit 8422a0c8bd17c3ef09de058a7433e606124524b7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Feb 16 21:01:27 2009 +0000
 
-Use common code for layout_image_setup_split_none() too.
-------------------------------------------------------------------------
-r1264 | zas_ | 2008-11-22 22:58:07 +0100 (Sat, 22 Nov 2008) | 1 line
+    hopefully fixed a freeze on solaris
 
-layout_image_setup_split_*(): simplify code.
-------------------------------------------------------------------------
-r1263 | zas_ | 2008-11-22 22:11:09 +0100 (Sat, 22 Nov 2008) | 1 line
+commit 243a78132e93b3fa27efc6cc3ca46d58bad06b25
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 15 19:25:55 2009 +0000
 
-layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
-------------------------------------------------------------------------
-r1262 | zas_ | 2008-11-22 17:24:23 +0100 (Sat, 22 Nov 2008) | 1 line
+    added histogram pane
 
-Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
-------------------------------------------------------------------------
-r1261 | zas_ | 2008-11-20 18:28:34 +0100 (Thu, 20 Nov 2008) | 1 line
+commit a1385820cdb789c96a38b709f7b981725f81bdd1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 15 17:27:48 2009 +0000
 
-Force font weight and style to normal for keys.
-------------------------------------------------------------------------
-r1260 | zas_ | 2008-11-20 18:23:46 +0100 (Thu, 20 Nov 2008) | 1 line
+    fixed histogram drawing
 
-Fix up yet unmarked keys.
-------------------------------------------------------------------------
-r1259 | zas_ | 2008-11-20 12:46:43 +0100 (Thu, 20 Nov 2008) | 1 line
+commit 63da7df8b6994ba78db433c8d13513967f54b324
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Feb 15 15:58:01 2009 +0000
 
-Fix compilation warnings.
-------------------------------------------------------------------------
-r1258 | zas_ | 2008-11-20 08:22:56 +0100 (Thu, 20 Nov 2008) | 1 line
+    Remove redundant line of code.
 
-Fix up some missing html code.
-------------------------------------------------------------------------
-r1257 | zas_ | 2008-11-19 23:57:40 +0100 (Wed, 19 Nov 2008) | 1 line
+commit a38c15108e52207831b08be4461b49f0d09926d3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Feb 15 15:56:48 2009 +0000
 
-More keys.
-------------------------------------------------------------------------
-r1256 | zas_ | 2008-11-19 23:46:27 +0100 (Wed, 19 Nov 2008) | 1 line
+    Fix up few compilation warnings.
 
-Fix text wrongly marked as key.
-------------------------------------------------------------------------
-r1255 | zas_ | 2008-11-19 23:42:20 +0100 (Wed, 19 Nov 2008) | 1 line
+commit a660cd93f81e921141fc7ddb57188c6c23d211c9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 15 13:11:21 2009 +0000
 
-Mark keyboard keys with a span and make them look like a key through css style.
-------------------------------------------------------------------------
-r1254 | zas_ | 2008-11-19 22:36:02 +0100 (Wed, 19 Nov 2008) | 1 line
+    histogram caching
+    histogram interface prepared for histogram pane
 
-Replace [Control] by shorter and more common [Ctrl].
-------------------------------------------------------------------------
-r1253 | zas_ | 2008-11-19 22:16:27 +0100 (Wed, 19 Nov 2008) | 1 line
+commit c5ead176be15971b27d90d0656b8fc26fa9eca17
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 15 09:36:53 2009 +0000
 
-Unify [Shift] and [Control] notation.
-------------------------------------------------------------------------
-r1252 | zas_ | 2008-11-19 21:53:53 +0100 (Wed, 19 Nov 2008) | 1 line
+    separated "normal" and advanced exif, "Normal" exif is now in the
+    generic bar, advanced exif is in separate window.
 
-Move (and update) image pane shortcuts to a table. Simplify css styles for those tables.
-------------------------------------------------------------------------
-r1251 | zas_ | 2008-11-19 18:42:36 +0100 (Wed, 19 Nov 2008) | 1 line
+commit a6fb79a9aee3b16eadd450cfcd261f0d3fe9bd9d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 14 20:26:30 2009 +0000
 
-Update documentation.
-------------------------------------------------------------------------
-r1250 | zas_ | 2008-11-17 19:05:42 +0100 (Mon, 17 Nov 2008) | 1 line
+    droped Preferences dialog, sidebar should replace it completely
 
-Fix up links and various enhancements.
-------------------------------------------------------------------------
-r1249 | zas_ | 2008-11-17 18:17:47 +0100 (Mon, 17 Nov 2008) | 1 line
+commit ab0cc44129df43dc4bc0d0ec0e95e187a739f32c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 14 19:50:54 2009 +0000
 
-Remove colored background in headings for printable version.
-------------------------------------------------------------------------
-r1248 | zas_ | 2008-11-17 18:09:44 +0100 (Mon, 17 Nov 2008) | 1 line
+    replaced bar_info with an universal bar, restored the original
+    functionality (more or less)
+    bar configuration is not yet saved
 
-Change metadata directory to be $XDG_DATA_HOME instead of $XDG_CACHE_HOME as discussed on the ml (obviously it has impact only when XDG support is set). Suggestion by Omari Stephens.
-------------------------------------------------------------------------
-r1247 | zas_ | 2008-11-17 08:10:32 +0100 (Mon, 17 Nov 2008) | 1 line
+commit 310a646e67ba0c32c2384f553eecf512e283684d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Feb 9 09:02:04 2009 +0000
 
-Comment out css code that slipped through by cut'n paste error. It may be useful at some time though.
-------------------------------------------------------------------------
-r1246 | zas_ | 2008-11-16 20:58:43 +0100 (Sun, 16 Nov 2008) | 1 line
+    Update ChangeLog using C locale date format, add a script to ease future updates.
 
-Add specific css for print media(has to be improved).
-------------------------------------------------------------------------
-r1245 | zas_ | 2008-11-16 17:32:14 +0100 (Sun, 16 Nov 2008) | 1 line
+commit b4f63e5e882b065ea834bd1e99081306284480c2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 7 21:03:11 2009 +0000
 
-Update svn:ignore property: add some files and replace gqview by geeqie where applicable.
-------------------------------------------------------------------------
-r1244 | zas_ | 2008-11-15 21:17:14 +0100 (Sat, 15 Nov 2008) | 21 lines
+    force at least one idle call before writting metadata
+    (without this the exit_program_write_metadata_cb could be called
+    before the exit_program function finished)
 
-Implement preliminary support for XDG Base Directory Specification.
-See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html.
+commit 22f5a68f75212287ff3924432df1902bec16feba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Feb 7 19:01:21 2009 +0000
 
-This feature was requested for a long time (feature requests #1950978 and #2289481).
-For now, it is disabled since it breaks compatibility with previous versions.
-To be able to test it, you have to enable it by defining USE_XDG to 1 in main.h.
+    use metadata_read_* functions where possible
+    switch exiv2 to utf8 charset
+    support for exiv2 formatting that depends on other tags:
+    http://dev.robotbattle.com/bugs/view.php?id=0000516
 
-geeqierc and other conf files are going to:
-$XDG_CONFIG_HOME/geeqie/ (default to $HOME/.config/geeqie/).
+commit 9c04cb142531b3c5b31be148a40405a1ea103a53
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Feb 6 23:49:03 2009 +0000
 
-metadata and thumbnails cache (if std is not used) are going to:
-$XDG_CACHE_HOME/geeqie/metadata/ (default to $HOME/.cache/geeqie/metadata/)
-and $XDG_CACHE_HOME/geeqie/thumbnails/ (default to $HOME/.cache/geeqie/thumbnails/)
+    Start with "Fit to window" in "Leave Zoom at previous setting" mode
 
-collections are going to:
-$XDG_DATA_HOME/geeqie/collections/ (default to $HOME/.local/share/geeqie/collections/)
+commit c5b333518ad00d61c1e9ad0bc96c4faae43fc7c9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Feb 6 22:56:52 2009 +0000
 
+    do not switch to the next image on mouse click in split mode
+    it interferes with image switching too much
 
-Please test and report any issue.
+commit 4e7f0d2a4ffcefeeacce220761a905cd105b75e2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Feb 6 22:41:47 2009 +0000
 
+    improved labels of some menu items
 
-------------------------------------------------------------------------
-r1243 | zas_ | 2008-11-15 21:01:25 +0100 (Sat, 15 Nov 2008) | 1 line
+commit 11a4cc2074aa9544a906434f40eda2b27d6ef5c1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 4 17:15:30 2009 +0000
 
-Replace cache_ensure_dir_exists() by new recursive_mkdir_if_not_exists().
-------------------------------------------------------------------------
-r1242 | nadvornik | 2008-11-15 20:13:43 +0100 (Sat, 15 Nov 2008) | 2 lines
+    Add year 2009 to copyright info everywhere.
 
-fixed usage of deprecated functions - patch by Omari Stephens
+commit db594bb6a56da7a25d58a3b2ec51f67bc4d0db49
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 4 16:50:24 2009 +0000
 
-------------------------------------------------------------------------
-r1241 | zas_ | 2008-11-15 18:48:31 +0100 (Sat, 15 Nov 2008) | 1 line
+    Fix up the copyright years info.
 
-Rename check_for_home_path() to mkdir_if_not_exists().
-------------------------------------------------------------------------
-r1240 | zas_ | 2008-11-15 18:30:45 +0100 (Sat, 15 Nov 2008) | 11 lines
+commit 16d8352b142b869d37d9d88f6f7b649ba9b6ba58
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 4 16:49:11 2009 +0000
 
-Use functions to return directories instead of constants.
-Following functions were added:
-get_collections_dir()
-get_metadata_cache_dir()
-get_rc_dir()
-get_thumbnails_cache_dir()
-get_trash_dir()
+    Update README header.
 
-They return the full directory path.
+commit 932432f09417b4fe1ec05bfb92dfe946f7fd32ea
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 4 16:47:02 2009 +0000
 
+    Speed up random slideshow, startup time decreases from minutes to seconds when amount of images is big. Patch by Kjell Morgenstern.
 
-------------------------------------------------------------------------
-r1239 | zas_ | 2008-11-15 11:35:43 +0100 (Sat, 15 Nov 2008) | 1 line
+commit 474d7e891184d4e5a09486b6ccbd777617d416eb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Feb 4 14:51:23 2009 +0000
 
-Add a wrapper around system() call named runcmd() which allows easier debugging. Improve the code launching the help browser.
-------------------------------------------------------------------------
-r1238 | zas_ | 2008-11-14 02:10:18 +0100 (Fri, 14 Nov 2008) | 1 line
+    Do not show geeqie itself in editors menus.
 
-Fix up Makefile.am: add missing files and do not install template.html.
-------------------------------------------------------------------------
-r1237 | zas_ | 2008-11-12 22:38:00 +0100 (Wed, 12 Nov 2008) | 1 line
+commit b93be6e123e894cf75fe9c5d89b1fe09ddacd639
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Feb 3 18:04:10 2009 +0000
 
-Fix a cut'n'paste error.
-------------------------------------------------------------------------
-r1236 | zas_ | 2008-11-12 22:34:55 +0100 (Wed, 12 Nov 2008) | 1 line
+    do not translate already translated texts from desktop files
 
-More precise description of the pan view find feature and a note about ressources eating was added.
-------------------------------------------------------------------------
-r1235 | zas_ | 2008-11-12 22:15:12 +0100 (Wed, 12 Nov 2008) | 1 line
+commit e03f199569195e75d937d21f9d982d0c7d5de119
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 3 13:52:20 2009 +0000
 
-Add some information about the pan view.
-------------------------------------------------------------------------
-r1234 | zas_ | 2008-11-12 18:59:14 +0100 (Wed, 12 Nov 2008) | 1 line
+    Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
 
-Add a note about splitted view.
-------------------------------------------------------------------------
-r1233 | zas_ | 2008-11-12 18:48:16 +0100 (Wed, 12 Nov 2008) | 1 line
+commit 7da00ede6e5a0c460b7bba6f0ce3f2f8767b3a4a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 3 13:50:10 2009 +0000
 
-Add Connected zoom and Split menu items.
-------------------------------------------------------------------------
-r1232 | zas_ | 2008-11-12 00:35:39 +0100 (Wed, 12 Nov 2008) | 1 line
+    Reorder fields a bit and make flags field unsigned.
 
-Add missing s...
-------------------------------------------------------------------------
-r1231 | zas_ | 2008-11-12 00:30:13 +0100 (Wed, 12 Nov 2008) | 1 line
+commit 27e3c8d9b272241d6e1e73c691df6ea2f61b4424
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Feb 3 08:41:21 2009 +0000
 
-Minor fixes.
-------------------------------------------------------------------------
-r1230 | zas_ | 2008-11-11 22:50:42 +0100 (Tue, 11 Nov 2008) | 1 line
+    editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
 
-Give a new style to menus.
-------------------------------------------------------------------------
-r1229 | zas_ | 2008-11-11 22:49:33 +0100 (Tue, 11 Nov 2008) | 1 line
+commit 413722a5800f7f895e5068f0aec1441d13af5d4e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Feb 2 20:32:59 2009 +0000
 
-Fix missing parts.
-------------------------------------------------------------------------
-r1228 | zas_ | 2008-11-11 22:17:55 +0100 (Tue, 11 Nov 2008) | 1 line
+    improved placing of external commands in menu
+    small menu improvements
 
-Update main window menus description to match current Geeqie.
-------------------------------------------------------------------------
-r1227 | zas_ | 2008-11-11 22:17:03 +0100 (Tue, 11 Nov 2008) | 1 line
+commit ebfc5ad707b2a261dadc47508aed872d2e83460c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 1 22:35:40 2009 +0000
 
-Drop dots.
-------------------------------------------------------------------------
-r1226 | zas_ | 2008-11-11 11:32:03 +0100 (Tue, 11 Nov 2008) | 1 line
+    test TryExec,
+    xdg_data_home added to the list of directories
 
-Update exif pane documentation a bit.
-------------------------------------------------------------------------
-r1225 | zas_ | 2008-11-11 11:24:04 +0100 (Tue, 11 Nov 2008) | 1 line
+commit ace63c487142b18a548b95d76f8056de0bead19d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 1 18:27:42 2009 +0000
 
-Add Properties Options page.
-------------------------------------------------------------------------
-r1224 | zas_ | 2008-11-11 11:09:09 +0100 (Tue, 11 Nov 2008) | 1 line
+    fixed switch from single to split image
 
-Advanced options documentation is now almost in sync with current geeqie.
-------------------------------------------------------------------------
-r1223 | zas_ | 2008-11-11 10:12:10 +0100 (Tue, 11 Nov 2008) | 1 line
+commit f94b569b1831c052099295c861f9d3f502072622
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 1 12:48:14 2009 +0000
 
-More updates to advanced options documentation. Not yet finished.
-------------------------------------------------------------------------
-r1222 | zas_ | 2008-11-11 00:36:12 +0100 (Tue, 11 Nov 2008) | 1 line
+    read external editors from .desktop files
 
-Page cleanup and fixed. Remove obsolete note.
-------------------------------------------------------------------------
-r1221 | zas_ | 2008-11-11 00:15:42 +0100 (Tue, 11 Nov 2008) | 1 line
+commit ff084f550845b0467a6202d62a7447940a4ea667
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jan 29 19:43:34 2009 +0000
 
-Add missing link.
-------------------------------------------------------------------------
-r1220 | zas_ | 2008-11-11 00:05:50 +0100 (Tue, 11 Nov 2008) | 1 line
+    Sort the list alphabetically and remove an empty line.
 
-Update documentation a bit: General, Image, Windows, Filtering, Editors and a part of Advanced (Image Overlay) options.
-------------------------------------------------------------------------
-r1219 | zas_ | 2008-11-10 22:33:38 +0100 (Mon, 10 Nov 2008) | 1 line
+commit 7532aed8f8f0bc89f1c5a2c742bc9021e5f8bbfc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jan 29 19:23:39 2009 +0000
 
-Let subsection menus match index style.
-------------------------------------------------------------------------
-r1218 | zas_ | 2008-11-10 22:14:34 +0100 (Mon, 10 Nov 2008) | 1 line
+    switched to po/LINGUAS, see http://live.gnome.org/GnomeGoals/PoLinguas
+    (new glib-gettextize does not support the old method)
 
-Cosmetic changes in image search and find duplicates shortcuts tables.
-------------------------------------------------------------------------
-r1217 | zas_ | 2008-11-10 21:42:44 +0100 (Mon, 10 Nov 2008) | 1 line
+commit 77a9142b41ec6a5d9cac6d35c2a0c9d41052e147
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jan 29 19:07:07 2009 +0000
 
-Tidy up.
-------------------------------------------------------------------------
-r1216 | zas_ | 2008-11-10 21:40:50 +0100 (Mon, 10 Nov 2008) | 1 line
+    gint -> gboolean.
 
-Move from xhtml transitional to xhtml strict.
-------------------------------------------------------------------------
-r1215 | zas_ | 2008-11-10 21:16:45 +0100 (Mon, 10 Nov 2008) | 1 line
+commit 2e3dc8c8f14d75abb400c32a4c619e79bb371d77
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jan 29 19:00:24 2009 +0000
 
-Minor cleanup.
-------------------------------------------------------------------------
-r1214 | zas_ | 2008-11-10 20:37:17 +0100 (Mon, 10 Nov 2008) | 1 line
+    Invert Horizontally vs vertically zoom fit, it was a TRUE/FALSE mismatch, reported by Christopher Beland.
 
-Tidy up and minor fixes.
-------------------------------------------------------------------------
-r1213 | zas_ | 2008-11-10 19:02:09 +0100 (Mon, 10 Nov 2008) | 1 line
+commit ab98857be805f6bd9891d57506038e651dc81dde
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jan 29 18:52:52 2009 +0000
 
-Notes cleanup and minor stylistic fixes.
-------------------------------------------------------------------------
-r1212 | zas_ | 2008-11-10 18:16:16 +0100 (Mon, 10 Nov 2008) | 1 line
+    Remove harmful documentation.helpdir and documentation.htmldir options. These paths can still be modified through --with-readmedir and --htmldir configure options. Reported by Christopher Beland.
 
-Various fixes and cleanup.
-------------------------------------------------------------------------
-r1211 | zas_ | 2008-11-10 17:11:28 +0100 (Mon, 10 Nov 2008) | 1 line
+commit 96c8762cd141c1fca795e203a96307c80580d7f4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jan 29 18:05:41 2009 +0000
 
-Fix up some errors.
-------------------------------------------------------------------------
-r1210 | zas_ | 2008-11-10 16:20:13 +0100 (Mon, 10 Nov 2008) | 1 line
+    added SIGBUS handler
 
-Fix up unvalid xhtml.
-------------------------------------------------------------------------
-r1209 | zas_ | 2008-11-10 15:56:11 +0100 (Mon, 10 Nov 2008) | 1 line
+commit 788b066dec51f6c89b63569de9f19fa8c781c3f4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jan 26 21:08:05 2009 +0000
 
-Fix up a broken link.
-------------------------------------------------------------------------
-r1208 | zas_ | 2008-11-10 15:10:39 +0100 (Mon, 10 Nov 2008) | 1 line
+    fixed compilation with lirc
 
-Beautify the manual.
-------------------------------------------------------------------------
-r1207 | zas_ | 2008-11-10 14:00:29 +0100 (Mon, 10 Nov 2008) | 1 line
+commit c93ae602d0b44dc87e2ee104df5634c6eec44a92
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jan 26 14:59:49 2009 +0000
 
-Reformat more pages.
-------------------------------------------------------------------------
-r1206 | zas_ | 2008-11-10 13:06:05 +0100 (Mon, 10 Nov 2008) | 1 line
+    Silent two minor warnings: GtkSelectionData data field is guchar* while g_strndup() wants gchar * as first parameter.
 
-Reformat remaining options pages.
-------------------------------------------------------------------------
-r1205 | zas_ | 2008-11-10 11:26:51 +0100 (Mon, 10 Nov 2008) | 1 line
+commit 4b69e1199fe33fa8d904b21a2ba3cc85f7b59e81
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jan 26 14:50:56 2009 +0000
 
-Reformatting: notes, advanced options page and more.
-------------------------------------------------------------------------
-r1204 | zas_ | 2008-11-09 22:53:33 +0100 (Sun, 09 Nov 2008) | 1 line
+    Remove --enable-compile-warnings from autogen.sh, it was passed to configure which knows nothing about this option.
 
-Reformatting.
-------------------------------------------------------------------------
-r1203 | zas_ | 2008-11-09 18:17:19 +0100 (Sun, 09 Nov 2008) | 1 line
+commit b68add2c1c1fd4f1d389fe0490986ffffd34302c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jan 26 14:49:09 2009 +0000
 
-Reformat and cleanup.
-------------------------------------------------------------------------
-r1202 | zas_ | 2008-11-09 14:37:39 +0100 (Sun, 09 Nov 2008) | 1 line
+    Move -Wall before -Wno-* options for them to have any effect.
 
-More cleanup of tables.
-------------------------------------------------------------------------
-r1201 | zas_ | 2008-11-09 14:06:16 +0100 (Sun, 09 Nov 2008) | 1 line
+commit 47ed193a2a19fa34afc8c473353c66b5ea194f8e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jan 26 14:18:08 2009 +0000
 
-Cleanup some tables.
-------------------------------------------------------------------------
-r1200 | zas_ | 2008-11-09 13:48:00 +0100 (Sun, 09 Nov 2008) | 1 line
+    Keep -O0 over -O2 as requested by Vladimir.
 
-Drop most old css classes.
-------------------------------------------------------------------------
-r1199 | zas_ | 2008-11-09 10:39:14 +0100 (Sun, 09 Nov 2008) | 1 line
+commit 4fcae73e00ff93c457770fbd05555e8e84122d7a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jan 26 08:36:23 2009 +0000
 
-Move dialog descriptions to definitions lists, first step.
-------------------------------------------------------------------------
-r1198 | zas_ | 2008-11-09 10:33:01 +0100 (Sun, 09 Nov 2008) | 1 line
+    Add -Wformat and -Wformat-security gcc options when --enable-debug-flags is set, move default optimization to -O2 by default (-O0 is only useful for specific debugging purposes).
 
-Index cleanup.
-------------------------------------------------------------------------
-r1197 | zas_ | 2008-11-09 10:28:59 +0100 (Sun, 09 Nov 2008) | 1 line
+commit a24c1c60db9cca6a849920f8a7301530683d97ef
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jan 26 08:30:30 2009 +0000
 
-Move menu descriptions to definitions lists.
-------------------------------------------------------------------------
-r1196 | zas_ | 2008-11-08 23:11:51 +0100 (Sat, 08 Nov 2008) | 1 line
+    Fix a major bug in utf8_compare(): when case_sensitive is true, s1_t and s2_t were uninitialized, leading to unpredicable results.
 
-Re-introduce Geeqie User Manual footer.
-------------------------------------------------------------------------
-r1195 | zas_ | 2008-11-08 18:38:36 +0100 (Sat, 08 Nov 2008) | 1 line
+commit d80efe42eeb8d6af994245d0cf837d20eb852575
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 25 19:38:31 2009 +0000
 
-Simplify bottom navigation table.
-------------------------------------------------------------------------
-r1194 | zas_ | 2008-11-08 18:24:02 +0100 (Sat, 08 Nov 2008) | 1 line
+    added the original COPYING file from GQview - we can't rely on autogen.sh
 
-Use col tags with id in top and bottom navigation tables.
-------------------------------------------------------------------------
-r1193 | zas_ | 2008-11-08 12:37:17 +0100 (Sat, 08 Nov 2008) | 1 line
+commit ebd61f57fe603dbedec50c2953e51c6522593cd6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 25 18:14:08 2009 +0000
 
-Add a generic spacer at the bottom of the page, remove now unused css classes.
-------------------------------------------------------------------------
-r1192 | zas_ | 2008-11-08 11:59:45 +0100 (Sat, 08 Nov 2008) | 1 line
+    updated ChangeLog from svn log
 
-Add two css classes navtop and navbottom and remove unused ones.
-------------------------------------------------------------------------
-r1191 | zas_ | 2008-11-08 11:49:18 +0100 (Sat, 08 Nov 2008) | 1 line
+commit 7debdfe9253260f5e855addd9daf389b59c20e1c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 25 16:58:19 2009 +0000
 
-Add style.css to list of files to install.
-------------------------------------------------------------------------
-r1190 | zas_ | 2008-11-08 11:47:31 +0100 (Sat, 08 Nov 2008) | 1 line
+    fixed gthread detection
 
-Move css styles to an external stylesheet.
-------------------------------------------------------------------------
-r1189 | zas_ | 2008-11-07 00:49:31 +0100 (Fri, 07 Nov 2008) | 1 line
+commit 66c057940975c76fcecaffab9e756b5f9306219d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 25 09:27:27 2009 +0000
 
-Remove reference to numbered section.
-------------------------------------------------------------------------
-r1188 | zas_ | 2008-11-07 00:43:46 +0100 (Fri, 07 Nov 2008) | 1 line
+    do not ignore newly created sidecars
 
-Remove references to numbered sections.
-------------------------------------------------------------------------
-r1187 | zas_ | 2008-11-07 00:39:22 +0100 (Fri, 07 Nov 2008) | 1 line
+commit ad9ac9d145e0e7df96118c66ee6dec927ebed702
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 24 13:46:08 2009 +0000
 
-Simplify the table.
-------------------------------------------------------------------------
-r1186 | zas_ | 2008-11-06 21:01:32 +0100 (Thu, 06 Nov 2008) | 10 lines
+    adjusted marks spacing to align them with the marks filter
 
-Previous patch (revision 1185) for the comments-related segfault was incomplete, and as such, it broke keywords in files whose metadata had keywords but no comments.
+commit 0074b6e5de0f19720985594a1a2b32114ec24204
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jan 24 13:38:53 2009 +0000
 
-This patch fixes that (and still fixes the case where one searches on 
-comments and hits a file with keywords but no comments).  Lastly, I would 
-imagine that there exists a failure mode where one searches for a keyword and 
-hits a file with a comment but no keyword, and I imagine this patch should fix 
-that case as well.
+    Fix incorrect translation.
 
-Patch by Omari Stephens (aka xsdg).
+commit 5d7594d2acdccc19228350eddd1ab29aad990874
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 24 13:05:06 2009 +0000
 
-------------------------------------------------------------------------
-r1185 | zas_ | 2008-11-04 18:26:46 +0100 (Tue, 04 Nov 2008) | 1 line
+    fixed restoring of OSD at layout_image_full_screen_stop
+    https://sourceforge.net/tracker/index.php?func=detail&aid=2039839&group_id=222125&atid=1054680
 
-Fix a segfault occuring when searching for comments in a directory where at least one photo doesn't have a comment. The fix modifies comment_read() function to return FALSE when a comment doesn't exist. Patch by Omari Stephens.
-------------------------------------------------------------------------
-r1184 | zas_ | 2008-11-04 18:11:53 +0100 (Tue, 04 Nov 2008) | 1 line
+commit fce85c3c86d56b122babaf26952cae937a3b61b9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 24 12:15:01 2009 +0000
 
-Do a gtk_init before the parsing of command line arguments to allow gtk specific options. (See http://library.gnome.org/devel/gtk/2.14/gtk-running.html). Patch by Klaus Ethgen.
-------------------------------------------------------------------------
-r1183 | zas_ | 2008-10-27 14:31:39 +0100 (Mon, 27 Oct 2008) | 1 line
+    fixed glib warning
 
-Do not install doc/Makefile*. Reported and fixed by Krzysztof Kotlenga.
-------------------------------------------------------------------------
-r1182 | zas_ | 2008-10-26 20:27:20 +0100 (Sun, 26 Oct 2008) | 1 line
+commit 674b05efb895ed75533c07e74147082cf630e9cc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 24 10:09:29 2009 +0000
 
-Use h2/h3 tags where appropriate.
-------------------------------------------------------------------------
-r1181 | bruclik | 2008-10-26 14:43:10 +0100 (Sun, 26 Oct 2008) | 2 lines
+    updated version string
 
-Fixed doc/Makefile.am according to renamed doc files.
+commit f9d7107581b3391183465454de6557de0abf7c98
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jan 24 07:41:23 2009 +0000
 
-------------------------------------------------------------------------
-r1180 | zas_ | 2008-10-25 16:42:52 +0200 (Sat, 25 Oct 2008) | 1 line
+    Silent two compilation warnings.
 
-Keyboard table cleanup attempt. Need more work.
-------------------------------------------------------------------------
-r1179 | zas_ | 2008-10-25 15:14:00 +0200 (Sat, 25 Oct 2008) | 1 line
+commit 0c44dc1f02b5515cffe2bcc20f54e2d57208a916
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jan 24 07:36:21 2009 +0000
 
-Move menus to unordered lists - step 2.
-------------------------------------------------------------------------
-r1178 | zas_ | 2008-10-25 13:02:09 +0200 (Sat, 25 Oct 2008) | 1 line
+    French translation was updated.
 
-Move menus to unordered lists - step 1.
-------------------------------------------------------------------------
-r1177 | zas_ | 2008-10-25 10:49:07 +0200 (Sat, 25 Oct 2008) | 1 line
+commit 3928a6a6e59e900f2d1343ed3aef01b5c86ac337
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 23 22:53:02 2009 +0000
 
-Align Previous to the left, drop useless col tags.
-------------------------------------------------------------------------
-r1176 | zas_ | 2008-10-25 10:14:34 +0200 (Sat, 25 Oct 2008) | 1 line
+    fixed possible crash
 
-Drop meta CREATED and CHANGED since they will never be updated and svn takes care of versions.
-------------------------------------------------------------------------
-r1175 | zas_ | 2008-10-25 10:10:11 +0200 (Sat, 25 Oct 2008) | 1 line
+commit aadb9ca7ccde3464cf0ae80a7985e25227279c70
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jan 21 18:30:54 2009 +0000
 
-Fix page titles.
-------------------------------------------------------------------------
-r1174 | zas_ | 2008-10-25 10:07:57 +0200 (Sat, 25 Oct 2008) | 1 line
+    enable threads by default
 
-Drop chapters numbers from h1 title, and reformat top title a bit.
-------------------------------------------------------------------------
-r1173 | zas_ | 2008-10-25 09:47:47 +0200 (Sat, 25 Oct 2008) | 1 line
+commit 0e1a79d60922a6aa11288531218a919774b29d5d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jan 21 18:16:26 2009 +0000
 
-Get rid off of chapters numbers in html documentation filenames. It will ease re-ordering.
-------------------------------------------------------------------------
-r1172 | zas_ | 2008-10-24 00:45:44 +0200 (Fri, 24 Oct 2008) | 1 line
+    compilation fixes for older exiv2
 
-Update legal notice and copyright to mention The Geeqie Team.
-------------------------------------------------------------------------
-r1171 | zas_ | 2008-10-23 21:06:23 +0200 (Thu, 23 Oct 2008) | 1 line
+commit e3086ee765ba371f1d6774d869d1ec7ba1f37590
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jan 20 22:53:09 2009 +0000
 
-With the help of tidy and sed, move html files to xhtml+css. Css classes were prefixed to ease future changes (like a common css file).
-------------------------------------------------------------------------
-r1170 | zas_ | 2008-10-23 20:06:28 +0200 (Thu, 23 Oct 2008) | 1 line
+    improved metadata preferences
 
-Change occurences of GQview and gqview to Geeqie and geeqie. Rename gqview_faq.html to faq.html
-------------------------------------------------------------------------
-r1169 | zas_ | 2008-10-22 21:56:29 +0200 (Wed, 22 Oct 2008) | 1 line
+commit 9d97c970f5f8dc30842c0672cb1ccf5ce8929681
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jan 20 22:29:31 2009 +0000
 
-Let Create thumbnails start in current directory (fallback to home directory if not available) as requested by Marcin Zajaczkowski (feature request 2166691).
-------------------------------------------------------------------------
-r1168 | nadvornik | 2008-10-20 23:00:18 +0200 (Mon, 20 Oct 2008) | 3 lines
+    fixed possible segfault
 
-Fix a cut and paste error when implementing the comment search (Klaus
-Ethgen)
+commit 6d9a3f1923d1b8741b5b306022722affee5b4873
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 11 21:28:03 2009 +0000
 
-------------------------------------------------------------------------
-r1167 | nadvornik | 2008-10-20 19:13:32 +0200 (Mon, 20 Oct 2008) | 2 lines
+    show symlinks in filelist
 
-fixed failed assertion in exif_free
+commit 07f76a58add699461ed85263e2bf815f22725e2b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 11 21:24:58 2009 +0000
 
-------------------------------------------------------------------------
-r1166 | nadvornik | 2008-10-18 22:17:55 +0200 (Sat, 18 Oct 2008) | 2 lines
+    fixed includes
 
-create xmp sidecar when needed
+commit fa197cca9401a69b158ac956aa7aa333525c770c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 11 18:58:05 2009 +0000
 
-------------------------------------------------------------------------
-r1165 | nadvornik | 2008-10-18 21:20:27 +0200 (Sat, 18 Oct 2008) | 2 lines
+    added a status bar button for writting metadata immediately
 
-simple synchronization XMP <-> Exif, IPTC
+commit 9e2559ec2e298ade2632cfcb526a674d18ab3cdf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 11 12:13:30 2009 +0000
 
-------------------------------------------------------------------------
-r1164 | nadvornik | 2008-10-18 20:22:57 +0200 (Sat, 18 Oct 2008) | 2 lines
+    metadata write mode (direct or sidecar) made configurable for each file
+    format
 
-infrastructure for preprocessing of metadata
+commit 79003481053d92298710773530b0f1ae7dec54e0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 10 20:40:37 2009 +0000
 
-------------------------------------------------------------------------
-r1163 | nadvornik | 2008-10-18 11:07:52 +0200 (Sat, 18 Oct 2008) | 2 lines
+    simplified metadata interface, dropped metadata_read,
+    fixes for older exiv2 versions
 
-fixed bar_exif separator
+commit 36c2beabcd63fb1d96bf6e639d66de24aa2f40d5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jan 4 17:14:34 2009 +0000
 
-------------------------------------------------------------------------
-r1162 | nadvornik | 2008-10-18 10:40:32 +0200 (Sat, 18 Oct 2008) | 2 lines
+    When "Remember print settings" is checked, save _all_ settings. Before this patch, text fields, text size, source, layout and image scale properties were not saved.
 
-reordered advanced exif columns
+commit ae1ea297b901d211bf2d2a84e253aecd4712817c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jan 4 10:32:47 2009 +0000
 
-------------------------------------------------------------------------
-r1161 | nadvornik | 2008-10-18 10:31:25 +0200 (Sat, 18 Oct 2008) | 2 lines
+    French translation was updated.
 
-no need to validate description, it is in utf8
+commit 1196bc75946359bfa10099df15c23808baff9a1e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jan 3 17:13:20 2009 +0000
 
-------------------------------------------------------------------------
-r1160 | nadvornik | 2008-10-18 00:00:07 +0200 (Sat, 18 Oct 2008) | 4 lines
+    Silent warnings.
 
-improved custom exif look:
-- use toggle instead of remove button 
-- display description instead of property key
+commit 911b41365c783519b075eda51fb6dcd345975d68
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 3 15:29:08 2009 +0000
 
-------------------------------------------------------------------------
-r1159 | nadvornik | 2008-10-14 23:24:34 +0200 (Tue, 14 Oct 2008) | 2 lines
+    write keywords and comments with separate functions
 
-follow Exiv2 SVN changes
+commit d16e38189ea96d485daed8424a2d1b6a9bcd0f8b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 2 23:14:01 2009 +0000
 
-------------------------------------------------------------------------
-r1158 | zas_ | 2008-10-12 10:49:45 +0200 (Sun, 12 Oct 2008) | 1 line
+    fixed updating of selection after deleting the last image from the list
 
-French translation was updated.
-------------------------------------------------------------------------
-r1157 | zas_ | 2008-10-12 10:43:14 +0200 (Sun, 12 Oct 2008) | 1 line
+commit dc4d041d5397e3a78c335babff70a409d04f3e54
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 2 22:57:09 2009 +0000
 
-Add a button for each advanced entry in Properties Exif Panel that allow to remove it from display. It fixes bug 1962611.
-------------------------------------------------------------------------
-r1156 | zas_ | 2008-10-12 10:36:53 +0200 (Sun, 12 Oct 2008) | 6 lines
+    do not enter a directory after rename
+    fixed dir tree updating
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2481287&group_id=222125&atid=1054680
 
-Better handling of accels map file writing errors.
-Secure save is also used for those now, at the expense of
-a bit of duplication of gtk functions.
-It should fix bug 2146917 (debian BTS #501131), reported by
-Stanislav Maslovski.
+commit 067cf8e940216c935f818cc0f8f60113d54460c5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 2 14:58:21 2009 +0000
 
-------------------------------------------------------------------------
-r1155 | nadvornik | 2008-10-11 22:19:48 +0200 (Sat, 11 Oct 2008) | 6 lines
+    added done callback to utilops
+    used the callback for metadata writting at exit and for renaming new
+    folder
 
-added option to use exif thumbnails
-- it requires exiv2 0.18 or the current svn 
-- it is disabled by default because the exif thumbnails
-  may be outdated if the image was edited
+commit a63548cf3e28b4684281019f7e697df77cff1c3e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 2 09:39:14 2009 +0000
 
+    fixed view_dir notification
 
-------------------------------------------------------------------------
-r1154 | zas_ | 2008-10-07 21:34:11 +0200 (Tue, 07 Oct 2008) | 1 line
+commit e040fa03e86b3dc95810f64b289682834d496010
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jan 2 09:26:23 2009 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1153 | zas_ | 2008-10-07 21:29:13 +0200 (Tue, 07 Oct 2008) | 1 line
+    sidecar files grouping was made case-insensitive
+    added possibility to use macros %raw, %image, %meta in extensions lists
 
-Fix up few signed vs unsigned warnings: exif_item_get_rational() last parameter is now of guint type.
-------------------------------------------------------------------------
-r1152 | nadvornik | 2008-10-07 20:37:32 +0200 (Tue, 07 Oct 2008) | 2 lines
+commit 7f75485133bbb12e04fa8bc32936c6240e33f2ba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 27 22:53:07 2008 +0000
 
-Implement the search for image comment - patch by Klaus Ethgen
+    fixed writting of legacy metadata
 
-------------------------------------------------------------------------
-r1151 | nadvornik | 2008-10-07 20:22:58 +0200 (Tue, 07 Oct 2008) | 2 lines
+commit c6d5aeb7f792026da1a2fd400a55d57a1ebef8cf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Dec 26 19:04:36 2008 +0000
 
-Fixed degree symbol encoding
+    optimized get_mark_func
+    fixed reference counting bug
 
-------------------------------------------------------------------------
-r1150 | nadvornik | 2008-10-07 20:20:22 +0200 (Tue, 07 Oct 2008) | 2 lines
+commit 88e91c4e066266f68d13df4c4ad59ba279d1293c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Dec 26 18:54:07 2008 +0000
 
-Adding a vim modeline to all files - patch by Klaus Ethgen
+    remove cached entries on all changes
 
-------------------------------------------------------------------------
-r1149 | nadvornik | 2008-10-05 20:25:44 +0200 (Sun, 05 Oct 2008) | 2 lines
+commit 7eeeeb77a09e7f9c4682bb65599e0c56cd757eba
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Dec 26 17:38:52 2008 +0000
 
-fixed confirm_delete option
+    fixed previous change
 
-------------------------------------------------------------------------
-r1148 | nadvornik | 2008-10-04 22:28:31 +0200 (Sat, 04 Oct 2008) | 2 lines
+commit ff8b93666eca33f39dea7659a1dbc3af641bef46
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Dec 26 14:12:36 2008 +0000
 
-fixed charset of exiv2 strings in non-utf8 locales
+    improved sidecar writting
+    private metadata can be saved in xmp format
 
-------------------------------------------------------------------------
-r1147 | nadvornik | 2008-10-01 22:57:56 +0200 (Wed, 01 Oct 2008) | 2 lines
+commit 0c2e413a220f62599ae49b5cfae99a439345e398
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Dec 25 12:39:34 2008 +0000
 
-Add support for GPSInfo - patch by Klaus Ethgen
+    implemented a possibility to connect keywords with marks
 
-------------------------------------------------------------------------
-r1146 | nadvornik | 2008-09-29 23:17:19 +0200 (Mon, 29 Sep 2008) | 4 lines
+commit 2dd4ade4180168ae6dc6d743e6e8d8fa5b5b8a0a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Dec 25 12:28:04 2008 +0000
 
-The comment section in the meta file is the last section. However it do
-not accept comment lines starting with a '['. This patch will fix that.
-- patch by Klaus Ethgen
+    low-level keyword-to-mark functionality
 
-------------------------------------------------------------------------
-r1145 | nadvornik | 2008-09-29 23:09:48 +0200 (Mon, 29 Sep 2008) | 2 lines
+commit 4bf1446de98aefc0904a6b60ba13e30327299dd5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Dec 25 12:19:37 2008 +0000
 
-fixes executable right of images
+    perform internal commands in idle call
 
-------------------------------------------------------------------------
-r1144 | nadvornik | 2008-09-29 23:01:30 +0200 (Mon, 29 Sep 2008) | 2 lines
+commit 31114993628896d4b36c9d361675e0c13b9faaca
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Dec 23 22:42:57 2008 +0000
 
-enlarge the dupe window - patch by Klaus Ethgen
+    allow writing of empty keywords/comment
 
-------------------------------------------------------------------------
-r1143 | nadvornik | 2008-09-27 20:48:32 +0200 (Sat, 27 Sep 2008) | 2 lines
+commit b077c46b67f7697f450d627f549e5e7d840adacc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Dec 23 20:53:44 2008 +0000
 
-updated preview loader to work with current svn version of libexiv2
+    added change notification to bar_info.c
 
-------------------------------------------------------------------------
-r1142 | nadvornik | 2008-09-10 22:37:30 +0200 (Wed, 10 Sep 2008) | 8 lines
+commit 6c231281ce339d9f5f91a0cbc77c2de1c3216804
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Dec 23 19:15:12 2008 +0000
 
-use SHIFT for connected scroll and zoom
+    improved buffering and notifications
 
-SHIFT + keys or mouse: affects all split windows
-keys or mouse: affects only active window
+commit 85fce4079a1b0ead93353919690ba3bdc5cb12ef
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Dec 23 19:13:48 2008 +0000
 
-CONTROL + mouse: moves fast (originally it was SHIFT + mouse)
+    write changes immediately, the necessary buffering is done on lower
+    level in metadata.c
 
+commit e2359cd023f1c962fe68ac35dc883a25cea87ec5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Dec 22 23:25:15 2008 +0000
 
-------------------------------------------------------------------------
-r1141 | nadvornik | 2008-09-09 21:46:44 +0200 (Tue, 09 Sep 2008) | 3 lines
+    file class made configurable in preferences
 
-reverted buggy part of rev. 1138 - it made the filelist jump
-unexpectedly
+commit 7180d81daf5ebd192610b1517f26e44b58147fb8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Dec 22 19:43:46 2008 +0000
 
-------------------------------------------------------------------------
-r1140 | nadvornik | 2008-09-08 21:57:51 +0200 (Mon, 08 Sep 2008) | 3 lines
+    French translation was updated.
 
-added possibility to redraw only the parts of image that are already
-loaded
+commit cbbd4a8733202ca3e436365eee667d551ea9c24a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Dec 22 18:29:25 2008 +0000
 
-------------------------------------------------------------------------
-r1139 | zas_ | 2008-09-08 17:53:01 +0200 (Mon, 08 Sep 2008) | 1 line
+    write metadata after timeout, image change or dir change
 
-Fix a compiler warning regarding argument type.
-------------------------------------------------------------------------
-r1138 | bruclik | 2008-09-08 01:01:30 +0200 (Mon, 08 Sep 2008) | 2 lines
+commit c29865e349a4389ea74b2e067020eaaec19c91af
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Dec 22 18:15:26 2008 +0000
 
-Replaced gtk depreceated code.
+    show metadata options in preferences dialog
 
-------------------------------------------------------------------------
-r1137 | zas_ | 2008-09-07 21:42:19 +0200 (Sun, 07 Sep 2008) | 1 line
+commit b3a6877012f4fbc9d6555f28a69067b0fd270ff6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 21 21:36:58 2008 +0000
 
-Shorten config_window_apply() a bit, reduce code redunancy.
-------------------------------------------------------------------------
-r1136 | zas_ | 2008-09-05 00:35:33 +0200 (Fri, 05 Sep 2008) | 1 line
+    fixed safe delete
 
-Update translations stats.
-------------------------------------------------------------------------
-r1135 | zas_ | 2008-09-05 00:29:32 +0200 (Fri, 05 Sep 2008) | 1 line
+commit b2478a365c4f5c96bab935dba551e76dad358412
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 21 21:20:36 2008 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1134 | zas_ | 2008-09-05 00:04:32 +0200 (Fri, 05 Sep 2008) | 1 line
+    most of the metadata options now works
 
-Allow all Preferences pages to scroll vertically. Reduce code redundancy.
-------------------------------------------------------------------------
-r1133 | zas_ | 2008-09-04 23:38:28 +0200 (Thu, 04 Sep 2008) | 1 line
+commit a9a31060a8b202604356236dbf751b621246e3e2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 21 16:26:03 2008 +0000
 
-Allow to change image.scroll_reset_method in Preferences > Image.
-------------------------------------------------------------------------
-r1132 | nadvornik | 2008-09-04 23:19:09 +0200 (Thu, 04 Sep 2008) | 4 lines
+    fixed new options
 
-fixed various problems with preserving viewport on image change,
-options->image.scroll_reset_method should work again (it needs to be
-added to the preferences dialog)
+commit da50487d38ea80d187a57adb99bafe64d256bfc5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Dec 21 09:28:16 2008 +0000
 
-------------------------------------------------------------------------
-r1131 | nadvornik | 2008-09-03 23:54:49 +0200 (Wed, 03 Sep 2008) | 3 lines
+    French translation was updated.
 
-load thumbnails with lower priority
-TODO: maybe implement an exception for visible thumbnails
+commit e9460139c2941c4df0f1058ba6ca121121339d98
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 20 23:18:20 2008 +0000
 
-------------------------------------------------------------------------
-r1130 | zas_ | 2008-09-03 23:13:02 +0200 (Wed, 03 Sep 2008) | 1 line
+    added options for metadata - not yet used
 
-Improve debug messages.
-------------------------------------------------------------------------
-r1129 | nadvornik | 2008-09-03 22:43:10 +0200 (Wed, 03 Sep 2008) | 2 lines
+commit 40a73b68024292f074a1dadfd6e8db3dad0dcd23
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Dec 20 21:47:04 2008 +0000
 
-adjusted default options
+    Fix two minor compilation warnings.
 
-------------------------------------------------------------------------
-r1128 | nadvornik | 2008-09-03 22:29:32 +0200 (Wed, 03 Sep 2008) | 2 lines
+commit f4733f77089a928d68a4cdfa7cee5fb8cf0b4b4d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Dec 20 21:30:27 2008 +0000
 
-adjusted redraw priority relative to icon drawing
+    Switch to fullscreen when double clicking on file in icon or list view. Feature request 1966042. The code was there since a long time but disabled, please report any issue.
 
-------------------------------------------------------------------------
-r1127 | nadvornik | 2008-09-03 21:58:21 +0200 (Wed, 03 Sep 2008) | 2 lines
+commit 9643a2546bccb38da155cbfc4265e588b85a34b9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 20 20:43:56 2008 +0000
 
-dropped IMAGE_THROTTLE_LARGER_IMAGES code
+    use the workflow in utilops.c for metadata approving and writting
+    TODO: configuration
 
-------------------------------------------------------------------------
-r1126 | nadvornik | 2008-09-03 21:52:11 +0200 (Wed, 03 Sep 2008) | 2 lines
+commit af283c6af011fd76a43aeb4e4723f02e8d4ac645
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Dec 16 12:59:23 2008 +0000
 
-fixed handling of broken images
+    queue metadata and write them in an idle callback
 
-------------------------------------------------------------------------
-r1125 | nadvornik | 2008-09-01 21:18:32 +0200 (Mon, 01 Sep 2008) | 2 lines
+commit b908ceb6bbb78a4edde47710e6291fa8eebb1717
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Dec 15 22:47:31 2008 +0000
 
-improved pixbuf draw priority control
+    prepared infrastructure for delayed metadata writting - refreshing
+    metadata immediately before writting is now possible
+    
+    modified metadata are stored in fd->modified_xmp
 
-------------------------------------------------------------------------
-r1124 | zas_ | 2008-09-01 19:29:07 +0200 (Mon, 01 Sep 2008) | 1 line
+commit b7fdc83d5f6e91fbf7d32377edd76c66ee23139c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Dec 15 18:04:42 2008 +0000
 
-Use a constant for minimal window size. Set it to 32 for all dialogs.
-------------------------------------------------------------------------
-r1123 | zas_ | 2008-09-01 19:22:19 +0200 (Mon, 01 Sep 2008) | 1 line
+    Allow to drag keywords on files in list or icon view. Dragged text is appended to keywords list of the destination file.
 
-Remove redundant debug.h inclusion.
-------------------------------------------------------------------------
-r1122 | nadvornik | 2008-08-31 23:19:00 +0200 (Sun, 31 Aug 2008) | 2 lines
+commit d1b9489e72a06e38e580a370f5e8106386c71d73
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Dec 9 19:12:38 2008 +0000
 
-fixed read ahead callback
+    French translation was updated.
 
-------------------------------------------------------------------------
-r1121 | nadvornik | 2008-08-31 23:02:09 +0200 (Sun, 31 Aug 2008) | 2 lines
+commit 0871c1893d2705e53fc3a1c08af69ad7b94ceba9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Dec 9 17:51:28 2008 +0000
 
-fixed error handling in image loader
+    Allow to invert the current selection in Collection view. A new Selection submenu was added to the contextual menu, Select All and Select None were moved to it, and Invert selection was added.
 
-------------------------------------------------------------------------
-r1120 | nadvornik | 2008-08-31 20:53:11 +0200 (Sun, 31 Aug 2008) | 2 lines
+commit e5abe232dfcbab211d72c51b73de128a6d822af8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Dec 8 21:34:32 2008 +0000
 
-fixed possible endless loop
+    Display error dialog with appropriate message when user is trying to open an invalid collection file.
 
-------------------------------------------------------------------------
-r1119 | zas_ | 2008-08-31 14:29:49 +0200 (Sun, 31 Aug 2008) | 1 line
+commit 2d44c554b22f3305e1cbef26397ba96532e47cca
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Dec 8 21:33:14 2008 +0000
 
-Add a Save button to Preferences dialog, which allow to save options to file without quitting the application.
-------------------------------------------------------------------------
-r1118 | zas_ | 2008-08-31 13:27:24 +0200 (Sun, 31 Aug 2008) | 1 line
+    Cosmetic fix.
 
-Move quoted_value() and escquote_value() to misc.[ch].
-------------------------------------------------------------------------
-r1117 | zas_ | 2008-08-31 12:51:41 +0200 (Sun, 31 Aug 2008) | 1 line
+commit bb2f085701aa58240d46914e01f31bb918b130aa
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Dec 7 15:51:50 2008 +0000
 
-Move miscellaneous functions to their own files (new misc.[ch]).
-------------------------------------------------------------------------
-r1116 | nadvornik | 2008-08-31 12:08:48 +0200 (Sun, 31 Aug 2008) | 2 lines
+    Fix patch 1290: we only want to remove unused parameter warnings not all warnings produced by -Wextra, so just disable then using -Wno-unused-parameter and re-add -Wextra (was -W, but this is the old name).
 
-use GThreadPool
+commit 85e6945309d39750d6543f86cddbfe8b0c166797
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 7 13:28:04 2008 +0000
 
-------------------------------------------------------------------------
-r1115 | nadvornik | 2008-08-31 11:20:29 +0200 (Sun, 31 Aug 2008) | 2 lines
+    handle the case when io.open() fails
 
-improved thread support in image loader
+commit 68f82126997889074361955ca27534bb8fe0f446
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 6 21:24:38 2008 +0000
 
-------------------------------------------------------------------------
-r1114 | zas_ | 2008-08-31 11:13:42 +0200 (Sun, 31 Aug 2008) | 1 line
+    disabled the "unused parameter" warnings, they are harmless and nobody
+    is going to fix it ;)
+    (note: -W is equivalent to -Wextra)
 
-Move save/load_options() to options.[ch].
-------------------------------------------------------------------------
-r1113 | zas_ | 2008-08-31 10:59:39 +0200 (Sun, 31 Aug 2008) | 1 line
+commit 0bd9d0fe13488d9e7d6578bca561aa94d398ba49
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Dec 2 19:34:53 2008 +0000
 
-Move sync_options_with_current_state() call to save_options().
-------------------------------------------------------------------------
-r1112 | zas_ | 2008-08-31 10:41:42 +0200 (Sun, 31 Aug 2008) | 1 line
+    Rename few variables to make the code more readable.
 
-Move some code to new functions, to simplify main().
-------------------------------------------------------------------------
-r1111 | zas_ | 2008-08-31 10:13:36 +0200 (Sun, 31 Aug 2008) | 1 line
+commit 33e01e14e35e31e55b0946d7bcc644649483d76b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 30 21:59:28 2008 +0000
 
-Fix two minor compilation warnings.
-------------------------------------------------------------------------
-r1110 | nadvornik | 2008-08-30 22:15:47 +0200 (Sat, 30 Aug 2008) | 4 lines
+    keyword_list_find() -> find_string_in_list(), return gboolean.
 
-run image loader in separate thread
-this feature is disabled by default for now, it must be enabled by 
-configure --enable-threads 
+commit 81f6d0d4101e461d81b02e9261dcb3479aae3490
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 30 21:52:37 2008 +0000
 
-------------------------------------------------------------------------
-r1109 | nadvornik | 2008-08-30 15:04:06 +0200 (Sat, 30 Aug 2008) | 2 lines
+    metadata_set_keywords() -> metadata_set(). Use gboolean type for boolean parameters.
 
-prepared image loader code for threads
+commit d931c87fc64a09eb9bdef1f6969977df4702adcf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 30 21:43:01 2008 +0000
 
-------------------------------------------------------------------------
-r1108 | zas_ | 2008-08-30 12:39:35 +0200 (Sat, 30 Aug 2008) | 5 lines
+    Rename most comment_*() functions to more appropriate metadata_*().
 
-Allow to override documentation paths through options:
-- documentation.helpdir
-- documentation.htmldir
-Default values are set at configure time.
+commit 73e8f782f130f8899520a53de7b4c9d5f3451fdf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 30 11:46:34 2008 +0000
 
-------------------------------------------------------------------------
-r1107 | nadvornik | 2008-08-29 22:53:53 +0200 (Fri, 29 Aug 2008) | 2 lines
+    File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
 
-converted image loader to a GObject and use signals for notification
+commit 73a3570010efa60255d7e1c230e50fbe6634dd80
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 19:10:59 2008 +0000
 
-------------------------------------------------------------------------
-r1106 | nadvornik | 2008-08-29 14:35:13 +0200 (Fri, 29 Aug 2008) | 2 lines
+    Do not hardcode exif formatted prefix.
 
-do not access image_loader directly
+commit 40acac5694214bfcb9a6623a2cdd479a6a6991b4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 12:34:39 2008 +0000
 
-------------------------------------------------------------------------
-r1105 | nadvornik | 2008-08-29 11:59:20 +0200 (Fri, 29 Aug 2008) | 2 lines
+    Fix up sign-related  warning.
 
-added new raw preview interface for legacy exif
+commit fd5cd3190989657da2abf4fc66d9c4e47242f9cb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 12:34:03 2008 +0000
 
-------------------------------------------------------------------------
-r1104 | nadvornik | 2008-08-29 11:38:10 +0200 (Fri, 29 Aug 2008) | 2 lines
+    Fix up unsigned expression always true warning.
 
-fixed thumbnail loader for the new raw preview interface
+commit 41ba7c59ae7008b423ba7a09de4cd781bd4a5b99
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 12:33:07 2008 +0000
 
-------------------------------------------------------------------------
-r1103 | nadvornik | 2008-08-29 00:26:09 +0200 (Fri, 29 Aug 2008) | 4 lines
+    Resync .h with .c declarations.
 
-use mmaped files image loader 
-implemented new interface for extracting raw previews
-experiments with previews support in SVN version of Exiv2
+commit 26f6d635c22a18bfc42144b3e848ab2b15481105
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 12:31:27 2008 +0000
 
-------------------------------------------------------------------------
-r1102 | bruclik | 2008-08-28 14:51:02 +0200 (Thu, 28 Aug 2008) | 2 lines
+    Fix up pointer signedness warnings.
 
-Removed converting fd->name to utf8 from file_data_set_collate_keys(), because fd->name is utf8. 
+commit bb28beac7482b10b36f0dac3efea45392c4942df
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 12:30:49 2008 +0000
 
-------------------------------------------------------------------------
-r1101 | zas_ | 2008-08-28 12:50:02 +0200 (Thu, 28 Aug 2008) | 1 line
+    Fix up not a prototype warning.
 
-Silent warnings about unused functions when lcms is not used.
-------------------------------------------------------------------------
-r1100 | zas_ | 2008-08-27 19:02:14 +0200 (Wed, 27 Aug 2008) | 1 line
+commit 402a7b74cb3f63247cb0451f7470e72aa42a53f2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 12:30:10 2008 +0000
 
-Comment out unused functions.
-------------------------------------------------------------------------
-r1099 | zas_ | 2008-08-27 18:42:59 +0200 (Wed, 27 Aug 2008) | 1 line
+    Remove unused variable.
 
-Silent a compiler warning.
-------------------------------------------------------------------------
-r1098 | zas_ | 2008-08-27 18:40:21 +0200 (Wed, 27 Aug 2008) | 1 line
+commit fb0fc10f50e03ac9e154facbdccddbd6f380f60b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 27 12:29:38 2008 +0000
 
-const gpointer -> gconstpointer.
-------------------------------------------------------------------------
-r1097 | zas_ | 2008-08-27 00:37:18 +0200 (Wed, 27 Aug 2008) | 1 line
+    Fix up deprecated function and not a prototype warnings.
 
-Use gpointer instead of void *.
-------------------------------------------------------------------------
-r1096 | zas_ | 2008-08-27 00:30:40 +0200 (Wed, 27 Aug 2008) | 1 line
+commit 673dab6bdc4741c7822c4fd1bf5370b7a6edec00
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 26 20:39:50 2008 +0000
 
-Consistency: type * instead of type*.
-------------------------------------------------------------------------
-r1095 | zas_ | 2008-08-27 00:22:51 +0200 (Wed, 27 Aug 2008) | 1 line
+    Handle return values better to silent some warnings.
 
-For the sake of consistency, use glib basic types everywhere.
-------------------------------------------------------------------------
-r1094 | zas_ | 2008-08-26 23:19:33 +0200 (Tue, 26 Aug 2008) | 1 line
+commit 3f7d30d146ce9a3e06ea3df7909c8be3e741f138
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 26 20:38:47 2008 +0000
 
-Indentation fixes.
-------------------------------------------------------------------------
-r1093 | bruclik | 2008-08-26 22:21:30 +0200 (Tue, 26 Aug 2008) | 3 lines
+    Print a message if chown() or chmod() fail.
 
-Fixed segfault when is run inside directory with non valid uft-8 image
-filename.
+commit a3cd380dd4155404ae24df7260fa45da108483e4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 26 20:37:14 2008 +0000
 
-------------------------------------------------------------------------
-r1092 | bruclik | 2008-08-26 15:56:56 +0200 (Tue, 26 Aug 2008) | 2 lines
+    Fix up format vs type warning.
 
-Fixed calling "Image search" function in a directory without image. 
+commit 85b4c3d6b406043f2709f6f0f6ecea8a7418e9a2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 25 17:32:51 2008 +0000
 
-------------------------------------------------------------------------
-r1091 | nadvornik | 2008-08-26 00:45:38 +0200 (Tue, 26 Aug 2008) | 2 lines
+    Move comments/keywords read and write stuff to new metadata.{c,h}.
 
-correctly maintain selection during iconlist refresh
+commit 499063665b9e138a110e2881a05dc364961b7aaf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 25 17:01:03 2008 +0000
 
-------------------------------------------------------------------------
-r1090 | zas_ | 2008-08-26 00:20:45 +0200 (Tue, 26 Aug 2008) | 1 line
+    Fix up unsigned expression always true/false warnings.
 
-Whitespaces cleanup.
-------------------------------------------------------------------------
-r1089 | bruclik | 2008-08-25 20:13:33 +0200 (Mon, 25 Aug 2008) | 3 lines
+commit 50306a69abd7e07458b7355cef5883f500fd029d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 23 22:05:27 2008 +0000
 
-Fixed segfaulting when alter image in directory without images.
+    Hide .gqv extension from collection name in collection window title and recent menu list.
 
+commit 968a923541ab98923ba0ea32b78da525c258ce68
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 23 16:16:09 2008 +0000
 
-------------------------------------------------------------------------
-r1088 | nadvornik | 2008-08-25 18:58:27 +0200 (Mon, 25 Aug 2008) | 2 lines
+    Rename wmsubclass and name to role, which corresponds better to the purpose of the parameter as it ends to be passed to gtk_window_set_role().
 
-removed unused code
+commit 92a79f4e480d767c15510c2f69f2a548cf25e91e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 23 16:10:29 2008 +0000
 
-------------------------------------------------------------------------
-r1087 | zas_ | 2008-08-24 16:40:18 +0200 (Sun, 24 Aug 2008) | 1 line
+    Drop useless wmclass stuff. Gtk will take care of it and as said in the documentation using gtk_window_set_wmclass() is sort of pointless.
 
-Typo fixes.
-------------------------------------------------------------------------
-r1086 | zas_ | 2008-08-24 16:33:03 +0200 (Sun, 24 Aug 2008) | 1 line
+commit 15aaf972f4a7a7490a1ebaef8900074a80124b2d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 22 22:54:51 2008 +0000
 
-Slight code redundancy reduction.
-------------------------------------------------------------------------
-r1085 | zas_ | 2008-08-24 16:14:37 +0200 (Sun, 24 Aug 2008) | 1 line
+    Use the last selected images for the splitted views. Ie. when 5 images are selected, the last one is displayed, split quad while open images 5,4,3,2. It seems better to me.
 
-Drop redundant variable affectation.
-------------------------------------------------------------------------
-r1084 | zas_ | 2008-08-24 15:22:08 +0200 (Sun, 24 Aug 2008) | 2 lines
+commit cce7425dc23b06d7267eb110ce0b8814e469285f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 22 22:43:18 2008 +0000
 
-Fix untranslated messages. French translation and POTFILES.in were updated.
+    When more than one image is selected, Split Horizontal, Vertical and Quad will use selected images when initialized.
 
-------------------------------------------------------------------------
-r1083 | zas_ | 2008-08-24 12:00:40 +0200 (Sun, 24 Aug 2008) | 1 line
+commit bebe10914b96c3a07f748984b3e6fba18cccfa94
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 22 22:10:10 2008 +0000
 
-French translation was updated.
-------------------------------------------------------------------------
-r1082 | zas_ | 2008-08-24 12:00:02 +0200 (Sun, 24 Aug 2008) | 1 line
+    Tidy up.
 
-Mark forgotten string for translation.
-------------------------------------------------------------------------
-r1081 | zas_ | 2008-08-23 23:07:25 +0200 (Sat, 23 Aug 2008) | 1 line
+commit 15821ce9a76d8afe0614dc5ed494161c67f8ad70
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 22 22:04:21 2008 +0000
 
-Fix another missing separator bug in image overlay. This one was occuring with default string when no ISO data was available from exif.
-------------------------------------------------------------------------
-r1080 | zas_ | 2008-08-23 22:46:31 +0200 (Sat, 23 Aug 2008) | 1 line
+    Use common code for layout_image_setup_split_none() too.
 
-Minor optimization: no need to copy the whole remaining of the string, just copy next char.
-------------------------------------------------------------------------
-r1079 | zas_ | 2008-08-23 19:35:57 +0200 (Sat, 23 Aug 2008) | 2 lines
+commit 67f56552a7bf85f99f537d06885ebb71876a1c25
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 22 21:58:07 2008 +0000
 
-Only display status if there is at least one file in the file list.
+    layout_image_setup_split_*(): simplify code.
 
-------------------------------------------------------------------------
-r1078 | zas_ | 2008-08-23 19:00:59 +0200 (Sat, 23 Aug 2008) | 1 line
+commit 25ac01ca80b9a13f843aad26643a21e2c991314e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 22 21:11:09 2008 +0000
 
-Remove unneeded type casting.
-------------------------------------------------------------------------
-r1077 | nadvornik | 2008-08-23 10:42:12 +0200 (Sat, 23 Aug 2008) | 2 lines
+    layout_image_setup_split_*(): move common code to a new function layout_image_setup_split_common().
 
-fixed vd_refresh
+commit 7f699d74c05ce9e81e83210a231e0ca86c7c004c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 22 16:24:23 2008 +0000
 
-------------------------------------------------------------------------
-r1076 | zas_ | 2008-08-23 00:09:54 +0200 (Sat, 23 Aug 2008) | 1 line
+    Add a back button in the toolbar: it allows to go back and forth between two directories. Experimental, please test and comment on ml.
 
-French translation was updated.
-------------------------------------------------------------------------
-r1075 | zas_ | 2008-08-22 23:52:13 +0200 (Fri, 22 Aug 2008) | 7 lines
+commit f7327cbd9fa590af75336916692ae40832ab32e7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 20 17:28:34 2008 +0000
 
-Add an option named layout.home_path which modifies the behavior of the Home button.
-By default, pressing this button goes to the user's home directory.
-When this option is set to a path, this path is used instead.
-One can change the option value through Preferences > Advanced > Navigation
-or directly in .geeqierc.
-Feature proposed by Colin Clark.
+    Force font weight and style to normal for keys.
 
-------------------------------------------------------------------------
-r1074 | zas_ | 2008-08-22 00:49:30 +0200 (Fri, 22 Aug 2008) | 1 line
+commit 540d86584baf5d6070b04254129f25e28a359541
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 20 17:23:46 2008 +0000
 
-Typo fix: vf -> vd
-------------------------------------------------------------------------
-r1073 | zas_ | 2008-08-22 00:47:49 +0200 (Fri, 22 Aug 2008) | 1 line
+    Fix up yet unmarked keys.
 
-Replace macros VDLIST_INFO() and VDTREE_INFO() by shorter VDLIST() and VDTREE(). VDLIST_INFO(vd, part) becomes VDLIST(vd)->part.
-------------------------------------------------------------------------
-r1072 | zas_ | 2008-08-22 00:36:20 +0200 (Fri, 22 Aug 2008) | 1 line
+commit ad4dacfae1907d2ba1e2e8889aac84d7d54121b1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 20 11:46:43 2008 +0000
 
-Indentation fix.
-------------------------------------------------------------------------
-r1071 | zas_ | 2008-08-21 00:26:34 +0200 (Thu, 21 Aug 2008) | 1 line
+    Fix compilation warnings.
 
-Use constants instead of enum since value (0xffff0000) overflow INT_MAX on some platforms (seen on Solaris 10 SPARC system using the native Sun version 5.9 compilers). Reported by Jeffery Small.
-------------------------------------------------------------------------
-r1070 | zas_ | 2008-08-21 00:19:35 +0200 (Thu, 21 Aug 2008) | 1 line
+commit a7fe24499d26daa57bfe1492bcb79aa8ddf4a92f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 20 07:22:56 2008 +0000
 
-Do not return values of void functions. Reported by Jeffery Small.
-------------------------------------------------------------------------
-r1069 | nadvornik | 2008-08-20 22:36:36 +0200 (Wed, 20 Aug 2008) | 2 lines
+    Fix up some missing html code.
 
-update the FileData structure when a new folder is created
+commit 7d5e78bf230b7f02687139acadb0a29b2483b6af
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 19 22:57:40 2008 +0000
 
-------------------------------------------------------------------------
-r1068 | nadvornik | 2008-08-20 00:58:31 +0200 (Wed, 20 Aug 2008) | 2 lines
+    More keys.
 
-improved refresh in view_dir_list
+commit 85c37fcfec1a92989c5301fc8dc9f2e8d5de2e8e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 19 22:46:27 2008 +0000
 
-------------------------------------------------------------------------
-r1067 | nadvornik | 2008-08-19 23:01:29 +0200 (Tue, 19 Aug 2008) | 2 lines
+    Fix text wrongly marked as key.
 
-set fallback pixbuf in case of missing file
+commit 7f8324bf49907dfbbb582e8b96b6a10cad070490
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 19 22:42:20 2008 +0000
 
-------------------------------------------------------------------------
-r1066 | nadvornik | 2008-08-19 22:58:23 +0200 (Tue, 19 Aug 2008) | 2 lines
+    Mark keyboard keys with a span and make them look like a key through css style.
 
-fixed possible segfault
+commit 5aba0342d8c4fef02b48d436d8bc65550f382a9b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 19 21:36:02 2008 +0000
 
-------------------------------------------------------------------------
-r1065 | nadvornik | 2008-08-17 16:18:51 +0200 (Sun, 17 Aug 2008) | 3 lines
+    Replace [Control] by shorter and more common [Ctrl].
 
-removed code for maintaining filelist position, gtk_tree_view itself handles it
-better
+commit 67e91a0baa946ac71c5e34c227d2769a11fab8d0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 19 21:16:27 2008 +0000
 
-------------------------------------------------------------------------
-r1064 | zas_ | 2008-08-17 11:36:02 +0200 (Sun, 17 Aug 2008) | 2 lines
+    Unify [Shift] and [Control] notation.
 
-French translation was updated.
+commit 68a305ccc3b4e14657c8f88a7258d0d6b41f8dd2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 19 20:53:53 2008 +0000
 
-------------------------------------------------------------------------
-r1063 | zas_ | 2008-08-17 11:30:45 +0200 (Sun, 17 Aug 2008) | 11 lines
+    Move (and update) image pane shortcuts to a table. Simplify css styles for those tables.
 
-Simplify things related to ViewFileInfoList * and ViewFileInfoIcon * type casting:
-- drop VFICON_INFO() and VFLIST_INFO() macros
-- rename VFLIST_INFO_POINTER() and VFICON_INFO_POINTER() to shorter VFLIST() and VFICON().
-- replace all related occurrences by shorter expressions.
+commit 7d76bf997f408ba74840477446b590492430ed7a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 19 17:42:36 2008 +0000
 
-For example:
-VFICON_INFO(vf, columns) becomes VFICON(vf)->columns
-VFLIST_INFO(vf, click_fd) becomes VFLIST(vf)->click_fd
+    Update documentation.
 
+commit 0362a31ed7bc49569607a2b6cbec49c6c4288da1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 17 18:05:42 2008 +0000
 
+    Fix up links and various enhancements.
 
-------------------------------------------------------------------------
-r1062 | zas_ | 2008-08-17 11:00:33 +0200 (Sun, 17 Aug 2008) | 2 lines
+commit 84d0eeb779804970775a1a2b151094999df1f39c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 17 17:17:47 2008 +0000
 
-Move variable declaration at start of block.
+    Remove colored background in headings for printable version.
 
-------------------------------------------------------------------------
-r1061 | nadvornik | 2008-08-17 01:37:26 +0200 (Sun, 17 Aug 2008) | 2 lines
+commit bb0dccd452eaaaad56dba8028f17789632e10ff8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 17 17:09:44 2008 +0000
 
-marks in iconview made clickable
+    Change metadata directory to be $XDG_DATA_HOME instead of $XDG_CACHE_HOME as discussed on the ml (obviously it has impact only when XDG support is set). Suggestion by Omari Stephens.
 
-------------------------------------------------------------------------
-r1060 | nadvornik | 2008-08-16 22:57:40 +0200 (Sat, 16 Aug 2008) | 2 lines
+commit b4ef8546331d9128999cc531faaa35556eb242d2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 17 07:10:32 2008 +0000
 
-keep files with non-zero marks in memory
+    Comment out css code that slipped through by cut'n paste error. It may be useful at some time though.
 
-------------------------------------------------------------------------
-r1059 | nadvornik | 2008-08-16 22:34:14 +0200 (Sat, 16 Aug 2008) | 2 lines
+commit 4575fa4ac78579835bfd17a13ccdaf61989066a4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 16 19:58:43 2008 +0000
 
-implemented marks filter
+    Add specific css for print media(has to be improved).
 
-------------------------------------------------------------------------
-r1058 | zas_ | 2008-08-16 09:18:16 +0200 (Sat, 16 Aug 2008) | 3 lines
+commit 69f15e9da78b7404be497d657110cfad1a266722
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 16 16:32:14 2008 +0000
 
-Fix double escaping of image overlay text.
-Bug 2051955, reported by Emmanuel Dupuis.
+    Update svn:ignore property: add some files and replace gqview by geeqie where applicable.
 
-------------------------------------------------------------------------
-r1057 | nadvornik | 2008-08-13 23:07:06 +0200 (Wed, 13 Aug 2008) | 2 lines
+commit 19e042015022768094ac5d2e90a32db866698467
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 15 20:17:14 2008 +0000
 
-added keyboard map generator
+    Implement preliminary support for XDG Base Directory Specification.
+    See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html.
+    
+    This feature was requested for a long time (feature requests #1950978 and #2289481).
+    For now, it is disabled since it breaks compatibility with previous versions.
+    To be able to test it, you have to enable it by defining USE_XDG to 1 in main.h.
+    
+    geeqierc and other conf files are going to:
+    $XDG_CONFIG_HOME/geeqie/ (default to $HOME/.config/geeqie/).
+    
+    metadata and thumbnails cache (if std is not used) are going to:
+    $XDG_CACHE_HOME/geeqie/metadata/ (default to $HOME/.cache/geeqie/metadata/)
+    and $XDG_CACHE_HOME/geeqie/thumbnails/ (default to $HOME/.cache/geeqie/thumbnails/)
+    
+    collections are going to:
+    $XDG_DATA_HOME/geeqie/collections/ (default to $HOME/.local/share/geeqie/collections/)
+    
+    
+    Please test and report any issue.
 
-------------------------------------------------------------------------
-r1056 | nadvornik | 2008-08-13 22:46:06 +0200 (Wed, 13 Aug 2008) | 2 lines
+commit 6419843202ec66cdb0aa9e763a777a06f6617f19
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 15 20:01:25 2008 +0000
 
-a workaround for http://bugzilla.gnome.org/show_bug.cgi?id=547669
+    Replace cache_ensure_dir_exists() by new recursive_mkdir_if_not_exists().
 
-------------------------------------------------------------------------
-r1055 | nadvornik | 2008-08-12 22:21:25 +0200 (Tue, 12 Aug 2008) | 2 lines
+commit 8b10477d6c451a8a952db33eea29a7d289261635
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Nov 15 19:13:43 2008 +0000
 
-fixed crash with float file list and geeqie --blank
+    fixed usage of deprecated functions - patch by Omari Stephens
 
-------------------------------------------------------------------------
-r1054 | nadvornik | 2008-08-11 20:53:19 +0200 (Mon, 11 Aug 2008) | 2 lines
+commit 27bcad2478c6a0e5ebda8849c9a6bf67d4dfa222
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 15 17:48:31 2008 +0000
 
-fixed crash in geeqie --blank
+    Rename check_for_home_path() to mkdir_if_not_exists().
 
-------------------------------------------------------------------------
-r1053 | nadvornik | 2008-08-11 19:45:26 +0200 (Mon, 11 Aug 2008) | 2 lines
+commit 788a57656d4085ba2e526a29648ec1477bafa46f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 15 17:30:45 2008 +0000
 
-fixed setting visible entry in view_dir_tree
+    Use functions to return directories instead of constants.
+    Following functions were added:
+    get_collections_dir()
+    get_metadata_cache_dir()
+    get_rc_dir()
+    get_thumbnails_cache_dir()
+    get_trash_dir()
+    
+    They return the full directory path.
 
-------------------------------------------------------------------------
-r1051 | nadvornik | 2008-07-30 20:44:49 +0200 (Wed, 30 Jul 2008) | 2 lines
+commit e5dd414c28b825002568ea99797a4ad7e5bb64ad
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 15 10:35:43 2008 +0000
 
-updated ChangeLog from svn log
+    Add a wrapper around system() call named runcmd() which allows easier debugging. Improve the code launching the help browser.
 
-------------------------------------------------------------------------
-r1050 | zas_ | 2008-07-28 20:35:19 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit f56852b68c19db3f71dd69c44c8cc38ddbc644ae
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Nov 14 01:10:18 2008 +0000
 
-Move declarations at the beginning of blocks.
+    Fix up Makefile.am: add missing files and do not install template.html.
 
-------------------------------------------------------------------------
-r1049 | zas_ | 2008-07-28 20:07:42 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit 55bdd3344fd5f342d30362fe301808f826710112
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 12 21:38:00 2008 +0000
 
-Optimize tests even more using last changes.
+    Fix a cut'n'paste error.
 
-------------------------------------------------------------------------
-r1048 | nadvornik | 2008-07-28 20:02:10 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit 609fc80ba907a18bd5b0998b155580654e8749db
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 12 21:34:55 2008 +0000
 
-do not free unallocated exif data
+    More precise description of the pan view find feature and a note about ressources eating was added.
 
-------------------------------------------------------------------------
-r1047 | zas_ | 2008-07-28 19:59:09 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit 3005309e752b5f6d9378487b6856f18eb40b365f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 12 21:15:12 2008 +0000
 
-Cache strcmp() result.
+    Add some information about the pan view.
 
-------------------------------------------------------------------------
-r1046 | zas_ | 2008-07-28 19:56:56 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit 3effb3cd44a5b956cd0d7416eec0f2aaea94b774
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 12 17:59:14 2008 +0000
 
-Optimize redundant tests.
+    Add a note about splitted view.
 
-------------------------------------------------------------------------
-r1045 | zas_ | 2008-07-28 19:55:06 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit ae7645d7323cc203e69f73e51976c8d8ea7f7017
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Nov 12 17:48:16 2008 +0000
 
-Move dest_dir variable to inner block.
+    Add Connected zoom and Split menu items.
 
-------------------------------------------------------------------------
-r1044 | zas_ | 2008-07-28 11:44:50 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit f055d32815e382a5cac2117e46ecad2b866e942b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 23:35:39 2008 +0000
 
-Reduce code redundancy and minor typo fixes.
+    Add missing s...
 
-------------------------------------------------------------------------
-r1043 | zas_ | 2008-07-28 11:14:10 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit 5078d7e58ebafa27aac3c50703e1c0fcb180d186
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 23:30:13 2008 +0000
 
-French translation was updated.
+    Minor fixes.
 
-------------------------------------------------------------------------
-r1042 | zas_ | 2008-07-28 11:12:33 +0200 (Mon, 28 Jul 2008) | 2 lines
+commit 0dabd8de27a7e8c7801dddc5d848246a001c97ac
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 21:50:42 2008 +0000
 
-Typo fix.
+    Give a new style to menus.
 
-------------------------------------------------------------------------
-r1041 | nadvornik | 2008-07-27 21:22:40 +0200 (Sun, 27 Jul 2008) | 2 lines
+commit ec48abb7939ef9919bbd905d147cfda9e884c457
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 21:49:33 2008 +0000
 
-abort file operations when the file list is empty
+    Fix missing parts.
 
-------------------------------------------------------------------------
-r1040 | nadvornik | 2008-07-27 20:20:59 +0200 (Sun, 27 Jul 2008) | 3 lines
+commit c1a85ebf0418f0b0b4fe9b175702ad86a5f5ed0b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 21:17:55 2008 +0000
 
-remember path entered in file dialog
-http://sourceforge.net/tracker/index.php?func=detail&aid=2028977&group_id=222125&atid=1054680
+    Update main window menus description to match current Geeqie.
 
-------------------------------------------------------------------------
-r1039 | nadvornik | 2008-07-27 15:46:24 +0200 (Sun, 27 Jul 2008) | 2 lines
+commit d6bc7dc5e3b0a140523fcfc9eac0566b569e26eb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 21:17:03 2008 +0000
 
-speed-up of directory notification on deleting large number of files
+    Drop dots.
 
-------------------------------------------------------------------------
-r1038 | nadvornik | 2008-07-27 11:51:28 +0200 (Sun, 27 Jul 2008) | 2 lines
+commit f9071c86d19c4fb8417c8838aa1b99176e65342c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 10:32:03 2008 +0000
 
-added "Symlink" as an example of "filter" command 
+    Update exif pane documentation a bit.
 
-------------------------------------------------------------------------
-r1037 | nadvornik | 2008-07-27 10:57:12 +0200 (Sun, 27 Jul 2008) | 2 lines
+commit aeca4f3163c33f41b5cc1d0f371fb43d4138ae73
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 10:24:04 2008 +0000
 
-improved updating of view_dir_tree
+    Add Properties Options page.
 
-------------------------------------------------------------------------
-r1036 | nadvornik | 2008-07-27 10:40:47 +0200 (Sun, 27 Jul 2008) | 2 lines
+commit 51a2344638f5f1c738f03d023f4f3139f23761d7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 10:09:09 2008 +0000
 
-fixed deleting of non-empty folder
+    Advanced options documentation is now almost in sync with current geeqie.
 
-------------------------------------------------------------------------
-r1035 | nadvornik | 2008-07-27 00:36:58 +0200 (Sun, 27 Jul 2008) | 2 lines
+commit eeae9191dcb131a7fa9a85876b4314869bffe007
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 11 09:12:10 2008 +0000
 
-fixed spec file
+    More updates to advanced options documentation. Not yet finished.
 
-------------------------------------------------------------------------
-r1034 | nadvornik | 2008-07-27 00:26:08 +0200 (Sun, 27 Jul 2008) | 2 lines
+commit 9f3cc9ef382cae5ef8c0b6cc050844a796321a15
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 23:36:12 2008 +0000
 
-fixed invalid warning on running editors
+    Page cleanup and fixed. Remove obsolete note.
 
-------------------------------------------------------------------------
-r1033 | nadvornik | 2008-07-26 22:34:24 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit f13928fef829928a7a807a11a5e4d9603592597c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 23:15:42 2008 +0000
 
-updated version string
+    Add missing link.
 
-------------------------------------------------------------------------
-r1032 | nadvornik | 2008-07-26 22:15:00 +0200 (Sat, 26 Jul 2008) | 3 lines
+commit 757b8ebc5495d81fb1fb1b531e2f5e682a0ad9c9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 23:05:50 2008 +0000
 
-dropped references to OpenOffice.org as suggested at
-https://sourceforge.net/tracker/index.php?func=detail&aid=1972534&group_id=222125&atid=1054680
+    Update documentation a bit: General, Image, Windows, Filtering, Editors and a part of Advanced (Image Overlay) options.
 
-------------------------------------------------------------------------
-r1031 | nadvornik | 2008-07-26 22:02:20 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit b72d86d30095cef07dd61ab15b949c74ef7c0d1c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 21:33:38 2008 +0000
 
-string cleanup
+    Let subsection menus match index style.
 
-------------------------------------------------------------------------
-r1030 | nadvornik | 2008-07-26 21:52:40 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit 3c766c9124437106f8c84886680b53b1a17ff6c3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 21:14:34 2008 +0000
 
-removed unused messages.desc_dlist
+    Cosmetic changes in image search and find duplicates shortcuts tables.
 
-------------------------------------------------------------------------
-r1029 | nadvornik | 2008-07-26 21:41:46 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit c410dad0a2007582d3460f222d52f193e8718d12
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 20:42:44 2008 +0000
 
-fixed new folder command
+    Tidy up.
 
-------------------------------------------------------------------------
-r1028 | nadvornik | 2008-07-26 21:33:36 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit 25735fd6a8ef1890f8b57d8ba9262f256c0243a7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 20:40:50 2008 +0000
 
-fixed renaming of directories
+    Move from xhtml transitional to xhtml strict.
 
-------------------------------------------------------------------------
-r1027 | nadvornik | 2008-07-26 21:01:20 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit 60ff2fb4b9a39322f5f685310e7f3a8aea316c76
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 20:16:45 2008 +0000
 
-warn about changed file extensions
+    Minor cleanup.
 
-------------------------------------------------------------------------
-r1026 | nadvornik | 2008-07-26 20:33:49 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit 9b5b933912d1badd83d0e5691fc03f63be9673fc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 19:37:17 2008 +0000
 
-added icon for changes without warnings
+    Tidy up and minor fixes.
 
-------------------------------------------------------------------------
-r1025 | nadvornik | 2008-07-26 20:17:56 +0200 (Sat, 26 Jul 2008) | 3 lines
+commit e07b06778a28e3911cd830a44bc27333d017bd15
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 18:02:09 2008 +0000
 
-allow only existing folders in destination dialog
-http://sourceforge.net/tracker/index.php?func=detail&aid=2011243&group_id=222125&atid=1054680
+    Notes cleanup and minor stylistic fixes.
 
-------------------------------------------------------------------------
-r1024 | nadvornik | 2008-07-26 12:27:41 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit 82cd089fb37bda5fc685b5cd43486e8ff26d2679
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 17:16:16 2008 +0000
 
-clean up - checks are handled elsewhere
+    Various fixes and cleanup.
 
-------------------------------------------------------------------------
-r1023 | nadvornik | 2008-07-26 11:58:25 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit 2ec1474ac5685ed1bf48a7dc35033b502dd81af1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 16:11:28 2008 +0000
 
-more checks for file operations
+    Fix up some errors.
 
-------------------------------------------------------------------------
-r1022 | nadvornik | 2008-07-26 00:04:55 +0200 (Sat, 26 Jul 2008) | 2 lines
+commit 0a594f66306b196a0d9872de6fecc4b3cc9c3511
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 15:20:13 2008 +0000
 
-improved error reporting
+    Fix up unvalid xhtml.
 
-------------------------------------------------------------------------
-r1021 | zas_ | 2008-07-25 08:35:35 +0200 (Fri, 25 Jul 2008) | 2 lines
+commit 12fe48da5151ce1ef688f03ba44cde89c9eca910
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 14:56:11 2008 +0000
 
-Minor tidy up and optimization.
+    Fix up a broken link.
 
-------------------------------------------------------------------------
-r1020 | zas_ | 2008-07-24 22:24:04 +0200 (Thu, 24 Jul 2008) | 6 lines
+commit f7216dd164399e1d34e22e5210544e2db6a84746
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 14:10:39 2008 +0000
 
-Set GIO channels to binary encoding.
-This is needed since messages from commands may not be UTF8-encoded
-and g_io_channel_read_chars() may incorrectly interpret some characters.
-In practice it was truncating some ISO-8859-1 messages containing some
-french characters. This fixes it.
+    Beautify the manual.
 
-------------------------------------------------------------------------
-r1019 | nadvornik | 2008-07-24 22:03:57 +0200 (Thu, 24 Jul 2008) | 3 lines
+commit b8742eb7f9aaafdb91ede39c8e6ebdb86b4959c3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 13:00:29 2008 +0000
 
-separated debugging log and debug CFLAGS
-enable debugging log support by default
+    Reformat more pages.
 
-------------------------------------------------------------------------
-r1018 | nadvornik | 2008-07-24 00:19:16 +0200 (Thu, 24 Jul 2008) | 2 lines
+commit 7c5c88540dd54a35510d1a92a2b1512efbcc6ac5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 12:06:05 2008 +0000
 
-indicate check warnings and errors in delete and rename dialogs
+    Reformat remaining options pages.
 
-------------------------------------------------------------------------
-r1017 | nadvornik | 2008-07-23 22:53:05 +0200 (Wed, 23 Jul 2008) | 3 lines
+commit 2b02d7edc774a42f6b19cec9ba3da91416a73d65
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Nov 10 10:26:51 2008 +0000
 
-removed file_data_add_change_info
-reduced code redundancy - patch by Laurent, slightly modified
+    Reformatting: notes, advanced options page and more.
 
-------------------------------------------------------------------------
-r1016 | zas_ | 2008-07-23 19:38:04 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit 2f3f12a07cc0a9f8e7b6feb83824374df09711c0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 21:53:33 2008 +0000
 
-Minor tidy up.
+    Reformatting.
 
-------------------------------------------------------------------------
-r1015 | zas_ | 2008-07-23 14:46:35 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit 49c72a6ce8b97276a8895d4598ca460738aef7cc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 17:17:19 2008 +0000
 
-Tidy up.
+    Reformat and cleanup.
 
-------------------------------------------------------------------------
-r1014 | zas_ | 2008-07-23 14:45:59 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit 029e68efd2ef971a29888ed7e316b22d7e0637fd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 13:37:39 2008 +0000
 
-Use g_strconcat() instead of g_strdup_printf("%s%s", ...).
+    More cleanup of tables.
 
-------------------------------------------------------------------------
-r1013 | zas_ | 2008-07-23 12:21:37 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit fcea33c191163edd21e0749e2ef9fae54d6aee95
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 13:06:16 2008 +0000
 
-Simplify parse_out_relatives().
+    Cleanup some tables.
 
-------------------------------------------------------------------------
-r1012 | zas_ | 2008-07-23 11:10:41 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit cd465d19d90ae48c5ba6353f9eacdd2c4232a7f5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 12:48:00 2008 +0000
 
-Tidy up.
+    Drop most old css classes.
 
-------------------------------------------------------------------------
-r1011 | zas_ | 2008-07-23 11:00:38 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit eb65646611a5675182a3207280eb609cead4bded
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 09:39:14 2008 +0000
 
-Fix missing newline at end of file.
+    Move dialog descriptions to definitions lists, first step.
 
-------------------------------------------------------------------------
-r1010 | zas_ | 2008-07-23 10:59:29 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit d9afdf93b04b6031b118fbd5a8c128e53adc9534
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 09:33:01 2008 +0000
 
-Fix warning: passing argument 1 of 'gtk_tree_store_set' from incompatible pointer type
+    Index cleanup.
 
-------------------------------------------------------------------------
-r1009 | nadvornik | 2008-07-23 00:05:20 +0200 (Wed, 23 Jul 2008) | 2 lines
+commit 4c65837d7b39fa0bc99179bcff5448f988750e99
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Nov 9 09:28:59 2008 +0000
 
-do not create duplicate FileData entries
+    Move menu descriptions to definitions lists.
 
-------------------------------------------------------------------------
-r1008 | nadvornik | 2008-07-22 23:46:08 +0200 (Tue, 22 Jul 2008) | 3 lines
+commit db25a0d2c859dbfa694dff305fd195de00f40f1a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 8 22:11:51 2008 +0000
 
-basic infrastructure for early error and dangerous operations checking
-it needs more work
+    Re-introduce Geeqie User Manual footer.
 
-------------------------------------------------------------------------
-r1007 | nadvornik | 2008-07-22 20:27:12 +0200 (Tue, 22 Jul 2008) | 2 lines
+commit 8d87ca532ad0db744b99bff3eb9322b889ca6cb1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 8 17:38:36 2008 +0000
 
-clean up fd->change on error
+    Simplify bottom navigation table.
 
-------------------------------------------------------------------------
-r1006 | nadvornik | 2008-07-22 20:13:41 +0200 (Tue, 22 Jul 2008) | 3 lines
+commit 8b3ed1c3eb50c9455f89dfedc33b62e96b6fdcdc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 8 17:24:02 2008 +0000
 
-remove items from file_data_planned_change_hash when the operation is
-canceled
+    Use col tags with id in top and bottom navigation tables.
 
-------------------------------------------------------------------------
-r1005 | nadvornik | 2008-07-22 19:57:22 +0200 (Tue, 22 Jul 2008) | 2 lines
+commit 0bfece3a257621edda3fefbb44ed64667bac828b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 8 11:37:17 2008 +0000
 
-fixed stop button in editor dialog
+    Add a generic spacer at the bottom of the page, remove now unused css classes.
 
-------------------------------------------------------------------------
-r1004 | nadvornik | 2008-07-22 19:40:24 +0200 (Tue, 22 Jul 2008) | 2 lines
+commit 357f067eddfbf2e74cf835d8952d43cc1f139ac7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 8 10:59:45 2008 +0000
 
-delete file_data_planned_change_hash when it is not used
+    Add two css classes navtop and navbottom and remove unused ones.
 
-------------------------------------------------------------------------
-r1003 | nadvornik | 2008-07-21 23:38:26 +0200 (Mon, 21 Jul 2008) | 3 lines
+commit 20f28b5685dd8cb5f6163e37786bf6806e46e02d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 8 10:49:18 2008 +0000
 
-fixed
-http://sourceforge.net/tracker/index.php?func=detail&aid=2019012&group_id=222125&atid=1054680
+    Add style.css to list of files to install.
 
-------------------------------------------------------------------------
-r1002 | nadvornik | 2008-07-21 22:50:24 +0200 (Mon, 21 Jul 2008) | 2 lines
+commit 2cff73427b00b0155b526b080dcd7ade516686cb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Nov 8 10:47:31 2008 +0000
 
-file_util_rename_dir should not return anything
+    Move css styles to an external stylesheet.
 
-------------------------------------------------------------------------
-r1001 | nadvornik | 2008-07-21 22:40:29 +0200 (Mon, 21 Jul 2008) | 2 lines
+commit 450ff6891d977952fa624731f8da7b8d7994305f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 6 23:49:31 2008 +0000
 
-added notification handler to view_dir
+    Remove reference to numbered section.
 
-------------------------------------------------------------------------
-r1000 | zas_ | 2008-07-21 10:31:43 +0200 (Mon, 21 Jul 2008) | 2 lines
+commit 5837dbaac197166d0cb046f3119767b44a9b9fa2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 6 23:43:46 2008 +0000
 
-French translation was updated.
+    Remove references to numbered sections.
 
-------------------------------------------------------------------------
-r999 | zas_ | 2008-07-20 17:21:06 +0200 (Sun, 20 Jul 2008) | 2 lines
+commit d2b8b50ff787b13270e54bab25489d5cbb3ebacb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 6 23:39:22 2008 +0000
 
-Update POTFILES.in.
+    Simplify the table.
 
-------------------------------------------------------------------------
-r998 | zas_ | 2008-07-20 17:16:05 +0200 (Sun, 20 Jul 2008) | 2 lines
+commit a5760993339ed221d1377724beb2485c28237945
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Nov 6 20:01:32 2008 +0000
 
-Move uri_*() functions to separate files: uri_utils.[ch]
+    Previous patch (revision 1185) for the comments-related segfault was incomplete, and as such, it broke keywords in files whose metadata had keywords but no comments.
+    
+    This patch fixes that (and still fixes the case where one searches on
+    comments and hits a file with keywords but no comments).  Lastly, I would
+    imagine that there exists a failure mode where one searches for a keyword and
+    hits a file with a comment but no keyword, and I imagine this patch should fix
+    that case as well.
+    
+    Patch by Omari Stephens (aka xsdg).
 
-------------------------------------------------------------------------
-r997 | nadvornik | 2008-07-20 17:04:40 +0200 (Sun, 20 Jul 2008) | 1 line
+commit ebf81820c51edd5ab948021d75e79f9d933937fe
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 4 17:26:46 2008 +0000
 
-periodic testing of changed files can be now disabled
-------------------------------------------------------------------------
-r996 | zas_ | 2008-07-20 16:56:32 +0200 (Sun, 20 Jul 2008) | 3 lines
+    Fix a segfault occuring when searching for comments in a directory where at least one photo doesn't have a comment. The fix modifies comment_read() function to return FALSE when a comment doesn't exist. Patch by Omari Stephens.
 
-Move history_list_*() functions to separate files:
-history_list.c and history_list.h.
+commit 6a2475e57fdb9ee5e405acee23261b83f5c31230
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Nov 4 17:11:53 2008 +0000
 
-------------------------------------------------------------------------
-r995 | nadvornik | 2008-07-20 16:52:00 +0200 (Sun, 20 Jul 2008) | 2 lines
+    Do a gtk_init before the parsing of command line arguments to allow gtk specific options. (See http://library.gnome.org/devel/gtk/2.14/gtk-running.html). Patch by Klaus Ethgen.
 
-implemented "create directory" command
+commit 54ae8be35d9e69aa570cba8baf9f2e60ef018ba8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Oct 27 13:31:39 2008 +0000
 
-------------------------------------------------------------------------
-r994 | nadvornik | 2008-07-20 15:59:55 +0200 (Sun, 20 Jul 2008) | 2 lines
+    Do not install doc/Makefile*. Reported and fixed by Krzysztof Kotlenga.
 
-fixed file copy/move dialog
+commit 7771d3caa664a6563b229ee2b322e0d0fd4e4036
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Oct 26 19:27:20 2008 +0000
 
-------------------------------------------------------------------------
-r993 | nadvornik | 2008-07-20 15:19:22 +0200 (Sun, 20 Jul 2008) | 5 lines
+    Use h2/h3 tags where appropriate.
 
-fixed the case when a renamed file is detected by directory scanning
-before the external rename commands exits. We have to update the
-FileData structure immediately, othervise we would get duplicate
-entries.
+commit 15759e0f4884b7b9ec62c0d388707244c7ca0b58
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Sun Oct 26 13:43:10 2008 +0000
 
-------------------------------------------------------------------------
-r992 | zas_ | 2008-07-20 14:20:12 +0200 (Sun, 20 Jul 2008) | 2 lines
+    Fixed doc/Makefile.am according to renamed doc files.
 
-Optimize history_list_add_to_key() a bit.
+commit eab8813037f2cedc25857bc889b55502b1666455
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 14:42:52 2008 +0000
 
-------------------------------------------------------------------------
-r991 | nadvornik | 2008-07-20 13:29:12 +0200 (Sun, 20 Jul 2008) | 2 lines
+    Keyboard table cleanup attempt. Need more work.
 
-fixed previous checkin
+commit fcae84ab900d0203d2339e22888956a9c7565fe8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 13:14:00 2008 +0000
 
-------------------------------------------------------------------------
-r990 | nadvornik | 2008-07-20 13:22:19 +0200 (Sun, 20 Jul 2008) | 2 lines
+    Move menus to unordered lists - step 2.
 
-implemented directory rename and delete operations
+commit f5596799545b5e6c482ef267d892b674f544e7fc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 11:02:09 2008 +0000
 
-------------------------------------------------------------------------
-r989 | zas_ | 2008-07-20 09:52:16 +0200 (Sun, 20 Jul 2008) | 2 lines
+    Move menus to unordered lists - step 1.
 
-Move out test outside the loop.
+commit 1f80d96fb573f9597105e5bd3f8d4062d90632f7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 08:49:07 2008 +0000
 
-------------------------------------------------------------------------
-r988 | zas_ | 2008-07-19 15:57:03 +0200 (Sat, 19 Jul 2008) | 2 lines
+    Align Previous to the left, drop useless col tags.
 
-Tidy up.
+commit ad8d4b695280105b9d60e155bbebddc0437c22fe
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 08:14:34 2008 +0000
 
-------------------------------------------------------------------------
-r987 | zas_ | 2008-07-19 14:36:46 +0200 (Sat, 19 Jul 2008) | 2 lines
+    Drop meta CREATED and CHANGED since they will never be updated and svn takes care of versions.
 
-Fix missing newline at end of file.
+commit fdde32bc5523fba5186ffa2e53fdf931df96aaeb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 08:10:11 2008 +0000
 
-------------------------------------------------------------------------
-r986 | nadvornik | 2008-07-19 11:06:24 +0200 (Sat, 19 Jul 2008) | 2 lines
+    Fix page titles.
 
-increase reference count before sending notification in file_data_new
+commit fef02967c23d615d5ce61eb4718cb7e5ac369b51
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 08:07:57 2008 +0000
 
-------------------------------------------------------------------------
-r985 | nadvornik | 2008-07-18 23:20:49 +0200 (Fri, 18 Jul 2008) | 2 lines
+    Drop chapters numbers from h1 title, and reformat top title a bit.
 
-fixed test for changed files in cache
+commit 0e44cb8c2afa66bc481ce2aff26e00995e9a8626
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Oct 25 07:47:47 2008 +0000
 
-------------------------------------------------------------------------
-r984 | zas_ | 2008-07-18 11:55:15 +0200 (Fri, 18 Jul 2008) | 2 lines
+    Get rid off of chapters numbers in html documentation filenames. It will ease re-ordering.
 
-Introduce image_loader_set_done_func().
+commit 2ad4eda59805bb107467b55ebd9b4128c247324b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Oct 23 22:45:44 2008 +0000
 
-------------------------------------------------------------------------
-r983 | zas_ | 2008-07-18 00:36:58 +0200 (Fri, 18 Jul 2008) | 2 lines
+    Update legal notice and copyright to mention The Geeqie Team.
 
-Reduce code redundancy by moving common code to new menu_choice_get_match_type().
+commit 89ae704a2393f7a89d56b9fc9bd233004c046219
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Oct 23 19:06:23 2008 +0000
 
-------------------------------------------------------------------------
-r982 | nadvornik | 2008-07-17 23:51:21 +0200 (Thu, 17 Jul 2008) | 2 lines
+    With the help of tidy and sed, move html files to xhtml+css. Css classes were prefixed to ease future changes (like a common css file).
 
-reload changed images
+commit d92d4a31ba855a0a9e282ea398fab5667896d445
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Oct 23 18:06:28 2008 +0000
 
-------------------------------------------------------------------------
-r981 | zas_ | 2008-07-15 17:37:14 +0200 (Tue, 15 Jul 2008) | 2 lines
+    Change occurences of GQview and gqview to Geeqie and geeqie. Rename gqview_faq.html to faq.html
 
-Move code from image_osd_update_cb() to separate functions.
+commit f21cc1844a4d3cc73a9852aee48f7087a35b773b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Oct 22 19:56:29 2008 +0000
 
-------------------------------------------------------------------------
-r980 | zas_ | 2008-07-15 16:32:00 +0200 (Tue, 15 Jul 2008) | 2 lines
+    Let Create thumbnails start in current directory (fallback to home directory if not available) as requested by Marcin Zajaczkowski (feature request 2166691).
 
-Tidy up and code redundancy reduction.
+commit e6eba8a87fe7c07c39dac82d07a298c65d31041a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Oct 20 21:00:18 2008 +0000
 
-------------------------------------------------------------------------
-r979 | zas_ | 2008-07-15 14:52:02 +0200 (Tue, 15 Jul 2008) | 4 lines
+    Fix a cut and paste error when implementing the comment search (Klaus
+    Ethgen)
 
-Use a specific enum for image.zoom_mode values (ZoomMode) and
-simplify calls to image_zoom_get_default(), dropping last parameter
-which was always options->image.zoom_mode.
+commit a06197472f69c64332a5e67e191e95654a8ed82d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Oct 20 17:13:32 2008 +0000
 
-------------------------------------------------------------------------
-r978 | zas_ | 2008-07-13 16:50:07 +0200 (Sun, 13 Jul 2008) | 9 lines
+    fixed failed assertion in exif_free
 
-Improve ways to specify html browser (used for help, see bug 2015099).
-Two new rc file options were added:
-- helpers.html_browser.command_name
-- helpers.html_browser.command_line
-These are checked first before trying common browser locations.
-If these do not lead to a valid browser, then geeqie will
-search for geeqie_html_browser script in the path, then
-it will try various common browsers.
+commit 652c3a9fcca7b81091ac80e539df441a4cf6df22
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 18 20:17:55 2008 +0000
 
-------------------------------------------------------------------------
-r977 | zas_ | 2008-07-13 15:51:23 +0200 (Sun, 13 Jul 2008) | 2 lines
+    create xmp sidecar when needed
 
-Apply debian-specific patch to launch help browser (bug 2015099).
+commit fe16e7bfad961a8ebcc27b50a5dac4aef1b99396
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 18 19:20:27 2008 +0000
 
-------------------------------------------------------------------------
-r976 | zas_ | 2008-07-13 14:36:18 +0200 (Sun, 13 Jul 2008) | 3 lines
+    simple synchronization XMP <-> Exif, IPTC
 
-Fix a segfault occuring when opening some collection files.
-Skip all lines not starting with a # when only geometry is required.
+commit 003a4a917981dcc3d7004fe9896518ee86016198
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 18 18:22:57 2008 +0000
 
-------------------------------------------------------------------------
-r975 | zas_ | 2008-07-05 12:21:09 +0200 (Sat, 05 Jul 2008) | 2 lines
+    infrastructure for preprocessing of metadata
 
-Prevent segfault in certain conditions when displaying debug message.
+commit 40e5b63b8b32a28f4ab9877d48ae5fe5fddd0acf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 18 09:07:52 2008 +0000
 
-------------------------------------------------------------------------
-r974 | zas_ | 2008-07-05 00:49:04 +0200 (Sat, 05 Jul 2008) | 2 lines
+    fixed bar_exif separator
 
-French translation was updated.
+commit 666154c6c7576bff4647b0a9dfff08665026cb42
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 18 08:40:32 2008 +0000
 
-------------------------------------------------------------------------
-r973 | zas_ | 2008-07-04 22:32:48 +0200 (Fri, 04 Jul 2008) | 3 lines
+    reordered advanced exif columns
 
-Optimize a bit when connected zoom and scrolling are unset,
-just move the test outside loops.
+commit 2741df92d520da9047e0ca966e2f6fd095cb75c3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 18 08:31:25 2008 +0000
 
-------------------------------------------------------------------------
-r972 | zas_ | 2008-07-04 19:21:07 +0200 (Fri, 04 Jul 2008) | 2 lines
+    no need to validate description, it is in utf8
 
-layout_color_button_press_cb(): tidy up, drop useless memory allocations, improve i18n.
+commit b8cfa7eea753ca24de28db8ee08c1a3c0fae32ad
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Oct 17 22:00:07 2008 +0000
 
-------------------------------------------------------------------------
-r971 | nadvornik | 2008-07-03 22:16:15 +0200 (Thu, 03 Jul 2008) | 2 lines
+    improved custom exif look:
+    - use toggle instead of remove button
+    - display description instead of property key
 
-refresh thumbnails on file change
+commit 0109fd0fea063d111a314fee97da5fc3adf13cdc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Oct 14 21:24:34 2008 +0000
 
-------------------------------------------------------------------------
-r970 | nadvornik | 2008-07-03 21:38:19 +0200 (Thu, 03 Jul 2008) | 2 lines
+    follow Exiv2 SVN changes
 
-set fallback thumbnail pixbuf only if the loading really fails
+commit 100552d7587b35759b1492a3ba51df58565b96f5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Oct 12 08:49:45 2008 +0000
 
-------------------------------------------------------------------------
-r969 | zas_ | 2008-07-03 20:16:39 +0200 (Thu, 03 Jul 2008) | 4 lines
+    French translation was updated.
 
-Fix missing references for the current directory in pan folder stuff.
-It was causing an fd magick assertion failure.
-Bug reported by Omari Stephens.
+commit 2ed614f0a404a3f6311976ea15eb7839baaf51f5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Oct 12 08:43:14 2008 +0000
 
-------------------------------------------------------------------------
-r968 | zas_ | 2008-07-03 10:33:10 +0200 (Thu, 03 Jul 2008) | 4 lines
+    Add a button for each advanced entry in Properties Exif Panel that allow to remove it from display. It fixes bug 1962611.
 
-Increase debugging info in file_data_ref() and file_data_unref().
-When compiled with DEBUG defined, file and line of the caller is displayed
-in debug log.
+commit 801d2c19571cfc858f1348a05d17f22fb39d1679
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Oct 12 08:36:53 2008 +0000
 
-------------------------------------------------------------------------
-r967 | zas_ | 2008-07-02 10:38:47 +0200 (Wed, 02 Jul 2008) | 5 lines
+    Better handling of accels map file writing errors.
+    Secure save is also used for those now, at the expense of
+    a bit of duplication of gtk functions.
+    It should fix bug 2146917 (debian BTS #501131), reported by
+    Stanislav Maslovski.
 
-Optimize file_cache_get() by only moving element to front if needed
-(most of the time there is no need).
-Reduce code redundancy in file_cache_put() by calling file_cache_get().
-Enhance debugging code.
+commit d198cfafce20a7866d0a3dd80b1592ca59f5dcbc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 11 20:19:48 2008 +0000
 
-------------------------------------------------------------------------
-r966 | nadvornik | 2008-06-30 23:08:28 +0200 (Mon, 30 Jun 2008) | 2 lines
+    added option to use exif thumbnails
+    - it requires exiv2 0.18 or the current svn
+    - it is disabled by default because the exif thumbnails
+      may be outdated if the image was edited
 
-fixed division by zero in pixbuf_renderer_get_scroll_center
+commit dfb0fdc2f0b5cbc0207e360a3bcce9f6bd0b5c75
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Oct 7 19:34:11 2008 +0000
 
-------------------------------------------------------------------------
-r965 | zas_ | 2008-06-29 17:51:54 +0200 (Sun, 29 Jun 2008) | 4 lines
+    French translation was updated.
 
-Merge thumb_loader_save_to_cache() and thumb_loader_mark_failure()
-into thumb_loader_save_thumbnail().
-Most of the code was redundant.
+commit bce60ede0854a7a65ad009bd51b16549ba58bc1e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Oct 7 19:29:13 2008 +0000
 
-------------------------------------------------------------------------
-r964 | zas_ | 2008-06-29 12:11:43 +0200 (Sun, 29 Jun 2008) | 3 lines
+    Fix up few signed vs unsigned warnings: exif_item_get_rational() last parameter is now of guint type.
 
-Make better matching between options types in options.h and the rest of the code.
-Most changes are from gint to gboolean pseudo type and between gint / guint.
+commit eee2c88df65f6cc0112be1098cdcf79f0560e947
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Oct 7 18:37:32 2008 +0000
 
-------------------------------------------------------------------------
-r963 | zas_ | 2008-06-28 10:01:36 +0200 (Sat, 28 Jun 2008) | 2 lines
+    Implement the search for image comment - patch by Klaus Ethgen
 
-layout_image_drag_cb(): optimize when connected scrolling is unset.
+commit d8c1c93fea463eb0a309de7509676624774c0ad3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Oct 7 18:22:58 2008 +0000
 
-------------------------------------------------------------------------
-r962 | zas_ | 2008-06-28 09:43:37 +0200 (Sat, 28 Jun 2008) | 2 lines
+    Fixed degree symbol encoding
 
-Reduce number of parameters (mostly unused), just pass the event pointer.
+commit 0cd8f42464c6e1e152f1bb9e79b1144f4529b4d1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Oct 7 18:20:22 2008 +0000
 
-------------------------------------------------------------------------
-r961 | zas_ | 2008-06-28 02:44:31 +0200 (Sat, 28 Jun 2008) | 3 lines
+    Adding a vim modeline to all files - patch by Klaus Ethgen
 
-Fix warning:
-thumb.c:31: warning : 'normalize_thumb' declared 'static' but never defined
+commit be6e4ea715f504545a7d0edc5767b0b82f71477f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Oct 5 18:25:44 2008 +0000
 
-------------------------------------------------------------------------
-r960 | zas_ | 2008-06-28 00:57:48 +0200 (Sat, 28 Jun 2008) | 3 lines
+    fixed confirm_delete option
 
-image_osd_mkinfo(): pipe replacement by " - " separator was fixed to work correctly with
-empty first element.
+commit 69282a3890ec9264e5471249ad51c8fdb0ed7418
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Oct 4 20:28:31 2008 +0000
 
-------------------------------------------------------------------------
-r959 | nadvornik | 2008-06-27 23:35:21 +0200 (Fri, 27 Jun 2008) | 3 lines
+    fixed charset of exiv2 strings in non-utf8 locales
 
-do not read keywords and comment between exif_read_fd and exif_free_fd
-calls (fd->exif does not have reference counting)
+commit 7c50f768d91be9ff48b5cb64de603df00393c52f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Oct 1 20:57:56 2008 +0000
 
-------------------------------------------------------------------------
-r958 | nadvornik | 2008-06-27 23:09:15 +0200 (Fri, 27 Jun 2008) | 3 lines
+    Add support for GPSInfo - patch by Klaus Ethgen
 
-added pixbuf_fallback function
-fixed thumb loader for non-image files
+commit 599380cc2099521bbf7c879666140943e1c684b6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 29 21:17:19 2008 +0000
 
-------------------------------------------------------------------------
-r957 | nadvornik | 2008-06-27 20:43:05 +0200 (Fri, 27 Jun 2008) | 2 lines
+    The comment section in the meta file is the last section. However it do
+    not accept comment lines starting with a '['. This patch will fix that.
+    - patch by Klaus Ethgen
 
-fixed crash in entering fullscreen during loading
+commit 1d1f495c4b3881f540059444ff5aa20eb9bda175
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 29 21:09:48 2008 +0000
 
-------------------------------------------------------------------------
-r956 | zas_ | 2008-06-27 12:00:55 +0200 (Fri, 27 Jun 2008) | 2 lines
+    fixes executable right of images
 
-osd_template_insert(): optimize and simplify using flags.
+commit 9ab09626f588694ad7ada2e522b74e205fd96795
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 29 21:01:30 2008 +0000
 
-------------------------------------------------------------------------
-r955 | zas_ | 2008-06-27 10:05:51 +0200 (Fri, 27 Jun 2008) | 3 lines
+    enlarge the dupe window - patch by Klaus Ethgen
 
-image_osd_info_render(): ensure values are always escaped before using pango_layout_set_markup().
-Two helper functions were added: osd_template_insert() and osd_template_insert_and_free().
+commit cf8398c63f204d0dcf375577446c732c66122f6b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Sep 27 18:48:32 2008 +0000
 
-------------------------------------------------------------------------
-r954 | zas_ | 2008-06-27 01:29:08 +0200 (Fri, 27 Jun 2008) | 2 lines
+    updated preview loader to work with current svn version of libexiv2
 
-image_osd_info_render(): code cleanup and simplification, drop some useless memory allocations.
+commit d4bc6c7e66a32bb0cc5a3e889ce8bef9b1374908
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 10 20:37:30 2008 +0000
 
-------------------------------------------------------------------------
-r953 | zas_ | 2008-06-26 17:59:20 +0200 (Thu, 26 Jun 2008) | 2 lines
+    use SHIFT for connected scroll and zoom
+    
+    SHIFT + keys or mouse: affects all split windows
+    keys or mouse: affects only active window
+    
+    CONTROL + mouse: moves fast (originally it was SHIFT + mouse)
 
-Use flags for pr_zoom_*() functions.
+commit f7a5afb6959672b77b973544b217867329a30c5f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Sep 9 19:46:44 2008 +0000
 
-------------------------------------------------------------------------
-r952 | zas_ | 2008-06-26 16:43:52 +0200 (Thu, 26 Jun 2008) | 2 lines
+    reverted buggy part of rev. 1138 - it made the filelist jump
+    unexpectedly
 
-Use stricter types for image options.
+commit a7c9810b152dd9bb01d18e7d048f405d8f11f0ac
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 8 19:57:51 2008 +0000
 
-------------------------------------------------------------------------
-r951 | zas_ | 2008-06-26 14:23:48 +0200 (Thu, 26 Jun 2008) | 2 lines
+    added possibility to redraw only the parts of image that are already
+    loaded
 
-Use flags instead of int parameters for pixbuf_renderer_overlay_add().
+commit 383624b87b5f9ea402e0fe4479b955f591025f73
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Sep 8 15:53:01 2008 +0000
 
-------------------------------------------------------------------------
-r950 | zas_ | 2008-06-26 13:48:40 +0200 (Thu, 26 Jun 2008) | 3 lines
+    Fix a compiler warning regarding argument type.
 
-Only define ExifOrientationType if GQ_BUILD is not defined since
-it is already defined in exif.h.
+commit a53fb65f7e552f4a07760fd72dfd0a6caa5753ff
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Sun Sep 7 23:01:30 2008 +0000
 
-------------------------------------------------------------------------
-r949 | zas_ | 2008-06-25 22:53:52 +0200 (Wed, 25 Jun 2008) | 2 lines
+    Replaced gtk depreceated code.
 
-Tidy up.
+commit a5aea8fd342ca8d4834464428cab25d373925409
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Sep 7 19:42:19 2008 +0000
 
-------------------------------------------------------------------------
-r948 | zas_ | 2008-06-25 22:22:02 +0200 (Wed, 25 Jun 2008) | 2 lines
+    Shorten config_window_apply() a bit, reduce code redunancy.
 
-French translation was updated.
+commit 587b4b8d1136e5f043da5566c996cd7a6e288387
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Sep 4 22:35:33 2008 +0000
 
-------------------------------------------------------------------------
-r947 | nadvornik | 2008-06-22 22:07:32 +0200 (Sun, 22 Jun 2008) | 2 lines
+    Update translations stats.
 
-optimized marks drawing
+commit aff258e59eca1aa6a8bd8e5401fccbfceaf4954f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Sep 4 22:29:32 2008 +0000
 
-------------------------------------------------------------------------
-r946 | nadvornik | 2008-06-22 22:01:20 +0200 (Sun, 22 Jun 2008) | 2 lines
+    French translation was updated.
 
-show marks in iconview
+commit 9b64bd058039a1d7d926670d90bffadeb0db3bb4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Sep 4 22:04:32 2008 +0000
 
-------------------------------------------------------------------------
-r945 | nadvornik | 2008-06-22 12:01:26 +0200 (Sun, 22 Jun 2008) | 2 lines
+    Allow all Preferences pages to scroll vertically. Reduce code redundancy.
 
-show sidecars in icon view
+commit aa81bf7cdffe666d7e5b7098c564d50e46401312
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Sep 4 21:38:28 2008 +0000
 
-------------------------------------------------------------------------
-r944 | nadvornik | 2008-06-22 11:40:57 +0200 (Sun, 22 Jun 2008) | 2 lines
+    Allow to change image.scroll_reset_method in Preferences > Image.
 
-fixed in-place renaming
+commit baedcd2f82ac6f4b819d9919e280a54c7edaa6b7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Sep 4 21:19:09 2008 +0000
 
-------------------------------------------------------------------------
-r943 | nadvornik | 2008-06-22 11:19:42 +0200 (Sun, 22 Jun 2008) | 2 lines
+    fixed various problems with preserving viewport on image change,
+    options->image.scroll_reset_method should work again (it needs to be
+    added to the preferences dialog)
 
-added possibility to disable grouping of selected files
+commit 9050223df5347b7d2f1ed1d23669e05f19405f77
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 3 21:54:49 2008 +0000
 
-------------------------------------------------------------------------
-r942 | nadvornik | 2008-06-22 00:01:45 +0200 (Sun, 22 Jun 2008) | 2 lines
+    load thumbnails with lower priority
+    TODO: maybe implement an exception for visible thumbnails
 
-cache size made configurable
+commit e1a5a486095b6987c45f9612c97816a6b01f1de1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Sep 3 21:13:02 2008 +0000
 
-------------------------------------------------------------------------
-r941 | nadvornik | 2008-06-21 21:26:01 +0200 (Sat, 21 Jun 2008) | 2 lines
+    Improve debug messages.
 
-measure pixbuf cache size in bytes
+commit 6f89fefc8a298f05304f3f7cab37fc76df97c2b8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 3 20:43:10 2008 +0000
 
-------------------------------------------------------------------------
-r940 | nadvornik | 2008-06-21 18:00:13 +0200 (Sat, 21 Jun 2008) | 2 lines
+    adjusted default options
 
-simple cache for loaded pixbufs
+commit c518bcef3c44e37ec7cdc935961607db5113f8b5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 3 20:29:32 2008 +0000
 
-------------------------------------------------------------------------
-r939 | nadvornik | 2008-06-21 13:05:55 +0200 (Sat, 21 Jun 2008) | 2 lines
+    adjusted redraw priority relative to icon drawing
 
-renamed fd->pixbuf to fd->thumb_pixbuf
+commit 48519673cc4fea79e657453ed4785457a8e59ea2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 3 19:58:21 2008 +0000
 
-------------------------------------------------------------------------
-r938 | nadvornik | 2008-06-19 00:26:52 +0200 (Thu, 19 Jun 2008) | 3 lines
+    dropped IMAGE_THROTTLE_LARGER_IMAGES code
 
-implemented generic FileData cache
-use it for caching decoded exif data
+commit 47a0c37d34499a1f71085093447789949350e063
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 3 19:52:11 2008 +0000
 
-------------------------------------------------------------------------
-r937 | nadvornik | 2008-06-17 22:25:05 +0200 (Tue, 17 Jun 2008) | 2 lines
+    fixed handling of broken images
 
-more robust thumbs progress bar
+commit 64aea117f708ea87c87ce2706d4c6b1bafa21541
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Sep 1 19:18:32 2008 +0000
 
-------------------------------------------------------------------------
-r936 | nadvornik | 2008-06-17 21:56:21 +0200 (Tue, 17 Jun 2008) | 2 lines
+    improved pixbuf draw priority control
 
-do not allocate new buffer for thumbnails with correct orientation
+commit c6db02fc9beb44c3f4921cb362c397ff0a54ba26
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Sep 1 17:29:07 2008 +0000
 
-------------------------------------------------------------------------
-r935 | nadvornik | 2008-06-16 21:07:02 +0200 (Mon, 16 Jun 2008) | 2 lines
+    Use a constant for minimal window size. Set it to 32 for all dialogs.
 
-fixed memory leak
+commit bf183b8e89e1244c13f8812bd51a134dd82e66d0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Sep 1 17:22:19 2008 +0000
 
-------------------------------------------------------------------------
-r934 | nadvornik | 2008-06-16 20:37:35 +0200 (Mon, 16 Jun 2008) | 2 lines
+    Remove redundant debug.h inclusion.
 
-another try to free layout at exit
+commit 14596dddc9e279d6444b473378668618b0200842
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 31 21:19:00 2008 +0000
 
-------------------------------------------------------------------------
-r933 | nadvornik | 2008-06-15 23:52:15 +0200 (Sun, 15 Jun 2008) | 2 lines
+    fixed read ahead callback
 
-rotate thumbnails by exif
+commit 0aef642959d09a0a417e3a1bd9838290673da331
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 31 21:02:09 2008 +0000
 
-------------------------------------------------------------------------
-r932 | nadvornik | 2008-06-15 22:09:15 +0200 (Sun, 15 Jun 2008) | 2 lines
+    fixed error handling in image loader
 
-use FileData in thumb_loader
+commit b10a2e1226a762c6f5e5a76255469c9a58312937
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 31 18:53:11 2008 +0000
 
-------------------------------------------------------------------------
-r931 | nadvornik | 2008-06-14 23:49:48 +0200 (Sat, 14 Jun 2008) | 2 lines
+    fixed possible endless loop
 
-use GtkSizeGroup to control initial size of split images
+commit 131dc85e54bb154ece413c99e10d0bb07aced996
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 31 12:29:49 2008 +0000
 
-------------------------------------------------------------------------
-r930 | nadvornik | 2008-06-14 20:41:30 +0200 (Sat, 14 Jun 2008) | 2 lines
+    Add a Save button to Preferences dialog, which allow to save options to file without quitting the application.
 
-preserve image center on refresh
+commit 7725546b83707d675c466dd1b9eb96380ad2f067
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 31 11:27:24 2008 +0000
 
-------------------------------------------------------------------------
-r929 | nadvornik | 2008-06-14 20:33:40 +0200 (Sat, 14 Jun 2008) | 4 lines
+    Move quoted_value() and escquote_value() to misc.[ch].
 
-use multiline description in vflist with large thumbnails
-always display marks in the first column
-show expander in "name" column
+commit ea455387a49dc8457b2489fefdd8f7cd5a178e0b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 31 10:51:41 2008 +0000
 
-------------------------------------------------------------------------
-r928 | nadvornik | 2008-06-14 19:32:27 +0200 (Sat, 14 Jun 2008) | 2 lines
+    Move miscellaneous functions to their own files (new misc.[ch]).
 
-join name and sidecars to one string
+commit 2b9bf5f494fa20b8531a3bbbe6140c15985ec13a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 31 10:08:48 2008 +0000
 
-------------------------------------------------------------------------
-r927 | nadvornik | 2008-06-14 19:14:28 +0200 (Sat, 14 Jun 2008) | 2 lines
+    use GThreadPool
 
-optimized vflist_setup_iter_recursive
+commit 5cf88e588d2c061c470aa524d4a89561b5182c1b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 31 09:20:29 2008 +0000
 
-------------------------------------------------------------------------
-r926 | nadvornik | 2008-06-14 14:43:39 +0200 (Sat, 14 Jun 2008) | 2 lines
+    improved thread support in image loader
 
-iconlist_refresh optimization
+commit 9212340ececba2346d599fa8ffaa6f7ddafcc558
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 31 09:13:42 2008 +0000
 
-------------------------------------------------------------------------
-r925 | nadvornik | 2008-06-14 14:30:44 +0200 (Sat, 14 Jun 2008) | 2 lines
+    Move save/load_options() to options.[ch].
 
-fixed iconview update after deletion of selected image
+commit 77bc802fa727e39b259cef5431bb897618f888d3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 31 08:59:39 2008 +0000
 
-------------------------------------------------------------------------
-r924 | zas_ | 2008-06-14 08:52:52 +0200 (Sat, 14 Jun 2008) | 2 lines
+    Move sync_options_with_current_state() call to save_options().
 
-Silent unused variable warning.
+commit 0db9254e25cad32d5e954f04696e6e5fe74554e3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 31 08:41:42 2008 +0000
 
-------------------------------------------------------------------------
-r923 | nadvornik | 2008-06-13 23:32:58 +0200 (Fri, 13 Jun 2008) | 2 lines
+    Move some code to new functions, to simplify main().
 
-optimized vflist_setup_iter
+commit f01ec2c48c555c486ad40ced8341c57dcc4d5e2d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 31 08:13:36 2008 +0000
 
-------------------------------------------------------------------------
-r922 | zas_ | 2008-06-13 15:33:11 +0200 (Fri, 13 Jun 2008) | 2 lines
+    Fix two minor compilation warnings.
 
-French translation was updated.
+commit a710f33e4b885e22e3744beb9af9b9285d73640c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 30 20:15:47 2008 +0000
 
-------------------------------------------------------------------------
-r921 | zas_ | 2008-06-13 14:27:41 +0200 (Fri, 13 Jun 2008) | 5 lines
+    run image loader in separate thread
+    this feature is disabled by default for now, it must be enabled by
+    configure --enable-threads
 
-Revert patches 759 and 760.
-759 patch broke adding selection of files through sort manager
-to an unopened collection.
+commit 6a73bcf507697b77cebc69761bb2db8801210641
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 30 13:04:06 2008 +0000
 
+    prepared image loader code for threads
 
-------------------------------------------------------------------------
-r920 | zas_ | 2008-06-13 13:51:23 +0200 (Fri, 13 Jun 2008) | 2 lines
+commit 01bbfff007b6e540e22a1966971a9d00a41a66ad
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Aug 30 10:39:35 2008 +0000
 
-Display total size of files in collection window, for the list and for the selection.
+    Allow to override documentation paths through options:
+    - documentation.helpdir
+    - documentation.htmldir
+    Default values are set at configure time.
 
-------------------------------------------------------------------------
-r919 | zas_ | 2008-06-13 13:11:57 +0200 (Fri, 13 Jun 2008) | 4 lines
+commit ba17ee7539c814d49d3b57158fc91000a4fae2e1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 29 20:53:53 2008 +0000
 
-Optionnally display directory's date in list view.
-It can be set through Preferences > Advanced > Behavior and
-is saved to rc file as layout.show_directory_date option.
+    converted image loader to a GObject and use signals for notification
 
-------------------------------------------------------------------------
-r918 | zas_ | 2008-06-13 00:43:32 +0200 (Fri, 13 Jun 2008) | 7 lines
+commit 6f13139c2ac0a4e11e21e041ca4f5c4f1327dfac
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 29 12:35:13 2008 +0000
 
-load_options_from():
-- do not copy option name and value anywhere, only copy value_all to a separate buffer
-- allow more relaxed syntax on read, so we can correctly read option name and value
-  even if user made some errors like replacing ':' by '=' or inserting a space before ':'.
-- minor aesthetical changes
+    do not access image_loader directly
 
+commit dc649dfbb31df6e75c7283405ba99084ea328206
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 29 09:59:20 2008 +0000
 
-------------------------------------------------------------------------
-r917 | zas_ | 2008-06-12 23:21:32 +0200 (Thu, 12 Jun 2008) | 2 lines
+    added new raw preview interface for legacy exif
 
-Add a comment about relative positions of image overlay in the rc file. 
+commit 6654b671684992272856344aa34b59301c35e023
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Aug 29 09:38:10 2008 +0000
 
-------------------------------------------------------------------------
-r916 | zas_ | 2008-06-12 22:33:51 +0200 (Thu, 12 Jun 2008) | 6 lines
+    fixed thumbnail loader for the new raw preview interface
 
-Allow to set image overlay info position through options:
-- image_overlay.common.x
-- image_overlay.common.y
+commit bea9cd293c96a86d196b6fa2af689e41fbfa65a2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Aug 28 22:26:09 2008 +0000
 
-For now, there are only editable through rc file.
+    use mmaped files image loader
+    implemented new interface for extracting raw previews
+    experiments with previews support in SVN version of Exiv2
 
-------------------------------------------------------------------------
-r915 | zas_ | 2008-06-12 22:17:22 +0200 (Thu, 12 Jun 2008) | 6 lines
+commit 7fa8df7737575cc63b627b4337131122faffe496
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Thu Aug 28 12:51:02 2008 +0000
 
-Move some functions from image.[ch] to image-overlay.c and make them static:
-- image_overlay_add()
-- image_overlay_set()
-- image_overlay_remove()
-- image_overlay_get() (unused)
+    Removed converting fd->name to utf8 from file_data_set_collate_keys(), because fd->name is utf8.
 
-------------------------------------------------------------------------
-r914 | nadvornik | 2008-06-12 20:30:33 +0200 (Thu, 12 Jun 2008) | 2 lines
+commit 4908ddd714be7cab8e1cf290fec62d7288692856
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Aug 28 10:50:02 2008 +0000
 
-reverted changes in layout_close made in rev. 890 and 901  
+    Silent warnings about unused functions when lcms is not used.
 
-------------------------------------------------------------------------
-r913 | nadvornik | 2008-06-10 21:25:21 +0200 (Tue, 10 Jun 2008) | 2 lines
+commit 35776f2dee4439e5ece5ec4746acaffa36fee793
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Aug 27 17:02:14 2008 +0000
 
-fixed vdtree_sort_cb
+    Comment out unused functions.
 
-------------------------------------------------------------------------
-r912 | nadvornik | 2008-06-10 20:39:19 +0200 (Tue, 10 Jun 2008) | 2 lines
+commit dd4ea407ecdeea13e0117b242aa4ceac71239b9d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Aug 27 16:42:59 2008 +0000
 
-fixed segfault in vd_rename_cb
+    Silent a compiler warning.
 
-------------------------------------------------------------------------
-r911 | nadvornik | 2008-06-10 20:19:17 +0200 (Tue, 10 Jun 2008) | 2 lines
+commit 109ecd8c2e8beda448113dcaf36527b889b5f8ab
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Aug 27 16:40:21 2008 +0000
 
-dropped vficon_sync, use vficon_refresh everywhere
+    const gpointer -> gconstpointer.
 
-------------------------------------------------------------------------
-r910 | zas_ | 2008-06-10 13:55:18 +0200 (Tue, 10 Jun 2008) | 2 lines
+commit 3ec7e5728fa2a17086d3b3144b46318e7a1f761d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Aug 26 22:37:18 2008 +0000
 
-collection_from_dnd_data(): simplify and optimize.
+    Use gpointer instead of void *.
 
-------------------------------------------------------------------------
-r909 | zas_ | 2008-06-10 13:27:35 +0200 (Tue, 10 Jun 2008) | 2 lines
+commit cd85461e278e79a4894b5bc400273d3f6719416d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Aug 26 22:30:40 2008 +0000
 
-collection_info_list_to_dnd_data(): simplify and optimize.
+    Consistency: type * instead of type*.
 
-------------------------------------------------------------------------
-r908 | nadvornik | 2008-06-09 22:27:39 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit c1006fb758679c5349ac658fe74562ebd88ddf8c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Aug 26 22:22:51 2008 +0000
 
-moved notification to view_file.c
+    For the sake of consistency, use glib basic types everywhere.
 
-------------------------------------------------------------------------
-r907 | nadvornik | 2008-06-09 21:43:56 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit aea00af29f6f572581b8bcc6e856e17b4676d381
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Aug 26 21:19:33 2008 +0000
 
-run idle function just once
+    Indentation fixes.
 
-------------------------------------------------------------------------
-r906 | nadvornik | 2008-06-09 21:41:37 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit 4073149801dc3484ae0c231c56cb814a8a20024b
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Tue Aug 26 20:21:30 2008 +0000
 
-use vficon_refresh for updating
+    Fixed segfault when is run inside directory with non valid uft-8 image
+    filename.
 
-------------------------------------------------------------------------
-r905 | nadvornik | 2008-06-09 21:00:47 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit ead8d30aaa1f5e02f703d7ca97c6eaed6df61234
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Tue Aug 26 13:56:56 2008 +0000
 
-handle deletion of selected files
+    Fixed calling "Image search" function in a directory without image.
 
-------------------------------------------------------------------------
-r904 | nadvornik | 2008-06-09 20:28:28 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit aa4d496a3c5caddb81fb114bebcf583784098e4e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Aug 25 22:45:38 2008 +0000
 
-optimized vficon_refresh_real
+    correctly maintain selection during iconlist refresh
 
-------------------------------------------------------------------------
-r903 | zas_ | 2008-06-09 12:10:34 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit f39b5907f8825173f29be37f76c94d2c8b547188
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Aug 25 22:20:45 2008 +0000
 
-Minor fixes and add a note about variable declaration.
+    Whitespaces cleanup.
 
-------------------------------------------------------------------------
-r902 | zas_ | 2008-06-09 09:14:46 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit d04050839306a01814536f12e5480288dab52e0e
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Mon Aug 25 18:13:33 2008 +0000
 
-Use unsigned type for marks since it is used as a bitfield.
+    Fixed segfaulting when alter image in directory without images.
 
-------------------------------------------------------------------------
-r901 | nadvornik | 2008-06-09 09:06:53 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit c85a911368d6535d8553e6c81654accfbc486ae6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Aug 25 16:58:27 2008 +0000
 
-fixed saving options on exit
+    removed unused code
 
-------------------------------------------------------------------------
-r900 | zas_ | 2008-06-09 01:42:51 +0200 (Mon, 09 Jun 2008) | 2 lines
+commit 6b22ce5fd0f6a5b14ae6b761f1982e545385ec22
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 24 14:40:18 2008 +0000
 
-Tidy up: add/remove white lines, minor code changes.
+    Typo fixes.
 
-------------------------------------------------------------------------
-r899 | nadvornik | 2008-06-08 23:21:13 +0200 (Sun, 08 Jun 2008) | 2 lines
+commit f20dd48a59ee12d0f21a79f745d1a331f921cf17
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 24 14:33:03 2008 +0000
 
-improved vficon_populate
+    Slight code redundancy reduction.
 
-------------------------------------------------------------------------
-r898 | nadvornik | 2008-06-08 22:24:46 +0200 (Sun, 08 Jun 2008) | 2 lines
+commit 1e7b2c34c6d1229c7d95319c909fb550e64e5acf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 24 14:14:37 2008 +0000
 
-vficon_sync speed-up
+    Drop redundant variable affectation.
 
-------------------------------------------------------------------------
-r897 | nadvornik | 2008-06-08 21:09:44 +0200 (Sun, 08 Jun 2008) | 2 lines
+commit 7d788c98fbd2c656f2b5354e95bc8c1d5fa1093b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 24 13:22:08 2008 +0000
 
-better check for notify type
+    Fix untranslated messages. French translation and POTFILES.in were updated.
 
-------------------------------------------------------------------------
-r896 | nadvornik | 2008-06-08 11:25:39 +0200 (Sun, 08 Jun 2008) | 2 lines
+commit 9a1cc0021d442af191023c485a2dbcc69c218be2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 24 10:00:40 2008 +0000
 
-fixed switching thumbnails in listview on and off - bug 1984825
+    French translation was updated.
 
-------------------------------------------------------------------------
-r895 | nadvornik | 2008-06-08 00:44:17 +0200 (Sun, 08 Jun 2008) | 2 lines
+commit eca846433372d875c2bbaaf5160a9142ef86c203
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 24 10:00:02 2008 +0000
 
-various refresh and notification fixes
+    Mark forgotten string for translation.
 
-------------------------------------------------------------------------
-r894 | nadvornik | 2008-06-07 17:08:33 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit 46691080d3ca954f0cf45bb2bfad5f11701230f5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Aug 23 21:07:25 2008 +0000
 
-various notification improvements
+    Fix another missing separator bug in image overlay. This one was occuring with default string when no ISO data was available from exif.
 
-------------------------------------------------------------------------
-r893 | nadvornik | 2008-06-07 12:45:33 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit acc2c3b1b830e67f94c5648acee3706d7637a2df
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Aug 23 20:46:31 2008 +0000
 
-use the new notification for collections
+    Minor optimization: no need to copy the whole remaining of the string, just copy next char.
 
-------------------------------------------------------------------------
-r892 | zas_ | 2008-06-07 12:18:30 +0200 (Sat, 07 Jun 2008) | 3 lines
+commit b5bc1451f70cb5e9b92bf65789206cfd9c478cad
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Aug 23 17:35:57 2008 +0000
 
-Display Lirc state in config log.
-Re-organize the config log a bit.
+    Only display status if there is at least one file in the file list.
 
-------------------------------------------------------------------------
-r891 | nadvornik | 2008-06-07 11:36:12 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit 060c2f9cf332a93e40c273e580133be05a984bf9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Aug 23 17:00:59 2008 +0000
 
-use new notification in img-view
+    Remove unneeded type casting.
 
-------------------------------------------------------------------------
-r890 | nadvornik | 2008-06-07 11:10:01 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit 50483da19c8039bb06121572573d0880df979c2c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 23 08:42:12 2008 +0000
 
-use new notification in layout and layout_image
+    fixed vd_refresh
 
-------------------------------------------------------------------------
-r889 | nadvornik | 2008-06-07 10:13:22 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit bec02e283784eac07cda9f03ba0b255946944702
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Aug 22 22:09:54 2008 +0000
 
-used new notification in search.c
+    French translation was updated.
 
-------------------------------------------------------------------------
-r888 | nadvornik | 2008-06-07 09:45:08 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit eb72228e196dd942f5ebf11d6ffdbdc298046d27
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Aug 22 21:52:13 2008 +0000
 
-used new notification in dupe.c
+    Add an option named layout.home_path which modifies the behavior of the Home button.
+    By default, pressing this button goes to the user's home directory.
+    When this option is set to a path, this path is used instead.
+    One can change the option value through Preferences > Advanced > Navigation
+    or directly in .geeqierc.
+    Feature proposed by Colin Clark.
 
-------------------------------------------------------------------------
-r887 | nadvornik | 2008-06-07 00:34:15 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit d58451c5831ce52023c007574c0d118f27096d72
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Aug 21 22:49:30 2008 +0000
 
-used new notification in cache_maint
+    Typo fix: vf -> vd
 
-------------------------------------------------------------------------
-r886 | nadvornik | 2008-06-07 00:11:03 +0200 (Sat, 07 Jun 2008) | 2 lines
+commit 83cfd4393002fb06fc0a1b480f1221319f192ce8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Aug 21 22:47:49 2008 +0000
 
-added NotifyType
+    Replace macros VDLIST_INFO() and VDTREE_INFO() by shorter VDLIST() and VDTREE(). VDLIST_INFO(vd, part) becomes VDLIST(vd)->part.
 
-------------------------------------------------------------------------
-r885 | nadvornik | 2008-06-06 23:50:09 +0200 (Fri, 06 Jun 2008) | 2 lines
+commit 43c576558ba327e4aa71b35471e0863d159c44d1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Aug 21 22:36:20 2008 +0000
 
-realtime file monitor
+    Indentation fix.
 
-------------------------------------------------------------------------
-r884 | nadvornik | 2008-06-06 22:59:03 +0200 (Fri, 06 Jun 2008) | 2 lines
+commit de499c4c05275f24081780bc77b06519d7d9d12e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Aug 20 22:26:34 2008 +0000
 
-zero-lenght path must be allowed for now
+    Use constants instead of enum since value (0xffff0000) overflow INT_MAX on some platforms (seen on Solaris 10 SPARC system using the native Sun version 5.9 compilers). Reported by Jeffery Small.
 
-------------------------------------------------------------------------
-r883 | zas_ | 2008-06-06 10:01:19 +0200 (Fri, 06 Jun 2008) | 2 lines
+commit 66bc3de86cf6c443c6e2399fb5df9d515898014d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Aug 20 22:19:35 2008 +0000
 
-French translation was updated.
+    Do not return values of void functions. Reported by Jeffery Small.
 
-------------------------------------------------------------------------
-r882 | zas_ | 2008-06-06 01:31:22 +0200 (Fri, 06 Jun 2008) | 2 lines
+commit da981595f5f724233a7b54661e25e424a9134474
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Aug 20 20:36:36 2008 +0000
 
-Fix "No newline at end of file" warning.
+    update the FileData structure when a new folder is created
 
-------------------------------------------------------------------------
-r881 | nadvornik | 2008-06-05 20:43:44 +0200 (Thu, 05 Jun 2008) | 2 lines
+commit b65f4f5667141545c1c2bccdca0ce93e92b26abe
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 19 22:58:31 2008 +0000
 
-use new notification in vficon
+    improved refresh in view_dir_list
 
-------------------------------------------------------------------------
-r880 | zas_ | 2008-06-05 11:24:42 +0200 (Thu, 05 Jun 2008) | 3 lines
+commit e8b3ce85469bc2ff88cdbf5abc38b22fa6c5f7cf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 19 21:01:29 2008 +0000
 
-Compare paths using utf8_collate_key() since paths are utf8-encoded.
-It fixes bug 1959854.
+    set fallback pixbuf in case of missing file
 
-------------------------------------------------------------------------
-r879 | zas_ | 2008-06-05 10:41:02 +0200 (Thu, 05 Jun 2008) | 6 lines
+commit fe2d42004e25e8a5303ab7155731f7188062d1ca
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 19 20:58:23 2008 +0000
 
-Use uft8_collate_key() to sort utf8 strings.
-Modify file_data_set_path() to sync collate keys and file_data_pool
-on path change.
+    fixed possible segfault
 
-Partially fix bug 1959854.
+commit e1a9ff9eaba12db2969dc68da34956d3c97f9098
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Aug 17 14:18:51 2008 +0000
 
-------------------------------------------------------------------------
-r878 | nadvornik | 2008-06-04 23:12:47 +0200 (Wed, 04 Jun 2008) | 2 lines
+    removed code for maintaining filelist position, gtk_tree_view itself handles it
+    better
 
-new notification system (used only in vflist for now)
+commit 951b62566ba5616b63efe574ee956ac2c4fc5a3d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 17 09:36:02 2008 +0000
 
-------------------------------------------------------------------------
-r877 | nadvornik | 2008-06-03 21:44:19 +0200 (Tue, 03 Jun 2008) | 2 lines
+    French translation was updated.
 
-replaced directory path with FileData* dir_fd
+commit 3e3a0a459781d1008725274bde950589465acf6d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 17 09:30:45 2008 +0000
 
-------------------------------------------------------------------------
-r876 | zas_ | 2008-06-03 17:54:05 +0200 (Tue, 03 Jun 2008) | 4 lines
+    Simplify things related to ViewFileInfoList * and ViewFileInfoIcon * type casting:
+    - drop VFICON_INFO() and VFLIST_INFO() macros
+    - rename VFLIST_INFO_POINTER() and VFICON_INFO_POINTER() to shorter VFLIST() and VFICON().
+    - replace all related occurrences by shorter expressions.
+    
+    For example:
+    VFICON_INFO(vf, columns) becomes VFICON(vf)->columns
+    VFLIST_INFO(vf, click_fd) becomes VFLIST(vf)->click_fd
 
-Allow to modify the aspect of Geeqie through the use of a
-gtkrc file that may be present in the geeqie rc directory.
-Patch by Aldric RENAUDIN and me.
+commit 728c032c4cf6b098b968851a75f6bbe5488040b3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Aug 17 09:00:33 2008 +0000
 
-------------------------------------------------------------------------
-r875 | zas_ | 2008-06-03 15:54:22 +0200 (Tue, 03 Jun 2008) | 2 lines
+    Move variable declaration at start of block.
 
-Replace hardcoded collection filename extension by a macro (GQ_COLLECTION_EXT).
+commit cb3202692eb4bcd65f45699b44ded4ac64cc9ad0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 16 23:37:26 2008 +0000
 
-------------------------------------------------------------------------
-r874 | zas_ | 2008-06-03 13:24:16 +0200 (Tue, 03 Jun 2008) | 2 lines
+    marks in iconview made clickable
 
-Drop initialization to NULL since filelist_read() will take care of it.
+commit dbf66300f4c6978d22a0a618778be09ad2fd1ed1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 16 20:57:40 2008 +0000
 
-------------------------------------------------------------------------
-r873 | zas_ | 2008-06-03 11:41:00 +0200 (Tue, 03 Jun 2008) | 2 lines
+    keep files with non-zero marks in memory
 
-filelist_read_real(): optimize and clean up.
+commit df8df1eea01d8c71e3b719cfd2a00c920f0e15fb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Aug 16 20:34:14 2008 +0000
 
-------------------------------------------------------------------------
-r872 | zas_ | 2008-06-03 11:03:33 +0200 (Tue, 03 Jun 2008) | 2 lines
+    implemented marks filter
 
-Reduce indentation level.
+commit f0606958123d00b30a9ed649813229d951012dc3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Aug 16 07:18:16 2008 +0000
 
-------------------------------------------------------------------------
-r871 | zas_ | 2008-06-03 10:57:46 +0200 (Tue, 03 Jun 2008) | 2 lines
+    Fix double escaping of image overlay text.
+    Bug 2051955, reported by Emmanuel Dupuis.
 
-Reduce indentation level.
+commit 8fc4646c4c8a48c5793743b76233bc8c78c49093
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Aug 13 21:07:06 2008 +0000
 
-------------------------------------------------------------------------
-r870 | zas_ | 2008-06-03 10:53:53 +0200 (Tue, 03 Jun 2008) | 2 lines
+    added keyboard map generator
 
-collection_table_find_data_by_coord(): tidy up.
+commit 178dee898565791d42e39aad71049b79eebb2758
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Aug 13 20:46:06 2008 +0000
 
-------------------------------------------------------------------------
-r869 | zas_ | 2008-06-03 09:37:24 +0200 (Tue, 03 Jun 2008) | 3 lines
+    a workaround for http://bugzilla.gnome.org/show_bug.cgi?id=547669
 
-vflist_maint(): only allocate memory and compare strings if needed.
+commit 86166813f7b90e81cf1c493be7f0ca5c86bec550
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Aug 12 20:21:25 2008 +0000
 
+    fixed crash with float file list and geeqie --blank
 
-------------------------------------------------------------------------
-r868 | zas_ | 2008-06-03 09:32:13 +0200 (Tue, 03 Jun 2008) | 3 lines
+commit 5e7e6ce8ff5a7de451480e1c3892ac5ad3ba2b3f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Aug 11 18:53:19 2008 +0000
 
-layout_real_renamed(), layout_real_removed(), layout_real_moved():
-simplify code.
+    fixed crash in geeqie --blank
 
-------------------------------------------------------------------------
-r867 | nadvornik | 2008-05-31 21:46:26 +0200 (Sat, 31 May 2008) | 2 lines
+commit 2316a8ab4f877611dd31e4bfeff4ce048d279af6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Aug 11 17:45:26 2008 +0000
 
-do not change original FileData on copy
+    fixed setting visible entry in view_dir_tree
 
-------------------------------------------------------------------------
-r866 | nadvornik | 2008-05-31 21:44:41 +0200 (Sat, 31 May 2008) | 3 lines
+commit d3f019fc2e0bd00cc403b5860749c365964a8306
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 30 18:44:49 2008 +0000
 
-replaced vflist_maint functions by vflist_refresh - it allows to follow 
-changes made by external editors more precisely
+    updated ChangeLog from svn log
 
-------------------------------------------------------------------------
-r865 | nadvornik | 2008-05-30 23:41:46 +0200 (Fri, 30 May 2008) | 2 lines
+commit 28642010130af8533f50a3c5fb88187a9f845803
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 18:35:19 2008 +0000
 
-vflist_populate_view: better handle selected files that are renamed or deleted
+    Move declarations at the beginning of blocks.
 
-------------------------------------------------------------------------
-r864 | nadvornik | 2008-05-30 22:13:16 +0200 (Fri, 30 May 2008) | 2 lines
+commit bb6bd4711d2a4884fdc19a7f8916170520efc924
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 18:07:42 2008 +0000
 
-fixed thumb index (thumbnails are shown again)
+    Optimize tests even more using last changes.
 
-------------------------------------------------------------------------
-r863 | nadvornik | 2008-05-30 21:53:52 +0200 (Fri, 30 May 2008) | 2 lines
+commit a4d5b30df4f5f2bff3d35237d31c6ab1701e1c52
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jul 28 18:02:10 2008 +0000
 
-simplified vflist_populate_view
+    do not free unallocated exif data
 
-------------------------------------------------------------------------
-r862 | zas_ | 2008-05-30 10:39:52 +0200 (Fri, 30 May 2008) | 4 lines
+commit 6eac9ecc53b989bf432e066aada6ecb1d81609ab
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 17:59:09 2008 +0000
 
-Use functions to set editors name and command and ensure they are
-utf8-encoded.
-Previously, non-utf8 strings from rc file caused some issues. 
+    Cache strcmp() result.
 
-------------------------------------------------------------------------
-r861 | zas_ | 2008-05-30 10:36:23 +0200 (Fri, 30 May 2008) | 2 lines
+commit 660c688332d92dcb8f4ad521d777c6f0cf1472f3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 17:56:56 2008 +0000
 
-Make utf8_validate_or_convert() to always allocate a new string.
+    Optimize redundant tests.
 
-------------------------------------------------------------------------
-r860 | zas_ | 2008-05-30 09:20:25 +0200 (Fri, 30 May 2008) | 2 lines
+commit 299bab0e7d1fcdabd41279f7b8916396862c00d2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 17:55:06 2008 +0000
 
-Check for existing editor command using is_valid_editor_command().
+    Move dest_dir variable to inner block.
 
-------------------------------------------------------------------------
-r859 | zas_ | 2008-05-29 09:58:34 +0200 (Thu, 29 May 2008) | 4 lines
+commit 9899b80f490d32f5e40e0f02236c8cdedddb0d88
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 09:44:50 2008 +0000
 
-Preserve properties window width and height during session even when
-layout.save_window_positions is not set.
-It restores the pre revision 858 behavior.
+    Reduce code redundancy and minor typo fixes.
 
-------------------------------------------------------------------------
-r858 | zas_ | 2008-05-29 09:52:05 +0200 (Thu, 29 May 2008) | 3 lines
+commit 760c313e51c7e9bff61fad1c9c5ea8c70a35fc88
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 09:14:10 2008 +0000
 
-Save properties window width and height to rc file and restore
-them on next session if layout.save_window_positions is set to TRUE.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r857 | nadvornik | 2008-05-29 00:12:10 +0200 (Thu, 29 May 2008) | 2 lines
+commit f4a4b21d34e24261b19d3adb920085856345f850
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 28 09:12:33 2008 +0000
 
-improved infrastructure for tracing changes, optimized vflist_populate_view
+    Typo fix.
 
-------------------------------------------------------------------------
-r856 | nadvornik | 2008-05-27 20:46:34 +0200 (Tue, 27 May 2008) | 2 lines
+commit 22f458af63bb1cc6490d1c47d8f8a76ac8161650
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 27 19:22:40 2008 +0000
 
-measure time of filelist update
+    abort file operations when the file list is empty
 
-------------------------------------------------------------------------
-r855 | nadvornik | 2008-05-27 20:37:15 +0200 (Tue, 27 May 2008) | 2 lines
+commit 473d1760b5fe683a04b531e6d54de13cf093b12c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 27 18:20:59 2008 +0000
 
-another fix in notification
+    remember path entered in file dialog
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2028977&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r854 | nadvornik | 2008-05-26 20:32:04 +0200 (Mon, 26 May 2008) | 2 lines
+commit 49ed0b4fb2dd49d2ec0485707c50dec61f242ef3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 27 13:46:24 2008 +0000
 
-Fix histogram grid - patch by Uwe Ohse
+    speed-up of directory notification on deleting large number of files
 
-------------------------------------------------------------------------
-r853 | nadvornik | 2008-05-26 20:22:08 +0200 (Mon, 26 May 2008) | 2 lines
+commit a4311dd534152241fca227385319ef249fc98ab7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 27 09:51:28 2008 +0000
 
-use fputs instead of printf - patch by Uwe Ohse
+    added "Symlink" as an example of "filter" command
 
-------------------------------------------------------------------------
-r852 | nadvornik | 2008-05-26 19:06:30 +0200 (Mon, 26 May 2008) | 2 lines
+commit b1d0747ca385ba0b6366b6ab1eb88858400c7ba7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 27 08:57:12 2008 +0000
 
-fixed bug in notification code
+    improved updating of view_dir_tree
 
-------------------------------------------------------------------------
-r851 | zas_ | 2008-05-25 22:17:07 +0200 (Sun, 25 May 2008) | 2 lines
+commit db21a0fc8760058841b38b2fc8bc4970099cd8f7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 27 08:40:47 2008 +0000
 
-Tidy up: indentation fixes, typo fixes, ...
+    fixed deleting of non-empty folder
 
-------------------------------------------------------------------------
-r850 | zas_ | 2008-05-25 21:54:00 +0200 (Sun, 25 May 2008) | 2 lines
+commit fadf71ace27daec42c57292eca569da9afddf890
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 22:36:58 2008 +0000
 
-Typo fix.
+    fixed spec file
 
-------------------------------------------------------------------------
-r849 | zas_ | 2008-05-25 21:13:04 +0200 (Sun, 25 May 2008) | 2 lines
+commit 453565d11e275816de5e7eec28b3a558a34b77bb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 22:26:08 2008 +0000
 
-Typo fix.
+    fixed invalid warning on running editors
 
-------------------------------------------------------------------------
-r848 | zas_ | 2008-05-25 21:03:30 +0200 (Sun, 25 May 2008) | 2 lines
+commit 71e1b5a7dbf543c6f87751a387ede8e84d365d4b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 20:34:24 2008 +0000
 
-bar_sort_set_filter_cb(): filter_idx was set as uint so get it as uint.
+    updated version string
 
-------------------------------------------------------------------------
-r847 | nadvornik | 2008-05-25 00:44:18 +0200 (Sun, 25 May 2008) | 4 lines
+commit fdd9338faf0ee30d483b9d1c30885241c340449c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 20:15:00 2008 +0000
 
-rewritten utilops.h:
-- better integration of external commands
-- filter commands
+    dropped references to OpenOffice.org as suggested at
+    https://sourceforge.net/tracker/index.php?func=detail&aid=1972534&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r846 | zas_ | 2008-05-24 22:01:59 +0200 (Sat, 24 May 2008) | 6 lines
+commit da4c68a9e11dd9d457e6eca2c9b552cde5a9a660
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 20:02:20 2008 +0000
 
-Allow to escape star characters in the template string with a \.
-One can insert a \ by escaping it with another \.
-Fix deletion of empty parts when using | trick.
-Append the separator " - " only if data is neither NULL nor empty.
-Patch by Uwe Ohse and Laurent Monin.
+    string cleanup
 
-------------------------------------------------------------------------
-r845 | nadvornik | 2008-05-24 11:18:09 +0200 (Sat, 24 May 2008) | 2 lines
+commit 8e4dcbe60ca1974787466e0bb93d10d34ed80afb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 19:52:40 2008 +0000
 
-improved filedata interface
+    removed unused messages.desc_dlist
 
-------------------------------------------------------------------------
-r844 | zas_ | 2008-05-24 01:40:12 +0200 (Sat, 24 May 2008) | 3 lines
+commit b2334b66c903a66cdd5a1b984d6b4b40a885c02d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 19:41:46 2008 +0000
 
-Fix display of libpthread detection.
-Fix display of lirc support, do not test for headers if disabled.
+    fixed new folder command
 
-------------------------------------------------------------------------
-r843 | zas_ | 2008-05-24 01:18:40 +0200 (Sat, 24 May 2008) | 2 lines
+commit b90ac509d431b791b45d2e365e039aabcc497f22
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 19:33:36 2008 +0000
 
-Silent few warnings that appeared when using --disable-exiv2 configure option.
+    fixed renaming of directories
 
-------------------------------------------------------------------------
-r842 | zas_ | 2008-05-24 00:57:51 +0200 (Sat, 24 May 2008) | 2 lines
+commit f7c504c8ada6dae3a66c55ee221d508d6ff5fe36
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 19:01:20 2008 +0000
 
-French translation was updated.
+    warn about changed file extensions
 
-------------------------------------------------------------------------
-r841 | zas_ | 2008-05-24 00:55:23 +0200 (Sat, 24 May 2008) | 2 lines
+commit 4d670783f8436b85a3816245d9126f09f6f9a573
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 18:33:49 2008 +0000
 
-Use the same label for toolbar buttons tooltip than in main menu.
+    added icon for changes without warnings
 
-------------------------------------------------------------------------
-r840 | zas_ | 2008-05-23 17:07:30 +0200 (Fri, 23 May 2008) | 6 lines
+commit 12bc9f40c65d59e9f3b547b6e3e8649a70809498
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 18:17:56 2008 +0000
 
-Add -Wstrict-prototypes to gcc options only in developer mode
-since it clutters the compilation log with unfixable warnings.
-Add -Wall in developer mode to display even more warnings.
-Fix display of --enable-deprecated at end of configure (yes
-and no were inversed).
+    allow only existing folders in destination dialog
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2011243&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r839 | zas_ | 2008-05-23 14:27:28 +0200 (Fri, 23 May 2008) | 2 lines
+commit 0ec960565c5febd5c59d49eb820c2a98043d4ece
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 10:27:41 2008 +0000
 
-slideshow_next(), slideshow_prev(): move code to common slideshow_move(), reducing code redundancy.
+    clean up - checks are handled elsewhere
 
-------------------------------------------------------------------------
-r838 | zas_ | 2008-05-23 14:19:42 +0200 (Fri, 23 May 2008) | 2 lines
+commit dfab6c695e56757791d68763444c5ef65c338797
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 26 09:58:25 2008 +0000
 
-Move code from slideshow_timer_reset() to new slideshow_timer_stop() and simplify calls.
+    more checks for file operations
 
-------------------------------------------------------------------------
-r837 | zas_ | 2008-05-23 02:20:56 +0200 (Fri, 23 May 2008) | 9 lines
+commit e3b713522adbaea2fc0f9be3c8e11ed7acc66239
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 25 22:04:55 2008 +0000
 
-Try to load a system-wide rc file if any, before per-user rc file.
-For now, system-wide rc file path is set to /etc/geeqie/geeqierc
-(defined by GQ_SYSTEM_WIDE_DIR in main.h).
-filter_parse() was modified to replace entries having the same key,
-needed since it may be called more than once.
+    improved error reporting
 
-Please test heavily.
+commit 3d6b2cc44f9b7dd36102f3626c115027094a2591
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jul 25 06:35:35 2008 +0000
 
+    Minor tidy up and optimization.
 
-------------------------------------------------------------------------
-r836 | zas_ | 2008-05-23 01:22:12 +0200 (Fri, 23 May 2008) | 2 lines
+commit c658a3d30ac0f2b77788f08d30e5088b2e93845e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jul 24 20:24:04 2008 +0000
 
-Pass ConfOptions * to save_options() and load_options().
+    Set GIO channels to binary encoding.
+    This is needed since messages from commands may not be UTF8-encoded
+    and g_io_channel_read_chars() may incorrectly interpret some characters.
+    In practice it was truncating some ISO-8859-1 messages containing some
+    french characters. This fixes it.
 
-------------------------------------------------------------------------
-r835 | zas_ | 2008-05-23 01:17:26 +0200 (Fri, 23 May 2008) | 3 lines
+commit 227a6784ab87c0ba1ddde38334b1897813f0612d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 24 20:03:57 2008 +0000
 
-Move code from save_options() to new save_options_to() which takes
-the destination path as parameter.
+    separated debugging log and debug CFLAGS
+    enable debugging log support by default
 
-------------------------------------------------------------------------
-r834 | zas_ | 2008-05-23 01:09:53 +0200 (Fri, 23 May 2008) | 4 lines
+commit bb9823e32e5f9993d1ed9384a6d295108fd6f5bd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 23 22:19:16 2008 +0000
 
-Move setup_default_options() and sync_options_with_current_state() to options.[ch].
-Pass ConfOptions * to these instead of directly using global variable.
-Cleanup #include in main.c.
+    indicate check warnings and errors in delete and rename dialogs
 
-------------------------------------------------------------------------
-r833 | zas_ | 2008-05-23 00:49:07 +0200 (Fri, 23 May 2008) | 2 lines
+commit 1b80edd5e0264c412231b3c9457226830dc33955
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 23 20:53:05 2008 +0000
 
-Move code from exit_program_final() to new sync_options_with_current_state().
+    removed file_data_add_change_info
+    reduced code redundancy - patch by Laurent, slightly modified
 
-------------------------------------------------------------------------
-r832 | zas_ | 2008-05-23 00:43:07 +0200 (Fri, 23 May 2008) | 4 lines
+commit da4ec2a7e37133b2547bb17849c06ce99340c905
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 23 17:38:04 2008 +0000
 
-Separate path building code from options loading code.
-Most code of load_options() is moved to new load_options_from().
-ExifUIList initialization is moved to setup_default_options().
+    Minor tidy up.
 
-------------------------------------------------------------------------
-r831 | zas_ | 2008-05-22 22:22:13 +0200 (Thu, 22 May 2008) | 10 lines
+commit bd26225bab7fddc99464ba9f7e0a394d15769496
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 23 12:46:35 2008 +0000
 
-Make shell command and its option rc file options instead of hardcoded strings.
-This allows users to modify the shell command that execute "editors".
-Two new options appear in rc file:
-- shell.path (default to "/bin/sh")
-- shell.options (default to "-c")
+    Tidy up.
 
-These options can only be changed from the rc file, not at runtime.
-Tests are made to check that shell.path is not empty and lead to
-an executable file.
+commit a01c5f4c0819876620c7cabbf7bf3d8ecfd605e3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 23 12:45:59 2008 +0000
 
-------------------------------------------------------------------------
-r830 | zas_ | 2008-05-22 15:00:45 +0200 (Thu, 22 May 2008) | 3 lines
+    Use g_strconcat() instead of g_strdup_printf("%s%s", ...).
 
-Fix signed vs unsigned warnings.
-In most cases, gint was used instead of guint.
+commit b0a7f6e3aa5647d7736140b431bd0b3d83afec9c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 23 10:21:37 2008 +0000
 
-------------------------------------------------------------------------
-r829 | zas_ | 2008-05-22 13:28:35 +0200 (Thu, 22 May 2008) | 2 lines
+    Simplify parse_out_relatives().
 
-Comment out unused static function extension_truncate().
+commit 9810215a7e23167a29088e86191ceee820e4f715
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 23 09:10:41 2008 +0000
 
-------------------------------------------------------------------------
-r828 | zas_ | 2008-05-22 13:27:43 +0200 (Thu, 22 May 2008) | 2 lines
+    Tidy up.
 
-Fix up some types, make some signed vs unsigned warnings quiet.
+commit f46043bfae09b7903aa412302d02756449ebc28b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 23 09:00:38 2008 +0000
 
-------------------------------------------------------------------------
-r827 | zas_ | 2008-05-22 12:09:07 +0200 (Thu, 22 May 2008) | 3 lines
+    Fix missing newline at end of file.
 
-Modify set_default_image_overlay_template_string() to accept the pointer to
-the string to modify and add a generic function to set template_string value.
+commit 90970bd92397908270e53c9178c67a804863eee0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 23 08:59:29 2008 +0000
 
-------------------------------------------------------------------------
-r826 | zas_ | 2008-05-22 11:22:29 +0200 (Thu, 22 May 2008) | 2 lines
+    Fix warning: passing argument 1 of 'gtk_tree_store_set' from incompatible pointer type
 
-French translation was updated.
+commit d576f7bbcabdba02d4e295f1e6140634500c3920
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 22 22:05:20 2008 +0000
 
-------------------------------------------------------------------------
-r825 | zas_ | 2008-05-22 11:12:36 +0200 (Thu, 22 May 2008) | 3 lines
+    do not create duplicate FileData entries
 
-Introduce an helper function that returns the name of an editor.
-It helps to reduce code redundancy.
+commit 96293a9f07bf5057924635d9a23e4058a2807bb1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 22 21:46:08 2008 +0000
 
-------------------------------------------------------------------------
-r824 | zas_ | 2008-05-22 10:49:52 +0200 (Thu, 22 May 2008) | 2 lines
+    basic infrastructure for early error and dangerous operations checking
+    it needs more work
 
-Use a struct to handle editor's properties.
+commit 3a442a31ebc195299be3d7bc289754b09370a5b4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 22 18:27:12 2008 +0000
 
-------------------------------------------------------------------------
-r823 | zas_ | 2008-05-21 21:37:18 +0200 (Wed, 21 May 2008) | 6 lines
+    clean up fd->change on error
 
-Make stricter match for option's names consisting of a prefix and a number.
-It allows to have names like "prefix_12" and "prefix_something" in the same file.
-Using strtol() was wrong since it allowed names like "prefix_-0xa", leading
-to unpredictable results. It was wrong too with "prefix_something", which
-was equivalent to "prefix_0", instead of being an option of its own.
+commit c8d7bc43bfb2e8355dc6871dd5df87f38a34bcfd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 22 18:13:41 2008 +0000
 
-------------------------------------------------------------------------
-r822 | zas_ | 2008-05-21 13:46:19 +0200 (Wed, 21 May 2008) | 2 lines
+    remove items from file_data_planned_change_hash when the operation is
+    canceled
 
-Replace hardcoded "/" by G_DIR_SEPARATOR_S where applicable.
+commit 3a0d2bb75e53a03a19e88a979403acd9455ade1f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 22 17:57:22 2008 +0000
 
-------------------------------------------------------------------------
-r821 | zas_ | 2008-05-21 13:45:29 +0200 (Wed, 21 May 2008) | 2 lines
+    fixed stop button in editor dialog
 
-Use g_build_filename().
+commit 9f2b4b649b703a20350e1962684fe4422d4d39a8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 22 17:40:24 2008 +0000
 
-------------------------------------------------------------------------
-r820 | zas_ | 2008-05-21 13:07:23 +0200 (Wed, 21 May 2008) | 2 lines
+    delete file_data_planned_change_hash when it is not used
 
-Use G_DIR_SEPARATOR where applicable.
+commit ff4704f404d5097698f17139c07f37bd76da3124
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jul 21 21:38:26 2008 +0000
 
-------------------------------------------------------------------------
-r819 | zas_ | 2008-05-21 13:00:13 +0200 (Wed, 21 May 2008) | 2 lines
+    fixed
+    http://sourceforge.net/tracker/index.php?func=detail&aid=2019012&group_id=222125&atid=1054680
 
-Use G_DIR_SEPARATOR_S where applicable.
+commit 84e21974c1752c800a9be9332429747355340d94
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jul 21 20:50:24 2008 +0000
 
-------------------------------------------------------------------------
-r818 | zas_ | 2008-05-21 12:52:38 +0200 (Wed, 21 May 2008) | 2 lines
+    file_util_rename_dir should not return anything
 
-Use g_build_filename() and G_DIR_SEPARATOR_S.
+commit 89736895aec4a438f30211d49b23391c22282669
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jul 21 20:40:29 2008 +0000
 
-------------------------------------------------------------------------
-r817 | zas_ | 2008-05-21 12:46:33 +0200 (Wed, 21 May 2008) | 2 lines
+    added notification handler to view_dir
 
-Use g_build_filename() instead of g_strconcat().
+commit c8f289fb70c4d46a985c701f2b8f8f8874cf7e30
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jul 21 08:31:43 2008 +0000
 
-------------------------------------------------------------------------
-r816 | zas_ | 2008-05-21 12:11:56 +0200 (Wed, 21 May 2008) | 2 lines
+    French translation was updated.
 
-tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
+commit 46a1dea4cc0119a888dd652a13b0dd444ca71e32
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 20 15:21:06 2008 +0000
 
-------------------------------------------------------------------------
-r815 | zas_ | 2008-05-21 11:58:29 +0200 (Wed, 21 May 2008) | 2 lines
+    Update POTFILES.in.
 
-tab_completion_popup_cb(): use g_build_filename() and simplify code.
+commit ddb8f1b1b4360a2a1fb5ac5902697a84c0339cec
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 20 15:16:05 2008 +0000
 
-------------------------------------------------------------------------
-r814 | zas_ | 2008-05-21 11:50:32 +0200 (Wed, 21 May 2008) | 3 lines
+    Move uri_*() functions to separate files: uri_utils.[ch]
 
-Use expand_tilde() instead of simple concatenation, it allows correct expansion
-of ~user as well as ~dir.
+commit 101520eae1a9f6a1efd7e0a659fa7342ec94f2ac
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 20 15:04:40 2008 +0000
 
-------------------------------------------------------------------------
-r813 | zas_ | 2008-05-21 11:30:53 +0200 (Wed, 21 May 2008) | 2 lines
+    periodic testing of changed files can be now disabled
 
-dest_change_dir(): rewrite to use g_build_filename(), g_path_get_dirname() and g_path_get_basename().
+commit b8ea5645e91e203e09389311c412a0873e0343fc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 20 14:56:32 2008 +0000
 
-------------------------------------------------------------------------
-r812 | zas_ | 2008-05-21 10:53:51 +0200 (Wed, 21 May 2008) | 2 lines
+    Move history_list_*() functions to separate files:
+    history_list.c and history_list.h.
 
-Fix a segfault occuring when logging an empty message and there is no log window.
+commit c4685e9702624774fb70b01eb130f26f74ccc267
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 20 14:52:00 2008 +0000
 
-------------------------------------------------------------------------
-r811 | zas_ | 2008-05-21 02:42:14 +0200 (Wed, 21 May 2008) | 2 lines
+    implemented "create directory" command
 
-Use g_build_filename().
+commit ae2ab4e282fe7851e502acb9f699814d38204176
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 20 13:59:55 2008 +0000
 
-------------------------------------------------------------------------
-r810 | zas_ | 2008-05-21 02:39:16 +0200 (Wed, 21 May 2008) | 2 lines
+    fixed file copy/move dialog
 
-thumb_std_cache_path(): use g_build_filename() and simplify.
+commit a3c139eafad2246f8bde6cef391def6ab4670127
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 20 13:19:22 2008 +0000
 
-------------------------------------------------------------------------
-r809 | zas_ | 2008-05-21 02:32:57 +0200 (Wed, 21 May 2008) | 2 lines
+    fixed the case when a renamed file is detected by directory scanning
+    before the external rename commands exits. We have to update the
+    FileData structure immediately, othervise we would get duplicate
+    entries.
 
-Use g_build_filename().
+commit 8e0c8b700fad60a5de29b60144140f805668fcd3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 20 12:20:12 2008 +0000
 
-------------------------------------------------------------------------
-r808 | zas_ | 2008-05-21 02:20:13 +0200 (Wed, 21 May 2008) | 2 lines
+    Optimize history_list_add_to_key() a bit.
 
-Use g_build_filename() where applicable.
+commit 303bc18d4a21e0097d6eb6a9e266127294a26ebe
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 20 11:29:12 2008 +0000
 
-------------------------------------------------------------------------
-r807 | zas_ | 2008-05-21 02:15:41 +0200 (Wed, 21 May 2008) | 2 lines
+    fixed previous checkin
 
-Use g_build_filename() instead of g_strconcat().
+commit c6fd35649fa8e25e651dd202e03a211442d57f59
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jul 20 11:22:19 2008 +0000
 
-------------------------------------------------------------------------
-r806 | zas_ | 2008-05-21 02:13:12 +0200 (Wed, 21 May 2008) | 2 lines
+    implemented directory rename and delete operations
 
-Use g_build_filename() and get rid of "root dir fix".
+commit 9684fd6b6fcab39a5aa29c33da2ab3f60137665e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 20 07:52:16 2008 +0000
 
-------------------------------------------------------------------------
-r805 | zas_ | 2008-05-21 02:12:19 +0200 (Wed, 21 May 2008) | 2 lines
+    Move out test outside the loop.
 
-Use g_build_filename().
+commit 120db8041b40ffc83cb90d0b82084862707ec190
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jul 19 13:57:03 2008 +0000
 
-------------------------------------------------------------------------
-r804 | zas_ | 2008-05-21 02:01:03 +0200 (Wed, 21 May 2008) | 5 lines
+    Tidy up.
 
-Disable unused code:
-- cache_maintain_home_dir()
-- cache_maintain_dir()
+commit 2e9c246e6145e7fb7fac6990524b718bc6826396
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jul 19 12:36:46 2008 +0000
 
+    Fix missing newline at end of file.
 
-------------------------------------------------------------------------
-r803 | zas_ | 2008-05-21 01:41:13 +0200 (Wed, 21 May 2008) | 2 lines
+commit 3054110d18c6717f764cab2baf31f929ebdcaa66
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jul 19 09:06:24 2008 +0000
 
-Build path using g_build_filename() then calculate its length.
+    increase reference count before sending notification in file_data_new
 
-------------------------------------------------------------------------
-r802 | zas_ | 2008-05-21 01:11:47 +0200 (Wed, 21 May 2008) | 2 lines
+commit a7213169bf5d2afbc94ef083fcb1aae6711746ee
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jul 18 21:20:49 2008 +0000
 
-Use G_DIR_SEPARATOR_S instead of hardcoded "/".
+    fixed test for changed files in cache
 
-------------------------------------------------------------------------
-r801 | zas_ | 2008-05-21 01:07:09 +0200 (Wed, 21 May 2008) | 2 lines
+commit c4de295c0a3115d91e45602f4f9ed5a69d5d7e0e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jul 18 09:55:15 2008 +0000
 
-Use g_build_filename() and move location label creation from cache_manager_show() to new cache_manager_location_label().
+    Introduce image_loader_set_done_func().
 
-------------------------------------------------------------------------
-r800 | zas_ | 2008-05-21 00:47:13 +0200 (Wed, 21 May 2008) | 2 lines
+commit e1ea2ccd4d041e0ef457d6b94e4325340ca8d874
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jul 17 22:36:58 2008 +0000
 
-cache_find_location(): use g_build_filename() and move redundant code to new functions.
+    Reduce code redundancy by moving common code to new menu_choice_get_match_type().
 
-------------------------------------------------------------------------
-r799 | zas_ | 2008-05-21 00:22:11 +0200 (Wed, 21 May 2008) | 2 lines
+commit 6da5f506c0c4f58e352af4886120efa9765431e9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 17 21:51:21 2008 +0000
 
-Use g_build_filename().
+    reload changed images
 
-------------------------------------------------------------------------
-r798 | zas_ | 2008-05-21 00:13:48 +0200 (Wed, 21 May 2008) | 2 lines
+commit 01e819ff19279f8291ccbbac04f7cb843109c59d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jul 15 15:37:14 2008 +0000
 
-Use size_t instead of gint, it silents a signed vs unsigned warning.
+    Move code from image_osd_update_cb() to separate functions.
 
-------------------------------------------------------------------------
-r797 | zas_ | 2008-05-21 00:11:59 +0200 (Wed, 21 May 2008) | 2 lines
+commit 56907bd2e2deb8a01b2b0ca2c005ff4df0b81ef9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jul 15 14:32:00 2008 +0000
 
-Use g_build_filename() instead of g_strconcat().
+    Tidy up and code redundancy reduction.
 
-------------------------------------------------------------------------
-r796 | zas_ | 2008-05-21 00:09:04 +0200 (Wed, 21 May 2008) | 2 lines
+commit 46f96c81c85a3e03e6756c718e3758db8c520208
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jul 15 12:52:02 2008 +0000
 
-Drop concat_dir_and_file() and use g_build_filename() instead.
+    Use a specific enum for image.zoom_mode values (ZoomMode) and
+    simplify calls to image_zoom_get_default(), dropping last parameter
+    which was always options->image.zoom_mode.
 
-------------------------------------------------------------------------
-r795 | zas_ | 2008-05-21 00:00:14 +0200 (Wed, 21 May 2008) | 2 lines
+commit e51449e7326f517be62d65c0263b8bbc2f8b85b6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 13 14:50:07 2008 +0000
 
-Use G_DIR_SEPARATOR instead of '/' where applicable.
+    Improve ways to specify html browser (used for help, see bug 2015099).
+    Two new rc file options were added:
+    - helpers.html_browser.command_name
+    - helpers.html_browser.command_line
+    These are checked first before trying common browser locations.
+    If these do not lead to a valid browser, then geeqie will
+    search for geeqie_html_browser script in the path, then
+    it will try various common browsers.
 
-------------------------------------------------------------------------
-r794 | zas_ | 2008-05-20 23:51:25 +0200 (Tue, 20 May 2008) | 2 lines
+commit ccd82ce4a52dd8e7b60bf5a6dc56952255d1f6a1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 13 13:51:23 2008 +0000
 
-Use g_build_filename() to build paths.
+    Apply debian-specific patch to launch help browser (bug 2015099).
 
-------------------------------------------------------------------------
-r793 | zas_ | 2008-05-20 22:11:29 +0200 (Tue, 20 May 2008) | 3 lines
+commit e1dd1bb488601f3df4cd9b4b5d261c3f1d5a015a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jul 13 12:36:18 2008 +0000
 
-Do not use glib posix wrappers since they were introduced in 2.6
-and we want 2.4 compatibility.
+    Fix a segfault occuring when opening some collection files.
+    Skip all lines not starting with a # when only geometry is required.
 
-------------------------------------------------------------------------
-r792 | zas_ | 2008-05-20 22:06:11 +0200 (Tue, 20 May 2008) | 2 lines
+commit 19c2605cff0e070dc41424b913a624be8057a56a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jul 5 10:21:09 2008 +0000
 
-Use access() instead of g_access() which is only available in 2.8.
+    Prevent segfault in certain conditions when displaying debug message.
 
-------------------------------------------------------------------------
-r791 | zas_ | 2008-05-20 21:14:36 +0200 (Tue, 20 May 2008) | 3 lines
+commit 1823d233d1681647245a00996df74e08a67b0489
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jul 4 22:49:04 2008 +0000
 
-Use utf-8 charset instead of iso-8859-1.
-Minor cleanup.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r790 | nadvornik | 2008-05-20 19:43:37 +0200 (Tue, 20 May 2008) | 2 lines
+commit 01e6b8f7eb33d65ea295731275a353e83721e40d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jul 4 20:32:48 2008 +0000
 
-updated ru.po by Alexandre Prokoudine
+    Optimize a bit when connected zoom and scrolling are unset,
+    just move the test outside loops.
 
-------------------------------------------------------------------------
-r789 | zas_ | 2008-05-20 10:18:30 +0200 (Tue, 20 May 2008) | 2 lines
+commit 4dfe7f7b01cb84421d6af7040ffcf74aabad02e7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jul 4 17:21:07 2008 +0000
 
-French translation was updated.
+    layout_color_button_press_cb(): tidy up, drop useless memory allocations, improve i18n.
 
-------------------------------------------------------------------------
-r788 | zas_ | 2008-05-20 10:14:35 +0200 (Tue, 20 May 2008) | 2 lines
+commit 4fa28d67f125e31256616b2102b7fdef52861584
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 3 20:16:15 2008 +0000
 
-Sort out log_printf() vs printf_term() mix up.
+    refresh thumbnails on file change
 
-------------------------------------------------------------------------
-r787 | zas_ | 2008-05-20 09:52:49 +0200 (Tue, 20 May 2008) | 3 lines
+commit 579c42a76147582e9c4ad2cb8b476e7033f434ac
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 3 19:38:19 2008 +0000
 
-Use print_term() instead of printf(), since it handles charset conversion
-from utf8 to locale if needed.
+    set fallback thumbnail pixbuf only if the loading really fails
 
-------------------------------------------------------------------------
-r786 | zas_ | 2008-05-19 13:09:23 +0200 (Mon, 19 May 2008) | 3 lines
+commit 1a227f62b8195434db73cd8b27f50bf5b39cee7e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jul 3 18:16:39 2008 +0000
 
-Remove C-specific gcc options from CXXFLAGS.
-Add few more warnings.
+    Fix missing references for the current directory in pan folder stuff.
+    It was causing an fd magick assertion failure.
+    Bug reported by Omari Stephens.
 
-------------------------------------------------------------------------
-r785 | zas_ | 2008-05-19 11:27:30 +0200 (Mon, 19 May 2008) | 2 lines
+commit 83c79d4c81a9b2521d102bbe414abb81722e0dd9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jul 3 08:33:10 2008 +0000
 
-Fix some incomplete initialization warnings.
+    Increase debugging info in file_data_ref() and file_data_unref().
+    When compiled with DEBUG defined, file and line of the caller is displayed
+    in debug log.
 
-------------------------------------------------------------------------
-r784 | zas_ | 2008-05-19 10:46:37 +0200 (Mon, 19 May 2008) | 2 lines
+commit 86bea118fffeba039beb5838e0c401629d501faa
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jul 2 08:38:47 2008 +0000
 
-depreceated -> deprecated
+    Optimize file_cache_get() by only moving element to front if needed
+    (most of the time there is no need).
+    Reduce code redundancy in file_cache_put() by calling file_cache_get().
+    Enhance debugging code.
 
-------------------------------------------------------------------------
-r783 | zas_ | 2008-05-19 10:43:11 +0200 (Mon, 19 May 2008) | 2 lines
+commit 5f4a945ac78df503f9765056e946c68905ed0a32
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 30 21:08:28 2008 +0000
 
-Typo fixes.
+    fixed division by zero in pixbuf_renderer_get_scroll_center
 
-------------------------------------------------------------------------
-r782 | zas_ | 2008-05-19 10:36:06 +0200 (Mon, 19 May 2008) | 2 lines
+commit e2bd6f78452c5fbe3850dfbc6b353edfd8b42f65
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jun 29 15:51:54 2008 +0000
 
-Create auxdir if needed.
+    Merge thumb_loader_save_to_cache() and thumb_loader_mark_failure()
+    into thumb_loader_save_thumbnail().
+    Most of the code was redundant.
 
-------------------------------------------------------------------------
-r781 | zas_ | 2008-05-19 10:24:10 +0200 (Mon, 19 May 2008) | 2 lines
+commit 29242ec0f56bb937f754dd574979b380656e84e4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jun 29 10:11:43 2008 +0000
 
-Fix spurious end of line introduced in revision 780.
+    Make better matching between options types in options.h and the rest of the code.
+    Most changes are from gint to gboolean pseudo type and between gint / guint.
 
-------------------------------------------------------------------------
-r780 | bruclik | 2008-05-19 03:15:17 +0200 (Mon, 19 May 2008) | 10 lines
+commit f40224fd22d5387a0ad45859568d79d67060209f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jun 28 08:01:36 2008 +0000
 
-configure.in was rewritten:
-- uses PKG_CHECK_MODULES everywhere
-- added --enable-debug (enable debugging support)
-- added --enable-developer (developer mode, checks depreceated code ...)
-- removed obsoleted INCLUDES from Makefile.am
-Fixed src/debug.h (added glib.h).
-Fixed src/exiv2.c compilation with libexiv2 v0.15.  
-Added src/trash.h to src/Makefile.am (fixed generating 'make dist').
+    layout_image_drag_cb(): optimize when connected scrolling is unset.
 
+commit ed00275170d23e38bff5a01130e5056a799788c1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jun 28 07:43:37 2008 +0000
 
-------------------------------------------------------------------------
-r779 | bruclik | 2008-05-19 02:54:59 +0200 (Mon, 19 May 2008) | 3 lines
+    Reduce number of parameters (mostly unused), just pass the event pointer.
 
-Updated CODING (GPL header, macros, svn change-log, ...).
+commit 6f624aae6d3d044bc0e6058ee93cc43082838e53
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jun 28 00:44:31 2008 +0000
 
+    Fix warning:
+    thumb.c:31: warning : 'normalize_thumb' declared 'static' but never defined
 
-------------------------------------------------------------------------
-r778 | zas_ | 2008-05-18 23:14:01 +0200 (Sun, 18 May 2008) | 7 lines
+commit bfc848fe14ebb30a49356f1b2d96b6498e3d5667
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 27 22:57:48 2008 +0000
 
-Save order of Properties dialog tabs to rc file.
-Users of GTK+ <2.10 can set tabs order directly in the rc file,
-others can move tabs using drag'n drop.
-The option is named properties.tabs_order, its default value
-is "123" which is General, Keywords, Exif tabs (left to right).
+    image_osd_mkinfo(): pipe replacement by " - " separator was fixed to work correctly with
+    empty first element.
 
+commit 6b6574bad4336981d6b373c52259e43fa9743d17
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 27 21:35:21 2008 +0000
 
-------------------------------------------------------------------------
-r777 | zas_ | 2008-05-18 14:56:18 +0200 (Sun, 18 May 2008) | 3 lines
+    do not read keywords and comment between exif_read_fd and exif_free_fd
+    calls (fd->exif does not have reference counting)
 
-Cleanup and code redundancy reduction.
+commit 530a58fe366997da61f48b7c6156fa655d22d020
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 27 21:09:15 2008 +0000
 
+    added pixbuf_fallback function
+    fixed thumb loader for non-image files
 
-------------------------------------------------------------------------
-r776 | zas_ | 2008-05-18 13:39:58 +0200 (Sun, 18 May 2008) | 4 lines
+commit 84accd5956890abf9612f9b7e0aa72d8e0ea7b8a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 27 18:43:05 2008 +0000
 
-Memorize text to display in the log window when the window is
-not yet created. On log window display, the memorized text
-is then recalled and displayed.
+    fixed crash in entering fullscreen during loading
 
-------------------------------------------------------------------------
-r775 | zas_ | 2008-05-18 09:36:57 +0200 (Sun, 18 May 2008) | 2 lines
+commit 7d44fe8aa857d7a740a9b867301fa06f373ffcec
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 27 10:00:55 2008 +0000
 
-Do not create log window more than once.
+    osd_template_insert(): optimize and simplify using flags.
 
-------------------------------------------------------------------------
-r774 | zas_ | 2008-05-18 00:37:04 +0200 (Sun, 18 May 2008) | 2 lines
+commit 42fc5158d4408a77c51570d34b5f83d0add42340
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 27 08:05:51 2008 +0000
 
-Fix formatted.SubjectDistance appearing twice in exif bar configuration.
+    image_osd_info_render(): ensure values are always escaped before using pango_layout_set_markup().
+    Two helper functions were added: osd_template_insert() and osd_template_insert_and_free().
 
-------------------------------------------------------------------------
-r773 | zas_ | 2008-05-17 23:28:02 +0200 (Sat, 17 May 2008) | 2 lines
+commit ea7852bed519679c1a98f5b240e7065af7abef2e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 26 23:29:08 2008 +0000
 
-Update POTFILES.in.
+    image_osd_info_render(): code cleanup and simplification, drop some useless memory allocations.
 
-------------------------------------------------------------------------
-r772 | zas_ | 2008-05-17 23:26:45 +0200 (Sat, 17 May 2008) | 1 line
+commit 98622a4338ee516d3e06da6153adb61e6cd68b09
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 26 15:59:20 2008 +0000
 
-Add a log window that shows normal and debug messages. For now, it was added to Help menu.
-------------------------------------------------------------------------
-r771 | nadvornik | 2008-05-16 22:12:11 +0200 (Fri, 16 May 2008) | 2 lines
+    Use flags for pr_zoom_*() functions.
 
-fixed exiv2 version test
+commit b26d38c1a3189bf6d4edfdcab5d8dfe9aab19a9f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 26 14:43:52 2008 +0000
 
-------------------------------------------------------------------------
-r770 | nadvornik | 2008-05-16 22:09:32 +0200 (Fri, 16 May 2008) | 3 lines
+    Use stricter types for image options.
 
-get processed values from exiv2
-http://sourceforge.net/tracker/index.php?func=detail&aid=1962444&group_id=222125&atid=1054680
+commit cd68217e812b2419e92301d76902edd05c361aee
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 26 12:23:48 2008 +0000
 
-------------------------------------------------------------------------
-r769 | zas_ | 2008-05-16 16:59:45 +0200 (Fri, 16 May 2008) | 3 lines
+    Use flags instead of int parameters for pixbuf_renderer_overlay_add().
 
-Fix redundant application name in window titles.
-It simplifies code.
+commit a3ffd5d74d5baad16a8a35a02ab28267dd15efd2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 26 11:48:40 2008 +0000
 
-------------------------------------------------------------------------
-r768 | zas_ | 2008-05-16 16:38:05 +0200 (Fri, 16 May 2008) | 2 lines
+    Only define ExifOrientationType if GQ_BUILD is not defined since
+    it is already defined in exif.h.
 
-French translation was updated.
+commit d29cd729b404fc3901d862214231ef514f855aa5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jun 25 20:53:52 2008 +0000
 
-------------------------------------------------------------------------
-r767 | zas_ | 2008-05-16 14:16:49 +0200 (Fri, 16 May 2008) | 3 lines
+    Tidy up.
 
-Do not use printf() directly but use new wrapper function log_printf() instead.
+commit 0633bc36c636a0f2afa5bf3211639454870ac177
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Jun 25 20:22:02 2008 +0000
 
+    French translation was updated.
 
-------------------------------------------------------------------------
-r766 | zas_ | 2008-05-16 14:08:51 +0200 (Fri, 16 May 2008) | 2 lines
+commit 7c4531fa7d4bdf83eb347a0e2e31e92070773930
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 22 20:07:32 2008 +0000
 
-Drop include "debug.h".
+    optimized marks drawing
 
-------------------------------------------------------------------------
-r765 | zas_ | 2008-05-16 12:02:56 +0200 (Fri, 16 May 2008) | 3 lines
+commit 3d04c8792f8b45bc2a5ba7e69a269e0404cd40d0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 22 20:01:20 2008 +0000
 
-Include debug.h from main.h since debug macros may be used anywhere in the code.
+    show marks in iconview
 
+commit 975fc4e9e6d3601e83ecd38c159e841205b4bf59
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 22 10:01:26 2008 +0000
 
-------------------------------------------------------------------------
-r764 | zas_ | 2008-05-16 11:10:56 +0200 (Fri, 16 May 2008) | 5 lines
+    show sidecars in icon view
 
-Improve editor commands error display:
-- display all errors (not only syntax errors)
-- display errors from Preferences (checks are made on Apply or OK)
+commit 5a236ea28726e79b2e00b6b054580b6a4d00f441
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 22 09:40:57 2008 +0000
 
+    fixed in-place renaming
 
-------------------------------------------------------------------------
-r763 | zas_ | 2008-05-16 10:37:07 +0200 (Fri, 16 May 2008) | 7 lines
+commit 5b05e1156a0efc4e39afb58ae89a034d47b6aa81
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 22 09:19:42 2008 +0000
 
-Improve editors a bit:
-- allow whitespaces before and after %v, %V, %w
-- allow % escaping using %% (mandatory to use shell commands than contain % characters)
-- display a dialog on execution if a syntax error is detected (only for generic editors)
-- update README editors section
+    added possibility to disable grouping of selected files
 
+commit 58b7c37cd74e7f8eedca2b706c4b89137702c9f5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 21 22:01:45 2008 +0000
 
-------------------------------------------------------------------------
-r762 | zas_ | 2008-05-14 20:12:11 +0200 (Wed, 14 May 2008) | 9 lines
+    cache size made configurable
 
-The Encoding key is now deprecated by the FreeDesktop standard and all
-strings are required to be encoded in UTF-8. This desktop entry
-explicitly specifies an Encoding of UTF-8, which is harmless but no longer
-necessary.
+commit c74e05815240fc255b0267d9d9f5ae4a60d1ae68
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 21 19:26:01 2008 +0000
 
-See http://standards.freedesktop.org/desktop-entry-spec/1.0/apc.html
+    measure pixbuf cache size in bytes
 
-Patch #1963689.
+commit 1986378ee25aef236908a6a1f67952406c9d51e7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 21 16:00:13 2008 +0000
 
-------------------------------------------------------------------------
-r761 | zas_ | 2008-05-14 20:09:05 +0200 (Wed, 14 May 2008) | 3 lines
+    simple cache for loaded pixbufs
 
-Patch #1963690 was applied.
-It fixes hyphens/minus confusion in the man page.
+commit 70fb724412e907f541d14eac8e1e67db474d1086
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 21 11:05:55 2008 +0000
 
-------------------------------------------------------------------------
-r760 | zas_ | 2008-05-14 19:00:25 +0200 (Wed, 14 May 2008) | 4 lines
+    renamed fd->pixbuf to fd->thumb_pixbuf
 
-Simplify thumb_std_maint_moved(), since g_list_append knows
-how to append to a NULL list. Patch by Uwe Ohse.
+commit 065cba7850d0dc548bfc7c33ecddf50bbb0ba0d7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 18 22:26:52 2008 +0000
 
+    implemented generic FileData cache
+    use it for caching decoded exif data
 
-------------------------------------------------------------------------
-r759 | zas_ | 2008-05-14 18:52:55 +0200 (Wed, 14 May 2008) | 4 lines
+commit 2ca1adb7912dfd23318e829d9f01c4e9a2f76284
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 17 20:25:05 2008 +0000
 
-Simplify collect_manager_add_action(), since g_list_append knows 
-how to append to a NULL list. Patch by Uwe Ohse.
+    more robust thumbs progress bar
 
+commit 11224ad1e9f6e9517523beb1ffb62b973228ebc9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 17 19:56:21 2008 +0000
 
-------------------------------------------------------------------------
-r758 | zas_ | 2008-05-14 14:59:00 +0200 (Wed, 14 May 2008) | 2 lines
+    do not allocate new buffer for thumbnails with correct orientation
 
-Merge vflist_row_by_path() into vflist_index_by_path().
+commit 304e05c4c8845e40cd58ec758d56c7174d202899
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 16 19:07:02 2008 +0000
 
-------------------------------------------------------------------------
-r757 | zas_ | 2008-05-14 12:40:43 +0200 (Wed, 14 May 2008) | 3 lines
+    fixed memory leak
 
-Fix some typos. Thanks to Michal \u010ciha\u0159 and James R. Van Zandt.
-Patch #1963691.
+commit 57a04dae8f42380d5df07158b1c80ba21f393c6c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 16 18:37:35 2008 +0000
 
-------------------------------------------------------------------------
-r756 | zas_ | 2008-05-14 10:56:08 +0200 (Wed, 14 May 2008) | 2 lines
+    another try to free layout at exit
 
-Make vf_pop_menu_*_cb static.
+commit b4d3e9956e2ce9ed23dab2fcf08974ec679f5453
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 15 21:52:15 2008 +0000
 
-------------------------------------------------------------------------
-r755 | zas_ | 2008-05-13 22:31:35 +0200 (Tue, 13 May 2008) | 2 lines
+    rotate thumbnails by exif
 
-French translation fixes.
+commit f59f132343a9b70c1fbb8abc755d514751e3e2d7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 15 20:09:15 2008 +0000
 
-------------------------------------------------------------------------
-r754 | zas_ | 2008-05-13 22:21:00 +0200 (Tue, 13 May 2008) | 3 lines
+    use FileData in thumb_loader
 
-Resync POTFILES.in and *.po, update french translation and
-regenerate statistics in README.
+commit 0d80d51136e02c021dcc07f45d78adce8a3ada33
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 14 21:49:48 2008 +0000
 
-------------------------------------------------------------------------
-r753 | zas_ | 2008-05-13 22:13:44 +0200 (Tue, 13 May 2008) | 2 lines
+    use GtkSizeGroup to control initial size of split images
 
-Merge vflist_pop_menu() and vficon_pop_menu() into vf_pop_menu().
+commit 1df917cf51c93c886a2b27eb91d9161f5ea64b2f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 14 18:41:30 2008 +0000
 
-------------------------------------------------------------------------
-r752 | zas_ | 2008-05-13 21:56:52 +0200 (Tue, 13 May 2008) | 2 lines
+    preserve image center on refresh
 
-Move VFICON_INFO() and VFLIST_INFO() macros to view_file.h
+commit aac341d52f5b64196ffd78652fc95a58a5bfd6d0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 14 18:33:40 2008 +0000
 
-------------------------------------------------------------------------
-r751 | zas_ | 2008-05-13 21:54:13 +0200 (Tue, 13 May 2008) | 2 lines
+    use multiline description in vflist with large thumbnails
+    always display marks in the first column
+    show expander in "name" column
 
-vficon_pop_menu(): drop "gint active" parameter, use stored click_id instead.
+commit ac6e8d73416d1b72e768729b917aa4532da3844a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 14 17:32:27 2008 +0000
 
-------------------------------------------------------------------------
-r750 | zas_ | 2008-05-13 21:51:22 +0200 (Tue, 13 May 2008) | 3 lines
+    join name and sidecars to one string
 
-vflist_pop_menu(): drop FileData * parameter, use stored click_fd instead.
+commit 17344587a815f0057e8739cfbf5d2afbea4f2667
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 14 17:14:28 2008 +0000
 
+    optimized vflist_setup_iter_recursive
 
-------------------------------------------------------------------------
-r749 | zas_ | 2008-05-13 21:45:04 +0200 (Tue, 13 May 2008) | 2 lines
+commit 8244a9e46297c4adc8dd5095a04a199e9b536a71
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 14 12:43:39 2008 +0000
 
-Fix last patch, only set vf->clicked_mark for a valid mark.
+    iconlist_refresh optimization
 
-------------------------------------------------------------------------
-r748 | zas_ | 2008-05-13 21:32:25 +0200 (Tue, 13 May 2008) | 6 lines
+commit 0f4fcde469fc6f9081e4078fa3a88f1c993ff296
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 14 12:30:44 2008 +0000
 
-Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
-named clicked_mark.
-Marks numbering is now consistent with menus (starting at 1, 0 is an
-invalid mark), assertions were modified accordingly.
+    fixed iconview update after deletion of selected image
 
+commit 37fd19aa6a5df3496f5995ac518599b1b74798b8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jun 14 06:52:52 2008 +0000
 
-------------------------------------------------------------------------
-r747 | zas_ | 2008-05-13 18:09:43 +0200 (Tue, 13 May 2008) | 6 lines
+    Silent unused variable warning.
 
-Expand tilde with file: and view: remote parameters.
-Now these are working:
-geeqie -r file:~/dir
-geeqie -r view:~user/file
+commit 5f7b05915dcf7c7ead03ba825ecdd1f825c07482
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 13 21:32:58 2008 +0000
 
+    optimized vflist_setup_iter
 
-------------------------------------------------------------------------
-r746 | zas_ | 2008-05-13 16:49:38 +0200 (Tue, 13 May 2008) | 3 lines
+commit 922cb25e24b4c735857883757c923bc03002f475
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 13 13:33:11 2008 +0000
 
-Display a message when invalid remote options are used.
+    French translation was updated.
 
+commit 669a4954c3e7a9c8b7dd5fe8610e6bd163787738
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 13 12:27:41 2008 +0000
 
-------------------------------------------------------------------------
-r745 | zas_ | 2008-05-13 16:35:51 +0200 (Tue, 13 May 2008) | 2 lines
+    Revert patches 759 and 760.
+    759 patch broke adding selection of files through sort manager
+    to an unopened collection.
 
-Comparing tag id is not sufficient, check the tag name too.
+commit 16aa61eb9064f9a2ff7faeb5cb6c49878ea0d735
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 13 11:51:23 2008 +0000
 
-------------------------------------------------------------------------
-r744 | zas_ | 2008-05-13 13:58:47 +0200 (Tue, 13 May 2008) | 2 lines
+    Display total size of files in collection window, for the list and for the selection.
 
-Keywords and comment can now be displayed in OSD info using %keywords% and %comment%.
+commit c687f78e1f9625ec8afb0bfc04e43baf9c841a7d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 13 11:11:57 2008 +0000
 
-------------------------------------------------------------------------
-r743 | zas_ | 2008-05-13 10:53:26 +0200 (Tue, 13 May 2008) | 2 lines
+    Optionnally display directory's date in list view.
+    It can be set through Preferences > Advanced > Behavior and
+    is saved to rc file as layout.show_directory_date option.
 
-Move all remote stuff from main.c to remote.[ch].
+commit 0a1ad21b4dda0f856b023b01dfd9df79f71ca97f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 12 22:43:32 2008 +0000
 
-------------------------------------------------------------------------
-r742 | zas_ | 2008-05-13 10:02:46 +0200 (Tue, 13 May 2008) | 2 lines
+    load_options_from():
+    - do not copy option name and value anywhere, only copy value_all to a separate buffer
+    - allow more relaxed syntax on read, so we can correctly read option name and value
+      even if user made some errors like replacing ':' by '=' or inserting a space before ':'.
+    - minor aesthetical changes
 
-Move some functions from main.[ch] to new window.[ch].
+commit 11a07ebce120ac8f073b1ffbd2dc828ad54783e1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 12 21:21:32 2008 +0000
 
-------------------------------------------------------------------------
-r741 | zas_ | 2008-05-13 09:34:37 +0200 (Tue, 13 May 2008) | 2 lines
+    Add a comment about relative positions of image overlay in the rc file.
 
-Ensure that we end with UTF8 encoded comment and keywords.
+commit 943be3f7f7676c11b6826fd507e98477aee44281
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 12 20:33:51 2008 +0000
 
-------------------------------------------------------------------------
-r740 | zas_ | 2008-05-13 01:26:00 +0200 (Tue, 13 May 2008) | 4 lines
+    Allow to set image overlay info position through options:
+    - image_overlay.common.x
+    - image_overlay.common.y
+    
+    For now, there are only editable through rc file.
 
-Reading of Iptc.Application2.Keywords should now be fixed.
-Use uft8_validate_or_convert() on exif's text data to be safe.
+commit e6b5b17219e75d276407a55c9fa9833a0d3a5848
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 12 20:17:22 2008 +0000
 
+    Move some functions from image.[ch] to image-overlay.c and make them static:
+    - image_overlay_add()
+    - image_overlay_set()
+    - image_overlay_remove()
+    - image_overlay_get() (unused)
 
-------------------------------------------------------------------------
-r739 | zas_ | 2008-05-13 01:21:35 +0200 (Tue, 13 May 2008) | 2 lines
+commit c5eb8769b9462b318f52c0d70635fda0c92038cc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jun 12 18:30:33 2008 +0000
 
-Rename bar_exif_validate_text() to utf8_validate_or_convert() and move it to main.[ch].
+    reverted changes in layout_close made in rev. 890 and 901
 
-------------------------------------------------------------------------
-r738 | zas_ | 2008-05-13 01:00:04 +0200 (Tue, 13 May 2008) | 2 lines
+commit 86a4f3c90de18942b84b33046721801cb1edd504
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 10 19:25:21 2008 +0000
 
-bar_exif_validate_text(): use computed length and cleanup.
+    fixed vdtree_sort_cb
 
-------------------------------------------------------------------------
-r737 | zas_ | 2008-05-12 21:56:28 +0200 (Mon, 12 May 2008) | 2 lines
+commit 69b52cb5e907359a473418866f74461822448737
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 10 18:39:19 2008 +0000
 
-Disable non-working Iptc.Application2.Keywords reading introduced in revision 736.
+    fixed segfault in vd_rename_cb
 
-------------------------------------------------------------------------
-r736 | zas_ | 2008-05-12 19:10:40 +0200 (Mon, 12 May 2008) | 5 lines
+commit 08524203c709cf0013c2bd1d04c348067685e526
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 10 18:19:17 2008 +0000
 
-Extract and append keywords from Iptc.Application2.Keywords tags.
-A function was added to make the keywords unique in the list.
-Note: Iptc.Application2.Keywords is only read, not written.
+    dropped vficon_sync, use vficon_refresh everywhere
 
+commit f42d498ea1a214bb6c7bf0c6e451489a50c9ab7f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 10 11:55:18 2008 +0000
 
-------------------------------------------------------------------------
-r735 | zas_ | 2008-05-12 12:46:23 +0200 (Mon, 12 May 2008) | 2 lines
+    collection_from_dnd_data(): simplify and optimize.
 
-When an option was successfully read, just continue to next line.
+commit 554bfe983c1442fc84a832a0a6d6cc89ef8182a7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 10 11:27:35 2008 +0000
 
-------------------------------------------------------------------------
-r734 | zas_ | 2008-05-12 12:37:37 +0200 (Mon, 12 May 2008) | 2 lines
+    collection_info_list_to_dnd_data(): simplify and optimize.
 
-Minor formatting fix in rc file header.
+commit 55be71b45a3c28de13d1c532bd2d6e9278fc0239
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 9 20:27:39 2008 +0000
 
-------------------------------------------------------------------------
-r733 | zas_ | 2008-05-12 10:52:17 +0200 (Mon, 12 May 2008) | 8 lines
+    moved notification to view_file.c
 
-Rework read_*_option():
-- read_u?int_option() now interpret a value of "true" as 1
-- read_bool_option() now interpret any value different from 0 as true.
-- make functions return TRUE on successful read, FALSE else
+commit e04699877776b3d59fc4ac827cc57166f47328f6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 9 19:43:56 2008 +0000
 
-Theses changes will help to maintain compatibility when options are modified.
+    run idle function just once
 
+commit d77ba4a93e80fa8e39ce81d7cb803c55e7da0ca7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 9 19:41:37 2008 +0000
 
-------------------------------------------------------------------------
-r732 | zas_ | 2008-05-12 10:11:27 +0200 (Mon, 12 May 2008) | 3 lines
+    use vficon_refresh for updating
 
-Rename option image_overlay.common.enabled to image_overlay.common.state
-since it is not a boolean anymore.
+commit 1e0be504a15f4eb0228b8b99d69741fed67e6ff5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 9 19:00:47 2008 +0000
 
-------------------------------------------------------------------------
-r731 | zas_ | 2008-05-12 02:22:38 +0200 (Mon, 12 May 2008) | 2 lines
+    handle deletion of selected files
 
-Add some wrapper functions for not yet common code.
+commit eff5536c6f25a057eacc0c9a59ef4a0997ce50e5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 9 18:28:28 2008 +0000
 
-------------------------------------------------------------------------
-r730 | zas_ | 2008-05-12 01:56:40 +0200 (Mon, 12 May 2008) | 3 lines
+    optimized vficon_refresh_real
 
-Make vf_pop_menu_toggle_view_type_cb() independent of FILEVIEW_LIST/FILEVIEW_ICON real values.
+commit f4c575e663819adb425f9a7468cd7614a56b03be
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jun 9 10:10:34 2008 +0000
 
+    Minor fixes and add a note about variable declaration.
 
-------------------------------------------------------------------------
-r729 | zas_ | 2008-05-12 01:47:59 +0200 (Mon, 12 May 2008) | 2 lines
+commit 1e2563b337e30225c07935af8041a7d1744c8d72
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Jun 9 07:14:46 2008 +0000
 
-Move a part of pop up menu common code to view_file.[ch].
+    Use unsigned type for marks since it is used as a bitfield.
 
-------------------------------------------------------------------------
-r728 | zas_ | 2008-05-12 01:09:39 +0200 (Mon, 12 May 2008) | 3 lines
+commit f104380fae8162102711930439e8b2e5fc9e3910
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Jun 9 07:06:53 2008 +0000
 
-Introduce vf_pop_menu_file_list() as a wrapper to
-vflist_pop_menu_file_list() and vficon_pop_menu_file_list().
+    fixed saving options on exit
 
-------------------------------------------------------------------------
-r727 | zas_ | 2008-05-11 23:11:54 +0200 (Sun, 11 May 2008) | 2 lines
+commit 020655c63732ec867014ba4e41637831789e05c3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Jun 8 23:42:51 2008 +0000
 
-Use vf_* functions where possible.
+    Tidy up: add/remove white lines, minor code changes.
 
-------------------------------------------------------------------------
-r726 | zas_ | 2008-05-11 22:38:21 +0200 (Sun, 11 May 2008) | 2 lines
+commit 1f83c4e6344aeed363e504be79d50d1485dd8160
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 8 21:21:13 2008 +0000
 
-Drop unused layout_list_get_path() and vf*_index_get_path().
+    improved vficon_populate
 
-------------------------------------------------------------------------
-r725 | zas_ | 2008-05-11 15:17:38 +0200 (Sun, 11 May 2008) | 2 lines
+commit a871f2934cd24dd852a1810a82d7029cf8cfb3e9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 8 20:24:46 2008 +0000
 
-French translation was updated.
+    vficon_sync speed-up
 
-------------------------------------------------------------------------
-r724 | zas_ | 2008-05-11 15:14:58 +0200 (Sun, 11 May 2008) | 4 lines
+commit b4f826d25c1daec9e7b3ca63203b615b2490ac8e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 8 19:09:44 2008 +0000
 
-An option to save and restore the last path used was added.
-This option appears as startup.use_last_path in rc file.
-Preferences > General > Startup was modified accordingly.
+    better check for notify type
 
-------------------------------------------------------------------------
-r723 | zas_ | 2008-05-11 14:23:26 +0200 (Sun, 11 May 2008) | 8 lines
+commit c64e06ce0192ac8386a54296c09c2b5ee5989aa5
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jun 8 09:25:39 2008 +0000
 
-Rename options:
-startup_path_enable -> startup.restore_path
-startup_path        -> startup.path
+    fixed switching thumbnails in listview on and off - bug 1984825
 
-Geeqie is still able to read old options.
+commit cd2e0e411d683cd490371d4756b0235e2679071a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 7 22:44:17 2008 +0000
 
+    various refresh and notification fixes
 
+commit b993ae7cb2ecc511e009ee18dfa720fd66e3a715
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 7 15:08:33 2008 +0000
 
-------------------------------------------------------------------------
-r722 | zas_ | 2008-05-11 13:46:48 +0200 (Sun, 11 May 2008) | 2 lines
+    various notification improvements
 
-Fix help window title.
+commit 063bd585c8e7e4c8bf3c00a0403f7a6ba88cb180
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 7 10:45:33 2008 +0000
 
-------------------------------------------------------------------------
-r721 | zas_ | 2008-05-11 13:44:58 +0200 (Sun, 11 May 2008) | 2 lines
+    use the new notification for collections
 
-Use computed string length.
+commit ee08f41b89a36d13dfabb071fccdb532c58f69bf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Jun 7 10:18:30 2008 +0000
 
-------------------------------------------------------------------------
-r720 | zas_ | 2008-05-11 13:41:32 +0200 (Sun, 11 May 2008) | 2 lines
+    Display Lirc state in config log.
+    Re-organize the config log a bit.
 
-Slightly increase help window's default width.
+commit 4df45b3ded4ba25fe8daaafdb3ea0de18eb9769c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 7 09:36:12 2008 +0000
 
-------------------------------------------------------------------------
-r719 | zas_ | 2008-05-11 13:30:41 +0200 (Sun, 11 May 2008) | 4 lines
+    use new notification in img-view
 
-Add an help button to OSD info configuration in Preferences dialog.
-Make its own section named "Overlay Screen Display".
+commit 92497f66b819d5862cc221344b102d04c59204f4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 7 09:10:01 2008 +0000
 
+    use new notification in layout and layout_image
 
-------------------------------------------------------------------------
-r718 | zas_ | 2008-05-11 12:25:04 +0200 (Sun, 11 May 2008) | 5 lines
+commit f745066286b72604eddc365c088df7a82eafbbcd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 7 08:13:22 2008 +0000
 
-Partially update main README.
-A section concerning overlay info was added.
-Translation statistics were updated.
+    used new notification in search.c
 
+commit 7637e235738516de25759d26d3feb45a171a18d3
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jun 7 07:45:08 2008 +0000
 
-------------------------------------------------------------------------
-r717 | zas_ | 2008-05-11 11:37:46 +0200 (Sun, 11 May 2008) | 50 lines
+    used new notification in dupe.c
 
-Change translations statistics formatting to match the style
-use in the README file.
+commit dd62fe18714c2f714e444c6c6f2de5e7e07acd84
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 6 22:34:15 2008 +0000
 
-Here is the result for current trunk:
+    used new notification in cache_maint
 
-Translations statistics
-Date: Sun, 11 May 2008 11:33:14 +0200
+commit f335345202a840721560f5aab41ba110a449ddd1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 6 22:11:03 2008 +0000
 
-Note: completion % in the chart below may not be quite correct
-      when fuzzy translations exist but do not appear in the source.
-      For exact results, run make update-po with up to date POTFILES.in.
-      comp % = trans / (trans + fuzzy + untrans)
+    added NotifyType
 
-Language      Comp(%)  Trans  Fuzzy  Untrans  Total
-fr             100.00    985      0        0    985
-be              90.56    892     25       68    985
-eu              68.53    675    150      160    985
-eo              68.22    672    153      160    985
-vi              68.02    670    156      159    985
-it              67.82    668    154      163    985
-pt_BR           67.82    668    154      163    985
-zh_TW           66.90    659    150      176    985
-sk              66.50    655    158      172    985
-fi              64.37    634    176      175    985
-nl              64.37    634    179      172    985
-sv              64.16    632    175      178    985
-bg              64.06    631    175      179    985
-ca              64.06    631    175      179    985
-cs              64.06    631    175      179    985
-de              64.06    631    175      179    985
-es              64.06    631    175      179    985
-ja              64.06    631    175      179    985
-ru              64.06    631    175      179    985
-pl              60.61    597    148      240    985
-ar              42.94    423    315      247    985
-ro              37.56    370    342      273    985
-hu              36.14    356    332      297    985
-id              19.70    194    408      383    985
-et              19.29    190    407      388    985
-uk              17.16    169    411      405    985
-nb              15.94    157    416      412    985
-zh_CN.GB2312    15.94    157    416      412    985
-th              15.13    149    413      423    985
-sl              14.72    145    419      421    985
-da              12.99    128    402      455    985
-ko              11.37    112     52      821    985
-tr               6.60     65    398      522    985
+commit 8bca5d11043655dcb7156598c15884b81eabb83a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 6 21:50:09 2008 +0000
 
+    realtime file monitor
 
+commit f0ca274daef77b01f134d6c556d2efa775169944
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 6 20:59:03 2008 +0000
 
-------------------------------------------------------------------------
-r716 | zas_ | 2008-05-10 23:29:53 +0200 (Sat, 10 May 2008) | 25 lines
+    zero-lenght path must be allowed for now
 
-Fix display of collection in overlay info.
-Due to markup escaped <i>collection</i> was displayed instead of collection's in italic.
+commit 765ce1d52bad52bbfeb8b930c0428318d93185d1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Jun 6 08:01:19 2008 +0000
 
-Overlay info syntax was extended to allow the wrapping of displayed data with markup.
+    French translation was updated.
 
-General syntax is: %name[:length limit][:extra]%
-Extra string uses special character '*' to mark the place of the data to display.
-If no '*' is present, then extra string is just appended to data.
-Any "\n" is replaced by a newline on display.
-Pango mark up is accepted in left and right parts.
-If data is empty, nothing will be displayed.
+commit f64e2fa6ee80241e0bcd786c7c9dc3f70980367d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 5 23:31:22 2008 +0000
 
-Examples:
-"%name:<i>*</i>\n%" -> name is displayed in italics ended with a newline
-"%size:\n%"         -> size is displayed with a newline at end
-"%formatted.ISOSpeedRating:ISO *%"      -> prefix iso number with "ISO " (ie. "ISO 100")
-"Collection <b>*</b>\n" -> display collection name in bold prefixed by "Collection " and a newline is appended
+    Fix "No newline at end of file" warning.
 
+commit 7839d6af203658adba7d3de9d18233f48bffc292
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jun 5 18:43:44 2008 +0000
 
-Collection name formatting was slighly improved by not displaying the .gqv extension.
-The default overlay info string was modified to use the new syntax, but older info strings should be
-displayed as usual.
+    use new notification in vficon
 
+commit 3cf04e271280aed1006b46d02e25b5d026c9a3e2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 5 09:24:42 2008 +0000
 
+    Compare paths using utf8_collate_key() since paths are utf8-encoded.
+    It fixes bug 1959854.
 
-------------------------------------------------------------------------
-r715 | zas_ | 2008-05-10 16:22:18 +0200 (Sat, 10 May 2008) | 2 lines
+commit baf540a744f37d692c00c740cfe77505f3e4971c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Jun 5 08:41:02 2008 +0000
 
-image_osd_get() now returns OsdShowFlags.
+    Use uft8_collate_key() to sort utf8 strings.
+    Modify file_data_set_path() to sync collate keys and file_data_pool
+    on path change.
+    
+    Partially fix bug 1959854.
 
-------------------------------------------------------------------------
-r714 | zas_ | 2008-05-10 15:54:25 +0200 (Sat, 10 May 2008) | 2 lines
+commit 6129e31e323e0064a6c9bb2285dab6cf32088146
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jun 4 21:12:47 2008 +0000
 
-Display a simple grid with histogram.
+    new notification system (used only in vflist for now)
 
-------------------------------------------------------------------------
-r713 | zas_ | 2008-05-10 14:33:52 +0200 (Sat, 10 May 2008) | 2 lines
+commit b83763acf8f3ec6b12ca5302a6e7c73d20eb2ecb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jun 3 19:44:19 2008 +0000
 
-Initialize to correct value (OSD_SHOW_NOTHING instead of FALSE).
+    replaced directory path with FileData* dir_fd
 
-------------------------------------------------------------------------
-r712 | zas_ | 2008-05-10 11:00:14 +0200 (Sat, 10 May 2008) | 4 lines
+commit af94f830d3c67610709600c6a57e85dc583630c1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 15:54:05 2008 +0000
 
-Save full OSD state to rc file and restore it on startup.
-It allows to restore OSD with or without histogram depending
-on previous state.
+    Allow to modify the aspect of Geeqie through the use of a
+    gtkrc file that may be present in the geeqie rc directory.
+    Patch by Aldric RENAUDIN and me.
 
-------------------------------------------------------------------------
-r711 | zas_ | 2008-05-09 14:43:10 +0200 (Fri, 09 May 2008) | 3 lines
+commit fa9d41fdd5e0e83247ffcf9195db3c5d069a1976
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 13:54:22 2008 +0000
 
-image_osd_info_render(): if there's no fd, just return.
+    Replace hardcoded collection filename extension by a macro (GQ_COLLECTION_EXT).
 
+commit 02ad66458b97d359e9612846624e49f42d7109ba
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 11:24:16 2008 +0000
 
-------------------------------------------------------------------------
-r710 | zas_ | 2008-05-09 14:33:24 +0200 (Fri, 09 May 2008) | 5 lines
+    Drop initialization to NULL since filelist_read() will take care of it.
 
-Move overlay histogram stuff from ImageWindow to OverlayStateData.
-It simplifies things a lot and make more sense.
+commit 3df14dfb67589c306fb4095b7087638d4aad61bc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 09:41:00 2008 +0000
 
-Note: overlay icons display is broken since a long time it seems.
+    filelist_read_real(): optimize and clean up.
 
-------------------------------------------------------------------------
-r709 | zas_ | 2008-05-09 13:15:56 +0200 (Fri, 09 May 2008) | 2 lines
+commit c3cbb65ba80d2339026513a32fac2ddf1f866bbe
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 09:03:33 2008 +0000
 
-Introduce image_get_osd_data() and image_set_osd_data().
+    Reduce indentation level.
 
-------------------------------------------------------------------------
-r708 | zas_ | 2008-05-09 11:58:46 +0200 (Fri, 09 May 2008) | 2 lines
+commit 18f3117f7949d432a1ebf2d4bfcb47a1a50b146d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 08:57:46 2008 +0000
 
-image_osd_get() and image_osd_set() now uses flags.
+    Reduce indentation level.
 
-------------------------------------------------------------------------
-r707 | zas_ | 2008-05-09 11:34:38 +0200 (Fri, 09 May 2008) | 3 lines
+commit 688b1111bc04b733c4d879b16faf5c75d4bcbdbf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 08:53:53 2008 +0000
 
-image_osd_histogram_chan_toggle(), image_osd_histogram_log_toggle():
-reduce indentation level.
+    collection_table_find_data_by_coord(): tidy up.
 
-------------------------------------------------------------------------
-r706 | zas_ | 2008-05-09 10:39:18 +0200 (Fri, 09 May 2008) | 7 lines
+commit 25c47b533a126a95dd10c663d9f6a32b5e78b8e5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 07:37:24 2008 +0000
 
-Preserve last histogram modes.
-When a new histogram is displayed, it uses previously chosen
-modes.
-These modes are saved on exit to rc file as options:
-histogram.last_channel_mode
-histogram.last_log_mode
+    vflist_maint(): only allocate memory and compare strings if needed.
 
-------------------------------------------------------------------------
-r705 | zas_ | 2008-05-09 10:03:25 +0200 (Fri, 09 May 2008) | 2 lines
+commit 9069f1e009b20f29cf15c7ad6632476589f8516c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Jun 3 07:32:13 2008 +0000
 
-Update CODING and HACKING files, and add po/README file for translators.
+    layout_real_renamed(), layout_real_removed(), layout_real_moved():
+    simplify code.
 
-------------------------------------------------------------------------
-r704 | zas_ | 2008-05-09 09:46:18 +0200 (Fri, 09 May 2008) | 2 lines
+commit e1edb9d5c4d980e5c1615f96cd91804cb62ed922
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 31 19:46:26 2008 +0000
 
-Make lirc_cleanup() and lirc_input_callback() static.
+    do not change original FileData on copy
 
-------------------------------------------------------------------------
-r703 | zas_ | 2008-05-09 09:32:30 +0200 (Fri, 09 May 2008) | 4 lines
+commit 7fe6112289193b5421a08fc9a27da23a293d8622
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 31 19:44:41 2008 +0000
 
-Use function(void) instead of function() for declaring functions which
-do not take any parameters at all.
-It respects current Geeqie coding style more.
+    replaced vflist_maint functions by vflist_refresh - it allows to follow
+    changes made by external editors more precisely
 
-------------------------------------------------------------------------
-r702 | zas_ | 2008-05-09 00:59:14 +0200 (Fri, 09 May 2008) | 4 lines
+commit 10e0bd5513c5c314d7feba61bac30c2d2bd50669
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 30 21:41:46 2008 +0000
 
-In the search results view, hide dimensions column instead of
-displaying an empty one.
-When dimensions search criteria is used, it is always displayed.
+    vflist_populate_view: better handle selected files that are renamed or deleted
 
-------------------------------------------------------------------------
-r701 | zas_ | 2008-05-09 00:49:16 +0200 (Fri, 09 May 2008) | 3 lines
+commit 44179fa3ab21aca878d86a7b84a4822927e62dfb
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 30 20:13:16 2008 +0000
 
-Reset thumbnail column to NULL when hidden.
-It fixes bug 1960274.
+    fixed thumb index (thumbnails are shown again)
 
-------------------------------------------------------------------------
-r700 | zas_ | 2008-05-08 22:21:03 +0200 (Thu, 08 May 2008) | 2 lines
+commit f5bae1ffc402de38549948787c689ce02fc598f1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 30 19:53:52 2008 +0000
 
-search_status_update(): slightly reduce code redundancy.
+    simplified vflist_populate_view
 
-------------------------------------------------------------------------
-r699 | zas_ | 2008-05-08 14:50:25 +0200 (Thu, 08 May 2008) | 4 lines
+commit ce29b00d2ae2d4461da481c9703d1a1e34d03926
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 30 08:39:52 2008 +0000
 
-Use g_ascii_strncasecmp() instead of strncasecmp() where applicable.
-Add a FIXME where potential improper usage of strncasecmp() is made. 
+    Use functions to set editors name and command and ensure they are
+    utf8-encoded.
+    Previously, non-utf8 strings from rc file caused some issues.
 
+commit 639e6684b4c4097f95fc2d732eb98a8119d09791
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 30 08:36:23 2008 +0000
 
-------------------------------------------------------------------------
-r698 | zas_ | 2008-05-08 14:38:34 +0200 (Thu, 08 May 2008) | 3 lines
+    Make utf8_validate_or_convert() to always allocate a new string.
 
-Use g_ascii_strcasecmp() instead of strcasecmp() where ascii-only strings
-are used.
+commit ab16da5e16b325b51e888d8969360b48770b0cf3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 30 07:20:25 2008 +0000
 
-------------------------------------------------------------------------
-r697 | zas_ | 2008-05-08 01:27:26 +0200 (Thu, 08 May 2008) | 8 lines
+    Check for existing editor command using is_valid_editor_command().
 
-Replace deprecated functions by their counterparts:
-g_strcasecmp() -> g_ascii_strcasecmp()
-g_strncasecmp() -> g_ascii_strncasecmp()
-gtk_input_remove() -> g_source_remove()
-g_io_channel_close() -> g_io_channel_shutdown() + g_io_channel_unref()
+commit 7afa3a0b07b38b082a647bc50c046a4d9758a1e7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 29 07:58:34 2008 +0000
 
-All these are deprecated either since 2.2 or 2.4.
+    Preserve properties window width and height during session even when
+    layout.save_window_positions is not set.
+    It restores the pre revision 858 behavior.
 
-------------------------------------------------------------------------
-r696 | zas_ | 2008-05-08 00:54:33 +0200 (Thu, 08 May 2008) | 3 lines
+commit 05f3eb89357157adbe443d71986902c2e80c997f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 29 07:52:05 2008 +0000
 
-Resync po files.
-French translation was updated.
+    Save properties window width and height to rc file and restore
+    them on next session if layout.save_window_positions is set to TRUE.
 
-------------------------------------------------------------------------
-r695 | zas_ | 2008-05-08 00:48:30 +0200 (Thu, 08 May 2008) | 5 lines
+commit f89fbbf03e4d4593445a2fa731557db2596b0305
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed May 28 22:12:10 2008 +0000
 
-Add a way to invert the current selection.
-An item labeled "Invert selection" was added to the Select submenu
-in the main menu.
+    improved infrastructure for tracing changes, optimized vflist_populate_view
 
+commit 335a8f5397ddda92fc0bf7acc0d3e48be3732cc8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 27 18:46:34 2008 +0000
 
-------------------------------------------------------------------------
-r694 | zas_ | 2008-05-07 01:58:08 +0200 (Wed, 07 May 2008) | 2 lines
+    measure time of filelist update
 
-Tidy up.
+commit 01a388eb2885bc5a9dbbb0faafc437a171ff557d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 27 18:37:15 2008 +0000
 
-------------------------------------------------------------------------
-r693 | zas_ | 2008-05-07 01:53:12 +0200 (Wed, 07 May 2008) | 2 lines
+    another fix in notification
 
-French translation was updated.
+commit d5c322089bf472b8061116dda437870fb7724939
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon May 26 18:32:04 2008 +0000
 
-------------------------------------------------------------------------
-r692 | zas_ | 2008-05-07 01:52:09 +0200 (Wed, 07 May 2008) | 2 lines
+    Fix histogram grid - patch by Uwe Ohse
 
-Add trash.c.
+commit 9530a02bc561d40f936c44d5e45d37ddf32815b9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon May 26 18:22:08 2008 +0000
 
-------------------------------------------------------------------------
-r691 | nadvornik | 2008-05-06 23:35:31 +0200 (Tue, 06 May 2008) | 2 lines
+    use fputs instead of printf - patch by Uwe Ohse
 
-moved safe delete functions to separate file
+commit 1f01199c3dbd8ca9e796ff42b8b591ab90745158
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon May 26 17:06:30 2008 +0000
 
-------------------------------------------------------------------------
-r690 | nadvornik | 2008-05-06 22:24:16 +0200 (Tue, 06 May 2008) | 2 lines
+    fixed bug in notification code
 
-use some of the new functions in filedata.c
+commit 5407c7dd1d47999deb999ddcc4908d7c47b7d74c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 25 20:17:07 2008 +0000
 
-------------------------------------------------------------------------
-r689 | zas_ | 2008-05-06 19:00:55 +0200 (Tue, 06 May 2008) | 3 lines
+    Tidy up: indentation fixes, typo fixes, ...
 
-Allow the user to append or replace comments for a group of selected files.
-Two buttons were added to the Keywords panel.
+commit aa3fda66e2e90d4f87fdb0e71106829aedaac9b0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 25 19:54:00 2008 +0000
 
-------------------------------------------------------------------------
-r688 | zas_ | 2008-05-06 14:31:23 +0200 (Tue, 06 May 2008) | 6 lines
+    Typo fix.
 
-Use a dedicated option to enable keywords and comment saving as XMP tags
-in image's files.
-This new option is named "save_metadata_in_image_file" in configuration file.
-User can toggle it through Preferences > Advanced > Miscellaneous > Store keywords and comments as XMP tags in image files.
-Description of enable_metadata_dirs was modified as an attempt to improve clarity.
+commit 7aca9bde7ea89130df6934148287dc3c0f290cd2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 25 19:13:04 2008 +0000
 
-------------------------------------------------------------------------
-r687 | zas_ | 2008-05-06 14:03:39 +0200 (Tue, 06 May 2008) | 2 lines
+    Typo fix.
 
-comment_xmp_read(), comment_xmp_write(): cleanup and improve readibility.
+commit 8973118af85916c7dd6240428d865b593d4e889c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 25 19:03:30 2008 +0000
 
-------------------------------------------------------------------------
-r686 | zas_ | 2008-05-05 23:27:39 +0200 (Mon, 05 May 2008) | 2 lines
+    bar_sort_set_filter_cb(): filter_idx was set as uint so get it as uint.
 
-French translation was updated, various fixes.
+commit 56b0d6ecccbd5ef448fb59983828fccc2c5dd5a2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 24 22:44:18 2008 +0000
 
-------------------------------------------------------------------------
-r685 | zas_ | 2008-05-05 22:56:20 +0200 (Mon, 05 May 2008) | 2 lines
+    rewritten utilops.h:
+    - better integration of external commands
+    - filter commands
 
-Belarusian translation was updated. Thanks to Pavel Piatruk.
+commit d2e0888194442fe09a3f099f149e3d4fb3884bc9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 24 20:01:59 2008 +0000
 
-------------------------------------------------------------------------
-r684 | nadvornik | 2008-05-05 22:51:51 +0200 (Mon, 05 May 2008) | 2 lines
+    Allow to escape star characters in the template string with a \.
+    One can insert a \ by escaping it with another \.
+    Fix deletion of empty parts when using | trick.
+    Append the separator " - " only if data is neither NULL nor empty.
+    Patch by Uwe Ohse and Laurent Monin.
 
-started implementation of API for sidecar files
+commit c3c6184b858a57f359937a912a8db3f715844270
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat May 24 09:18:09 2008 +0000
 
-------------------------------------------------------------------------
-r683 | zas_ | 2008-05-05 22:51:50 +0200 (Mon, 05 May 2008) | 2 lines
+    improved filedata interface
 
-Update POTFILES.in (filelist.c -> filedata.c).
+commit 2f9f06e43c1d6e6b9d1d7c7af3c038ab830f132f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 23:40:12 2008 +0000
 
-------------------------------------------------------------------------
-r682 | zas_ | 2008-05-05 22:49:40 +0200 (Mon, 05 May 2008) | 3 lines
+    Fix display of libpthread detection.
+    Fix display of lirc support, do not test for headers if disabled.
 
-Modify regen_potfiles.sh to generate a patch instead of 
-directly applying changes to POTFILES.in.
+commit 8c7decff43cd66410be772b6c1a3204efe7a7e00
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 23:18:40 2008 +0000
 
-------------------------------------------------------------------------
-r681 | nadvornik | 2008-05-05 21:20:46 +0200 (Mon, 05 May 2008) | 2 lines
+    Silent few warnings that appeared when using --disable-exiv2 configure option.
 
-added .gqv to known file types
+commit a2f6ae48d9b6632eef9b4b2ad77e189afb61016d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 22:57:51 2008 +0000
 
-------------------------------------------------------------------------
-r680 | nadvornik | 2008-05-05 21:11:12 +0200 (Mon, 05 May 2008) | 2 lines
+    French translation was updated.
 
-split filelist.c to filefilter.c and filedata.c
+commit 6e80a2dae26e190fdd56461021cc945a9b807ecc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 22:55:23 2008 +0000
 
-------------------------------------------------------------------------
-r679 | zas_ | 2008-05-05 11:21:01 +0200 (Mon, 05 May 2008) | 2 lines
+    Use the same label for toolbar buttons tooltip than in main menu.
 
-Revert wrong patch rev 676.
+commit 2d39c9d42b6214b53b9f70ca5a9f946974ad326a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 15:07:30 2008 +0000
 
-------------------------------------------------------------------------
-r678 | zas_ | 2008-05-05 11:12:07 +0200 (Mon, 05 May 2008) | 4 lines
+    Add -Wstrict-prototypes to gcc options only in developer mode
+    since it clutters the compilation log with unfixable warnings.
+    Add -Wall in developer mode to display even more warnings.
+    Fix display of --enable-deprecated at end of configure (yes
+    and no were inversed).
 
-Add an helper script to regenerate POTFILES.in file.
-POTFILES.in was updated.
-French translation was updated.
+commit 07c127246cdf49873cbcb769e00bf6299956dc70
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 12:27:28 2008 +0000
 
-------------------------------------------------------------------------
-r677 | zas_ | 2008-05-05 10:32:18 +0200 (Mon, 05 May 2008) | 2 lines
+    slideshow_next(), slideshow_prev(): move code to common slideshow_move(), reducing code redundancy.
 
-Revert patch 675, and correctly fix gtk assertion failure.
+commit 5caa58afa57bc3340d49ea1701b06038cfbb345b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 12:19:42 2008 +0000
 
-------------------------------------------------------------------------
-r676 | zas_ | 2008-05-05 10:15:52 +0200 (Mon, 05 May 2008) | 2 lines
+    Move code from slideshow_timer_reset() to new slideshow_timer_stop() and simplify calls.
 
-Fix two memory leaks.
+commit 001635e8163ec0bc1615dd10de3da4271dd44c00
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 23 00:20:56 2008 +0000
 
-------------------------------------------------------------------------
-r675 | zas_ | 2008-05-05 09:46:32 +0200 (Mon, 05 May 2008) | 3 lines
+    Try to load a system-wide rc file if any, before per-user rc file.
+    For now, system-wide rc file path is set to /etc/geeqie/geeqierc
+    (defined by GQ_SYSTEM_WIDE_DIR in main.h).
+    filter_parse() was modified to replace entries having the same key,
+    needed since it may be called more than once.
+    
+    Please test heavily.
 
-Fix Gtk-CRITICAL **: gtk_label_set_text: assertion `GTK_IS_LABEL (label)' failed
-when swapping to/from file icon view.
+commit 43b4e4860807c26bd83cd99da58ecd68f052eb44
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 23:22:12 2008 +0000
 
-------------------------------------------------------------------------
-r674 | zas_ | 2008-05-05 01:57:20 +0200 (Mon, 05 May 2008) | 2 lines
+    Pass ConfOptions * to save_options() and load_options().
 
-vficon_release_cb(): use switch() and cleanup.
+commit 0fe33428a668c783d42432bf80a574d7df6b564d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 23:17:26 2008 +0000
 
-------------------------------------------------------------------------
-r673 | zas_ | 2008-05-05 01:20:43 +0200 (Mon, 05 May 2008) | 2 lines
+    Move code from save_options() to new save_options_to() which takes
+    the destination path as parameter.
 
-Minor tidyup.
+commit 9d0560eb4199b16058bc3623e49a90393f62b968
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 23:09:53 2008 +0000
 
-------------------------------------------------------------------------
-r672 | zas_ | 2008-05-05 01:06:46 +0200 (Mon, 05 May 2008) | 2 lines
+    Move setup_default_options() and sync_options_with_current_state() to options.[ch].
+    Pass ConfOptions * to these instead of directly using global variable.
+    Cleanup #include in main.c.
 
-Drop unused vficon_select_by_path() and vflist_select_by_path().
+commit 91a77c72ce0c65eacd4ef3810128c7aef9d646db
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 22:49:07 2008 +0000
 
-------------------------------------------------------------------------
-r671 | zas_ | 2008-05-05 01:03:36 +0200 (Mon, 05 May 2008) | 2 lines
+    Move code from exit_program_final() to new sync_options_with_current_state().
 
-Minor cleanup.
+commit 2d0d34eaa30a4d1d8be28eae5158c096e9401174
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 22:43:07 2008 +0000
 
-------------------------------------------------------------------------
-r670 | nadvornik | 2008-05-04 23:54:20 +0200 (Sun, 04 May 2008) | 2 lines
+    Separate path building code from options loading code.
+    Most code of load_options() is moved to new load_options_from().
+    ExifUIList initialization is moved to setup_default_options().
 
-dropped path_list functions, use filelist functions everywhere
+commit b5d0f1f91b10a1efb6bea5fe4878d946b18d124e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 20:22:13 2008 +0000
 
-------------------------------------------------------------------------
-r669 | zas_ | 2008-05-04 21:00:39 +0200 (Sun, 04 May 2008) | 9 lines
+    Make shell command and its option rc file options instead of hardcoded strings.
+    This allows users to modify the shell command that execute "editors".
+    Two new options appear in rc file:
+    - shell.path (default to "/bin/sh")
+    - shell.options (default to "-c")
+    
+    These options can only be changed from the rc file, not at runtime.
+    Tests are made to check that shell.path is not empty and lead to
+    an executable file.
 
-Remove unused functions:
-vflist_set_status_func()
-vflist_set_thumb_status_func()
-vflist_set_layout()
-vficon_set_status_func()
-vficon_set_thumb_status_func()
-vficon_set_layout()
+commit 94c67ee52b2e81260f2f63c17771c4902942857a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 13:00:45 2008 +0000
 
+    Fix signed vs unsigned warnings.
+    In most cases, gint was used instead of guint.
 
-------------------------------------------------------------------------
-r668 | zas_ | 2008-05-04 20:45:06 +0200 (Sun, 04 May 2008) | 2 lines
+commit a4226d0deebed8e331e8b5de48d9c2c11a9e01ff
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 11:28:35 2008 +0000
 
-Drop ViewFileIcon, use ViewFile and ViewFileInfoIcon instead.
+    Comment out unused static function extension_truncate().
 
-------------------------------------------------------------------------
-r667 | zas_ | 2008-05-04 18:16:07 +0200 (Sun, 04 May 2008) | 2 lines
+commit 6f08b3a0bfb9a539e0144313ec7b02071f19b7f4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 11:27:43 2008 +0000
 
-Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
+    Fix up some types, make some signed vs unsigned warnings quiet.
 
-------------------------------------------------------------------------
-r666 | zas_ | 2008-05-04 13:47:36 +0200 (Sun, 04 May 2008) | 2 lines
+commit e050d2a0bb71d56ddd0d7e6a8b60648357d7bcd9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 10:09:07 2008 +0000
 
-Prepare switch to ViewFile (unused yet).
+    Modify set_default_image_overlay_template_string() to accept the pointer to
+    the string to modify and add a generic function to set template_string value.
 
-------------------------------------------------------------------------
-r665 | zas_ | 2008-05-04 02:32:05 +0200 (Sun, 04 May 2008) | 3 lines
+commit 4abc67156b7e0728230026f9c47a091ab69b0f53
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 09:22:29 2008 +0000
 
-Shorten Edit menu labels, dropping "in ". It will ease
-translations too, and user can define its own label in Preferences.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r664 | zas_ | 2008-05-04 02:21:14 +0200 (Sun, 04 May 2008) | 3 lines
+commit a331805a87ce4d65fcc06826054f115a9c8a7108
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 09:12:36 2008 +0000
 
-Do not show Copy, Move, Rename, Delete, New Folder external commands
-in the Edit section of contextual menus.
+    Introduce an helper function that returns the name of an editor.
+    It helps to reduce code redundancy.
 
-------------------------------------------------------------------------
-r663 | zas_ | 2008-05-04 02:16:37 +0200 (Sun, 04 May 2008) | 2 lines
+commit 48582c3600eacfd7985aff255372c4909cf87e40
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 22 08:49:52 2008 +0000
 
-Use GQ_EDITOR_GENERIC_SLOTS instead of hardcoded value.
+    Use a struct to handle editor's properties.
 
-------------------------------------------------------------------------
-r662 | zas_ | 2008-05-03 22:55:16 +0200 (Sat, 03 May 2008) | 2 lines
+commit cceaf6dd59921919c0f8c1478bc025de7812ba9f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 19:37:18 2008 +0000
 
-exif_get_description_by_key(): check for "formatted." prefix, and optimize.
+    Make stricter match for option's names consisting of a prefix and a number.
+    It allows to have names like "prefix_12" and "prefix_something" in the same file.
+    Using strtol() was wrong since it allowed names like "prefix_-0xa", leading
+    to unpredictable results. It was wrong too with "prefix_something", which
+    was equivalent to "prefix_0", instead of being an option of its own.
 
-------------------------------------------------------------------------
-r661 | zas_ | 2008-05-03 22:49:25 +0200 (Sat, 03 May 2008) | 2 lines
+commit f4fdeefe1b2f4573b91a19682a134a50f675c8ff
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 11:46:19 2008 +0000
 
-exif_get_formatted_by_key(): skip prefix when comparing.
+    Replace hardcoded "/" by G_DIR_SEPARATOR_S where applicable.
 
-------------------------------------------------------------------------
-r660 | zas_ | 2008-05-03 22:40:50 +0200 (Sat, 03 May 2008) | 5 lines
+commit ec28448108d471c5fc8705e5502a81e116c506e4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 11:45:29 2008 +0000
 
-Change the prefix of formatted exif tags to a more explicit "formatted." prefix
-instead of the shorter "f".
-Warning: custom overlay info string has to be modified since old names are no
-more recognized, one can reset it to default through Preferences > Advanced.
+    Use g_build_filename().
 
-------------------------------------------------------------------------
-r659 | zas_ | 2008-05-03 18:58:17 +0200 (Sat, 03 May 2008) | 17 lines
+commit f42ea51102878335515db3058de36d3ac2c68e27
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 11:07:23 2008 +0000
 
-Fix a bug occuring when using certain actions on a collection
-item which is not in the selection.
-Triggering it will either result in an assertion failure or a
-segfault.
+    Use G_DIR_SEPARATOR where applicable.
 
-To reproduce:
-- open a collection
-- right-click on a non-selected image
-- select Delete... menu entry (or Copy, Move, Rename, Properties...)
+commit 88b1387337bed6aae3c4eb9eabb6b5646bc2e743
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 11:00:13 2008 +0000
 
-It results in the best case:
-** ERROR **: file filelist.c: line 905 (file_data_ref): assertion failed: (fd->magick == 0x12345678)
-or a pure segfault due to corrupted data.
+    Use G_DIR_SEPARATOR_S where applicable.
 
-collection_table_popup_file_list() has to return a list of filedata *
-not a list of gchar *.
+commit 1ba45c263f1a40689c0f015d00adab032d9ea4b8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 10:52:38 2008 +0000
 
-------------------------------------------------------------------------
-r658 | zas_ | 2008-05-03 17:19:35 +0200 (Sat, 03 May 2008) | 3 lines
+    Use g_build_filename() and G_DIR_SEPARATOR_S.
 
-Move marks-related fields from _ViewFileInfoList to _ViewFile, since
-they'll be used for file icon view too.
+commit 9cbd3ca276a034db2e38e1d302f59ea59000961e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 10:46:33 2008 +0000
 
-------------------------------------------------------------------------
-r657 | zas_ | 2008-05-03 17:17:24 +0200 (Sat, 03 May 2008) | 3 lines
+    Use g_build_filename() instead of g_strconcat().
 
-Move common thumbs_* fields from _ViewFileInfoIcon and _ViewFileInfoList
-to _ViewFile.
+commit 0be6f799a2986d22c2e42e8c51d09a16030875f6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 10:11:56 2008 +0000
 
-------------------------------------------------------------------------
-r656 | zas_ | 2008-05-03 17:13:15 +0200 (Sat, 03 May 2008) | 3 lines
+    tab_completion_do(): use g_build_filename(), G_DIR_SEPARATOR, G_DIR_SEPARATOR_S.
 
-Rename thumbs_fd to thumbs_filedata in ViewFileIcon struct to match
-the name used in ViewFileList.
+commit a847d10f2debed4c4e7f01e6f4e4fcf246f3a281
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 09:58:29 2008 +0000
 
-------------------------------------------------------------------------
-r655 | zas_ | 2008-05-03 17:09:21 +0200 (Sat, 03 May 2008) | 2 lines
+    tab_completion_popup_cb(): use g_build_filename() and simplify code.
 
-Remove useless thumbs_list from ViewFileIcon.
+commit e07eab477089e688f3d3668e110b651f1cf346f4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 09:50:32 2008 +0000
 
-------------------------------------------------------------------------
-r654 | zas_ | 2008-05-03 14:50:52 +0200 (Sat, 03 May 2008) | 2 lines
+    Use expand_tilde() instead of simple concatenation, it allows correct expansion
+    of ~user as well as ~dir.
 
-Add function prototypes (yet unused).
+commit 5acd3990069f22b64c0336bd89067c1cf265927e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 09:30:53 2008 +0000
 
-------------------------------------------------------------------------
-r653 | zas_ | 2008-05-03 14:48:45 +0200 (Sat, 03 May 2008) | 3 lines
+    dest_change_dir(): rewrite to use g_build_filename(), g_path_get_dirname() and g_path_get_basename().
 
-Drop redundant vflist_thumbs_set() introduced in revision 649,
-modify and use existing vflist_thumb_set().
+commit 550af58c76fd602a08a811f5be218bcec90d1598
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 08:53:51 2008 +0000
 
-------------------------------------------------------------------------
-r652 | zas_ | 2008-05-03 14:21:22 +0200 (Sat, 03 May 2008) | 2 lines
+    Fix a segfault occuring when logging an empty message and there is no log window.
 
-Remove redundant prototype.
+commit 98cabee9637e5ddfd9b2f6fcd9296572c6d7253d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:42:14 2008 +0000
 
-------------------------------------------------------------------------
-r651 | zas_ | 2008-05-03 13:58:41 +0200 (Sat, 03 May 2008) | 2 lines
+    Use g_build_filename().
 
-Introduce ViewFileInfoList and ViewFileInfoIcon (not used yet).
+commit e45c0d959bfbc09115bf447ccc7813d25ace3e1a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:39:16 2008 +0000
 
-------------------------------------------------------------------------
-r650 | zas_ | 2008-05-03 13:34:13 +0200 (Sat, 03 May 2008) | 3 lines
+    thumb_std_cache_path(): use g_build_filename() and simplify.
 
-Replace Layout icon_view field by more generic file_view_type.
-Replace option layout.view_as_icons by layout.file_view_type.
+commit c656b4ad0212e24cbd9ae2844b0bbf904571ab2f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:32:57 2008 +0000
 
-------------------------------------------------------------------------
-r649 | zas_ | 2008-05-03 12:31:37 +0200 (Sat, 03 May 2008) | 4 lines
+    Use g_build_filename().
 
-Set thumbs_enabled through new function vflist_thumbs_set() instead
-of vflist_new().
+commit 9fbfbb253e2e700806714e6ef5c7813148c8b72a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:20:13 2008 +0000
 
+    Use g_build_filename() where applicable.
 
-------------------------------------------------------------------------
-r648 | zas_ | 2008-05-03 11:41:09 +0200 (Sat, 03 May 2008) | 3 lines
+commit a9bd1c761342532867bee1fc112d7c5f93deb5b6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:15:41 2008 +0000
 
-Prepare merging of some parts of view_file_list and view_file_icon and
-simplification of view_file* interface.
+    Use g_build_filename() instead of g_strconcat().
 
-------------------------------------------------------------------------
-r647 | zas_ | 2008-05-03 10:35:08 +0200 (Sat, 03 May 2008) | 3 lines
+commit fe45471190349960979b37aebea84cc2c7cb9675
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:13:12 2008 +0000
 
-Change default positions of dividers since width of the main menu
-was increased.
+    Use g_build_filename() and get rid of "root dir fix".
 
-------------------------------------------------------------------------
-r646 | zas_ | 2008-05-03 01:11:31 +0200 (Sat, 03 May 2008) | 3 lines
+commit 0b30da0498c23b1237ebbf41eac69e341394043a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:12:19 2008 +0000
 
-Make exif_rational_to_double() and exif_get_rational_as_double() static.
+    Use g_build_filename().
 
+commit 5e710445fc08a56ddd1c73585953d2c791dc866a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 21 00:01:03 2008 +0000
 
-------------------------------------------------------------------------
-r645 | zas_ | 2008-05-03 01:08:18 +0200 (Sat, 03 May 2008) | 3 lines
+    Disable unused code:
+    - cache_maintain_home_dir()
+    - cache_maintain_dir()
 
-info_notebook_reordered_cb(): do not call info_tabs_sync(), it causes exif
-info disappearing when moving the tab.
+commit 95eebfff0a5472e885a2cebd38024a59b37db8af
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 23:41:13 2008 +0000
 
-------------------------------------------------------------------------
-r644 | zas_ | 2008-05-03 00:59:04 +0200 (Sat, 03 May 2008) | 3 lines
+    Build path using g_build_filename() then calculate its length.
 
-Fix a Pango warning related to UTF8 when displaying internationalized
-description in Advanced Exif Properties panel.
+commit e80fa4c91453bf056e384a888e051272b04b7abd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 23:11:47 2008 +0000
 
-------------------------------------------------------------------------
-r643 | zas_ | 2008-05-03 00:31:24 +0200 (Sat, 03 May 2008) | 2 lines
+    Use G_DIR_SEPARATOR_S instead of hardcoded "/".
 
-exif_get_description_by_key(): tidy up.
+commit 381f82f295a52ba43179d6e0e5036ac73ac8887d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 23:07:09 2008 +0000
 
-------------------------------------------------------------------------
-r642 | zas_ | 2008-05-03 00:28:39 +0200 (Sat, 03 May 2008) | 3 lines
+    Use g_build_filename() and move location label creation from cache_manager_show() to new cache_manager_location_label().
 
-Add a pointer to the build function in the formatted exif tags struct
-and use a loop in exif_get_formatted_by_key().
+commit d145a20894f4c757ea29b79ed25d31004ae97a8a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 22:47:13 2008 +0000
 
-------------------------------------------------------------------------
-r641 | zas_ | 2008-05-02 23:58:36 +0200 (Fri, 02 May 2008) | 2 lines
+    cache_find_location(): use g_build_filename() and move redundant code to new functions.
 
-Indentation fix.
+commit 267dbe2ad0cf72a577b2e236245c39e0b1930d59
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 22:22:11 2008 +0000
 
-------------------------------------------------------------------------
-r640 | zas_ | 2008-05-02 23:34:26 +0200 (Fri, 02 May 2008) | 3 lines
+    Use g_build_filename().
 
-Explode exif_get_formatted_by_key() in smaller functions prefixed "exif_build_f".
-An helper macro was added to call them.
+commit d1ad0442c58c29df914c80e211f8c90abf145427
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 22:13:48 2008 +0000
 
-------------------------------------------------------------------------
-r639 | zas_ | 2008-05-02 22:56:59 +0200 (Fri, 02 May 2008) | 3 lines
+    Use size_t instead of gint, it silents a signed vs unsigned warning.
 
-Remove unused checksum_simple() function.
+commit 3bd79d0d86bee23a6514faf22c68f6e3898411a5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 22:11:59 2008 +0000
 
+    Use g_build_filename() instead of g_strconcat().
 
-------------------------------------------------------------------------
-r638 | zas_ | 2008-05-02 22:40:47 +0200 (Fri, 02 May 2008) | 2 lines
+commit 73e10c62fc9d789afd29b46183078407369700e6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 22:09:04 2008 +0000
 
-Simplify remove_extension_from_path().
+    Drop concat_dir_and_file() and use g_build_filename() instead.
 
-------------------------------------------------------------------------
-r637 | zas_ | 2008-05-02 22:27:47 +0200 (Fri, 02 May 2008) | 2 lines
+commit ca505f0dd3957eeea0d69dfc3e133c320bba2683
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 22:00:14 2008 +0000
 
-remove_level_from_path() was simplified.
+    Use G_DIR_SEPARATOR instead of '/' where applicable.
 
-------------------------------------------------------------------------
-r636 | zas_ | 2008-05-02 11:03:52 +0200 (Fri, 02 May 2008) | 2 lines
+commit c56dcb92792b030d9f14cf68d5260be924a999ee
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 21:51:25 2008 +0000
 
-Move variable declaration and affectation near where it is used.
+    Use g_build_filename() to build paths.
 
-------------------------------------------------------------------------
-r635 | zas_ | 2008-05-02 10:41:32 +0200 (Fri, 02 May 2008) | 2 lines
+commit ddee8f88900c6e3af7b48541514e0f029912bd20
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 20:11:29 2008 +0000
 
-Replace GQView by Geeqie.
+    Do not use glib posix wrappers since they were introduced in 2.6
+    and we want 2.4 compatibility.
 
-------------------------------------------------------------------------
-r634 | zas_ | 2008-05-02 01:20:26 +0200 (Fri, 02 May 2008) | 2 lines
+commit dc3b44026a577f54f257a543223b1d99ea298693
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 20:06:11 2008 +0000
 
-Use sizeof() instead of hardcoded buffer sizes.
+    Use access() instead of g_access() which is only available in 2.8.
 
-------------------------------------------------------------------------
-r633 | zas_ | 2008-05-02 00:59:54 +0200 (Fri, 02 May 2008) | 2 lines
+commit f2424a9a424a11d32fdc4514b143d67a8285b0d0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 19:14:36 2008 +0000
 
-cache_sim_write_similarity(): cleanup and simplification.
+    Use utf-8 charset instead of iso-8859-1.
+    Minor cleanup.
 
-------------------------------------------------------------------------
-r632 | zas_ | 2008-05-02 00:31:14 +0200 (Fri, 02 May 2008) | 2 lines
+commit dd45f154d660065acd669bae936995f889237604
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 20 17:43:37 2008 +0000
 
-Use secure_save stuff to write .sim files.
+    updated ru.po by Alexandre Prokoudine
 
-------------------------------------------------------------------------
-r631 | zas_ | 2008-05-02 00:30:16 +0200 (Fri, 02 May 2008) | 2 lines
+commit 231d9567dc36494096b87e29a1ba245c932f646a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 08:18:30 2008 +0000
 
-save_options(): minor code simplification.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r630 | zas_ | 2008-05-02 00:27:44 +0200 (Fri, 02 May 2008) | 2 lines
+commit b130dfe52635ff03a61994eee9fd98ab12e10f9a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 08:14:35 2008 +0000
 
-Add a wrapper to fwrite().
+    Sort out log_printf() vs printf_term() mix up.
 
-------------------------------------------------------------------------
-r629 | zas_ | 2008-05-01 23:42:22 +0200 (Thu, 01 May 2008) | 2 lines
+commit a8d4af5cfbfc17f65b7f23db463ebc0220c26dd3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 20 07:52:49 2008 +0000
 
-Typo fix.
+    Use print_term() instead of printf(), since it handles charset conversion
+    from utf8 to locale if needed.
 
-------------------------------------------------------------------------
-r628 | zas_ | 2008-05-01 20:37:50 +0200 (Thu, 01 May 2008) | 2 lines
+commit 11819b31099e4db5bb0488a404dd633928e806a9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 19 11:09:23 2008 +0000
 
-Indentation fixes.
+    Remove C-specific gcc options from CXXFLAGS.
+    Add few more warnings.
 
-------------------------------------------------------------------------
-r627 | zas_ | 2008-05-01 20:26:30 +0200 (Thu, 01 May 2008) | 2 lines
+commit 592f33931c27c10012614e90bf7486b3ffa66039
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 19 09:27:30 2008 +0000
 
-Simplify and optimize extension_find_dot().
+    Fix some incomplete initialization warnings.
 
-------------------------------------------------------------------------
-r626 | nadvornik | 2008-04-30 00:44:06 +0200 (Wed, 30 Apr 2008) | 2 lines
+commit 2a2b70b7061760b54f1075902caee61fe6c6a95f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 19 08:46:37 2008 +0000
 
-fixed a memory leak
+    depreceated -> deprecated
 
-------------------------------------------------------------------------
-r625 | nadvornik | 2008-04-29 20:12:49 +0200 (Tue, 29 Apr 2008) | 2 lines
+commit 17c0fcefeedde3e92482b78685528b2b667bddde
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 19 08:43:11 2008 +0000
 
-cleanup: use image_get_image_size
+    Typo fixes.
 
-------------------------------------------------------------------------
-r624 | nadvornik | 2008-04-29 19:52:12 +0200 (Tue, 29 Apr 2008) | 4 lines
+commit 55c5b71c9d49e5d6b39c3b5fa6f4ce966193c881
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 19 08:36:06 2008 +0000
 
-fixed connected zoom and scroll that didn't work in some cases
-http://sourceforge.net/tracker/index.php?func=detail&aid=1952429&group_id=222125&atid=1054680
+    Create auxdir if needed.
 
+commit 397adc4d43c61ec94d54a03edcf3605de977aed7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 19 08:24:10 2008 +0000
 
-------------------------------------------------------------------------
-r623 | bruclik | 2008-04-28 01:31:20 +0200 (Mon, 28 Apr 2008) | 5 lines
+    Fix spurious end of line introduced in revision 780.
 
-fix warning cast from pointer to integer of different size (when an integer is 
-passed instead of a pointer to a callback, GINT_TO_POINTER(i) should be used)
+commit bc32bf0bd821a6e5ba5fb37abce4f8d00ccdf5c7
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Mon May 19 01:15:17 2008 +0000
 
+    configure.in was rewritten:
+    - uses PKG_CHECK_MODULES everywhere
+    - added --enable-debug (enable debugging support)
+    - added --enable-developer (developer mode, checks depreceated code ...)
+    - removed obsoleted INCLUDES from Makefile.am
+    Fixed src/debug.h (added glib.h).
+    Fixed src/exiv2.c compilation with libexiv2 v0.15.
+    Added src/trash.h to src/Makefile.am (fixed generating 'make dist').
 
+commit 51e2636cbf3a5d444dc16041eae47c39ecc9d3ae
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Mon May 19 00:54:59 2008 +0000
 
-------------------------------------------------------------------------
-r622 | nadvornik | 2008-04-27 22:05:11 +0200 (Sun, 27 Apr 2008) | 2 lines
+    Updated CODING (GPL header, macros, svn change-log, ...).
 
-Added LIRC patch written by Matteo Beniamino
+commit 31ed8e20e511d9ab92a842cc205e6962b6417f62
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 18 21:14:01 2008 +0000
 
-------------------------------------------------------------------------
-r621 | zas_ | 2008-04-25 22:23:21 +0200 (Fri, 25 Apr 2008) | 2 lines
+    Save order of Properties dialog tabs to rc file.
+    Users of GTK+ <2.10 can set tabs order directly in the rc file,
+    others can move tabs using drag'n drop.
+    The option is named properties.tabs_order, its default value
+    is "123" which is General, Keywords, Exif tabs (left to right).
 
-Fix number of directory views, bug introduced in revision 617.
+commit a1726043d910102910fa32c669a45a4b23779cbb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 18 12:56:18 2008 +0000
 
-------------------------------------------------------------------------
-r620 | nadvornik | 2008-04-25 22:08:47 +0200 (Fri, 25 Apr 2008) | 4 lines
+    Cleanup and code redundancy reduction.
 
-fixed dragging multiple files from file list
-http://sourceforge.net/tracker/index.php?func=detail&aid=1950740&group_id=222125&atid=1054680
+commit 3df95a31203a2deb4e0ec0ce019e1cc528e32d39
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 18 11:39:58 2008 +0000
 
+    Memorize text to display in the log window when the window is
+    not yet created. On log window display, the memorized text
+    is then recalled and displayed.
 
-------------------------------------------------------------------------
-r619 | zas_ | 2008-04-25 11:31:32 +0200 (Fri, 25 Apr 2008) | 2 lines
+commit c219d832b90357a8df605bb444757be70bed2c68
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 18 07:36:57 2008 +0000
 
-Add a line about variable and function names.
+    Do not create log window more than once.
 
-------------------------------------------------------------------------
-r618 | zas_ | 2008-04-25 11:28:45 +0200 (Fri, 25 Apr 2008) | 3 lines
+commit aa1e905eb793586cdfa564228ca939438ce50a91
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 17 22:37:04 2008 +0000
 
-Document the Geeqie coding style.
-This is a draft, please improve.
+    Fix formatted.SubjectDistance appearing twice in exif bar configuration.
 
-------------------------------------------------------------------------
-r617 | zas_ | 2008-04-25 10:07:22 +0200 (Fri, 25 Apr 2008) | 3 lines
+commit d5ddb658018102f15fce0efaba39cde3cd89d976
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 17 21:28:02 2008 +0000
 
-Handle the case of reduction of the number of view directory types.
-Previously it was leading to a segfault.
+    Update POTFILES.in.
 
-------------------------------------------------------------------------
-r616 | zas_ | 2008-04-24 22:29:09 +0200 (Thu, 24 Apr 2008) | 4 lines
+commit c293dfff35a58ab31b1225ea712ea766fdae96b0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 17 21:26:45 2008 +0000
 
-Allow to copy the path of a directory to clipboard from directory views.
-Show Copy path option has to be enabled.
-Suggested by Fr?\195?\169d?\195?\169ric Mantegazza.
+    Add a log window that shows normal and debug messages. For now, it was added to Help menu.
 
-------------------------------------------------------------------------
-r615 | zas_ | 2008-04-24 22:18:59 +0200 (Thu, 24 Apr 2008) | 4 lines
+commit 44bf725c587e93c7852e2232b3cb30692341a1bd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 16 20:12:11 2008 +0000
 
-Do not allow to add anything but directories to sort bar in
-folder mode through drag'n'drop.
-Introduce a new field only_directories to _BookMarkData struct.
+    fixed exiv2 version test
 
-------------------------------------------------------------------------
-r614 | zas_ | 2008-04-24 18:35:02 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 4e2cbf60d0811c493595007e6c6dcac42588609d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri May 16 20:09:32 2008 +0000
 
-Add missing spaces around equal sign.
+    get processed values from exiv2
+    http://sourceforge.net/tracker/index.php?func=detail&aid=1962444&group_id=222125&atid=1054680
 
-------------------------------------------------------------------------
-r613 | zas_ | 2008-04-24 18:32:20 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 2cf6296486285045389eae9162c5e20e6f7ca0a6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 16 14:59:45 2008 +0000
 
-Cleanup exif_get_formatted_by_key().
+    Fix redundant application name in window titles.
+    It simplifies code.
 
-------------------------------------------------------------------------
-r612 | zas_ | 2008-04-24 17:57:58 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 4dd8a0ca5bcf4a1060a3cded4e8eea666d96a300
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 16 14:38:05 2008 +0000
 
-Add missing space.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r611 | zas_ | 2008-04-24 17:53:08 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 80363827d0206ced152428b414af7ee12754ccb0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 16 12:16:49 2008 +0000
 
-6 for() vs 201 for (): winner is for ().
+    Do not use printf() directly but use new wrapper function log_printf() instead.
 
-------------------------------------------------------------------------
-r610 | zas_ | 2008-04-24 17:49:57 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 4419bda7c472e6addfa8c204b3be6b9a159c472a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 16 12:08:51 2008 +0000
 
-Convert the minority of while() to while ().
+    Drop include "debug.h".
 
-------------------------------------------------------------------------
-r609 | zas_ | 2008-04-24 17:44:43 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 08f6266ee30f28a20ec40150ce1371cedcb943ca
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 16 10:02:56 2008 +0000
 
-Use only one secure_fprintf() call instead of two.
+    Include debug.h from main.h since debug macros may be used anywhere in the code.
 
-------------------------------------------------------------------------
-r608 | zas_ | 2008-04-24 17:31:21 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 9cdcce43a34e0c63b05fecaf6b1fbcbcef522781
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 16 09:10:56 2008 +0000
 
-Use sizeof().
+    Improve editor commands error display:
+    - display all errors (not only syntax errors)
+    - display errors from Preferences (checks are made on Apply or OK)
 
-------------------------------------------------------------------------
-r607 | zas_ | 2008-04-24 14:47:09 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit dbb4e406f3b1893911d5c44f3fe5f75ae3b87f4d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 16 08:37:07 2008 +0000
 
-Remove whitespace between function name and first parenthesis for the sake of consistency. (pass 2)
+    Improve editors a bit:
+    - allow whitespaces before and after %v, %V, %w
+    - allow % escaping using %% (mandatory to use shell commands than contain % characters)
+    - display a dialog on execution if a syntax error is detected (only for generic editors)
+    - update README editors section
 
-------------------------------------------------------------------------
-r606 | zas_ | 2008-04-24 14:23:02 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 8cf9235c20b8f059c00c09caf55fd2b81adb683b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 14 18:12:11 2008 +0000
 
-Remove whitespace between function name and first parenthesis for the sake of consistency.
+    The Encoding key is now deprecated by the FreeDesktop standard and all
+    strings are required to be encoded in UTF-8. This desktop entry
+    explicitly specifies an Encoding of UTF-8, which is harmless but no longer
+    necessary.
+    
+    See http://standards.freedesktop.org/desktop-entry-spec/1.0/apc.html
+    
+    Patch #1963689.
 
-------------------------------------------------------------------------
-r605 | zas_ | 2008-04-24 13:40:26 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 696b1afc8d1987bb420d36261a7362f58519291f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 14 18:09:05 2008 +0000
 
-Indentation fix.
+    Patch #1963690 was applied.
+    It fixes hyphens/minus confusion in the man page.
 
-------------------------------------------------------------------------
-r604 | zas_ | 2008-04-24 11:50:37 +0200 (Thu, 24 Apr 2008) | 1 line
+commit 12d37bfbf24c80a2574d430200c559f2d20da751
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 14 17:00:25 2008 +0000
 
-Display file_data debug messages only at level 2.
-------------------------------------------------------------------------
-r603 | zas_ | 2008-04-24 11:43:23 +0200 (Thu, 24 Apr 2008) | 2 lines
+    Simplify thumb_std_maint_moved(), since g_list_append knows
+    how to append to a NULL list. Patch by Uwe Ohse.
 
-Move get_exec_time() to debug.{c,h}.
+commit 7c3a92575e1832ac7896aada1b619eef12d5c1c7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 14 16:52:55 2008 +0000
 
-------------------------------------------------------------------------
-r602 | zas_ | 2008-04-24 11:09:48 +0200 (Thu, 24 Apr 2008) | 2 lines
+    Simplify collect_manager_add_action(), since g_list_append knows
+    how to append to a NULL list. Patch by Uwe Ohse.
 
-Move options stuff to options.{c,h} and remove globals.c
+commit e6057c67b6938aa5f5d9f15567fd6302e2ef58aa
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 14 12:59:00 2008 +0000
 
-------------------------------------------------------------------------
-r601 | zas_ | 2008-04-24 10:53:39 +0200 (Thu, 24 Apr 2008) | 5 lines
+    Merge vflist_row_by_path() into vflist_index_by_path().
 
-Move debug macros from main.h to new debug.h.
-Make debug_level static to debug.c and add utility functions
-to manipulate it.
-Add #include "debug.h" where needed.
+commit 53d0d0d3918a36df3a483989ea02cbea4daa0dbe
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 14 10:40:43 2008 +0000
 
-------------------------------------------------------------------------
-r600 | zas_ | 2008-04-24 02:15:03 +0200 (Thu, 24 Apr 2008) | 3 lines
+    Fix some typos. Thanks to Michal \u010ciha\u0159 and James R. Van Zandt.
+    Patch #1963691.
 
-Handle the newline in DEBUG_N() macro instead of adding one
-in each debug message string.
+commit d8bacc9a88f9332a45d49d890f62c0141738fa9f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 14 08:56:08 2008 +0000
 
-------------------------------------------------------------------------
-r599 | zas_ | 2008-04-24 01:52:20 +0200 (Thu, 24 Apr 2008) | 2 lines
+    Make vf_pop_menu_*_cb static.
 
-French translation was updated.
+commit a2b5404ac9f5fbf0e5a7c0e71dcd94252bf3186d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 20:31:35 2008 +0000
 
-------------------------------------------------------------------------
-r598 | zas_ | 2008-04-24 01:51:02 +0200 (Thu, 24 Apr 2008) | 2 lines
+    French translation fixes.
 
-Make image_osd_histogram_onoff_toggle() and image_osd_histogram_onoff_status() static.
+commit 81193b24e0f5eade934c698fc0ac485d33751269
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 20:21:00 2008 +0000
 
-------------------------------------------------------------------------
-r597 | zas_ | 2008-04-24 01:47:53 +0200 (Thu, 24 Apr 2008) | 2 lines
+    Resync POTFILES.in and *.po, update french translation and
+    regenerate statistics in README.
 
-Fix image overlay displayed only on second "I" press in layout view.
+commit 16e84c761e71ac9052621a396d6880b96abe3221
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 20:13:44 2008 +0000
 
-------------------------------------------------------------------------
-r596 | zas_ | 2008-04-24 01:35:13 +0200 (Thu, 24 Apr 2008) | 3 lines
+    Merge vflist_pop_menu() and vficon_pop_menu() into vf_pop_menu().
 
-Display file and line along debug messages for any debug level but level 1.
-Add a DEBUG_0() macro for instant debugging.
+commit d62b5063e0616d905f58fc6036382a7b6d791368
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 19:56:52 2008 +0000
 
-------------------------------------------------------------------------
-r595 | zas_ | 2008-04-24 00:40:55 +0200 (Thu, 24 Apr 2008) | 4 lines
+    Move VFICON_INFO() and VFLIST_INFO() macros to view_file.h
 
-Fix Gtk-CRITICAL **: gtk_entry_set_text: assertion `GTK_IS_ENTRY (entry)' failed
-occuring when toggling file list view <-> file icon view.
+commit 0ae96b1f2356d2f6eb6218ac85d8f07830118553
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 19:54:13 2008 +0000
 
+    vficon_pop_menu(): drop "gint active" parameter, use stored click_id instead.
 
-------------------------------------------------------------------------
-r594 | nadvornik | 2008-04-24 00:38:34 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit d89bc943dfc7c14031b36c49aeb8544defa5d450
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 19:51:22 2008 +0000
 
-clear the buffer before loading of an image
+    vflist_pop_menu(): drop FileData * parameter, use stored click_fd instead.
 
-------------------------------------------------------------------------
-r593 | zas_ | 2008-04-24 00:33:18 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit dc820ece32ce4e8541b8e0d51a82a2486e645ab0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 19:45:04 2008 +0000
 
-Use menu_item_add_stock_sensitive() and menu_item_add_sensitive().
+    Fix last patch, only set vf->clicked_mark for a valid mark.
 
-------------------------------------------------------------------------
-r592 | zas_ | 2008-04-24 00:22:37 +0200 (Thu, 24 Apr 2008) | 2 lines
+commit 91e4b2d69adc9398df664f4d355880ae146ab994
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 19:32:25 2008 +0000
 
-Update to contributors list.
+    Get rid of vflist_pop_menu() col_idx parameter, use new Viewfile field
+    named clicked_mark.
+    Marks numbering is now consistent with menus (starting at 1, 0 is an
+    invalid mark), assertions were modified accordingly.
 
-------------------------------------------------------------------------
-r591 | zas_ | 2008-04-24 00:17:21 +0200 (Thu, 24 Apr 2008) | 8 lines
+commit 86ebde92c37840f27e7f81f0051a1b501b398bcb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 16:09:43 2008 +0000
 
-Allow the copy of file paths to clipboard.
-This feature is disabled by default, it can be set through
-Preferences > Advanced > Behavior > Show "Copy path" ...
-When enabled, it adds a menu entry "Copy path" that let the
-user copies current selection's paths to X clipboard.
-It is very convenient to paste paths to xterm for example.
-Patch by Carles Pina i Estany and me.
+    Expand tilde with file: and view: remote parameters.
+    Now these are working:
+    geeqie -r file:~/dir
+    geeqie -r view:~user/file
 
-------------------------------------------------------------------------
-r590 | nadvornik | 2008-04-23 23:08:29 +0200 (Wed, 23 Apr 2008) | 2 lines
+commit 38975e5efdefc3d56f710847821efc2173561f72
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 14:49:38 2008 +0000
 
-fixed a bug in opening files with non-utf8 locales in exiv2.cc
+    Display a message when invalid remote options are used.
 
-------------------------------------------------------------------------
-r589 | zas_ | 2008-04-23 22:47:19 +0200 (Wed, 23 Apr 2008) | 9 lines
+commit e88a963a320d1728638984277c0cad4bb3ab3f00
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 14:35:51 2008 +0000
 
-Introduce macros to display debug messages.
-if (debug) printf(...) is now replaced by variadic macros:
-DEBUG_1()
-And for higher debugging levels:
-DEBUG_2()
-DEBUG_3()
-DEBUG_4()
+    Comparing tag id is not sufficient, check the tag name too.
 
+commit f558c8c220211ffd1950748350a09cf4d471f761
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 11:58:47 2008 +0000
 
-------------------------------------------------------------------------
-r588 | zas_ | 2008-04-23 15:46:18 +0200 (Wed, 23 Apr 2008) | 7 lines
+    Keywords and comment can now be displayed in OSD info using %keywords% and %comment%.
 
-Honor Control and Shift keys while drag'n'droping files
-to directories.
-Before a menu (Copy/Move/Cancel) was always displayed, now
-if the user hold Shift key or Control key, the menu
-is not shown, but move or copy actions take place.
-If no modifier key is used, the menu is displayed as usual.
+commit 2ce8b27e1caba72f8f08fa62c2cae7def628cdaf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 08:53:26 2008 +0000
 
-------------------------------------------------------------------------
-r587 | zas_ | 2008-04-23 15:03:04 +0200 (Wed, 23 Apr 2008) | 2 lines
+    Move all remote stuff from main.c to remote.[ch].
 
-Only display message if in debug mode.
+commit 12639ee4b8d55c4d4b17b888fe4f18d9ba45c382
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 08:02:46 2008 +0000
 
-------------------------------------------------------------------------
-r586 | zas_ | 2008-04-23 11:56:21 +0200 (Wed, 23 Apr 2008) | 5 lines
+    Move some functions from main.[ch] to new window.[ch].
 
-Fix adding a selection to a collection with no window open
-using the sort manager. Only one file was added, now all
-files in the selection are added (but duplicates).
-A pointer was not reset correctly.
+commit c8611249cdc9ee9247803ff04a39a049e7db57d0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 13 07:34:37 2008 +0000
 
-------------------------------------------------------------------------
-r585 | zas_ | 2008-04-23 01:53:24 +0200 (Wed, 23 Apr 2008) | 2 lines
+    Ensure that we end with UTF8 encoded comment and keywords.
 
-Save sort manager state to rc file.
+commit 8b3ee1eef7b80997fc1c6ef43d3c622d01d1737c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 23:26:00 2008 +0000
 
-------------------------------------------------------------------------
-r584 | zas_ | 2008-04-23 00:45:51 +0200 (Wed, 23 Apr 2008) | 2 lines
+    Reading of Iptc.Application2.Keywords should now be fixed.
+    Use uft8_validate_or_convert() on exif's text data to be safe.
 
-Remove unused function bar_info_size_request().
+commit 9aacc4a2448ac1f21bee1ff71ed4ebba4f4eeb81
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 23:21:35 2008 +0000
 
-------------------------------------------------------------------------
-r583 | zas_ | 2008-04-23 00:44:10 +0200 (Wed, 23 Apr 2008) | 3 lines
+    Rename bar_exif_validate_text() to utf8_validate_or_convert() and move it to main.[ch].
 
-Save state and width of exif, info and sort panels to rc file.
-Width is restored only if save windows dimensions is set.
+commit 885b212391d1bf9503c9b1d3e0324d22a8c24f80
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 23:00:04 2008 +0000
 
-------------------------------------------------------------------------
-r581 | nadvornik | 2008-04-22 21:26:07 +0200 (Tue, 22 Apr 2008) | 2 lines
+    bar_exif_validate_text(): use computed length and cleanup.
 
-updated ChangeLog from svn log
+commit 7b4885c281b47d456d0985ad6b084cb20fc7cc08
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 19:56:28 2008 +0000
 
-------------------------------------------------------------------------
-r580 | nadvornik | 2008-04-22 20:06:38 +0200 (Tue, 22 Apr 2008) | 2 lines
+    Disable non-working Iptc.Application2.Keywords reading introduced in revision 736.
 
-fixed version string ;)
+commit 874ac4eafacb90b111161275fc71f6345e77d30d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 17:10:40 2008 +0000
 
-------------------------------------------------------------------------
-r579 | nadvornik | 2008-04-22 19:45:08 +0200 (Tue, 22 Apr 2008) | 2 lines
+    Extract and append keywords from Iptc.Application2.Keywords tags.
+    A function was added to make the keywords unique in the list.
+    Note: Iptc.Application2.Keywords is only read, not written.
 
-updated version number
+commit c50d73be0f5f860103b2bf66b845e33aae9ce7c7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 10:46:23 2008 +0000
 
-------------------------------------------------------------------------
-r578 | nadvornik | 2008-04-22 19:40:29 +0200 (Tue, 22 Apr 2008) | 2 lines
+    When an option was successfully read, just continue to next line.
 
-fixed reading of signed rational type with Exiv2
+commit 75f14d8caa9b739913c96b353e100c1088722907
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 10:37:37 2008 +0000
 
-------------------------------------------------------------------------
-r577 | nadvornik | 2008-04-22 11:57:26 +0200 (Tue, 22 Apr 2008) | 2 lines
+    Minor formatting fix in rc file header.
 
-fixed instalation of doc files
+commit ff365dc6cc9abcf3331fe3eb048c9f8bc082f5c3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 08:52:17 2008 +0000
 
-------------------------------------------------------------------------
-r576 | zas_ | 2008-04-22 11:40:05 +0200 (Tue, 22 Apr 2008) | 3 lines
+    Rework read_*_option():
+    - read_u?int_option() now interpret a value of "true" as 1
+    - read_bool_option() now interpret any value different from 0 as true.
+    - make functions return TRUE on successful read, FALSE else
+    
+    Theses changes will help to maintain compatibility when options are modified.
 
-Correctly escape data before using pango_layout_set_markup().
-Exif data may contain characters like & or < >.
+commit 0481d1d4e1ee29d28e766e47ab5dfd39798f9378
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 08:11:27 2008 +0000
 
-------------------------------------------------------------------------
-r575 | zas_ | 2008-04-22 11:01:29 +0200 (Tue, 22 Apr 2008) | 3 lines
+    Rename option image_overlay.common.enabled to image_overlay.common.state
+    since it is not a boolean anymore.
 
-Use image_osd_toggle() in layout_menu_overlay_cb().
-Drop layout_image_overlay_update().
+commit 99a50120349e25795138098cb35616a3cc953f33
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 12 00:22:38 2008 +0000
 
-------------------------------------------------------------------------
-r574 | zas_ | 2008-04-22 10:53:07 +0200 (Tue, 22 Apr 2008) | 2 lines
+    Add some wrapper functions for not yet common code.
 
-Merge view_overlay_toggle() and layout_image_overlay_toggle() into new image_osd_toggle().
+commit 98e46592bd5e0f88061eb983c092d57594a479d6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 23:56:40 2008 +0000
 
-------------------------------------------------------------------------
-r573 | zas_ | 2008-04-22 10:34:30 +0200 (Tue, 22 Apr 2008) | 3 lines
+    Make vf_pop_menu_toggle_view_type_cb() independent of FILEVIEW_LIST/FILEVIEW_ICON real values.
 
-Make histogram depends on image window not layout window.
-It simplifies the code, and make more sense.
+commit c2147d9b7fd901a7a6ffd89fed45c89c138d2281
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 23:47:59 2008 +0000
 
-------------------------------------------------------------------------
-r572 | zas_ | 2008-04-22 10:16:02 +0200 (Tue, 22 Apr 2008) | 4 lines
+    Move a part of pop up menu common code to view_file.[ch].
 
-Ensure Properties dialog is displayed above fullscreen window.
-Add a parameter to info_window_new() to pass parent window and
-revert patch 472.
+commit 4ba97284fc9972458cc337decd8f5e539a74bbb4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 23:09:39 2008 +0000
 
-------------------------------------------------------------------------
-r571 | zas_ | 2008-04-22 00:19:32 +0200 (Tue, 22 Apr 2008) | 2 lines
+    Introduce vf_pop_menu_file_list() as a wrapper to
+    vflist_pop_menu_file_list() and vficon_pop_menu_file_list().
 
-Indicate bugs and feature requests trackers, remove obsolete stuff.
+commit 2be39b52cf821f156ff7e35613f682cb85b8b8bc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 21:11:54 2008 +0000
 
-------------------------------------------------------------------------
-r570 | zas_ | 2008-04-22 00:15:56 +0200 (Tue, 22 Apr 2008) | 2 lines
+    Use vf_* functions where possible.
 
-Lowercased name.
+commit 2a9c38f82f64a01d9c2984a778d8a1702f97c3a1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 20:38:21 2008 +0000
+
+    Drop unused layout_list_get_path() and vf*_index_get_path().
+
+commit 1fe24ccb2ec1ecfaecf2618da3c5353a346a3566
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 13:17:38 2008 +0000
+
+    French translation was updated.
+
+commit 814bbc284c9bcb08ce6a3a45b34b601b86459870
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 13:14:58 2008 +0000
+
+    An option to save and restore the last path used was added.
+    This option appears as startup.use_last_path in rc file.
+    Preferences > General > Startup was modified accordingly.
+
+commit ff3bbba625e982d3341491b771cf6a6b5b3ccd2c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 12:23:26 2008 +0000
+
+    Rename options:
+    startup_path_enable -> startup.restore_path
+    startup_path        -> startup.path
+    
+    Geeqie is still able to read old options.
+
+commit 4e0f18ac54c4b327c380d9c3be9db0dde2f964a7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 11:46:48 2008 +0000
+
+    Fix help window title.
+
+commit b01f014ebaba751530160ac533299d71681d5bc3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 11:44:58 2008 +0000
+
+    Use computed string length.
+
+commit 53e7b0df5c55a782d95cb892e1ba74b57221f2d6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 11:41:32 2008 +0000
+
+    Slightly increase help window's default width.
+
+commit 4e6dd6649934183de0294ce5cbfe76a6a00fd83f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 11:30:41 2008 +0000
+
+    Add an help button to OSD info configuration in Preferences dialog.
+    Make its own section named "Overlay Screen Display".
+
+commit c7a434caff3c658986b5e3188b47c9d31cb3b221
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 10:25:04 2008 +0000
+
+    Partially update main README.
+    A section concerning overlay info was added.
+    Translation statistics were updated.
+
+commit 1fa5d80bd4c211fd31199ba5b8eab8ec638957d1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 11 09:37:46 2008 +0000
+
+    Change translations statistics formatting to match the style
+    use in the README file.
+    
+    Here is the result for current trunk:
+    
+    Translations statistics
+    Date: Sun, 11 May 2008 11:33:14 +0200
+    
+    Note: completion % in the chart below may not be quite correct
+          when fuzzy translations exist but do not appear in the source.
+          For exact results, run make update-po with up to date POTFILES.in.
+          comp % = trans / (trans + fuzzy + untrans)
+    
+    Language      Comp(%)  Trans  Fuzzy  Untrans  Total
+    fr             100.00    985      0        0    985
+    be              90.56    892     25       68    985
+    eu              68.53    675    150      160    985
+    eo              68.22    672    153      160    985
+    vi              68.02    670    156      159    985
+    it              67.82    668    154      163    985
+    pt_BR           67.82    668    154      163    985
+    zh_TW           66.90    659    150      176    985
+    sk              66.50    655    158      172    985
+    fi              64.37    634    176      175    985
+    nl              64.37    634    179      172    985
+    sv              64.16    632    175      178    985
+    bg              64.06    631    175      179    985
+    ca              64.06    631    175      179    985
+    cs              64.06    631    175      179    985
+    de              64.06    631    175      179    985
+    es              64.06    631    175      179    985
+    ja              64.06    631    175      179    985
+    ru              64.06    631    175      179    985
+    pl              60.61    597    148      240    985
+    ar              42.94    423    315      247    985
+    ro              37.56    370    342      273    985
+    hu              36.14    356    332      297    985
+    id              19.70    194    408      383    985
+    et              19.29    190    407      388    985
+    uk              17.16    169    411      405    985
+    nb              15.94    157    416      412    985
+    zh_CN.GB2312    15.94    157    416      412    985
+    th              15.13    149    413      423    985
+    sl              14.72    145    419      421    985
+    da              12.99    128    402      455    985
+    ko              11.37    112     52      821    985
+    tr               6.60     65    398      522    985
+
+commit 0cbf32806223d6271b1bd211cd4dfc22ba2736ca
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 10 21:29:53 2008 +0000
+
+    Fix display of collection in overlay info.
+    Due to markup escaped <i>collection</i> was displayed instead of collection's in italic.
+    
+    Overlay info syntax was extended to allow the wrapping of displayed data with markup.
+    
+    General syntax is: %name[:length limit][:extra]%
+    Extra string uses special character '*' to mark the place of the data to display.
+    If no '*' is present, then extra string is just appended to data.
+    Any "\n" is replaced by a newline on display.
+    Pango mark up is accepted in left and right parts.
+    If data is empty, nothing will be displayed.
+    
+    Examples:
+    "%name:<i>*</i>\n%" -> name is displayed in italics ended with a newline
+    "%size:\n%"         -> size is displayed with a newline at end
+    "%formatted.ISOSpeedRating:ISO *%"      -> prefix iso number with "ISO " (ie. "ISO 100")
+    "Collection <b>*</b>\n" -> display collection name in bold prefixed by "Collection " and a newline is appended
+    
+    
+    Collection name formatting was slighly improved by not displaying the .gqv extension.
+    The default overlay info string was modified to use the new syntax, but older info strings should be
+    displayed as usual.
+
+commit fc25dbbf61f437c785404029bfce99ed4a71f6b1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 10 14:22:18 2008 +0000
+
+    image_osd_get() now returns OsdShowFlags.
+
+commit 73fa427e25508213e47fb0671e2a35a790b21b48
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 10 13:54:25 2008 +0000
+
+    Display a simple grid with histogram.
+
+commit af4f4a115221b7c92ba4d7e6805ecc8988dc7147
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 10 12:33:52 2008 +0000
+
+    Initialize to correct value (OSD_SHOW_NOTHING instead of FALSE).
+
+commit 48916cac7e50d057096dc76cab7401e3c0dc35b0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 10 09:00:14 2008 +0000
+
+    Save full OSD state to rc file and restore it on startup.
+    It allows to restore OSD with or without histogram depending
+    on previous state.
+
+commit 8ccd362187273137e9ed4b51671c6eeef90851dd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 12:43:10 2008 +0000
+
+    image_osd_info_render(): if there's no fd, just return.
+
+commit c93ee033bf6c9c8d6169cb2e826f5f612990659b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 12:33:24 2008 +0000
+
+    Move overlay histogram stuff from ImageWindow to OverlayStateData.
+    It simplifies things a lot and make more sense.
+    
+    Note: overlay icons display is broken since a long time it seems.
+
+commit 46a015d5305c8d75297c3d6748ca2b4375851e19
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 11:15:56 2008 +0000
+
+    Introduce image_get_osd_data() and image_set_osd_data().
+
+commit 77d3ccb4b995e0de2e0ac0facf1e03347549cadf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 09:58:46 2008 +0000
+
+    image_osd_get() and image_osd_set() now uses flags.
+
+commit 94833dae9ada87a15401be7361988be493bbeaad
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 09:34:38 2008 +0000
+
+    image_osd_histogram_chan_toggle(), image_osd_histogram_log_toggle():
+    reduce indentation level.
+
+commit dd431ef1f82d42b02899f1ca1c9f6ad4e172ede4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 08:39:18 2008 +0000
+
+    Preserve last histogram modes.
+    When a new histogram is displayed, it uses previously chosen
+    modes.
+    These modes are saved on exit to rc file as options:
+    histogram.last_channel_mode
+    histogram.last_log_mode
 
-------------------------------------------------------------------------
-r569 | zas_ | 2008-04-22 00:14:57 +0200 (Tue, 22 Apr 2008) | 2 lines
+commit 7917c5a3e4e89fd1b32de87c3788e32025820c41
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 08:03:25 2008 +0000
 
-. -> dot
+    Update CODING and HACKING files, and add po/README file for translators.
 
-------------------------------------------------------------------------
-r568 | nadvornik | 2008-04-21 23:46:38 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 8ef1e8c83e2cc7f9ee8715be574a2f72d2b1143c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 07:46:18 2008 +0000
 
-updated copyright in source files
+    Make lirc_cleanup() and lirc_input_callback() static.
 
-------------------------------------------------------------------------
-r567 | zas_ | 2008-04-21 22:45:35 +0200 (Mon, 21 Apr 2008) | 3 lines
+commit 9cb23ddf80cbb03ee4b4557e4aaa9ecbee7dcb91
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 9 07:32:30 2008 +0000
 
-Properly initialize image_overlay options.
+    Use function(void) instead of function() for declaring functions which
+    do not take any parameters at all.
+    It respects current Geeqie coding style more.
 
+commit 524cf262d075f28b08c51b187598b6c1f3276dde
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 8 22:59:14 2008 +0000
 
-------------------------------------------------------------------------
-r566 | zas_ | 2008-04-21 22:42:18 +0200 (Mon, 21 Apr 2008) | 2 lines
+    In the search results view, hide dimensions column instead of
+    displaying an empty one.
+    When dimensions search criteria is used, it is always displayed.
 
-Few more fixes to french translation.
+commit 6b17a6ad374a2077265c1f806558aba0dd89b585
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 8 22:49:16 2008 +0000
 
-------------------------------------------------------------------------
-r565 | zas_ | 2008-04-21 22:39:36 +0200 (Mon, 21 Apr 2008) | 3 lines
+    Reset thumbnail column to NULL when hidden.
+    It fixes bug 1960274.
 
-Add some macros to handle rc file compatibility issues related to
-option name changes.
+commit 786c7401047ffbbec27820cf0e89d008e16ea488
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 8 20:21:03 2008 +0000
 
-------------------------------------------------------------------------
-r564 | zas_ | 2008-04-21 22:27:39 +0200 (Mon, 21 Apr 2008) | 2 lines
+    search_status_update(): slightly reduce code redundancy.
 
-Minor french translation fix.
+commit cfe2b3ba31e60ed9863f7f9af807b2f936893ef7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 8 12:50:25 2008 +0000
 
-------------------------------------------------------------------------
-r563 | zas_ | 2008-04-21 22:24:15 +0200 (Mon, 21 Apr 2008) | 2 lines
+    Use g_ascii_strncasecmp() instead of strncasecmp() where applicable.
+    Add a FIXME where potential improper usage of strncasecmp() is made.
 
-French translation was updated.
+commit 6559dd1a68980c2e4a1708a84cfbb60e9775be33
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 8 12:38:34 2008 +0000
 
-------------------------------------------------------------------------
-r562 | zas_ | 2008-04-21 22:12:49 +0200 (Mon, 21 Apr 2008) | 6 lines
+    Use g_ascii_strcasecmp() instead of strcasecmp() where ascii-only strings
+    are used.
 
-Rename few functions and replace fullscreen info with image overlay template string.
-fullscreen_info_default_cb() -> image_overlay_default_template_cb()
-fullscreen_info_default_ok_cb() -> image_overlay_default_template_ok_cb()
-set_default_fullscreen_info() -> set_default_image_overlay_template_string() (moved to image-overlay.h)
+commit 947a8668dbefb4da50c01673a18a6cfb2ec1908b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 7 23:27:26 2008 +0000
 
+    Replace deprecated functions by their counterparts:
+    g_strcasecmp() -> g_ascii_strcasecmp()
+    g_strncasecmp() -> g_ascii_strncasecmp()
+    gtk_input_remove() -> g_source_remove()
+    g_io_channel_close() -> g_io_channel_shutdown() + g_io_channel_unref()
+    
+    All these are deprecated either since 2.2 or 2.4.
 
-------------------------------------------------------------------------
-r561 | zas_ | 2008-04-21 22:01:22 +0200 (Mon, 21 Apr 2008) | 9 lines
+commit c5f3fab36157bac8c74ef5401afc4b5478dc436b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 7 22:54:33 2008 +0000
 
-Replace fullscreen.info and fullscreen.show_info options by:
-image_overlay.common.enabled => to save last state to rc file
-image_overlay.common.show_at_startup => overrides .common.enabled at startup
-image_overlay.common.template_string => replace fullscreen.info
+    Resync po files.
+    French translation was updated.
 
-common is used since for now there is only one image overlay setup,
-later specific setups may be added.
+commit 0479ab313fcf0ac12489dfc4df49593b86e212f6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed May 7 22:48:30 2008 +0000
 
+    Add a way to invert the current selection.
+    An item labeled "Invert selection" was added to the Select submenu
+    in the main menu.
 
-------------------------------------------------------------------------
-r560 | nadvornik | 2008-04-21 21:42:58 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 2927044d43b56069079cfeac00aa6989b1c9c126
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 6 23:58:08 2008 +0000
 
-fixed another "gqview" occurence
+    Tidy up.
 
-------------------------------------------------------------------------
-r559 | nadvornik | 2008-04-21 21:10:41 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 38ac488dfcdb0f560617f615b4ced2c01b63821c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 6 23:53:12 2008 +0000
 
-updated NEWS, README and other documentation files
+    French translation was updated.
 
-------------------------------------------------------------------------
-r558 | nadvornik | 2008-04-21 20:09:30 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 4b93995fdf301e4c54c7919ab2a7b4a50b08f87d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 6 23:52:09 2008 +0000
 
-renamed no.po to nb.po
+    Add trash.c.
 
-------------------------------------------------------------------------
-r557 | zas_ | 2008-04-21 17:30:16 +0200 (Mon, 21 Apr 2008) | 3 lines
+commit 25ad32ba818bbb3c7cb4c620a3ede5f9ed374541
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 6 21:35:31 2008 +0000
 
-Fix a segfault occuring when pressing 'i' for overlay info
-in a separate image window (no layout).
+    moved safe delete functions to separate file
 
-------------------------------------------------------------------------
-r556 | zas_ | 2008-04-21 16:19:48 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 8546ea31f763bd7e3386e4231be062ff2a73d55a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue May 6 20:24:16 2008 +0000
 
-histogram_draw(): tidy up.
+    use some of the new functions in filedata.c
 
-------------------------------------------------------------------------
-r555 | zas_ | 2008-04-21 15:39:17 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit f05bac9cdc8755273958466df6df1b3f5305ee41
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 6 17:00:55 2008 +0000
 
-histogram_read(): speed up calculations by 20%.
+    Allow the user to append or replace comments for a group of selected files.
+    Two buttons were added to the Keywords panel.
 
-------------------------------------------------------------------------
-r554 | zas_ | 2008-04-21 13:44:03 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 5f3ddd491eb4d90e18663d030155cfae254ac385
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 6 12:31:23 2008 +0000
 
-histogram_read(): use memset() to initialize histogram data instead of for() loop.
+    Use a dedicated option to enable keywords and comment saving as XMP tags
+    in image's files.
+    This new option is named "save_metadata_in_image_file" in configuration file.
+    User can toggle it through Preferences > Advanced > Miscellaneous > Store keywords and comments as XMP tags in image files.
+    Description of enable_metadata_dirs was modified as an attempt to improve clarity.
 
-------------------------------------------------------------------------
-r553 | zas_ | 2008-04-21 12:11:55 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 5ecec83ad07f14578f4922ad7ba7befca9a09c31
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue May 6 12:03:39 2008 +0000
 
-French translation was updated.
+    comment_xmp_read(), comment_xmp_write(): cleanup and improve readibility.
 
-------------------------------------------------------------------------
-r552 | zas_ | 2008-04-21 12:10:23 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit a729f5905a8ca4faeafca4f4e66832e408c52ccd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 21:27:39 2008 +0000
 
-Add compat.c to POTFILES
+    French translation was updated, various fixes.
 
-------------------------------------------------------------------------
-r551 | zas_ | 2008-04-21 12:09:01 +0200 (Mon, 21 Apr 2008) | 4 lines
+commit 146b6e2a59584bda8c274ba313862a3abb82a634
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 20:56:20 2008 +0000
 
-Allow the user to set the drag'n drop icon size through
-Preferences > Advanced > Behavior > Drag'n drop icon size.
-It is saved to rc file as dnd_icon_size.
+    Belarusian translation was updated. Thanks to Pavel Piatruk.
 
-------------------------------------------------------------------------
-r550 | zas_ | 2008-04-21 01:17:35 +0200 (Mon, 21 Apr 2008) | 4 lines
+commit 117767d634649683e27badb1d7c2cffc1eac5334
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon May 5 20:51:51 2008 +0000
 
-Add a replacement for gtk_radio_action_set_current_value() which
-require GTK+ >= 2.10.
-Two new files were added, compat.h and compat.c.
+    started implementation of API for sidecar files
 
-------------------------------------------------------------------------
-r549 | zas_ | 2008-04-21 00:51:53 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit ffc2e29991a2d8d968133f5340cd711c1fd50c42
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 20:51:50 2008 +0000
 
-French translation was updated.
+    Update POTFILES.in (filelist.c -> filedata.c).
 
-------------------------------------------------------------------------
-r548 | zas_ | 2008-04-21 00:45:00 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 512e5dddd1d85da2fe030e0a464d953d0733cd1e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 20:49:40 2008 +0000
 
-Add number mnemonics to image view editors submenu.
+    Modify regen_potfiles.sh to generate a patch instead of
+    directly applying changes to POTFILES.in.
 
-------------------------------------------------------------------------
-r547 | zas_ | 2008-04-21 00:29:23 +0200 (Mon, 21 Apr 2008) | 3 lines
+commit bf41ef491c80e033e2d028a87e00605ac893609f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon May 5 19:20:46 2008 +0000
 
-Prefix editor entries in the main menu with numbers.
-It allows Alt+E+number as shortcut to start an editor.
+    added .gqv to known file types
 
-------------------------------------------------------------------------
-r546 | zas_ | 2008-04-21 00:14:54 +0200 (Mon, 21 Apr 2008) | 2 lines
+commit 6e7bf48d03f50655a0e70015b3d33ce96bd80f5f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon May 5 19:11:12 2008 +0000
 
-Add missing shortcuts.
+    split filelist.c to filefilter.c and filedata.c
 
-------------------------------------------------------------------------
-r545 | nadvornik | 2008-04-21 00:14:38 +0200 (Mon, 21 Apr 2008) | 3 lines
+commit f798c6ab2cd9c89fa905f5003783a6c445551805
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 09:21:01 2008 +0000
 
-fixed color profile code for older versions of exiv2
-compilation fixes
+    Revert wrong patch rev 676.
 
-------------------------------------------------------------------------
-r544 | zas_ | 2008-04-21 00:01:26 +0200 (Mon, 21 Apr 2008) | 4 lines
+commit cfa6a11856d742e7b1e1bd46d6e7125eb1694a1b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 09:12:07 2008 +0000
 
-Mark slideshow toggle state in the menu.
-There is still an issue due to layout vs view slideshows...
+    Add an helper script to regenerate POTFILES.in file.
+    POTFILES.in was updated.
+    French translation was updated.
 
+commit 0a259ddb8f1c4e2929ea0a5c7570e86d27cddc22
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 08:32:18 2008 +0000
 
-------------------------------------------------------------------------
-r543 | zas_ | 2008-04-20 23:38:45 +0200 (Sun, 20 Apr 2008) | 2 lines
+    Revert patch 675, and correctly fix gtk assertion failure.
 
-Fix a typo introduced by revision 521.
+commit 37193c248cd813a72f62bce349c788072ca5b311
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 08:15:52 2008 +0000
 
-------------------------------------------------------------------------
-r542 | nadvornik | 2008-04-20 23:35:03 +0200 (Sun, 20 Apr 2008) | 2 lines
+    Fix two memory leaks.
 
-read color profiles from jpeg also with Exiv2
+commit 6c35f9de22600d4b8243b8d84095dfb716cedec9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon May 5 07:46:32 2008 +0000
 
-------------------------------------------------------------------------
-r541 | zas_ | 2008-04-20 23:30:36 +0200 (Sun, 20 Apr 2008) | 6 lines
+    Fix Gtk-CRITICAL **: gtk_label_set_text: assertion `GTK_IS_LABEL (label)' failed
+    when swapping to/from file icon view.
 
-Use explicit names for mouse buttons instead of numbers.
-MOUSE_BUTTON_LEFT   = 1
-MOUSE_BUTTON_MIDDLE = 2
-MOUSE_BUTTON_RIGHT  = 3
-It makes the code easier to read.
+commit 5cacdd949c21b1c5b989b62eb48d91e094ef3e89
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 23:57:20 2008 +0000
 
-------------------------------------------------------------------------
-r540 | zas_ | 2008-04-20 22:35:26 +0200 (Sun, 20 Apr 2008) | 2 lines
+    vficon_release_cb(): use switch() and cleanup.
 
-Fix a typo: unoffical -> unofficial
+commit b9cb52f0d53dbc898c252dfef98fae9f832bb14d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 23:20:43 2008 +0000
 
-------------------------------------------------------------------------
-r539 | zas_ | 2008-04-20 20:07:51 +0200 (Sun, 20 Apr 2008) | 2 lines
+    Minor tidyup.
 
-Effectively drop empty newlines at end of files (missing from rev 535)
+commit c2117e7e72686ada0203a1d562263dc7f198cb4a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 23:06:46 2008 +0000
 
-------------------------------------------------------------------------
-r538 | zas_ | 2008-04-20 18:50:19 +0200 (Sun, 20 Apr 2008) | 3 lines
+    Drop unused vficon_select_by_path() and vflist_select_by_path().
 
-comment_file_read(): rewrite the parser, drop leading and trailing newlines
-in comment.
+commit b6ea14610564d2367b0a74656717913362166e62
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 23:03:36 2008 +0000
 
-------------------------------------------------------------------------
-r537 | zas_ | 2008-04-20 15:42:22 +0200 (Sun, 20 Apr 2008) | 2 lines
+    Minor cleanup.
 
-Minor cleanup and code redundancy reduction.
+commit 509c70381ce8847866bb84ce398d074a749a6abf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun May 4 21:54:20 2008 +0000
 
-------------------------------------------------------------------------
-r536 | zas_ | 2008-04-20 15:30:36 +0200 (Sun, 20 Apr 2008) | 2 lines
+    dropped path_list functions, use filelist functions everywhere
 
-editor_command_one(): tidy up.
+commit ac3bd2a2622adbf9154d805e6a0df4bab97f54af
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 19:00:39 2008 +0000
 
-------------------------------------------------------------------------
-r535 | zas_ | 2008-04-20 15:04:57 +0200 (Sun, 20 Apr 2008) | 6 lines
+    Remove unused functions:
+    vflist_set_status_func()
+    vflist_set_thumb_status_func()
+    vflist_set_layout()
+    vficon_set_status_func()
+    vficon_set_thumb_status_func()
+    vficon_set_layout()
 
-Big whitespaces cleanup:
-- drop whitespaces at end of lines
-- convert eight spaces to tab at start of lines
-- drop spurious spaces mixed with tabs
-- remove empty lines at end of files
+commit d3ade2f9fd8e00a1fce9d8fc7bb32d359af96259
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 18:45:06 2008 +0000
 
-------------------------------------------------------------------------
-r534 | zas_ | 2008-04-20 12:05:27 +0200 (Sun, 20 Apr 2008) | 3 lines
+    Drop ViewFileIcon, use ViewFile and ViewFileInfoIcon instead.
 
-Allow the user to change open_recent_list_maxsize option through
-Preferences > Advanced > Navigation.
+commit 1267a5c07d5fb00b4eb9f9837b9d82aff3172b6e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 16:16:07 2008 +0000
 
-------------------------------------------------------------------------
-r533 | nadvornik | 2008-04-20 11:53:37 +0200 (Sun, 20 Apr 2008) | 2 lines
+    Drop ViewFileList, use ViewFile and ViewFileInfoList instead.
 
-rm as external delete command is too dangerous, even for testing
+commit be9e09722d788060c1ccf58222ee9ca8c80871b6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 11:47:36 2008 +0000
 
-------------------------------------------------------------------------
-r532 | zas_ | 2008-04-20 11:47:51 +0200 (Sun, 20 Apr 2008) | 2 lines
+    Prepare switch to ViewFile (unused yet).
 
-Add a way to restore original state in Adjust menu.
+commit 7192ff23dcf4fb721d72404649a98de99993f042
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 00:32:05 2008 +0000
 
-------------------------------------------------------------------------
-r531 | nadvornik | 2008-04-20 11:29:46 +0200 (Sun, 20 Apr 2008) | 2 lines
+    Shorten Edit menu labels, dropping "in ". It will ease
+    translations too, and user can define its own label in Preferences.
 
-added fColorProfile pseudo-tag with detailed information
+commit f83f83eed158cf9671c8ccec4e52e4916802eb73
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 00:21:14 2008 +0000
 
-------------------------------------------------------------------------
-r530 | zas_ | 2008-04-20 11:02:05 +0200 (Sun, 20 Apr 2008) | 3 lines
+    Do not show Copy, Move, Rename, Delete, New Folder external commands
+    in the Edit section of contextual menus.
 
-Fix the case "orientation from FileData, color profile from exif".
-Reported by Vladimir Nadvornik.
+commit 50a7b03151f939ddc0f61ae9560de5c17412c3c1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun May 4 00:16:37 2008 +0000
 
-------------------------------------------------------------------------
-r529 | zas_ | 2008-04-20 01:12:30 +0200 (Sun, 20 Apr 2008) | 3 lines
+    Use GQ_EDITOR_GENERIC_SLOTS instead of hardcoded value.
 
-Rename inappropriate folder_size to folder.
+commit 66238168387b3ff974f886b5a039bbccd2d44099
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 20:55:16 2008 +0000
 
+    exif_get_description_by_key(): check for "formatted." prefix, and optimize.
 
-------------------------------------------------------------------------
-r528 | zas_ | 2008-04-20 00:32:07 +0200 (Sun, 20 Apr 2008) | 2 lines
+commit 03acb7cb8dc91e0f307f818a61f6a7671fe8d9cc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 20:49:25 2008 +0000
 
-Use sizeof() for buffer size where appropriate.
+    exif_get_formatted_by_key(): skip prefix when comparing.
 
-------------------------------------------------------------------------
-r527 | zas_ | 2008-04-19 23:50:05 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 1000ac5af7b62b93b673d48353edbea43aff67e4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 20:40:50 2008 +0000
 
-Keep image orientation set by the user during the session.
+    Change the prefix of formatted exif tags to a more explicit "formatted." prefix
+    instead of the shorter "f".
+    Warning: custom overlay info string has to be modified since old names are no
+    more recognized, one can reset it to default through Preferences > Advanced.
 
-------------------------------------------------------------------------
-r526 | zas_ | 2008-04-19 23:30:19 +0200 (Sat, 19 Apr 2008) | 3 lines
+commit e01df0556e0bbca765a2e07987148d3b6d10760a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 16:58:17 2008 +0000
 
-Save Show Marks state to rc file and display current state in menu.
-It is saved as boolean option layout.show_marks.
+    Fix a bug occuring when using certain actions on a collection
+    item which is not in the selection.
+    Triggering it will either result in an assertion failure or a
+    segfault.
+    
+    To reproduce:
+    - open a collection
+    - right-click on a non-selected image
+    - select Delete... menu entry (or Copy, Move, Rename, Properties...)
+    
+    It results in the best case:
+    ** ERROR **: file filelist.c: line 905 (file_data_ref): assertion failed: (fd->magick == 0x12345678)
+    or a pure segfault due to corrupted data.
+    
+    collection_table_popup_file_list() has to return a list of filedata *
+    not a list of gchar *.
 
-------------------------------------------------------------------------
-r525 | nadvornik | 2008-04-19 23:20:08 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 31ba226eb280ab241b855069dbc7cc10fc31f225
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 15:19:35 2008 +0000
 
-fixed max. number of profiles
+    Move marks-related fields from _ViewFileInfoList to _ViewFile, since
+    they'll be used for file icon view too.
 
-------------------------------------------------------------------------
-r524 | zas_ | 2008-04-19 23:18:24 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 13e75141b49669425e206f358d06f6e1ca4a9627
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 15:17:24 2008 +0000
 
-Sort options.
+    Move common thumbs_* fields from _ViewFileInfoIcon and _ViewFileInfoList
+    to _ViewFile.
 
-------------------------------------------------------------------------
-r523 | nadvornik | 2008-04-19 23:10:18 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 8ac7dc269a5411ee3504599b3c6a085f6aad312c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 15:13:15 2008 +0000
 
-fixed color profile index
+    Rename thumbs_fd to thumbs_filedata in ViewFileIcon struct to match
+    the name used in ViewFileList.
 
-------------------------------------------------------------------------
-r522 | zas_ | 2008-04-19 22:53:12 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit fd7d8c583de748c29c5304ee300e7af6a8d36ed8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 15:09:21 2008 +0000
 
-Let toggle marks with numeric keypad.
+    Remove useless thumbs_list from ViewFileIcon.
 
-------------------------------------------------------------------------
-r521 | nadvornik | 2008-04-19 22:19:27 +0200 (Sat, 19 Apr 2008) | 4 lines
+commit e1c39fa29264aea839610dfedca5e086b5128395
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 12:50:52 2008 +0000
 
-I have finally found how to add alternative hotkeys
-removed more hard-coded keys
-"Split Quad" is without hotkey for now
+    Add function prototypes (yet unused).
 
-------------------------------------------------------------------------
-r520 | zas_ | 2008-04-19 21:28:10 +0200 (Sat, 19 Apr 2008) | 3 lines
+commit a4659c7ea41ec4d1eeb659b1b1dd3d6bcc9bb833
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 12:48:45 2008 +0000
 
-Accept keywords composed by two words ("Todo" = "A faire" in french).
-Prevent duplicate keywords in the list.
+    Drop redundant vflist_thumbs_set() introduced in revision 649,
+    modify and use existing vflist_thumb_set().
 
-------------------------------------------------------------------------
-r519 | nadvornik | 2008-04-19 19:55:41 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 26de6ed0184a1c43652a582938b2ceb688c4e6d4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 12:21:22 2008 +0000
 
-show the AdobeRGB profile in the menu, indicate input profile from image
+    Remove redundant prototype.
 
-------------------------------------------------------------------------
-r518 | zas_ | 2008-04-19 19:14:03 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit c790abbf70208af477971ec3b3af3fa8e11dbe21
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 11:58:41 2008 +0000
 
-file_dat_unref: display number of references as well of path (debug only).
+    Introduce ViewFileInfoList and ViewFileInfoIcon (not used yet).
 
-------------------------------------------------------------------------
-r517 | nadvornik | 2008-04-19 18:26:29 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 26cd72f831ddba954a4e85eb9300427e5e3e0b2a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 11:34:13 2008 +0000
 
-first support for AdobeRGB colorspace
+    Replace Layout icon_view field by more generic file_view_type.
+    Replace option layout.view_as_icons by layout.file_view_type.
 
-------------------------------------------------------------------------
-r516 | zas_ | 2008-04-19 18:10:08 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit f5b1784d9050d4fdd3d6badb8acfdf8112d53e68
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 10:31:37 2008 +0000
 
-French translation fixes.
+    Set thumbs_enabled through new function vflist_thumbs_set() instead
+    of vflist_new().
 
-------------------------------------------------------------------------
-r515 | zas_ | 2008-04-19 15:40:20 +0200 (Sat, 19 Apr 2008) | 3 lines
+commit 04a9e3e249e4f237ff01a40c6fd3e8ce241eb107
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 09:41:09 2008 +0000
 
-French translation fixes and updates.
+    Prepare merging of some parts of view_file_list and view_file_icon and
+    simplification of view_file* interface.
 
+commit f520f8c5a7f3a470fe072b6f00499612d759964f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat May 3 08:35:08 2008 +0000
 
-------------------------------------------------------------------------
-r514 | zas_ | 2008-04-19 15:39:21 +0200 (Sat, 19 Apr 2008) | 2 lines
+    Change default positions of dividers since width of the main menu
+    was increased.
 
-Add missing _().
+commit d2e52306a94755c9fdaae1ffca917ceefc3595f6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 23:11:31 2008 +0000
 
-------------------------------------------------------------------------
-r513 | zas_ | 2008-04-19 14:46:59 +0200 (Sat, 19 Apr 2008) | 4 lines
+    Make exif_rational_to_double() and exif_get_rational_as_double() static.
 
-Add the possibility to update only one translation file using,
-for example: make update-po PO=fr
-autogen.sh applies a patch made against glib-gettextize generated Makefile.in.in
+commit 4d369ddac3bd4da17eab8ea2397ddcf0d9be1f73
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 23:08:18 2008 +0000
 
-------------------------------------------------------------------------
-r512 | zas_ | 2008-04-19 13:11:53 +0200 (Sat, 19 Apr 2008) | 5 lines
+    info_notebook_reordered_cb(): do not call info_tabs_sync(), it causes exif
+    info disappearing when moving the tab.
 
-Cleanup last patch:
-- drop vd_pop_menu_dir_view_as_cb() since it is now unused.
-- use G_N_ELEMENTS()
+commit 2fc5d88ca3589beeee18a669cac708b719d90963
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 22:59:04 2008 +0000
 
+    Fix a Pango warning related to UTF8 when displaying internationalized
+    description in Advanced Exif Properties panel.
 
-------------------------------------------------------------------------
-r511 | nadvornik | 2008-04-19 11:49:14 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 66d230fa707f98cbb75db6de0dd3cd66e235ab95
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 22:31:24 2008 +0000
 
-improved spec file
+    exif_get_description_by_key(): tidy up.
 
-------------------------------------------------------------------------
-r510 | zas_ | 2008-04-19 11:36:30 +0200 (Sat, 19 Apr 2008) | 3 lines
+commit 30eb0123db8ca4fdacc34e21589f718ed3c9e260
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 22:28:39 2008 +0000
 
-Fix directory view popup menu to display a View As submenu
-to switch between different directory views.
+    Add a pointer to the build function in the formatted exif tags struct
+    and use a loop in exif_get_formatted_by_key().
 
-------------------------------------------------------------------------
-r509 | zas_ | 2008-04-19 01:35:16 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit c59ca563a159852e616063a9595c24f432cf9ef7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 21:58:36 2008 +0000
 
-gimp-remote has no -n option.
+    Indentation fix.
 
-------------------------------------------------------------------------
-r508 | zas_ | 2008-04-19 01:09:03 +0200 (Sat, 19 Apr 2008) | 4 lines
+commit 74dc50f227b9f46e2c6746db4f0cfe7d7607888d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 21:34:26 2008 +0000
 
-Add zoom ratio display to OSD in fullscreen mode.
-It appears as [%zoom%] in fullscreen info string.
-It is now displayed by default.
+    Explode exif_get_formatted_by_key() in smaller functions prefixed "exif_build_f".
+    An helper macro was added to call them.
 
-------------------------------------------------------------------------
-r507 | nadvornik | 2008-04-19 00:31:58 +0200 (Sat, 19 Apr 2008) | 2 lines
+commit 4fff33dde0de9160cf9ea5df78c69905a00ba24c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 20:56:59 2008 +0000
 
-partially fixed reading embedded color profiles with exiv2
+    Remove unused checksum_simple() function.
 
-------------------------------------------------------------------------
-r506 | zas_ | 2008-04-19 00:15:01 +0200 (Sat, 19 Apr 2008) | 5 lines
+commit 7fd292e32d3445f1cf7c60d2268f8a3c0d10d49b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 20:40:47 2008 +0000
 
-Add two new options to control image read buffer at runtime.
-They are available in Preferences > Advanced > Image loading and caching.
-Default read buffer size was set to 4096 instead of 512.
-These options are saved to rc file.
+    Simplify remove_extension_from_path().
 
-------------------------------------------------------------------------
-r505 | zas_ | 2008-04-18 23:53:33 +0200 (Fri, 18 Apr 2008) | 2 lines
+commit 4f05f85b26d36c87e449a59d68c7105a7cdb138b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 20:27:47 2008 +0000
 
-Display elapsed time since previous get_exec_time() call (debug only).
+    remove_level_from_path() was simplified.
 
-------------------------------------------------------------------------
-r504 | zas_ | 2008-04-18 23:51:08 +0200 (Fri, 18 Apr 2008) | 2 lines
+commit f4b58f7255ce0a67d0076b09f11f2e542f387b51
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 09:03:52 2008 +0000
 
-Remove forgotten debug printf().
+    Move variable declaration and affectation near where it is used.
 
-------------------------------------------------------------------------
-r503 | zas_ | 2008-04-18 23:42:00 +0200 (Fri, 18 Apr 2008) | 2 lines
+commit 0142966824cfdbcefc79a188a4b3aae3d8253c6e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri May 2 08:41:32 2008 +0000
 
-Fix OSD display when fullscreen info string is empty.
+    Replace GQView by Geeqie.
 
-------------------------------------------------------------------------
-r502 | nadvornik | 2008-04-18 23:30:12 +0200 (Fri, 18 Apr 2008) | 2 lines
+commit 3cce6caefa4385a18b79e83df02743f2c0652103
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 23:20:26 2008 +0000
 
-replace inner loops with memcpy
+    Use sizeof() instead of hardcoded buffer sizes.
 
-------------------------------------------------------------------------
-r501 | zas_ | 2008-04-18 22:41:09 +0200 (Fri, 18 Apr 2008) | 5 lines
+commit 787538b30bd23fc85a3e8aae38c1ea6877aed636
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 22:59:54 2008 +0000
 
-Explode pr_tile_mirror() in three optimized functions:
-pr_tile_mirror_only()
-pr_tile_mirror_and_flip()
-pr_tile_flip_only()
+    cache_sim_write_similarity(): cleanup and simplification.
 
-------------------------------------------------------------------------
-r500 | zas_ | 2008-04-18 18:53:41 +0200 (Fri, 18 Apr 2008) | 5 lines
+commit 0d8286ddc775e675c1f3552f92047d3928637d32
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 22:31:14 2008 +0000
 
-Rename vd_drop_update() to vd_dnd_drop_update().
-Add two function pointers to ViewDir struct to keep
-vdtree_dnd_drop_expand_cancel() and vdtree_dnd_drop_expand()
-static to view_dir_tree.c.
+    Use secure_save stuff to write .sim files.
 
-------------------------------------------------------------------------
-r499 | zas_ | 2008-04-18 18:29:47 +0200 (Fri, 18 Apr 2008) | 2 lines
+commit 68cf3760029075a5e3877954eacef14ee5f67956
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 22:30:16 2008 +0000
 
-Drop 3 useless #define.
+    save_options(): minor code simplification.
 
-------------------------------------------------------------------------
-r498 | zas_ | 2008-04-18 18:25:40 +0200 (Fri, 18 Apr 2008) | 4 lines
+commit a2ff3d30a0ccf398323de9245d13cb166256f333
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 22:27:44 2008 +0000
 
-Fix forgotten vd->pf affectation.
-Cleanup, and reduce code redundancy a bit.
+    Add a wrapper to fwrite().
 
+commit cae11cbe267cb6f95da10ea3c5d472d4e6069a34
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 21:42:22 2008 +0000
 
-------------------------------------------------------------------------
-r497 | zas_ | 2008-04-18 13:01:41 +0200 (Fri, 18 Apr 2008) | 6 lines
+    Typo fix.
 
-Explode pr_tile_rotate_90() in two functions:
-pr_tile_rotate_90_clockwise()
-pr_tile_rotate_90_counter_clockwise()
-Optimize the code at the expense of a bit of code redundancy:
-tests were moved outside the loops, intermediate results are now cached.
+commit 394f2839406f77bc462f371da7c81539804e3d5d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 18:37:50 2008 +0000
 
-------------------------------------------------------------------------
-r496 | zas_ | 2008-04-18 11:15:09 +0200 (Fri, 18 Apr 2008) | 2 lines
+    Indentation fixes.
 
-Introduce printf_term() macro and use it.
+commit ac59f9924c35122eaa97af9ce56f966b97738035
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu May 1 18:26:30 2008 +0000
 
-------------------------------------------------------------------------
-r495 | zas_ | 2008-04-17 22:14:49 +0200 (Thu, 17 Apr 2008) | 3 lines
+    Simplify and optimize extension_find_dot().
 
-Add a shortcut key for List (L) and change the one for Tree (T),
-they are now in a submenu.
+commit e00eb93689768d84f6edd346ae2d4619d1fc2399
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 29 22:44:06 2008 +0000
 
-------------------------------------------------------------------------
-r494 | zas_ | 2008-04-17 22:03:49 +0200 (Thu, 17 Apr 2008) | 2 lines
+    fixed a memory leak
 
-Add some wrappers in view_dir.c and simplify even more.
+commit 53bb7d6c6c0eba150ceda32609281a2bccc43241
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 29 18:12:49 2008 +0000
 
-------------------------------------------------------------------------
-r493 | zas_ | 2008-04-17 21:57:41 +0200 (Thu, 17 Apr 2008) | 2 lines
+    cleanup: use image_get_image_size
 
-Fix a bug introduced in revision 489.
+commit 76b0903edc9ab43fcf41d2a9134c4ef969b8ccb6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 29 17:52:12 2008 +0000
 
-------------------------------------------------------------------------
-r492 | zas_ | 2008-04-17 20:44:17 +0200 (Thu, 17 Apr 2008) | 3 lines
+    fixed connected zoom and scroll that didn't work in some cases
+    http://sourceforge.net/tracker/index.php?func=detail&aid=1952429&group_id=222125&atid=1054680
 
-Reduce code redundancy with the introduction of a new
-function named vd_get_fd_from_tree_path().
+commit 6e5e4f7670c45b55f2fca8b3916f1b9f9397a318
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Sun Apr 27 23:31:20 2008 +0000
 
-------------------------------------------------------------------------
-r491 | nadvornik | 2008-04-17 19:44:54 +0200 (Thu, 17 Apr 2008) | 3 lines
+    fix warning cast from pointer to integer of different size (when an integer is
+    passed instead of a pointer to a callback, GINT_TO_POINTER(i) should be used)
 
-image post-processing (rotation and color management) moved to
-pixbuf-renderer
+commit 5ae4228a32c2758ec72a0a780a2480474033bb80
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 27 20:05:11 2008 +0000
 
-------------------------------------------------------------------------
-r490 | zas_ | 2008-04-17 19:35:51 +0200 (Thu, 17 Apr 2008) | 3 lines
+    Added LIRC patch written by Matteo Beniamino
 
-Merge vd(list|tree)_release_cb() in vd_release_cb().
-I made some assumptions here i hope correct.
+commit 24110e7cf37b69fd01db02f203c5f1a25b5d113d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 25 20:23:21 2008 +0000
 
-------------------------------------------------------------------------
-r489 | zas_ | 2008-04-17 19:19:41 +0200 (Thu, 17 Apr 2008) | 2 lines
+    Fix number of directory views, bug introduced in revision 617.
 
-Merge few more functions to view_dir.c.
+commit 1f3d7a4f31640be1c85f8cd4d8bd966665d7399c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 25 20:08:47 2008 +0000
 
-------------------------------------------------------------------------
-r488 | zas_ | 2008-04-17 18:33:31 +0200 (Thu, 17 Apr 2008) | 2 lines
+    fixed dragging multiple files from file list
+    http://sourceforge.net/tracker/index.php?func=detail&aid=1950740&group_id=222125&atid=1054680
 
-Move common menu position callback to view_dir.c.
+commit 0fb3e0276867a5224e267571b04641290d9b1013
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 25 09:31:32 2008 +0000
 
-------------------------------------------------------------------------
-r487 | zas_ | 2008-04-17 16:51:32 +0200 (Thu, 17 Apr 2008) | 2 lines
+    Add a line about variable and function names.
 
-Merge dirlist/dirview dnd code.
+commit 23b982817520f7e361b3252b18efb0c391f08e17
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 25 09:28:45 2008 +0000
 
-------------------------------------------------------------------------
-r486 | zas_ | 2008-04-17 00:51:32 +0200 (Thu, 17 Apr 2008) | 2 lines
+    Document the Geeqie coding style.
+    This is a draft, please improve.
 
-Regenerate translations files and update french translation.
+commit 74182a124ee9eca4d76d2e4da9b690dea61a651e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 25 08:07:22 2008 +0000
 
-------------------------------------------------------------------------
-r485 | zas_ | 2008-04-17 00:31:52 +0200 (Thu, 17 Apr 2008) | 2 lines
+    Handle the case of reduction of the number of view directory types.
+    Previously it was leading to a segfault.
 
-Fix new folder feature in dirlist mode, it was broken by revision 481.
+commit 856f0b26d9bd498c8e093e75c5a7f7b5bdb8238f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 20:29:09 2008 +0000
 
-------------------------------------------------------------------------
-r484 | zas_ | 2008-04-17 00:23:43 +0200 (Thu, 17 Apr 2008) | 2 lines
+    Allow to copy the path of a directory to clipboard from directory views.
+    Show Copy path option has to be enabled.
+    Suggested by Frédéric Mantegazza.
 
-Fix a crash introduced in revision 477.
+commit 76747275b6e719dbb4efb93d414f82ab2f177d79
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 20:18:59 2008 +0000
 
-------------------------------------------------------------------------
-r483 | zas_ | 2008-04-17 00:21:01 +0200 (Thu, 17 Apr 2008) | 2 lines
+    Do not allow to add anything but directories to sort bar in
+    folder mode through drag'n'drop.
+    Introduce a new field only_directories to _BookMarkData struct.
 
-Fix two errors made in revision 473.
+commit 9816ef505ad7693841db4e85a5f64d43669675df
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 16:35:02 2008 +0000
 
-------------------------------------------------------------------------
-r482 | zas_ | 2008-04-16 23:58:05 +0200 (Wed, 16 Apr 2008) | 2 lines
+    Add missing spaces around equal sign.
 
-Merge few more vdlist/vdtree functions.
+commit a792a5a9f9267bf8872daff3494a374909d9fca7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 16:32:20 2008 +0000
 
-------------------------------------------------------------------------
-r481 | zas_ | 2008-04-16 22:36:10 +0200 (Wed, 16 Apr 2008) | 2 lines
+    Cleanup exif_get_formatted_by_key().
 
-Make directory view popup menu common and move it to view_dir.{c,h}.
+commit de5436b46e7f303f7c16620e67b18ccde63b386e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 15:57:58 2008 +0000
 
-------------------------------------------------------------------------
-r480 | nadvornik | 2008-04-16 22:32:44 +0200 (Wed, 16 Apr 2008) | 2 lines
+    Add missing space.
 
-fixed compiler warnings
+commit f6a8c6dfbe0c9db2e662734deb336b57de9bdb6f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 15:53:08 2008 +0000
 
-------------------------------------------------------------------------
-r479 | nadvornik | 2008-04-16 22:15:42 +0200 (Wed, 16 Apr 2008) | 2 lines
+    6 for() vs 201 for (): winner is for ().
 
-in debug mode print time information on selected events
+commit db804e24c3646853cd23436cff8ae6ae8926d726
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 15:49:57 2008 +0000
 
-------------------------------------------------------------------------
-r478 | zas_ | 2008-04-16 20:57:50 +0200 (Wed, 16 Apr 2008) | 2 lines
+    Convert the minority of while() to while ().
 
-Clean up and simplify.
+commit 371332db2d9c7cc5f72c701fd92623c395489280
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 15:44:43 2008 +0000
 
-------------------------------------------------------------------------
-r477 | zas_ | 2008-04-16 18:54:38 +0200 (Wed, 16 Apr 2008) | 3 lines
+    Use only one secure_fprintf() call instead of two.
 
-Merge parts of view_dir_list/tree constructors/destructors to
-view_dir.
+commit 1203b7f1892105a3ac8019cabb7b7d5a8e85cb34
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 15:31:21 2008 +0000
 
-------------------------------------------------------------------------
-r476 | zas_ | 2008-04-16 18:05:12 +0200 (Wed, 16 Apr 2008) | 3 lines
+    Use sizeof().
 
-Move some dnd common code from view_dir_list.c and view_dir_tree.c
-to view_dir.c.
+commit 0b16c7147a350800d4f4afd2c191d62bbf590e7c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 12:47:09 2008 +0000
 
-------------------------------------------------------------------------
-r475 | zas_ | 2008-04-16 16:56:31 +0200 (Wed, 16 Apr 2008) | 2 lines
+    Remove whitespace between function name and first parenthesis for the sake of consistency. (pass 2)
 
-Rename vdt occurences to vd.
+commit 002da4045e3fb091adca1bd57745334f40514257
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 12:23:02 2008 +0000
 
-------------------------------------------------------------------------
-r474 | zas_ | 2008-04-16 16:51:39 +0200 (Wed, 16 Apr 2008) | 2 lines
+    Remove whitespace between function name and first parenthesis for the sake of consistency.
 
-Rename vdl occurences to vd.
+commit a603169a7d2e745aeb638509fbe839d1182257ec
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 11:40:26 2008 +0000
 
-------------------------------------------------------------------------
-r473 | zas_ | 2008-04-16 16:45:22 +0200 (Wed, 16 Apr 2008) | 11 lines
+    Indentation fix.
 
-Introduce a new struct ViewDir to handle directory views common
-data.
-Specific data is now in ViewDirInfoList and ViewDirInfoTree.
-Type of directory view can be specified with enum DirViewType.
-This is saved to rc file as layout.dir_view_type, which replace
-layout.view_as_tree.
-Code was modified to reflect these changes.
-This is a first to move to merge common code of view_dir_list.c
-and view_dir_tree.c and ease the introduction of new types
-of directory view.
+commit 9ed4108d3855b95889c28bd7860f746da900a11d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 09:50:37 2008 +0000
 
-------------------------------------------------------------------------
-r472 | zas_ | 2008-04-15 23:49:28 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Display file_data debug messages only at level 2.
 
-Indicate --debug[=level] in usage display.
+commit 7e6cbe554f63e4a16a1ab72333c9f66a7e196347
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 09:43:23 2008 +0000
 
-------------------------------------------------------------------------
-r471 | zas_ | 2008-04-15 23:47:03 +0200 (Tue, 15 Apr 2008) | 4 lines
+    Move get_exec_time() to debug.{c,h}.
 
-Parse command line for --debug option as soon as possible and allow
---debug[=level] syntax.
-Only display message indication debug level once.
+commit 161a3cf407b2af7ce02dcf15792dd9ca8c5c8c16
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 09:09:48 2008 +0000
 
-------------------------------------------------------------------------
-r470 | zas_ | 2008-04-15 23:06:00 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Move options stuff to options.{c,h} and remove globals.c
 
-Cleanup read/write of image.zoom_mode option.
+commit af1beef9f10c4d5408d73ecbd606cbc0a87b68a3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 08:53:39 2008 +0000
 
-------------------------------------------------------------------------
-r469 | zas_ | 2008-04-15 22:56:55 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Move debug macros from main.h to new debug.h.
+    Make debug_level static to debug.c and add utility functions
+    to manipulate it.
+    Add #include "debug.h" where needed.
 
-Read show_icon_names only once.
+commit b23c9dac6850b794e8002b031704bff3d83f0b20
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 24 00:15:03 2008 +0000
 
-------------------------------------------------------------------------
-r468 | zas_ | 2008-04-15 22:55:21 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Handle the newline in DEBUG_N() macro instead of adding one
+    in each debug message string.
 
-Rename l_conf to layout_order and make it more local.
+commit 30cfbdf85a61414f63e52f8e21a4fb0ede49acf3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 23:52:20 2008 +0000
 
-------------------------------------------------------------------------
-r467 | zas_ | 2008-04-15 22:46:14 +0200 (Tue, 15 Apr 2008) | 5 lines
+    French translation was updated.
 
-Fix a bug that was here since a long time, buf has nothing
-to do with options->layout.order, so compare it to l_conf instead.
-It fixes refreshing of files and directories lists when changing
-filtering options.
+commit 9a8f43f7c1f08425b82ab3f52e22ecd81e7c7834
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 23:51:02 2008 +0000
 
-------------------------------------------------------------------------
-r466 | zas_ | 2008-04-15 22:36:11 +0200 (Tue, 15 Apr 2008) | 6 lines
+    Make image_osd_histogram_onoff_toggle() and image_osd_histogram_onoff_status() static.
 
-Add a new option in Preferences > Filtering to allow the
-user to choose to display '.' directory in folder lists or not.
-This option is saved to rc file as file_filter.show_dot_directory.
-A minor fix was made to disable display of .. in folder selection
-dialogs when current path is /.
+commit addef370767780cc6253b4e0d4a592de481f01e4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 23:47:53 2008 +0000
 
-------------------------------------------------------------------------
-r465 | zas_ | 2008-04-15 22:00:27 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Fix image overlay displayed only on second "I" press in layout view.
 
-Add and use few new macros in rc file writing code.
+commit 7d68ee688db510528ad6338e6b9e7b909e02c9cf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 23:35:13 2008 +0000
 
-------------------------------------------------------------------------
-r464 | nadvornik | 2008-04-15 20:34:24 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Display file and line along debug messages for any debug level but level 1.
+    Add a DEBUG_0() macro for instant debugging.
 
-this might fix the freezes on freebsd, solaris, etc.
+commit e153caa7d02808144fdae1a5348336e61083d972
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 22:40:55 2008 +0000
 
-------------------------------------------------------------------------
-r463 | nadvornik | 2008-04-15 18:57:30 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Fix Gtk-CRITICAL **: gtk_entry_set_text: assertion `GTK_IS_ENTRY (entry)' failed
+    occuring when toggling file list view <-> file icon view.
 
-save file_class to config file
+commit a2a3d0fee28a20f0ede745ab50e3e482aa40dc88
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 23 22:38:34 2008 +0000
 
-------------------------------------------------------------------------
-r462 | zas_ | 2008-04-15 09:16:51 +0200 (Tue, 15 Apr 2008) | 2 lines
+    clear the buffer before loading of an image
 
-Exit fullscreen mode when Properties is displayed.
+commit 1d9e03e85df8fde6dec5542ed0125e445fe3ee02
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 22:33:18 2008 +0000
 
-------------------------------------------------------------------------
-r461 | zas_ | 2008-04-15 08:56:25 +0200 (Tue, 15 Apr 2008) | 7 lines
+    Use menu_item_add_stock_sensitive() and menu_item_add_sensitive().
 
-New Go to directory view feature that permits to find and display the directory
-corresponding to an image view.
-For example, when you open an image in new window from collection, right clicking on
-the newly displayed image will let you choose Go to directory view, which would open
-a new window, with image and directory list.
-If current directory is the one of the image, menu item is disabled.
+commit 5773dedeb1eacfe953bcfae30c251bd27f158b81
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 22:22:37 2008 +0000
 
-------------------------------------------------------------------------
-r460 | zas_ | 2008-04-15 01:47:13 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Update to contributors list.
 
-Move layout.order default init to setup_default_options().
+commit 3a71a78dc06c95ba23d1662e97621aef80d7ad92
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 22:17:21 2008 +0000
 
-------------------------------------------------------------------------
-r459 | zas_ | 2008-04-15 01:39:46 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Allow the copy of file paths to clipboard.
+    This feature is disabled by default, it can be set through
+    Preferences > Advanced > Behavior > Show "Copy path" ...
+    When enabled, it adds a menu entry "Copy path" that let the
+    user copies current selection's paths to X clipboard.
+    It is very convenient to paste paths to xterm for example.
+    Patch by Carles Pina i Estany and me.
 
-collection_load(): use booleans and always count failures (for debug). 
+commit b022eddfd7c892f7db4b262e9f027237255c8735
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 23 21:08:29 2008 +0000
 
-------------------------------------------------------------------------
-r458 | zas_ | 2008-04-15 01:29:54 +0200 (Tue, 15 Apr 2008) | 2 lines
+    fixed a bug in opening files with non-utf8 locales in exiv2.cc
 
-collection_load(): improve headers parsing.
+commit 51514f069a0c030ac9ff092a89979f48cc55e10b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 20:47:19 2008 +0000
 
-------------------------------------------------------------------------
-r457 | zas_ | 2008-04-15 01:09:48 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Introduce macros to display debug messages.
+    if (debug) printf(...) is now replaced by variadic macros:
+    DEBUG_1()
+    And for higher debugging levels:
+    DEBUG_2()
+    DEBUG_3()
+    DEBUG_4()
 
-collection_load(): fix typo (missing #) made in rev 453.
+commit b98126503e690efb410be9b153b582879f5b3831
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 13:46:18 2008 +0000
 
-------------------------------------------------------------------------
-r456 | zas_ | 2008-04-15 01:08:27 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Honor Control and Shift keys while drag'n'droping files
+    to directories.
+    Before a menu (Copy/Move/Cancel) was always displayed, now
+    if the user hold Shift key or Control key, the menu
+    is not shown, but move or copy actions take place.
+    If no modifier key is used, the menu is displayed as usual.
 
-collection_load(): accept whitespaces at start of lines.
+commit 8239272a1d8bd4af22478acb3f5776a5f2faf1a2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 13:03:04 2008 +0000
 
-------------------------------------------------------------------------
-r455 | zas_ | 2008-04-15 00:57:26 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Only display message if in debug mode.
 
-collection_load(): increase verbosity in debug mode.
+commit 682629894b3882e3de68c123c531fb8d8b261424
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 23 09:56:21 2008 +0000
 
-------------------------------------------------------------------------
-r454 | zas_ | 2008-04-15 00:50:50 +0200 (Tue, 15 Apr 2008) | 3 lines
+    Fix adding a selection to a collection with no window open
+    using the sort manager. Only one file was added, now all
+    files in the selection are added (but duplicates).
+    A pointer was not reset correctly.
 
-collection_load(): replace official by limit_failures (and
-invert the tests).
+commit 9b106381f25bf9d76db2590c1a08586330da4a33
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 23:53:24 2008 +0000
 
-------------------------------------------------------------------------
-r453 | zas_ | 2008-04-15 00:45:53 +0200 (Tue, 15 Apr 2008) | 3 lines
+    Save sort manager state to rc file.
 
-Increase collection_load() buffer size and do not activate
-error limiting for GQview collections.
+commit b1c55eb8df1c22305054d139fbfe65e2a73f377b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 22:45:51 2008 +0000
 
-------------------------------------------------------------------------
-r452 | zas_ | 2008-04-15 00:28:29 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Remove unused function bar_info_size_request().
 
-Merge collection_load_only_geometry() into collection_load().
+commit 38c13e591d7ff69980e0886af4fba060bee911d4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 22:44:10 2008 +0000
 
-------------------------------------------------------------------------
-r451 | zas_ | 2008-04-15 00:05:47 +0200 (Tue, 15 Apr 2008) | 2 lines
+    Save state and width of exif, info and sort panels to rc file.
+    Width is restored only if save windows dimensions is set.
 
-Use flags for collection_load*().
+commit a634981a6a28b9f16aef7839b60b2f822ed0971d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 22 19:26:07 2008 +0000
 
-------------------------------------------------------------------------
-r450 | zas_ | 2008-04-13 22:33:45 +0200 (Sun, 13 Apr 2008) | 2 lines
+    updated ChangeLog from svn log
 
-Apply exif display config (Never/If set/Always) to pan view too.
+commit 1aeed5d363fa31ad42d7f8aaaf5d8abc47470a87
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 22 18:06:38 2008 +0000
 
-------------------------------------------------------------------------
-r449 | zas_ | 2008-04-13 21:21:13 +0200 (Sun, 13 Apr 2008) | 4 lines
+    fixed version string ;)
 
-Rename show_dot_files to show_hidden_files.
-There is no need to expose the underlying method to hide
-files.
+commit 3ace564b446504e8cc34456c46623e16e939fbfa
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 22 17:45:08 2008 +0000
 
-------------------------------------------------------------------------
-r448 | zas_ | 2008-04-13 20:56:24 +0200 (Sun, 13 Apr 2008) | 3 lines
+    updated version number
 
-Let toggle the visibility of hidden files from directories list
-or tree contextual menu.
+commit 17fd8dee35ce3751744578a472f1b14de63a4f30
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 22 17:40:29 2008 +0000
 
-------------------------------------------------------------------------
-r447 | zas_ | 2008-04-13 14:24:42 +0200 (Sun, 13 Apr 2008) | 2 lines
+    fixed reading of signed rational type with Exiv2
 
-Add a button to reset fullscreen info string to default value.
+commit 0975a01fb79e3c92c058903a311cbc87e0d06370
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 22 09:57:26 2008 +0000
 
-------------------------------------------------------------------------
-r446 | zas_ | 2008-04-13 14:12:44 +0200 (Sun, 13 Apr 2008) | 2 lines
+    fixed instalation of doc files
 
-Fix a typo, READ_CHAR() must use value_all.
+commit d19be6a6cb20a06c7ee518de9fff486458f4ad10
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 09:40:05 2008 +0000
 
-------------------------------------------------------------------------
-r445 | zas_ | 2008-04-13 11:10:38 +0200 (Sun, 13 Apr 2008) | 3 lines
+    Correctly escape data before using pango_layout_set_markup().
+    Exif data may contain characters like & or < >.
 
-Use convenient macros to read options, it will ensure options
-names are matching (in the rc file and internally).
+commit b38d66e98392adcdd1494ab7949254e9b4e99f95
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 09:01:29 2008 +0000
 
-------------------------------------------------------------------------
-r444 | zas_ | 2008-04-13 10:36:17 +0200 (Sun, 13 Apr 2008) | 5 lines
+    Use image_osd_toggle() in layout_menu_overlay_cb().
+    Drop layout_image_overlay_update().
 
-Simplify read_*_option() stuff by passing pointer to option value.
-Introduce read_uint_option() to read enum values and read_int_option_clamp()
-to read clamped values.
+commit 996cf10ace4e17c5a537497d7a1d04bf8e15ee36
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 08:53:07 2008 +0000
 
+    Merge view_overlay_toggle() and layout_image_overlay_toggle() into new image_osd_toggle().
 
-------------------------------------------------------------------------
-r443 | zas_ | 2008-04-13 01:59:31 +0200 (Sun, 13 Apr 2008) | 3 lines
+commit 5a18e80ff0ad111a754d3bdc8360269cadbd1615
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 08:34:30 2008 +0000
 
-Partly rewrite option parser to accept whitespaces at start
-of lines.
+    Make histogram depends on image window not layout window.
+    It simplifies the code, and make more sense.
 
-------------------------------------------------------------------------
-r442 | zas_ | 2008-04-13 01:41:35 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit 360f7fcab05c29e3a84dab69169b4018f469fbee
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 22 08:16:02 2008 +0000
 
-exif_* -> exif.display.*
+    Ensure Properties dialog is displayed above fullscreen window.
+    Add a parameter to info_window_new() to pass parent window and
+    revert patch 472.
 
-------------------------------------------------------------------------
-r441 | zas_ | 2008-04-13 01:32:08 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit e67ca23513e0fd8f06fbef46a4ca1468a88c6ce2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 22:19:32 2008 +0000
 
-Add a note in the rc file about special editor slots.
+    Indicate bugs and feature requests trackers, remove obsolete stuff.
 
-------------------------------------------------------------------------
-r440 | zas_ | 2008-04-13 01:16:41 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit 3f5e512adb9df8f201ecf8d8bce049b63dfa4f4e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 22:15:56 2008 +0000
 
-sidecar_ext -> sidecar.ext
+    Lowercased name.
 
-------------------------------------------------------------------------
-r439 | zas_ | 2008-04-13 01:07:04 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit c5b86fa162157a545e37a9ed018c52c919082580
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 22:14:57 2008 +0000
 
-Unify names of options between variables and rc file.
+    . -> dot
 
-------------------------------------------------------------------------
-r438 | zas_ | 2008-04-13 01:02:00 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit 29042cb9cebffa90766495d7bf8814879474af89
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 21 21:46:38 2008 +0000
 
-Use tree_descend_subdirs everywhere.
+    updated copyright in source files
 
-------------------------------------------------------------------------
-r437 | zas_ | 2008-04-13 00:22:11 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit db4cefbd463659115e9d976d6f230129c93194bb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 20:45:35 2008 +0000
 
-Use startup_path_enable everywhere.
+    Properly initialize image_overlay options.
 
-------------------------------------------------------------------------
-r436 | zas_ | 2008-04-13 00:17:14 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit f717a49667e8ff0062bb65eda5a01cf40b076c21
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 20:42:18 2008 +0000
 
-Rename recent_list_max/open_recent_max to open_recent_list_maxsize.
+    Few more fixes to french translation.
 
-------------------------------------------------------------------------
-r435 | zas_ | 2008-04-13 00:10:38 +0200 (Sun, 13 Apr 2008) | 2 lines
+commit 6be1d7a64de4a9a366b0d121b113250df5a42a28
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 20:39:36 2008 +0000
 
-Rename dupe_custom_threshold option to duplicates_similarity_threshold.
+    Add some macros to handle rc file compatibility issues related to
+    option name changes.
 
-------------------------------------------------------------------------
-r434 | zas_ | 2008-04-13 00:04:29 +0200 (Sun, 13 Apr 2008) | 4 lines
+commit c3d35ef8b25f158d7be74ff154babded3ef26f29
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 20:27:39 2008 +0000
 
-Move safe_delete* and in place rename options to file_ops
-struct.
-Re-order rc file a bit.
+    Minor french translation fix.
 
-------------------------------------------------------------------------
-r433 | zas_ | 2008-04-12 23:45:30 +0200 (Sat, 12 Apr 2008) | 3 lines
+commit f47a3abcefad2232201d57ecb20385673dd05d1f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 20:24:15 2008 +0000
 
-Rename option thumbnails.enabled to layout.show_thumbnails as it makes
-more sense.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r432 | zas_ | 2008-04-12 23:38:55 +0200 (Sat, 12 Apr 2008) | 5 lines
+commit 5a38c6d5dc83b4c142ea82ee702ab72e33f69403
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 20:12:49 2008 +0000
 
-Rename user_specified_window_background and window_background_color
-to image.use_custom_border_color and image.border_color.
-Rename pref_background_color_set_cb() to pref_color_button_set_cb().
-Rename pref_colorbutton_new() to pref_color_button_new().
+    Rename few functions and replace fullscreen info with image overlay template string.
+    fullscreen_info_default_cb() -> image_overlay_default_template_cb()
+    fullscreen_info_default_ok_cb() -> image_overlay_default_template_ok_cb()
+    set_default_fullscreen_info() -> set_default_image_overlay_template_string() (moved to image-overlay.h)
 
-------------------------------------------------------------------------
-r431 | zas_ | 2008-04-12 21:33:59 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit 7eb4f7249138c689fd41c2890b0a8ad3b24566d9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 20:01:22 2008 +0000
 
-Rename window options (moved to layout) and re-order rc file.
+    Replace fullscreen.info and fullscreen.show_info options by:
+    image_overlay.common.enabled => to save last state to rc file
+    image_overlay.common.show_at_startup => overrides .common.enabled at startup
+    image_overlay.common.template_string => replace fullscreen.info
+    
+    common is used since for now there is only one image overlay setup,
+    later specific setups may be added.
 
-------------------------------------------------------------------------
-r430 | zas_ | 2008-04-12 19:20:34 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit 1b40318865ffee3150d652c83bb4eca400f78431
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 21 19:42:58 2008 +0000
 
-Fix bad image option name in the rc file.
+    fixed another "gqview" occurence
 
-------------------------------------------------------------------------
-r429 | zas_ | 2008-04-12 19:09:20 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit 83e3573f5fb4bec00d4377ddc27e1904f4f68da1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 21 19:10:41 2008 +0000
 
-Fix display bug when using "Limit image size when autofitting" option.
+    updated NEWS, README and other documentation files
 
-------------------------------------------------------------------------
-r428 | zas_ | 2008-04-12 17:13:00 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit 00157fa203d628c0903da8332a40d0e1e0a0e6f8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Apr 21 18:09:30 2008 +0000
 
-Beautify rc file, adding sub-sections titles.
+    renamed no.po to nb.po
 
-------------------------------------------------------------------------
-r427 | zas_ | 2008-04-12 17:04:58 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit e13355d5fc8beff343cda7db7187822b688dd61f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 15:30:16 2008 +0000
 
-Rename image-related options.
+    Fix a segfault occuring when pressing 'i' for overlay info
+    in a separate image window (no layout).
 
-------------------------------------------------------------------------
-r426 | zas_ | 2008-04-12 11:41:44 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit 4d1beccf7d7de512882e5f59757c52c326d1a1b6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 14:19:48 2008 +0000
 
-Rename thumbnails related options.
+    histogram_draw(): tidy up.
 
-------------------------------------------------------------------------
-r425 | zas_ | 2008-04-12 11:12:37 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit 667d057287d39224fd008329ec6a5e0d28dcc818
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 13:39:17 2008 +0000
 
-Rename file filtering options.
+    histogram_read(): speed up calculations by 20%.
 
-------------------------------------------------------------------------
-r424 | zas_ | 2008-04-12 10:59:52 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit c397f66ddcc3c7651cda421f11a5cae13afa92ba
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 11:44:03 2008 +0000
 
-Drop unused stuff.
+    histogram_read(): use memset() to initialize histogram data instead of for() loop.
 
-------------------------------------------------------------------------
-r423 | zas_ | 2008-04-12 10:40:02 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit a7ae368828f16b5cd0d2ea3375242f6cb90eee86
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 10:11:55 2008 +0000
 
-Rename collection options.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r422 | zas_ | 2008-04-12 10:35:58 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit 56adb85f9ede97ad87f1c8adbe2b95814128ee7c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 10:10:23 2008 +0000
 
-Rename file sorting options.
+    Add compat.c to POTFILES
 
-------------------------------------------------------------------------
-r421 | zas_ | 2008-04-12 10:28:08 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit d3339b5ef4ccfc029f07766426faf12b30ff5824
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 21 10:09:01 2008 +0000
 
-Re-order and try to group options.
+    Allow the user to set the drag'n drop icon size through
+    Preferences > Advanced > Behavior > Drag'n drop icon size.
+    It is saved to rc file as dnd_icon_size.
 
-------------------------------------------------------------------------
-r420 | zas_ | 2008-04-12 10:05:44 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit c10bf95960a1aa871faf0d9930098bdd9a9b1b1c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 23:17:35 2008 +0000
 
-Rename color profile options.
+    Add a replacement for gtk_radio_action_set_current_value() which
+    require GTK+ >= 2.10.
+    Two new files were added, compat.h and compat.c.
 
-------------------------------------------------------------------------
-r419 | zas_ | 2008-04-12 09:46:01 +0200 (Sat, 12 Apr 2008) | 2 lines
+commit bac25c157f02acaf5d06970e49a87cf31809bb44
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 22:51:53 2008 +0000
 
-Rename slideshow options.
+    French translation was updated.
 
-------------------------------------------------------------------------
-r418 | zas_ | 2008-04-12 09:09:19 +0200 (Sat, 12 Apr 2008) | 3 lines
+commit 1563535bd6d10e9615ab1c67c12531ceaa15ae79
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 22:45:00 2008 +0000
 
-Only display defined exif tags by default.
+    Add number mnemonics to image view editors submenu.
 
+commit ea59e24d4f4084f19376efb2a1ff8687e549ed6b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 22:29:23 2008 +0000
 
-------------------------------------------------------------------------
-r417 | zas_ | 2008-04-12 09:00:14 +0200 (Sat, 12 Apr 2008) | 2 lines
+    Prefix editor entries in the main menu with numbers.
+    It allows Alt+E+number as shortcut to start an editor.
 
-Drop redundant code.
+commit 2fa99cc17f3ce25101d9dcd1f9a8a9313e39532f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 22:14:54 2008 +0000
 
-------------------------------------------------------------------------
-r416 | zas_ | 2008-04-12 08:42:47 +0200 (Sat, 12 Apr 2008) | 3 lines
+    Add missing shortcuts.
 
-Add Exif.Photo.ColorSpace tag in Preferences > Properties > Exif.
-Requested by Fr?\195?\169d?\195?\169ric Mantegazza.
+commit 8b4cfba15cf968c6ad9cb9804838924d3988b19f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 20 22:14:38 2008 +0000
 
-------------------------------------------------------------------------
-r415 | zas_ | 2008-04-12 01:32:22 +0200 (Sat, 12 Apr 2008) | 2 lines
+    fixed color profile code for older versions of exiv2
+    compilation fixes
 
-Rationalize fullscreen options naming.
+commit 118f92d8da6b070dba40ad7e56311e40cc923107
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 22:01:26 2008 +0000
 
-------------------------------------------------------------------------
-r414 | zas_ | 2008-04-12 01:01:00 +0200 (Sat, 12 Apr 2008) | 2 lines
+    Mark slideshow toggle state in the menu.
+    There is still an issue due to layout vs view slideshows...
 
-options_c -> c_options
+commit 59c6c8f009efbe091aabc08e26671790ef8fbba9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 21:38:45 2008 +0000
 
-------------------------------------------------------------------------
-r413 | zas_ | 2008-04-12 00:52:22 +0200 (Sat, 12 Apr 2008) | 2 lines
+    Fix a typo introduced by revision 521.
 
-Move more options to ConfOptions.
+commit 282581c95553818382b548f0900e04ae661a8db7
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 20 21:35:03 2008 +0000
 
-------------------------------------------------------------------------
-r412 | zas_ | 2008-04-12 00:27:54 +0200 (Sat, 12 Apr 2008) | 3 lines
+    read color profiles from jpeg also with Exiv2
 
-Move file_sort_case_sensitive to ConfOptions.
+commit 7d1f6b971340bdf761b26db2b075c205745ba91f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 21:30:36 2008 +0000
 
+    Use explicit names for mouse buttons instead of numbers.
+    MOUSE_BUTTON_LEFT   = 1
+    MOUSE_BUTTON_MIDDLE = 2
+    MOUSE_BUTTON_RIGHT  = 3
+    It makes the code easier to read.
 
-------------------------------------------------------------------------
-r411 | zas_ | 2008-04-12 00:14:36 +0200 (Sat, 12 Apr 2008) | 6 lines
+commit cd9fb13e5fcc4e47598bb671e05c6b88e2698aed
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 20:35:26 2008 +0000
 
-Add a new struct ConfOptions to handle options.
-Changes were made among the code to use only one global var
-named "options" of type ConfOptions *.
-Initialization takes place in new init_options().
+    Fix a typo: unoffical -> unofficial
 
+commit b880b00f068794630e7a358b5cec718e7e594019
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 18:07:51 2008 +0000
 
-------------------------------------------------------------------------
-r410 | zas_ | 2008-04-11 22:35:37 +0200 (Fri, 11 Apr 2008) | 4 lines
+    Effectively drop empty newlines at end of files (missing from rev 535)
 
-Make thumbnail standard fail directory after current application
-name and version.
+commit a1c71d3b2ba033f5baa6e19d1ed39a8d6f192279
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 16:50:19 2008 +0000
 
+    comment_file_read(): rewrite the parser, drop leading and trailing newlines
+    in comment.
 
-------------------------------------------------------------------------
-r409 | zas_ | 2008-04-11 22:01:29 +0200 (Fri, 11 Apr 2008) | 3 lines
+commit d4392d114707bdc5888aeee2d614377a0609a9c0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 13:42:22 2008 +0000
 
-Define drag and drop target string in dnd.h.
-Make it use the current name of the application.
+    Minor cleanup and code redundancy reduction.
 
-------------------------------------------------------------------------
-r408 | zas_ | 2008-04-11 21:43:36 +0200 (Fri, 11 Apr 2008) | 2 lines
+commit 9ad0a718914f45230e0f19475875e09a9afd3ceb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 13:30:36 2008 +0000
 
-Use secure save in history_list_save().
+    editor_command_one(): tidy up.
 
-------------------------------------------------------------------------
-r407 | zas_ | 2008-04-11 19:11:14 +0200 (Fri, 11 Apr 2008) | 3 lines
+commit 7adf4f744a2e3b8ba952263f51155b634660b38d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 13:04:57 2008 +0000
 
-Use secure save in comment_file_write().
+    Big whitespaces cleanup:
+    - drop whitespaces at end of lines
+    - convert eight spaces to tab at start of lines
+    - drop spurious spaces mixed with tabs
+    - remove empty lines at end of files
 
+commit c97955e4ac06a81f2a352a24ea21ebfeaeb7bb71
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 10:05:27 2008 +0000
 
-------------------------------------------------------------------------
-r406 | zas_ | 2008-04-11 18:46:21 +0200 (Fri, 11 Apr 2008) | 5 lines
+    Allow the user to change open_recent_list_maxsize option through
+    Preferences > Advanced > Navigation.
 
-Secure save now unlinks temporary file on error by default.
-It will prevent left-behind temporary files, but also prevent
-potential data recovery from partially written files (it
-should not be a problem here).
+commit 71f3f6c7065587a9c1d15fe1a33af8ed5f6d3e12
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 20 09:53:37 2008 +0000
 
-------------------------------------------------------------------------
-r405 | zas_ | 2008-04-11 18:04:37 +0200 (Fri, 11 Apr 2008) | 2 lines
+    rm as external delete command is too dangerous, even for testing
 
-Use secure save feature when saving collections.
+commit 95eb1d8bc4485bc510073487e2f83f4f60905258
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 09:47:51 2008 +0000
 
-------------------------------------------------------------------------
-r404 | zas_ | 2008-04-11 18:02:33 +0200 (Fri, 11 Apr 2008) | 2 lines
+    Add a way to restore original state in Adjust menu.
 
-Preserve permissions of the destination file when using secure save.
+commit 8b67bd63f4e6e07b45fc738face1abf359dfc937
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Apr 20 09:29:46 2008 +0000
 
-------------------------------------------------------------------------
-r403 | zas_ | 2008-04-11 17:27:08 +0200 (Fri, 11 Apr 2008) | 4 lines
+    added fColorProfile pseudo-tag with detailed information
 
-Revert part of the previous patch, let the caller take care
-of calling path_from_utf8().
+commit c648cdf41aa74fb22dfda4d427f88b2bfe46a0f0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 20 09:02:05 2008 +0000
 
+    Fix the case "orientation from FileData, color profile from exif".
+    Reported by Vladimir Nadvornik.
 
-------------------------------------------------------------------------
-r402 | zas_ | 2008-04-11 16:27:55 +0200 (Fri, 11 Apr 2008) | 3 lines
+commit 448b0fb89c7de9573e5ec7ff440fa301ac7ffb3e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 23:12:30 2008 +0000
 
-Use path_from_utf8() on the passed filename.
-Add const attribute.
+    Rename inappropriate folder_size to folder.
 
-------------------------------------------------------------------------
-r401 | zas_ | 2008-04-11 15:07:48 +0200 (Fri, 11 Apr 2008) | 8 lines
+commit 49f7e41a9d6f9bfb35c76870e296bc2fdc8aa395
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 22:32:07 2008 +0000
 
-ui_icons.h and icons_inline.h depend on gdk-pixbuf-csource,
-so add a test for it in configure.
-Wrap generated headers files with #ifdef/#endif and add
-a comment related to their auto-generated nature.
-Make the generation itself quiet, but display a message
-on error.
-Make these targets depend on respective Makefile.in.
+    Use sizeof() for buffer size where appropriate.
 
-------------------------------------------------------------------------
-r400 | zas_ | 2008-04-11 14:31:32 +0200 (Fri, 11 Apr 2008) | 2 lines
+commit 3e04d15e24bcfb5ef26ed869c301e06a170f780d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 21:50:05 2008 +0000
 
-Move secure save code to its own files: secure_save.{c,h}.
+    Keep image orientation set by the user during the session.
 
-------------------------------------------------------------------------
-r399 | zas_ | 2008-04-11 14:25:36 +0200 (Fri, 11 Apr 2008) | 2 lines
+commit a99ca586e977ec78bc4255917a9cf9b2b216d9b7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 21:30:19 2008 +0000
 
-Add missing #ifdef/#endif.
+    Save Show Marks state to rc file and display current state in menu.
+    It is saved as boolean option layout.show_marks.
 
-------------------------------------------------------------------------
-r398 | zas_ | 2008-04-11 12:46:52 +0200 (Fri, 11 Apr 2008) | 2 lines
+commit 1879b71339a3fef471ddf453198cda29293498b8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 19 21:20:08 2008 +0000
 
-Ensure that gcc flag -Wall is set.
+    fixed max. number of profiles
 
-------------------------------------------------------------------------
-r397 | zas_ | 2008-04-11 12:45:37 +0200 (Fri, 11 Apr 2008) | 2 lines
+commit 9fbfd4fb566a6f1e7cdb2f8789573197a2c60231
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 21:18:24 2008 +0000
 
-Silent some gcc warnings.
+    Sort options.
 
-------------------------------------------------------------------------
-r396 | zas_ | 2008-04-11 11:02:20 +0200 (Fri, 11 Apr 2008) | 3 lines
+commit b2b6e8ce2fddde58139ddebc40ef655d828b216e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 19 21:10:18 2008 +0000
 
-Prevent multiple insertion of the same file in a collection.
-Use a hash table to speed up existence tests.
+    fixed color profile index
 
-------------------------------------------------------------------------
-r395 | zas_ | 2008-04-11 10:10:40 +0200 (Fri, 11 Apr 2008) | 2 lines
+commit 218f722e6adc43c59d01a2d28706909d128fa0a5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 20:53:12 2008 +0000
 
-Only display these messages if debug mode is enabled.
+    Let toggle marks with numeric keypad.
 
-------------------------------------------------------------------------
-r394 | nadvornik | 2008-04-10 21:27:42 +0200 (Thu, 10 Apr 2008) | 2 lines
+commit cc35c193b2e718a4c336f4eb5c92e8133ac63587
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 19 20:19:27 2008 +0000
 
-fixed dates in pan-calendar
+    I have finally found how to add alternative hotkeys
+    removed more hard-coded keys
+    "Split Quad" is without hotkey for now
 
-------------------------------------------------------------------------
-r393 | zas_ | 2008-04-10 14:07:34 +0200 (Thu, 10 Apr 2008) | 2 lines
+commit 28b3a3ee99d6ea34fd3c711cbe1fdc1ea32d66d8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 19:28:10 2008 +0000
 
-Fix fCamera even more.
+    Accept keywords composed by two words ("Todo" = "A faire" in french).
+    Prevent duplicate keywords in the list.
 
-------------------------------------------------------------------------
-r392 | zas_ | 2008-04-10 13:31:20 +0200 (Thu, 10 Apr 2008) | 2 lines
+commit 3cb190ac4fff1239d5dd27a2d20e9e85c3fbcf8d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 19 17:55:41 2008 +0000
 
-Do not display ... if not truncated.
+    show the AdobeRGB profile in the menu, indicate input profile from image
 
-------------------------------------------------------------------------
-r391 | zas_ | 2008-04-10 12:43:15 +0200 (Thu, 10 Apr 2008) | 5 lines
+commit f3f92c31a15a0dc60c5b0cd69840c25addcff285
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 17:14:03 2008 +0000
 
-Add the possibility to truncate overlay infos displayed:
-%fCamera:20% will truncate data displayed to 20 characters
-and add 3 dots at the end.
-For example, %name% -> some_file, %name:4% -> some...
+    file_dat_unref: display number of references as well of path (debug only).
 
-------------------------------------------------------------------------
-r390 | zas_ | 2008-04-10 02:09:43 +0200 (Thu, 10 Apr 2008) | 2 lines
+commit 1a73876d6a93b15ef5f5ec6bbbfbdf34320c80bf
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 19 16:26:29 2008 +0000
 
-Fix broken remove_common_prefix(), fCamera didn't display model as it should.
+    first support for AdobeRGB colorspace
 
-------------------------------------------------------------------------
-r389 | zas_ | 2008-04-10 00:47:43 +0200 (Thu, 10 Apr 2008) | 2 lines
+commit fa1a2b4b8ce6f2d80b7abffcffbc41101bf069a7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 16:10:08 2008 +0000
 
-Resync .po files. French translation was updated (100% made).
+    French translation fixes.
 
-------------------------------------------------------------------------
-r388 | zas_ | 2008-04-10 00:36:43 +0200 (Thu, 10 Apr 2008) | 2 lines
+commit 9654df9924eb462012f0b45cf69164107912779d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 13:40:20 2008 +0000
 
-Add 3 missing files to POTFILES.in.
+    French translation fixes and updates.
 
-------------------------------------------------------------------------
-r387 | zas_ | 2008-04-10 00:33:06 +0200 (Thu, 10 Apr 2008) | 2 lines
+commit 7d2b5d37b2f6261648d57961a895c90b504c7f81
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 13:39:21 2008 +0000
 
-Simple helper script to display translation statistics.
+    Add missing _().
 
-------------------------------------------------------------------------
-r386 | zas_ | 2008-04-10 00:13:11 +0200 (Thu, 10 Apr 2008) | 3 lines
+commit 7f2c5644543924da2eba00708070b3b612718f29
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 12:46:59 2008 +0000
 
-Fix a typo: "while fluorescent" -> "white fluorescent"
+    Add the possibility to update only one translation file using,
+    for example: make update-po PO=fr
+    autogen.sh applies a patch made against glib-gettextize generated Makefile.in.in
 
+commit c96a154ee7cfeddc35acfb23999639f8d2004d3d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 11:11:53 2008 +0000
 
-------------------------------------------------------------------------
-r385 | zas_ | 2008-04-10 00:01:52 +0200 (Thu, 10 Apr 2008) | 2 lines
+    Cleanup last patch:
+    - drop vd_pop_menu_dir_view_as_cb() since it is now unused.
+    - use G_N_ELEMENTS()
 
-Resync .po files. Update french translation.
+commit a139b891f3932562bae2980e03ad4986f89847ab
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Apr 19 09:49:14 2008 +0000
 
-------------------------------------------------------------------------
-r384 | nadvornik | 2008-04-09 23:14:50 +0200 (Wed, 09 Apr 2008) | 2 lines
+    improved spec file
 
-fixed crash in pan_calendar
+commit d338acaf8596de02899bd7d5965855b354d3ceec
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 19 09:36:30 2008 +0000
 
-------------------------------------------------------------------------
-r383 | nadvornik | 2008-04-09 22:49:32 +0200 (Wed, 09 Apr 2008) | 2 lines
+    Fix directory view popup menu to display a View As submenu
+    to switch between different directory views.
 
-improved histogram drawing
+commit faead0406f174630dbb35832acd36d89aabdc293
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 23:35:16 2008 +0000
 
-------------------------------------------------------------------------
-r382 | zas_ | 2008-04-09 18:37:54 +0200 (Wed, 09 Apr 2008) | 5 lines
+    gimp-remote has no -n option.
 
-Simplify and unify gtk_window creation with the help of
-the new window_new() function, that wraps gtk_window_new()
-call.
-Subclass, title and icon are set in the same call.
+commit 2167314197590c1a13c1f2d13e3b5cb018d17de1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 23:09:03 2008 +0000
 
-------------------------------------------------------------------------
-r381 | zas_ | 2008-04-09 15:53:01 +0200 (Wed, 09 Apr 2008) | 2 lines
+    Add zoom ratio display to OSD in fullscreen mode.
+    It appears as [%zoom%] in fullscreen info string.
+    It is now displayed by default.
 
-Replace occurences of Geeqie / geeqie by constants defined in main.h.
+commit f595a30b44e656fa390abb9aba67d0c6768f3369
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 18 22:31:58 2008 +0000
 
-------------------------------------------------------------------------
-r380 | zas_ | 2008-04-09 01:41:01 +0200 (Wed, 09 Apr 2008) | 2 lines
+    partially fixed reading embedded color profiles with exiv2
 
-int -> gint
+commit aa3a6e89bf61d28862db69c00596385c2a72733d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 22:15:01 2008 +0000
 
-------------------------------------------------------------------------
-r379 | zas_ | 2008-04-09 01:39:27 +0200 (Wed, 09 Apr 2008) | 2 lines
+    Add two new options to control image read buffer at runtime.
+    They are available in Preferences > Advanced > Image loading and caching.
+    Default read buffer size was set to 4096 instead of 512.
+    These options are saved to rc file.
 
-Make xmp debug info only appears when debug >= 2.
+commit 37af10a74df5d4f3031849ab0a678a9fc2e3d47f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 21:53:33 2008 +0000
 
-------------------------------------------------------------------------
-r378 | zas_ | 2008-04-09 01:33:49 +0200 (Wed, 09 Apr 2008) | 3 lines
+    Display elapsed time since previous get_exec_time() call (debug only).
 
-Enable image rotation depending on EXIF by default.
-New users shouldn't have to search for it.
+commit a010c8ea1081d31b948c09e3ab1e87a433c5ee10
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 21:51:08 2008 +0000
 
-------------------------------------------------------------------------
-r377 | zas_ | 2008-04-09 01:25:46 +0200 (Wed, 09 Apr 2008) | 2 lines
+    Remove forgotten debug printf().
 
-Fix missing header files inclusions.
+commit 763f8437ee2541f39a309154d249b088323eacad
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 21:42:00 2008 +0000
 
-------------------------------------------------------------------------
-r376 | zas_ | 2008-04-09 01:16:12 +0200 (Wed, 09 Apr 2008) | 2 lines
+    Fix OSD display when fullscreen info string is empty.
 
-GQVIEW_* -> GQ_* 
+commit 7df25c1ba74b9a175fdf33d90bce28db6cd908b2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Apr 18 21:30:12 2008 +0000
 
-------------------------------------------------------------------------
-r375 | zas_ | 2008-04-09 01:07:09 +0200 (Wed, 09 Apr 2008) | 2 lines
+    replace inner loops with memcpy
 
-GQVIEW_H -> MAIN_H
+commit a31575c389e7d8c007dbcac3e47f94e56f9188bf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 20:41:09 2008 +0000
 
-------------------------------------------------------------------------
-r374 | zas_ | 2008-04-09 01:02:33 +0200 (Wed, 09 Apr 2008) | 2 lines
+    Explode pr_tile_mirror() in three optimized functions:
+    pr_tile_mirror_only()
+    pr_tile_mirror_and_flip()
+    pr_tile_flip_only()
 
-gqview.h -> main.h
+commit 41f45372c2b917e1595d8e9d83871326d07ea97b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 16:53:41 2008 +0000
 
-------------------------------------------------------------------------
-r373 | zas_ | 2008-04-09 00:31:42 +0200 (Wed, 09 Apr 2008) | 2 lines
+    Rename vd_drop_update() to vd_dnd_drop_update().
+    Add two function pointers to ViewDir struct to keep
+    vdtree_dnd_drop_expand_cancel() and vdtree_dnd_drop_expand()
+    static to view_dir_tree.c.
 
-Remove obsolete prototype.
+commit 1b102510a0a4900076a2a34467feb80dab809734
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 16:29:47 2008 +0000
 
-------------------------------------------------------------------------
-r372 | zas_ | 2008-04-09 00:28:55 +0200 (Wed, 09 Apr 2008) | 9 lines
+    Drop 3 useless #define.
 
+commit 5add0a6fd3900ca0c6ea0ed8989e74780f27a8c7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 16:25:40 2008 +0000
 
-gqview_remote -> remote_connection
-gqview_command_collection -> command_collection
-gqview_remote_control() -> remote_control()
-gqview_remote_help() -> remote_help()
-gqview_remote_command_find() -> remote_command_find()
-gqview_remote_build_list() -> remote_build_list()
-gqview_remote_cb() -> remote_cb()
+    Fix forgotten vd->pf affectation.
+    Cleanup, and reduce code redundancy a bit.
 
-------------------------------------------------------------------------
-r371 | zas_ | 2008-04-09 00:16:56 +0200 (Wed, 09 Apr 2008) | 4 lines
+commit 07b43fa0b6dd45d7961e0c6472577ba1562a26e9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 11:01:41 2008 +0000
 
+    Explode pr_tile_rotate_90() in two functions:
+    pr_tile_rotate_90_clockwise()
+    pr_tile_rotate_90_counter_clockwise()
+    Optimize the code at the expense of a bit of code redundancy:
+    tests were moved outside the loops, intermediate results are now cached.
 
-exit_gqview() renamed to exit_program().
-exit_gqview_final() renamed to exit_program_final().
+commit d7c3043727595dcb6024590e37180486d1da9793
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 18 09:15:09 2008 +0000
 
-------------------------------------------------------------------------
-r370 | zas_ | 2008-04-09 00:05:04 +0200 (Wed, 09 Apr 2008) | 8 lines
+    Introduce printf_term() macro and use it.
 
-Add support for some Samsung raw files (.pef).
+commit 8d5ef0b6c0b83a18dc1c9b72b01a5a84ad998468
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 20:14:49 2008 +0000
 
-Samsung raw not strongly differ from Pentax raw.
-The only difference in header (manufacturer, camera name and etc).
-Tested on Samsung GX-1S and Pentax *ist DS.
-Patch by Max Lushnikov.
+    Add a shortcut key for List (L) and change the one for Tree (T),
+    they are now in a submenu.
 
+commit 1b4a527e848a686aff4d182347b8c113646c5e6f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 20:03:49 2008 +0000
 
-------------------------------------------------------------------------
-r369 | zas_ | 2008-04-08 23:55:58 +0200 (Tue, 08 Apr 2008) | 7 lines
+    Add some wrappers in view_dir.c and simplify even more.
 
-Implement secure rc file saving.
-First data is written to a temporary file, then if nothing
-was wrong, this file is renamed to the final name.
-This way the risk of corrupted rc file is greatly reduced.
-The code is borrowed from ELinks (http://elinks.cz).
+commit c53023e25a970f212a1e33b6921b1ad5084525db
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 19:57:41 2008 +0000
 
+    Fix a bug introduced in revision 489.
 
-------------------------------------------------------------------------
-r368 | nadvornik | 2008-04-08 23:52:04 +0200 (Tue, 08 Apr 2008) | 2 lines
+commit fb146a2c8938469f9a9a9e17ad10762f02792919
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 18:44:17 2008 +0000
 
-fixed histogram label
+    Reduce code redundancy with the introduction of a new
+    function named vd_get_fd_from_tree_path().
 
-------------------------------------------------------------------------
-r367 | zas_ | 2008-04-08 23:33:29 +0200 (Tue, 08 Apr 2008) | 11 lines
+commit 8015d0ae2c89c1c524292fc72d0cf41a8318ef18
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Apr 17 17:44:54 2008 +0000
 
-Fix the "continuous display" of tooltips in the collection view
-(before the tooltip delay occured once, then changing icon to icon never hide the
-tooltip again, now the tip is displayed shortly after the cursor moved on the icon,
-but disappears when moving cursor to another icon).
+    image post-processing (rotation and color management) moved to
+    pixbuf-renderer
 
-Display the full path to the file when Show filename text is on (before nothing
-was displayed).
+commit 524fc51faed3885c6126225ad9627f7b2e345286
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 17:35:51 2008 +0000
 
-When Show filename text is off, behavior is unchanged, the (short) filename is
-displayed.
+    Merge vd(list|tree)_release_cb() in vd_release_cb().
+    I made some assumptions here i hope correct.
 
-------------------------------------------------------------------------
-r366 | nadvornik | 2008-04-08 22:56:50 +0200 (Tue, 08 Apr 2008) | 3 lines
+commit a165d9a199cfcc40f8a7510e31c3809fd3a15ef0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 17:19:41 2008 +0000
 
-reworked the histogram patch by Uwe Ohse, most of the code is in
-separate files
+    Merge few more functions to view_dir.c.
 
-------------------------------------------------------------------------
-r365 | nadvornik | 2008-04-08 19:26:13 +0200 (Tue, 08 Apr 2008) | 2 lines
+commit 054116d5c6fa3f7afb7773b64eb5d0ddba4385d8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 16:33:31 2008 +0000
 
-fixed file delete notification in view_file_icon
+    Move common menu position callback to view_dir.c.
 
-------------------------------------------------------------------------
-r364 | zas_ | 2008-04-08 18:22:21 +0200 (Tue, 08 Apr 2008) | 2 lines
+commit 4394fa7a38bcb5b24ee6064a753cf78ee18adcec
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 17 14:51:32 2008 +0000
 
-gtk_notebook_set_tab_reorderable() is only available sinc gtk+ 2.10.
+    Merge dirlist/dirview dnd code.
 
-------------------------------------------------------------------------
-r363 | zas_ | 2008-04-08 17:53:03 +0200 (Tue, 08 Apr 2008) | 2 lines
+commit a264c79b0c70ef6160afe5914ad1a68828ada895
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 22:51:32 2008 +0000
 
-Move active variable affectation after the test.
+    Regenerate translations files and update french translation.
 
-------------------------------------------------------------------------
-r362 | zas_ | 2008-04-08 16:52:42 +0200 (Tue, 08 Apr 2008) | 2 lines
+commit add5ed9d94ecc2d0df2d60610480d23c1082ae3e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 22:31:52 2008 +0000
 
-Simplify layout_color_name_parse() using g_strdelimit().
+    Fix new folder feature in dirlist mode, it was broken by revision 481.
 
-------------------------------------------------------------------------
-r361 | zas_ | 2008-04-08 16:50:14 +0200 (Tue, 08 Apr 2008) | 2 lines
+commit d129ccdd86cf18e37a020dd2be7760c395f92895
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 22:23:43 2008 +0000
 
-Tidy up, whitespaces and indentation fix.
+    Fix a crash introduced in revision 477.
 
-------------------------------------------------------------------------
-r360 | zas_ | 2008-04-08 13:53:35 +0200 (Tue, 08 Apr 2008) | 7 lines
+commit ed88a7f0f8aaa1d3aac7914d1c30de5aa271b89e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 22:21:01 2008 +0000
 
-Remove dependency on GTK 2.12, reported by John Vodden and Vladimir
-Nadvornik.
-gtk_set_tooltip_markup() calls were disabled for GTK+ versions < 2.12.
-gdk_color_to_string() was replaced by a equivalent function.
+    Fix two errors made in revision 473.
 
+commit 0313a63861e92a60d1e08d92b68c9ccbb30d6d67
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 21:58:05 2008 +0000
 
+    Merge few more vdlist/vdtree functions.
 
-------------------------------------------------------------------------
-r359 | zas_ | 2008-04-07 21:47:22 +0200 (Mon, 07 Apr 2008) | 9 lines
+commit 87388b59fb39365d12d12febc2a2aab528380fd8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 20:36:10 2008 +0000
 
-Add the possibility to print file names with path.
-A checkbox was added to the Text tab in the Print dialog.
+    Make directory view popup menu common and move it to view_dir.{c,h}.
 
-Name checked and Path unchecked  -> filename.jpg
-Name checked and Path checked    -> /some/dir/filename.jpg
-Name unchecked and Path checked  -> /some/dir/
+commit 8b709929d5caf41ffd68acb1350c785335131a97
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 16 20:32:44 2008 +0000
 
-Patch by Michael Mokeev and Laurent Monin.
+    fixed compiler warnings
 
-------------------------------------------------------------------------
-r358 | zas_ | 2008-04-07 21:06:17 +0200 (Mon, 07 Apr 2008) | 2 lines
+commit 6820b9f7ef0d66634915b7d0538fb3f81bc86272
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 16 20:15:42 2008 +0000
 
-Fix a segfault on fullscreen file deletion reported by Fr?\195?\169d?\195?\169ric Mantegazza.
+    in debug mode print time information on selected events
 
-------------------------------------------------------------------------
-r357 | zas_ | 2008-04-07 20:52:54 +0200 (Mon, 07 Apr 2008) | 3 lines
+commit 5a2f5a7a783b7e8b1138d32b9c5059e32fe7c1a2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 18:57:50 2008 +0000
 
-Add the possibility to match duplicates on the name but ignoring the case.
-A new item was added to types of match combo box in the Find duplicates dialog.
+    Clean up and simplify.
 
-------------------------------------------------------------------------
-r356 | zas_ | 2008-04-07 10:09:39 +0200 (Mon, 07 Apr 2008) | 3 lines
+commit 2bf00ad0b8236c09a056412b49ae3f0fd89ce6bc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 16:54:38 2008 +0000
 
-Display marks in overlay info only if at least one is set.
-Fix a missing g_string_free().
+    Merge parts of view_dir_list/tree constructors/destructors to
+    view_dir.
 
-------------------------------------------------------------------------
-r355 | zas_ | 2008-04-06 12:17:41 +0200 (Sun, 06 Apr 2008) | 3 lines
+commit 2ed8126b688006feba5fb928af379d3a1713d14d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 16:05:12 2008 +0000
 
-Mark all exif labels as translatable.
-Before only some of them were enclosed by N_().
+    Move some dnd common code from view_dir_list.c and view_dir_tree.c
+    to view_dir.c.
 
-------------------------------------------------------------------------
-r354 | zas_ | 2008-04-06 12:03:54 +0200 (Sun, 06 Apr 2008) | 2 lines
+commit 49506cdbbc2eab38968eaf7a71836ec3c8261d00
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 14:56:31 2008 +0000
 
-Mark strings as translatable.
+    Rename vdt occurences to vd.
 
-------------------------------------------------------------------------
-r353 | zas_ | 2008-04-05 17:23:39 +0200 (Sat, 05 Apr 2008) | 4 lines
+commit 252ecb111253c410ee55fd732ac19750e0e81b2e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 14:51:39 2008 +0000
 
-Improve remove_trailing_slash() so it allocates no more than
-needed bytes and remove all trailing slashes instead only one.
+    Rename vdl occurences to vd.
 
+commit b90ce4354563cb43ad69dc3fe97be4ad12f5eb89
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 16 14:45:22 2008 +0000
 
-------------------------------------------------------------------------
-r352 | zas_ | 2008-04-05 13:59:29 +0200 (Sat, 05 Apr 2008) | 4 lines
+    Introduce a new struct ViewDir to handle directory views common
+    data.
+    Specific data is now in ViewDirInfoList and ViewDirInfoTree.
+    Type of directory view can be specified with enum DirViewType.
+    This is saved to rc file as layout.dir_view_type, which replace
+    layout.view_as_tree.
+    Code was modified to reflect these changes.
+    This is a first to move to merge common code of view_dir_list.c
+    and view_dir_tree.c and ease the introduction of new types
+    of directory view.
 
+commit 926c9122c33a25e49679e9689c2a22d8b032b7d8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 21:49:28 2008 +0000
 
-Comment out unused code.
-Geeqie code now compiles cleanly with -Wall gcc option.
+    Indicate --debug[=level] in usage display.
 
-------------------------------------------------------------------------
-r351 | zas_ | 2008-04-05 00:34:55 +0200 (Sat, 05 Apr 2008) | 3 lines
+commit 5d5d65dbb005ee639931f424d7acdb65865eebb2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 21:47:03 2008 +0000
 
-Change default exif order a bit to move up common and useful
-info.
+    Parse command line for --debug option as soon as possible and allow
+    --debug[=level] syntax.
+    Only display message indication debug level once.
 
-------------------------------------------------------------------------
-r350 | zas_ | 2008-04-05 00:23:36 +0200 (Sat, 05 Apr 2008) | 3 lines
+commit 68ec77a8cd6d07d78de3c56cf977e24add191706
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 21:06:00 2008 +0000
 
+    Cleanup read/write of image.zoom_mode option.
 
-Re-add "What to show in properties dialog:" label before the table. 
+commit dbdee25d4a8be12e7f334659d0041a0987aeb403
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 20:56:55 2008 +0000
 
-------------------------------------------------------------------------
-r349 | zas_ | 2008-04-05 00:12:28 +0200 (Sat, 05 Apr 2008) | 3 lines
+    Read show_icon_names only once.
 
-Rename exif preferences tab to "Properties", and name the
-subsection "Exif".
+commit 02d26d43e10b7dbc2a9ca41f1d87429e6ed21f0f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 20:55:21 2008 +0000
 
-------------------------------------------------------------------------
-r348 | zas_ | 2008-04-04 20:50:52 +0200 (Fri, 04 Apr 2008) | 3 lines
+    Rename l_conf to layout_order and make it more local.
 
-Fix a segfault occuring when enabling debug mode.
-At this point il->fd can be null.
+commit ba6443e9b37c7c9c629809e8bd079234bf846ad8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 20:46:14 2008 +0000
 
-------------------------------------------------------------------------
-r347 | zas_ | 2008-04-04 01:29:14 +0200 (Fri, 04 Apr 2008) | 6 lines
+    Fix a bug that was here since a long time, buf has nothing
+    to do with options->layout.order, so compare it to l_conf instead.
+    It fixes refreshing of files and directories lists when changing
+    filtering options.
 
-Make the wmclass value unique among the code by defining
-it in main header file as GQ_WMCLASS.
-Before this patch, it was set using PACKAGE (="geeqie"),
-or by the hardcoded string "Geeqie".
-Now all Geeqie windows have the same value for wmclass.
+commit 7919d6756adc49486a6ec3c3e863fd745757820d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 20:36:11 2008 +0000
 
-------------------------------------------------------------------------
-r346 | zas_ | 2008-04-04 00:39:50 +0200 (Fri, 04 Apr 2008) | 2 lines
+    Add a new option in Preferences > Filtering to allow the
+    user to choose to display '.' directory in folder lists or not.
+    This option is saved to rc file as file_filter.show_dot_directory.
+    A minor fix was made to disable display of .. in folder selection
+    dialogs when current path is /.
 
-Initialize variables, clearing a gcc warning.
+commit 5fb1b9fa3f94b44fd4cb3571bc561df67703ad39
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 20:00:27 2008 +0000
 
-------------------------------------------------------------------------
-r345 | zas_ | 2008-04-04 00:33:28 +0200 (Fri, 04 Apr 2008) | 2 lines
+    Add and use few new macros in rc file writing code.
 
-Add missing prototype to header file.
+commit 0612855a4da8b544bed995add70c6bb6900b9e95
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 15 18:34:24 2008 +0000
 
-------------------------------------------------------------------------
-r344 | zas_ | 2008-04-04 00:29:20 +0200 (Fri, 04 Apr 2008) | 2 lines
+    this might fix the freezes on freebsd, solaris, etc.
 
-Add few missing prototypes to header file.
+commit 0e4f634e7ad58ae90048e8648355d0e9d9017869
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 15 16:57:30 2008 +0000
 
-------------------------------------------------------------------------
-r343 | zas_ | 2008-04-04 00:20:42 +0200 (Fri, 04 Apr 2008) | 2 lines
+    save file_class to config file
 
-Drop a bunch of unused variables.
+commit 9225b41f98bcf9d21d458973e72af78153eaacc3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 07:16:51 2008 +0000
 
-------------------------------------------------------------------------
-r342 | zas_ | 2008-04-04 00:14:37 +0200 (Fri, 04 Apr 2008) | 2 lines
+    Exit fullscreen mode when Properties is displayed.
 
-Add missing #include.
+commit 4ad9ed88281b7b4000fffea1c1e68e5ad6c919a0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 15 06:56:25 2008 +0000
 
-------------------------------------------------------------------------
-r341 | zas_ | 2008-04-04 00:13:12 +0200 (Fri, 04 Apr 2008) | 2 lines
+    New Go to directory view feature that permits to find and display the directory
+    corresponding to an image view.
+    For example, when you open an image in new window from collection, right clicking on
+    the newly displayed image will let you choose Go to directory view, which would open
+    a new window, with image and directory list.
+    If current directory is the one of the image, menu item is disabled.
 
-Remove unused variables.
+commit 28d489b1dc7ee32ffe576e3fc2b9b98056062e98
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 23:47:13 2008 +0000
 
-------------------------------------------------------------------------
-r340 | zas_ | 2008-04-04 00:09:36 +0200 (Fri, 04 Apr 2008) | 2 lines
+    Move layout.order default init to setup_default_options().
 
-Add missing prototype.
+commit ec46e7a26e75c60f577a17dbdadddf5421c17ce1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 23:39:46 2008 +0000
 
-------------------------------------------------------------------------
-r339 | zas_ | 2008-04-04 00:06:31 +0200 (Fri, 04 Apr 2008) | 2 lines
+    collection_load(): use booleans and always count failures (for debug).
 
-Drop 3 unused variables and comment out 2 unused functions.
+commit 95f5f103e834a2d31c60c329a30d10116bf6b015
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 23:29:54 2008 +0000
 
-------------------------------------------------------------------------
-r338 | zas_ | 2008-04-04 00:03:14 +0200 (Fri, 04 Apr 2008) | 2 lines
+    collection_load(): improve headers parsing.
 
-Add parenthesis around affection to clear a gcc warning.
+commit d11ebdf00ddd802dabdab77d870cf017663573db
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 23:09:48 2008 +0000
 
-------------------------------------------------------------------------
-r337 | zas_ | 2008-04-04 00:01:08 +0200 (Fri, 04 Apr 2008) | 2 lines
+    collection_load(): fix typo (missing #) made in rev 453.
 
-Fix a signedness warning.
+commit 51a638cf38c21da8bbb44166a27c9441d17d6b69
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 23:08:27 2008 +0000
 
-------------------------------------------------------------------------
-r336 | zas_ | 2008-04-03 23:54:23 +0200 (Thu, 03 Apr 2008) | 3 lines
+    collection_load(): accept whitespaces at start of lines.
 
-Main configuration file was renamed from gqviewrc to geeqierc.
+commit 598acd263839791e2ed5ce66c0cccd351f67e4a4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 22:57:26 2008 +0000
 
+    collection_load(): increase verbosity in debug mode.
 
-------------------------------------------------------------------------
-r335 | zas_ | 2008-04-03 23:50:53 +0200 (Thu, 03 Apr 2008) | 3 lines
+commit d0738ee165622d8e1782bb9a6eb7834f7d067fb6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 22:50:50 2008 +0000
 
-Fix a segfault occuring when using --without-exiv2 and
-concerning exif stuff.
+    collection_load(): replace official by limit_failures (and
+    invert the tests).
 
-------------------------------------------------------------------------
-r334 | zas_ | 2008-04-03 23:49:17 +0200 (Thu, 03 Apr 2008) | 2 lines
+commit 7b5e4b9910d9630dd8337bf7595a72adc5353fbf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 22:45:53 2008 +0000
 
-Fix missing bit of previous patch.
+    Increase collection_load() buffer size and do not activate
+    error limiting for GQview collections.
 
-------------------------------------------------------------------------
-r333 | zas_ | 2008-04-03 23:04:19 +0200 (Thu, 03 Apr 2008) | 2 lines
+commit 0b84d42bbae8d46d469262d5bc53acf46d935049
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 22:28:29 2008 +0000
 
-Fix two more gcc warnings related to function declarations.
+    Merge collection_load_only_geometry() into collection_load().
 
-------------------------------------------------------------------------
-r332 | zas_ | 2008-04-03 22:53:13 +0200 (Thu, 03 Apr 2008) | 3 lines
+commit 3ababb59e475a61f1f0bd085d0e33e0312c0baf2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 14 22:05:47 2008 +0000
 
-Remove two unused variables declarations, and add a missing #include.
+    Use flags for collection_load*().
 
+commit 03dfde5430fc9f9529840dce357ba17703f98042
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 13 20:33:45 2008 +0000
 
-------------------------------------------------------------------------
-r331 | zas_ | 2008-04-03 22:46:55 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Apply exif display config (Never/If set/Always) to pan view too.
 
-Drop unused variable.
+commit d8dac8fc58190ffde1b6602dbccd62cd5d7b5aa4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 13 19:21:13 2008 +0000
 
-------------------------------------------------------------------------
-r330 | zas_ | 2008-04-03 22:45:55 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Rename show_dot_files to show_hidden_files.
+    There is no need to expose the underlying method to hide
+    files.
 
-Add missing return at the end of editor_command_next_start().
+commit 38e6918e9817e663d99f827afab64e30ece28904
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 13 18:56:24 2008 +0000
 
-------------------------------------------------------------------------
-r329 | zas_ | 2008-04-03 22:40:15 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Let toggle the visibility of hidden files from directories list
+    or tree contextual menu.
 
-Drop unused variable.
+commit c1b559c372212ba25d25c3033900465580a95aae
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 13 12:24:42 2008 +0000
 
-------------------------------------------------------------------------
-r328 | zas_ | 2008-04-03 22:38:59 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Add a button to reset fullscreen info string to default value.
 
-Make collect_manager_process_action() static.
+commit a7f368b7d5697a10f2a07a2d7a323054593ff985
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 13 12:12:44 2008 +0000
 
-------------------------------------------------------------------------
-r327 | zas_ | 2008-04-03 22:34:49 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Fix a typo, READ_CHAR() must use value_all.
 
-Fix typos in functions names: file_list -> filelist.
+commit 8b62dc72ea0a17ea87ac9eff59eb193de82a6e7f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 13 09:10:38 2008 +0000
 
-------------------------------------------------------------------------
-r326 | zas_ | 2008-04-03 22:25:22 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Use convenient macros to read options, it will ensure options
+    names are matching (in the rc file and internally).
 
-Remove unused variable declarations.
+commit 9ca550aba088f91cc6996f6cc087cdfd62bba93f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 13 08:36:17 2008 +0000
 
-------------------------------------------------------------------------
-r325 | zas_ | 2008-04-03 22:24:20 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Simplify read_*_option() stuff by passing pointer to option value.
+    Introduce read_uint_option() to read enum values and read_int_option_clamp()
+    to read clamped values.
 
-Fix missing header include (filelist.h).
+commit 49b7c7fe48866f69d080a098f8a9d06edc818738
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 23:59:31 2008 +0000
 
-------------------------------------------------------------------------
-r324 | zas_ | 2008-04-03 22:19:16 +0200 (Thu, 03 Apr 2008) | 2 lines
+    Partly rewrite option parser to accept whitespaces at start
+    of lines.
 
-Remove unused variables declarations.
+commit 3d8e37380a4959e12ccd2fba88d432bd93270827
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 23:41:35 2008 +0000
 
-------------------------------------------------------------------------
-r323 | zas_ | 2008-04-03 22:11:09 +0200 (Thu, 03 Apr 2008) | 7 lines
+    exif_* -> exif.display.*
 
-Move tabs code from config_window_create() to new smaller functions.
-Each tab has now its own function named:
-config_tab_general(), config_tab_image(), config_tab_windows(),
-config_tab_filtering(), config_tab_editors(), config_tab_exif(),
-config_tab_advanced();
+commit e343ae4e578a24d6e49059bc0c5b0dbde0971b88
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 23:32:08 2008 +0000
 
+    Add a note in the rc file about special editor slots.
 
-------------------------------------------------------------------------
-r322 | zas_ | 2008-04-03 20:20:39 +0200 (Thu, 03 Apr 2008) | 2 lines
+commit e2a2cc276a702ce73821ec81d0768252f2f463dd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 23:16:41 2008 +0000
 
-Use more generic names for some cache manager callback functions.
+    sidecar_ext -> sidecar.ext
 
-------------------------------------------------------------------------
-r321 | zas_ | 2008-04-03 19:34:30 +0200 (Thu, 03 Apr 2008) | 3 lines
+commit 92b6d1c6f6d91e0732716f934aa5bb999313aab5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 23:07:04 2008 +0000
 
-Replace some occurences of gqview by Geeqie.
+    Unify names of options between variables and rc file.
 
+commit 8f2f4ae8a8fbba517d9c2e2c196b7f9ff5a40647
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 23:02:00 2008 +0000
 
-------------------------------------------------------------------------
-r320 | zas_ | 2008-04-03 19:15:49 +0200 (Thu, 03 Apr 2008) | 6 lines
+    Use tree_descend_subdirs everywhere.
 
-Add a debug level spinner at the end of Preferences > Advanced.
-One can now enable debug mode without restarting geeqie.
-A possibility to disable all debugging code and related options
-at compile time was added.
+commit e5253f24cda55574222c41b5c84e49643ea9049b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 22:22:11 2008 +0000
 
+    Use startup_path_enable everywhere.
 
-------------------------------------------------------------------------
-r319 | zas_ | 2008-04-03 16:35:03 +0200 (Thu, 03 Apr 2008) | 7 lines
+commit 32611f3c4549e3506390d41fefc5050b80739ca0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 22:17:14 2008 +0000
 
-Fix and simplify thumbnails size combo box related code.
-Some variables were unused, code was buggy (spurious entry at
-the end of the list). A sanity check for values coming from
-rc file was added. Two constants now define the default
-thumbnail size.
+    Rename recent_list_max/open_recent_max to open_recent_list_maxsize.
 
+commit fc112e86d9cf2d7b99aa0b40a07f28c8ecd08b4c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 22:10:38 2008 +0000
 
-------------------------------------------------------------------------
-r318 | zas_ | 2008-04-03 15:58:20 +0200 (Thu, 03 Apr 2008) | 4 lines
+    Rename dupe_custom_threshold option to duplicates_similarity_threshold.
 
+commit a882880361dd72f9002595502f954d0eff7c1feb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 22:04:29 2008 +0000
 
-Make the preferences window resizeable, and try to improve
-display of editors tab.
+    Move safe_delete* and in place rename options to file_ops
+    struct.
+    Re-order rc file a bit.
 
-------------------------------------------------------------------------
-r317 | zas_ | 2008-04-03 15:24:13 +0200 (Thu, 03 Apr 2008) | 3 lines
+commit cae690dfacfc833d50ff8543d50dd1d6ccc5654a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 21:45:30 2008 +0000
 
-Tidy up. Fix indentation and missing whitespaces.
-Make editors table creation code a bit more readable.
+    Rename option thumbnails.enabled to layout.show_thumbnails as it makes
+    more sense.
 
-------------------------------------------------------------------------
-r316 | zas_ | 2008-04-03 10:51:32 +0200 (Thu, 03 Apr 2008) | 11 lines
+commit 99862dd609c1002a0b307e840377956a7c825fa0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 21:38:55 2008 +0000
 
-Setting no limit size to trash directory is now possible using zero as value.
-A tooltip was added to the spinner to inform the user of this possibility.
-When 0 is set, no remaining/free space check occurs.
-Default size of the trash was set to a 128M and maximum size is now 2048MB, which
-is more conform to today's standards.
-The delete dialog now displays more information:
-- if external command will be used
-- if safe delete is on, max size and path to the trash
-- if safe delete is off
+    Rename user_specified_window_background and window_background_color
+    to image.use_custom_border_color and image.border_color.
+    Rename pref_background_color_set_cb() to pref_color_button_set_cb().
+    Rename pref_colorbutton_new() to pref_color_button_new().
 
+commit 4f893077aa3abd5ef6771504c572a941ddb39f1c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 19:33:59 2008 +0000
 
-------------------------------------------------------------------------
-r315 | nadvornik | 2008-04-02 22:44:40 +0200 (Wed, 02 Apr 2008) | 3 lines
+    Rename window options (moved to layout) and re-order rc file.
 
-various exif improvements based on patch by Uwe Ohse 
-try to compute 35mm focal length
+commit 3b9d8732905f125947f2b447e9cbf42505af1d2e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 17:20:34 2008 +0000
 
-------------------------------------------------------------------------
-r314 | zas_ | 2008-04-02 14:12:50 +0200 (Wed, 02 Apr 2008) | 6 lines
+    Fix bad image option name in the rc file.
 
-Make properties tabs reorderable through drag'n drop.
-Order is preserved during the whole session.
-When a new properties dialog is open, it uses the last order used.
-Currently, order isn't saved to rc file.
+commit 3129bfd4c67ad166a10cf68684e34c420c528ffd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 17:09:20 2008 +0000
 
+    Fix display bug when using "Limit image size when autofitting" option.
 
-------------------------------------------------------------------------
-r313 | zas_ | 2008-04-02 12:40:54 +0200 (Wed, 02 Apr 2008) | 5 lines
+commit 41eed8061d6fcdae47cda65e816da4a8c99d7e00
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 15:13:00 2008 +0000
 
-Honor selection while fullscreen navigation.
-The behavior is now consistent in full screen and windowed mode.
-It fixes the fact that the selection was discarded on "Next".
-Patch by Uwe Ohse. Cleanups by Laurent Monin.
+    Beautify rc file, adding sub-sections titles.
 
-------------------------------------------------------------------------
-r312 | zas_ | 2008-04-01 09:42:31 +0200 (Tue, 01 Apr 2008) | 1 line
+commit 72d1f62068bc2edf087fe11c4003bb2bdfc6f9ac
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 15:04:58 2008 +0000
 
-Fix display of image number in properties dialog when more than one image is selected.
-------------------------------------------------------------------------
-r311 | zas_ | 2008-04-01 00:10:25 +0200 (Tue, 01 Apr 2008) | 1 line
+    Rename image-related options.
 
-Customizable info overlay in fullscreen, based on the patch posted to gqview-devel list by Timo on 2007-09-10.
-------------------------------------------------------------------------
-r310 | nadvornik | 2008-03-31 23:09:36 +0200 (Mon, 31 Mar 2008) | 3 lines
+commit 0291156001ed57fd4ae86f34facde1f9dfbf408e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 09:41:44 2008 +0000
 
-use quoted_value everywhere
-simplify parsing of multiple quoted values on one line
+    Rename thumbnails related options.
 
-------------------------------------------------------------------------
-r309 | zas_ | 2008-03-31 09:29:03 +0200 (Mon, 31 Mar 2008) | 1 line
+commit b9dfc44002659a2d65061c92167c054e5c7929cb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 09:12:37 2008 +0000
 
-Indentation and white lines minor fixes.
-------------------------------------------------------------------------
-r308 | zas_ | 2008-03-30 21:26:35 +0200 (Sun, 30 Mar 2008) | 1 line
+    Rename file filtering options.
 
-Move strlen() calls outside the while loop.
-------------------------------------------------------------------------
-r307 | zas_ | 2008-03-30 16:19:34 +0200 (Sun, 30 Mar 2008) | 1 line
+commit cbe3a31e45f964d1ec1a13644dbfada38f16bd0e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 08:59:52 2008 +0000
 
-Comment out forgotten debugging code.
-------------------------------------------------------------------------
-r306 | zas_ | 2008-03-30 16:18:04 +0200 (Sun, 30 Mar 2008) | 1 line
+    Drop unused stuff.
 
-Fix two minor compilation warnings.
-------------------------------------------------------------------------
-r305 | nadvornik | 2008-03-30 13:47:14 +0200 (Sun, 30 Mar 2008) | 6 lines
+commit 2868bf63fa4ab10c32447d58cb054cc6bebe901a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 08:40:02 2008 +0000
 
-differentiate among normal image, raw image and metadata
-removed raw extension lists on various places and fixed most of the
-Exiv2 warnings
-todo: configuration and a special icons for unreadable raw or metadata
+    Rename collection options.
 
+commit 08116df6d62d699829022021020d180e0b2e390e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 08:35:58 2008 +0000
 
-------------------------------------------------------------------------
-r304 | zas_ | 2008-03-30 09:14:37 +0200 (Sun, 30 Mar 2008) | 1 line
+    Rename file sorting options.
 
-Make the zoom increment spinner more precise, step is now 0.1 instead of 1.
-------------------------------------------------------------------------
-r303 | zas_ | 2008-03-29 22:47:10 +0100 (Sat, 29 Mar 2008) | 1 line
+commit 7aa112520e180d55e51b04770b8faaa3cf099491
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 08:28:08 2008 +0000
 
-Improve escaping and quoting of strings saved in rc files.
-------------------------------------------------------------------------
-r302 | nadvornik | 2008-03-29 15:59:14 +0100 (Sat, 29 Mar 2008) | 2 lines
+    Re-order and try to group options.
 
-configurable frame around image - geeqie_autofit_maxsize.patch by Laurent MONIN
+commit 640bb21dc6aee7dccc6d1f76b611db31163b198b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 08:05:44 2008 +0000
 
-------------------------------------------------------------------------
-r301 | nadvornik | 2008-03-29 11:38:15 +0100 (Sat, 29 Mar 2008) | 2 lines
+    Rename color profile options.
 
-set user-defined color as image background - patch by Laurent MONIN
+commit e67112638b3f486d8aff634119904205779f9187
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 07:46:01 2008 +0000
 
-------------------------------------------------------------------------
-r300 | nadvornik | 2008-03-29 11:11:02 +0100 (Sat, 29 Mar 2008) | 2 lines
+    Rename slideshow options.
 
-fixed color management initialization
+commit 4c1a8d75a041016494c6cfa286c22cbcfbc7d166
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 07:09:19 2008 +0000
 
-------------------------------------------------------------------------
-r299 | nadvornik | 2008-03-26 13:07:00 +0100 (Wed, 26 Mar 2008) | 2 lines
+    Only display defined exif tags by default.
 
-README fixes
+commit 766bebce3cd6701a545a8d310f5e48561f2712d0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 07:00:14 2008 +0000
 
-------------------------------------------------------------------------
-r298 | nadvornik | 2008-03-26 09:02:45 +0100 (Wed, 26 Mar 2008) | 2 lines
+    Drop redundant code.
 
-updated README files
+commit d0cc864a8050573cbe14ad87334b01a0d21e8d11
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 12 06:42:47 2008 +0000
 
-------------------------------------------------------------------------
-r297 | nadvornik | 2008-03-26 09:00:46 +0100 (Wed, 26 Mar 2008) | 2 lines
+    Add Exif.Photo.ColorSpace tag in Preferences > Properties > Exif.
+    Requested by Frédéric Mantegazza.
 
-improved xmp vs. legacy metadata handling
+commit 165c0da79cf3bad89da98b574c1eb6709c47dd38
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 23:32:22 2008 +0000
 
-------------------------------------------------------------------------
-r296 | nadvornik | 2008-03-25 00:15:29 +0100 (Tue, 25 Mar 2008) | 2 lines
+    Rationalize fullscreen options naming.
 
-fixed crashes with --debug
+commit 52e680bc814903e8132c0416e85e94774c39b4c4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 23:01:00 2008 +0000
 
-------------------------------------------------------------------------
-r295 | nadvornik | 2008-03-24 21:42:39 +0100 (Mon, 24 Mar 2008) | 2 lines
+    options_c -> c_options
 
-added all possible raw extensions that I could find
+commit 90490472d271ef57cc6d8edb1bde9ed01f333bab
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 22:52:22 2008 +0000
 
-------------------------------------------------------------------------
-r294 | nadvornik | 2008-03-24 15:49:00 +0100 (Mon, 24 Mar 2008) | 2 lines
+    Move more options to ConfOptions.
 
-improved support for older exiv2 versions
+commit 638d6c3771f6967ac749cf4d06eb9142a83c69c6
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 22:27:54 2008 +0000
 
-------------------------------------------------------------------------
-r293 | nadvornik | 2008-03-24 15:03:46 +0100 (Mon, 24 Mar 2008) | 2 lines
+    Move file_sort_case_sensitive to ConfOptions.
 
-exiv2 version checks
+commit d2979ca0c264ed0421e5cc25cbe12cb1b7f88f0e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 22:14:36 2008 +0000
 
-------------------------------------------------------------------------
-r292 | nadvornik | 2008-03-24 13:04:31 +0100 (Mon, 24 Mar 2008) | 2 lines
+    Add a new struct ConfOptions to handle options.
+    Changes were made among the code to use only one global var
+    named "options" of type ConfOptions *.
+    Initialization takes place in new init_options().
 
-more renames
+commit 115597977870a18c7ffcd527d381ba7babad049d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 20:35:37 2008 +0000
 
-------------------------------------------------------------------------
-r291 | nadvornik | 2008-03-24 11:27:22 +0100 (Mon, 24 Mar 2008) | 2 lines
+    Make thumbnail standard fail directory after current application
+    name and version.
 
-changed logo
+commit f4b07b916eca315af4f7681bf01e36a69dfdf6fc
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 20:01:29 2008 +0000
 
-------------------------------------------------------------------------
-r290 | nadvornik | 2008-03-24 10:55:09 +0100 (Mon, 24 Mar 2008) | 2 lines
+    Define drag and drop target string in dnd.h.
+    Make it use the current name of the application.
 
-more renames
+commit bfa84d177977c2d1d5c7d2db52a5efee6009d6fb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 19:43:36 2008 +0000
 
-------------------------------------------------------------------------
-r289 | nadvornik | 2008-03-23 21:38:54 +0100 (Sun, 23 Mar 2008) | 2 lines
+    Use secure save in history_list_save().
 
-rename GQview -> Geeqie over the code
+commit 22e2b40b59d5968e6eb54fdf0abc8c3e26c59a52
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 17:11:14 2008 +0000
 
-------------------------------------------------------------------------
-r288 | nadvornik | 2008-03-23 21:18:51 +0100 (Sun, 23 Mar 2008) | 2 lines
+    Use secure save in comment_file_write().
 
-renamed to geeqie
+commit e91c9429984b95358b9f9bd6161ab6003a47d321
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 16:46:21 2008 +0000
 
-------------------------------------------------------------------------
-r287 | nadvornik | 2008-03-22 20:28:45 +0100 (Sat, 22 Mar 2008) | 2 lines
+    Secure save now unlinks temporary file on error by default.
+    It will prevent left-behind temporary files, but also prevent
+    potential data recovery from partially written files (it
+    should not be a problem here).
 
-raw related fixes
+commit 8f7571734ad7780f9a56a63b590dc59979dceaea
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 16:04:37 2008 +0000
 
-------------------------------------------------------------------------
-r286 | nadvornik | 2008-03-22 18:32:43 +0100 (Sat, 22 Mar 2008) | 2 lines
+    Use secure save feature when saving collections.
 
-overview of supported raw formats
+commit 90a5034f8953a616e3e3bc8f0d2482b5542b1dd8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 16:02:33 2008 +0000
 
-------------------------------------------------------------------------
-r285 | nadvornik | 2008-03-22 18:09:14 +0100 (Sat, 22 Mar 2008) | 2 lines
+    Preserve permissions of the destination file when using secure save.
 
-configure --without-exiv2
+commit 960050a743c0faf468c2be4608d90b506cd7e7ec
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 15:27:08 2008 +0000
 
-------------------------------------------------------------------------
-r284 | nadvornik | 2008-03-22 17:43:59 +0100 (Sat, 22 Mar 2008) | 2 lines
+    Revert part of the previous patch, let the caller take care
+    of calling path_from_utf8().
 
-crw preview support with exiv2
+commit 6b819d4c9fc7ce8932e2fb43e2fea8d1ded661bd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 14:27:55 2008 +0000
 
-------------------------------------------------------------------------
-r283 | nadvornik | 2008-03-16 15:11:22 +0100 (Sun, 16 Mar 2008) | 3 lines
+    Use path_from_utf8() on the passed filename.
+    Add const attribute.
 
-whitelist of files that can have an xmp sidecar, sample external command
-for creating sidecar
+commit add11b2e5e37c14112a234a84434518a81e0d88e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 13:07:48 2008 +0000
 
-------------------------------------------------------------------------
-r282 | nadvornik | 2008-03-16 11:52:44 +0100 (Sun, 16 Mar 2008) | 2 lines
+    ui_icons.h and icons_inline.h depend on gdk-pixbuf-csource,
+    so add a test for it in configure.
+    Wrap generated headers files with #ifdef/#endif and add
+    a comment related to their auto-generated nature.
+    Make the generation itself quiet, but display a message
+    on error.
+    Make these targets depend on respective Makefile.in.
 
-fixed reading sidecar extensions from config file
+commit b27dd030781ba757068cc7c2722830eafc33bd8c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 12:31:32 2008 +0000
 
-------------------------------------------------------------------------
-r281 | nadvornik | 2008-03-16 11:32:52 +0100 (Sun, 16 Mar 2008) | 2 lines
+    Move secure save code to its own files: secure_save.{c,h}.
 
-write comment and keywords to xmp, sidecars are used if exist
+commit cb6d88cccee47caad26ff3f1cd09cb3e4abf3f66
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 12:25:36 2008 +0000
 
-------------------------------------------------------------------------
-r280 | nadvornik | 2008-03-15 20:53:33 +0100 (Sat, 15 Mar 2008) | 2 lines
+    Add missing #ifdef/#endif.
 
-write support in Exiv2 wrapper; for now only string values 
+commit 9bdd3084d7fad2323f4706eb6d069012637568a8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 10:46:52 2008 +0000
 
-------------------------------------------------------------------------
-r279 | nadvornik | 2008-02-24 19:55:19 +0100 (Sun, 24 Feb 2008) | 3 lines
+    Ensure that gcc flag -Wall is set.
 
-a hack to read raw previews with exiv2 0.16, however it should be fixed
-in the library
+commit 10a062d55d36f749cc16773cb39daadd3761d8a8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 10:45:37 2008 +0000
 
-------------------------------------------------------------------------
-r278 | nadvornik | 2008-02-15 11:48:09 +0100 (Fri, 15 Feb 2008) | 2 lines
+    Silent some gcc warnings.
 
-read also iptc and xmp
+commit ee484a48eecb7bf11090a2cffe64957dfacc7c70
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 09:02:20 2008 +0000
 
-------------------------------------------------------------------------
-r277 | nadvornik | 2008-02-14 15:04:43 +0100 (Thu, 14 Feb 2008) | 2 lines
+    Prevent multiple insertion of the same file in a collection.
+    Use a hash table to speed up existence tests.
 
-more exiv2 fixes
+commit 9c0b2f023a5c9e0da316e4a2bc5cf01117c56f3f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 11 08:10:40 2008 +0000
 
-------------------------------------------------------------------------
-r276 | nadvornik | 2008-02-14 12:03:20 +0100 (Thu, 14 Feb 2008) | 2 lines
+    Only display these messages if debug mode is enabled.
 
-more exiv2 fixes
+commit d934f5a735c2816ff6fca653672b65536c79eb2f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Apr 10 19:27:42 2008 +0000
 
-------------------------------------------------------------------------
-r275 | nadvornik | 2008-02-14 00:02:48 +0100 (Thu, 14 Feb 2008) | 2 lines
+    fixed dates in pan-calendar
 
-more exiv2 fixes
+commit 6b5b5bbdb0126cb96fe38d5f9d2e15859e9dd8f3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 10 12:07:34 2008 +0000
 
-------------------------------------------------------------------------
-r274 | nadvornik | 2008-02-13 20:31:50 +0100 (Wed, 13 Feb 2008) | 2 lines
+    Fix fCamera even more.
 
-unified tag names between exiv2 and internal rxif parser
+commit 3655d6512451651b6daa4659732765e41a42805e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 10 11:31:20 2008 +0000
 
-------------------------------------------------------------------------
-r273 | nadvornik | 2008-02-13 18:47:55 +0100 (Wed, 13 Feb 2008) | 2 lines
+    Do not display ... if not truncated.
 
-more exiv2 fixes
+commit 4f1fc98c467e8ee49a5110caeac20f19d6a40547
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 10 10:43:15 2008 +0000
 
-------------------------------------------------------------------------
-r272 | nadvornik | 2008-02-13 18:08:04 +0100 (Wed, 13 Feb 2008) | 2 lines
+    Add the possibility to truncate overlay infos displayed:
+    %fCamera:20% will truncate data displayed to 20 characters
+    and add 3 dots at the end.
+    For example, %name% -> some_file, %name:4% -> some...
 
-and first version that actually shows some exif data (see advanced view)
+commit c3a31cca879b0496a7cff3c7443a705a8183854d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 10 00:09:43 2008 +0000
 
-------------------------------------------------------------------------
-r271 | nadvornik | 2008-02-13 17:52:41 +0100 (Wed, 13 Feb 2008) | 2 lines
+    Fix broken remove_common_prefix(), fCamera didn't display model as it should.
 
-first exiv2 support that does not crash immediately
+commit c265a3b27d21585787453f51c6c88f9919731700
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 9 22:47:43 2008 +0000
 
-------------------------------------------------------------------------
-r270 | nadvornik | 2008-02-13 15:46:23 +0100 (Wed, 13 Feb 2008) | 2 lines
+    Resync .po files. French translation was updated (100% made).
 
-started exiv2 integration
+commit cbf85334fc7aeaa7cb4c0f824285fb505712d03a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 9 22:36:43 2008 +0000
 
-------------------------------------------------------------------------
-r269 | nadvornik | 2008-02-13 14:57:31 +0100 (Wed, 13 Feb 2008) | 2 lines
+    Add 3 missing files to POTFILES.in.
 
-simplified exif.h, moved implementation-specific stuff to exif-int.h
+commit 9e55d96d9e8dbd550e574d0c95e97052db85ff4d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 9 22:33:06 2008 +0000
 
-------------------------------------------------------------------------
-r268 | nadvornik | 2008-02-11 16:23:43 +0100 (Mon, 11 Feb 2008) | 2 lines
+    Simple helper script to display translation statistics.
 
-do not show frame for full-window images
+commit 472a9ba634085ee3442f8e2af802cc1392c1a403
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 9 22:13:11 2008 +0000
 
-------------------------------------------------------------------------
-r267 | nadvornik | 2008-02-11 13:51:28 +0100 (Mon, 11 Feb 2008) | 2 lines
+    Fix a typo: "while fluorescent" -> "white fluorescent"
 
-improved drawing of image frames
+commit 2e2e9de4bbd7c8bb7f7f352fa7954df9395c56a3
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 9 22:01:52 2008 +0000
 
-------------------------------------------------------------------------
-r266 | nadvornik | 2008-01-26 22:18:23 +0100 (Sat, 26 Jan 2008) | 2 lines
+    Resync .po files. Update french translation.
 
-updated TODO list
+commit dcd6cfb9d8e4635614f83aead3e35f83cf0cd097
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 9 21:14:50 2008 +0000
 
-------------------------------------------------------------------------
-r265 | nadvornik | 2008-01-20 20:04:18 +0100 (Sun, 20 Jan 2008) | 2 lines
+    fixed crash in pan_calendar
 
-debug messages cleanup
+commit 64e92b479d212e4fbe94c6ad4148bb29766d6191
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 9 20:49:32 2008 +0000
 
-------------------------------------------------------------------------
-r264 | nadvornik | 2008-01-16 20:37:54 +0100 (Wed, 16 Jan 2008) | 2 lines
+    improved histogram drawing
 
-added file with release notes and TODO
+commit 5bf349caeeb48de48e69613e10f1202c51f6a6a2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 9 16:37:54 2008 +0000
 
-------------------------------------------------------------------------
-r263 | nadvornik | 2007-12-23 22:24:48 +0100 (Sun, 23 Dec 2007) | 2 lines
+    Simplify and unify gtk_window creation with the help of
+    the new window_new() function, that wraps gtk_window_new()
+    call.
+    Subclass, title and icon are set in the same call.
 
-basic sidecar files configuration via preferences dialog
+commit c6bd6b0ee75d77f6f4d6d3987a185639a008c02c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 9 13:53:01 2008 +0000
 
-------------------------------------------------------------------------
-r262 | nadvornik | 2007-12-23 21:28:50 +0100 (Sun, 23 Dec 2007) | 2 lines
+    Replace occurences of Geeqie / geeqie by constants defined in main.h.
 
-fixed loading thumbnails for sidecar files
+commit ce0e2d8485b356cce35869d956b863fe7c0884f7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 23:41:01 2008 +0000
 
-------------------------------------------------------------------------
-r261 | nadvornik | 2007-12-23 16:49:23 +0100 (Sun, 23 Dec 2007) | 3 lines
+    int -> gint
 
-fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
-files
+commit ea52620169109844ba024c26d1b1c4a6dc29c885
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 23:39:27 2008 +0000
 
-------------------------------------------------------------------------
-r260 | nadvornik | 2007-12-22 21:33:09 +0100 (Sat, 22 Dec 2007) | 2 lines
+    Make xmp debug info only appears when debug >= 2.
 
-fixed filelist refresh
+commit 1e8eddcf3c0bf7b23f77e70c50a20dcfbbebfed1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 23:33:49 2008 +0000
 
-------------------------------------------------------------------------
-r259 | nadvornik | 2007-12-22 11:10:40 +0100 (Sat, 22 Dec 2007) | 3 lines
+    Enable image rotation depending on EXIF by default.
+    New users shouldn't have to search for it.
 
-preserve marks setting on layout change
+commit f798c6956fcd2665e56d184bc45887d0f4d4edee
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 23:25:46 2008 +0000
 
+    Fix missing header files inclusions.
 
-------------------------------------------------------------------------
-r258 | nadvornik | 2007-12-22 10:51:12 +0100 (Sat, 22 Dec 2007) | 2 lines
+commit 0d0b4d754bd31988e8eed4f3eef0f519b1abf21c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 23:16:12 2008 +0000
 
-basic support for marks in view_file_icon.c
+    GQVIEW_* -> GQ_*
 
-------------------------------------------------------------------------
-r257 | nadvornik | 2007-12-20 23:43:52 +0100 (Thu, 20 Dec 2007) | 2 lines
+commit dd06ccc36568ace67c9d8982c8021ffd33ba6968
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 23:07:09 2008 +0000
 
-update FileData on file change
+    GQVIEW_H -> MAIN_H
 
-------------------------------------------------------------------------
-r256 | nadvornik | 2007-12-20 17:18:28 +0100 (Thu, 20 Dec 2007) | 3 lines
+commit f4398500f5a7fbe6236d5573170f8e359823d87e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 23:02:33 2008 +0000
 
-<num> toggles mark num
-<control><num> selects mark num
+    gqview.h -> main.h
 
-------------------------------------------------------------------------
-r255 | nadvornik | 2007-12-20 17:06:20 +0100 (Thu, 20 Dec 2007) | 2 lines
+commit 4ccdd1c26c852dedbe58543d845e5fc9a55ba53e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 22:31:42 2008 +0000
 
-created menu "Select" with selection and marks operations
+    Remove obsolete prototype.
 
-------------------------------------------------------------------------
-r254 | nadvornik | 2007-12-19 23:01:46 +0100 (Wed, 19 Dec 2007) | 3 lines
+commit 656ba051f062a61bbb21e5add2eda10b9ff18c77
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 22:28:55 2008 +0000
 
-complete set of boolean operation with marks - 
-union, intersection, complement
+    gqview_remote -> remote_connection
+    gqview_command_collection -> command_collection
+    gqview_remote_control() -> remote_control()
+    gqview_remote_help() -> remote_help()
+    gqview_remote_command_find() -> remote_command_find()
+    gqview_remote_build_list() -> remote_build_list()
+    gqview_remote_cb() -> remote_cb()
 
-------------------------------------------------------------------------
-r253 | nadvornik | 2007-12-18 22:15:16 +0100 (Tue, 18 Dec 2007) | 2 lines
+commit ae45bad7722ac83ba3fbd91499209c5054bda199
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 22:16:56 2008 +0000
 
-use accels also in fullscreen mode
+    exit_gqview() renamed to exit_program().
+    exit_gqview_final() renamed to exit_program_final().
 
-------------------------------------------------------------------------
-r252 | nadvornik | 2007-12-17 22:42:24 +0100 (Mon, 17 Dec 2007) | 2 lines
+commit a7475aea1b68e02c4ec5444cad4d8fde1ed7691b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 22:05:04 2008 +0000
 
-moved some actions to menu and accels
+    Add support for some Samsung raw files (.pef).
+    
+    Samsung raw not strongly differ from Pentax raw.
+    The only difference in header (manufacturer, camera name and etc).
+    Tested on Samsung GX-1S and Pentax *ist DS.
+    Patch by Max Lushnikov.
 
-------------------------------------------------------------------------
-r251 | nadvornik | 2007-12-17 20:34:43 +0100 (Mon, 17 Dec 2007) | 2 lines
+commit ccc538651bada138f49aec344cc69398359c1fce
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 21:55:58 2008 +0000
 
-removed unused variable
+    Implement secure rc file saving.
+    First data is written to a temporary file, then if nothing
+    was wrong, this file is renamed to the final name.
+    This way the risk of corrupted rc file is greatly reduced.
+    The code is borrowed from ELinks (http://elinks.cz).
 
-------------------------------------------------------------------------
-r250 | nadvornik | 2007-12-16 23:30:19 +0100 (Sun, 16 Dec 2007) | 2 lines
+commit 0e8b4aabb88cf20b361334edbdd817303de4a768
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 8 21:52:04 2008 +0000
 
-fixed in-place rename
+    fixed histogram label
 
-------------------------------------------------------------------------
-r249 | nadvornik | 2007-12-15 18:58:51 +0100 (Sat, 15 Dec 2007) | 2 lines
+commit e975cd7b5e7737c6fc2c0606ea17b814c9b4c4ea
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 21:33:29 2008 +0000
 
-better integration of split image functions into menu
+    Fix the "continuous display" of tooltips in the collection view
+    (before the tooltip delay occured once, then changing icon to icon never hide the
+    tooltip again, now the tip is displayed shortly after the cursor moved on the icon,
+    but disappears when moving cursor to another icon).
+    
+    Display the full path to the file when Show filename text is on (before nothing
+    was displayed).
+    
+    When Show filename text is off, behavior is unchanged, the (short) filename is
+    displayed.
 
-------------------------------------------------------------------------
-r248 | nadvornik | 2007-12-14 22:51:46 +0100 (Fri, 14 Dec 2007) | 2 lines
+commit bddcf782295eb021e6b525ee5773fbea3947b83b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 8 20:56:50 2008 +0000
 
-show active marks in image overlay
+    reworked the histogram patch by Uwe Ohse, most of the code is in
+    separate files
 
-------------------------------------------------------------------------
-r247 | nadvornik | 2007-12-09 22:20:27 +0100 (Sun, 09 Dec 2007) | 2 lines
+commit 149161487904c823cc003a0c45fe1e3cc82205e8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Apr 8 17:26:13 2008 +0000
 
-fixed image focus
+    fixed file delete notification in view_file_icon
 
-------------------------------------------------------------------------
-r246 | nadvornik | 2007-12-09 13:33:51 +0100 (Sun, 09 Dec 2007) | 2 lines
+commit 692e15a37d917d37f5171a64264c06b7635cb39a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 16:22:21 2008 +0000
 
-fixed copying zoom an scroll values from the original image on splitting
+    gtk_notebook_set_tab_reorderable() is only available sinc gtk+ 2.10.
 
-------------------------------------------------------------------------
-r245 | nadvornik | 2007-12-09 12:58:39 +0100 (Sun, 09 Dec 2007) | 2 lines
+commit 7e989ce8338140c5c9b0de7f674e2954649e5993
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 15:53:03 2008 +0000
 
-do not hilight selected image in SPLIT_NONE
+    Move active variable affectation after the test.
 
-------------------------------------------------------------------------
-r244 | nadvornik | 2007-12-09 01:11:40 +0100 (Sun, 09 Dec 2007) | 2 lines
+commit 94caf46eba71f1653d014fbdfa0888b43d98f7d9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 14:52:42 2008 +0000
 
-improved drawing of frame around selected image
+    Simplify layout_color_name_parse() using g_strdelimit().
 
-------------------------------------------------------------------------
-r243 | nadvornik | 2007-11-25 11:25:25 +0100 (Sun, 25 Nov 2007) | 2 lines
+commit b43697803c521709dc639805718e079b3f4edcdd
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 14:50:14 2008 +0000
 
-more operations with file marks
+    Tidy up, whitespaces and indentation fix.
 
-------------------------------------------------------------------------
-r242 | nadvornik | 2007-11-24 22:06:30 +0100 (Sat, 24 Nov 2007) | 2 lines
+commit 5d4ea30f551b19d199da2a16b7b252df8244ebb7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 8 11:53:35 2008 +0000
 
-marks: fixes and cleanup
+    Remove dependency on GTK 2.12, reported by John Vodden and Vladimir
+    Nadvornik.
+    gtk_set_tooltip_markup() calls were disabled for GTK+ versions < 2.12.
+    gdk_color_to_string() was replaced by a equivalent function.
 
-------------------------------------------------------------------------
-r241 | nadvornik | 2007-11-22 22:15:35 +0100 (Thu, 22 Nov 2007) | 2 lines
+commit 255ee5523caae0230e4e163109b00364f3b8180f
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 7 19:47:22 2008 +0000
 
-improved directory scanning a bit
+    Add the possibility to print file names with path.
+    A checkbox was added to the Text tab in the Print dialog.
+    
+    Name checked and Path unchecked  -> filename.jpg
+    Name checked and Path checked    -> /some/dir/filename.jpg
+    Name unchecked and Path checked  -> /some/dir/
+    
+    Patch by Michael Mokeev and Laurent Monin.
 
-------------------------------------------------------------------------
-r240 | nadvornik | 2007-11-21 23:46:50 +0100 (Wed, 21 Nov 2007) | 2 lines
+commit cf45b42ee7dbd8287eecd728cf225c2f45aed5db
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 7 19:06:17 2008 +0000
 
-added possibility to specify prefered file type for external commands
+    Fix a segfault on fullscreen file deletion reported by Frédéric Mantegazza.
 
-------------------------------------------------------------------------
-r239 | nadvornik | 2007-11-21 22:21:17 +0100 (Wed, 21 Nov 2007) | 2 lines
+commit da12ecf1747a682afe776cf99ea76f4342fd9876
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 7 18:52:54 2008 +0000
 
-prevent duplicate sidecar files; code cleanup
+    Add the possibility to match duplicates on the name but ignoring the case.
+    A new item was added to types of match combo box in the Find duplicates dialog.
 
-------------------------------------------------------------------------
-r238 | nadvornik | 2007-11-20 23:28:40 +0100 (Tue, 20 Nov 2007) | 3 lines
+commit e0831fd697ffb602fc780ea49f4f09259978f867
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Apr 7 08:09:39 2008 +0000
 
-fixed grouping sidecar files and made it configurable via config file
-(no gui yet)
+    Display marks in overlay info only if at least one is set.
+    Fix a missing g_string_free().
 
-------------------------------------------------------------------------
-r237 | nadvornik | 2007-10-22 21:58:47 +0200 (Mon, 22 Oct 2007) | 2 lines
+commit 7391c9ddeddc9372876f2759b4c8908ea2085fa1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 6 10:17:41 2008 +0000
 
-fixed preloading images in file list
+    Mark all exif labels as translatable.
+    Before only some of them were enclosed by N_().
 
-------------------------------------------------------------------------
-r236 | nadvornik | 2007-10-08 21:41:49 +0200 (Mon, 08 Oct 2007) | 2 lines
+commit 99f37aedb447817ff1cb9e243f768b45099d17a7
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Apr 6 10:03:54 2008 +0000
 
-improved FileDataChangeInfo structure, check for another file operation in progress
+    Mark strings as translatable.
 
-------------------------------------------------------------------------
-r235 | nadvornik | 2007-10-02 23:49:02 +0200 (Tue, 02 Oct 2007) | 7 lines
+commit 6033096a6d309a6ebab2d1aa1c2d2152b5e6e56a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 5 15:23:39 2008 +0000
 
-display sidecar files (jpeg + raw)  using gtk_tree_store
-This is just a prototype to test the functionality, it needs more work.
+    Improve remove_trailing_slash() so it allocates no more than
+    needed bytes and remove all trailing slashes instead only one.
 
-Please test, omments are welcome :)
+commit 3cd193f19c714ea492ef75b7af92ccddae6d9043
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Apr 5 11:59:29 2008 +0000
 
+    Comment out unused code.
+    Geeqie code now compiles cleanly with -Wall gcc option.
 
+commit 4b5d366799dd336e39bda4570cb48c706b87512d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 4 22:34:55 2008 +0000
 
-------------------------------------------------------------------------
-r234 | nadvornik | 2007-10-01 21:52:10 +0200 (Mon, 01 Oct 2007) | 2 lines
+    Change default exif order a bit to move up common and useful
+    info.
 
-use FileData even for sidecar file list
+commit 629f646396dece8527f11d9c55cf37e96420df7a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 4 22:23:36 2008 +0000
 
-------------------------------------------------------------------------
-r233 | nadvornik | 2007-09-30 23:10:54 +0200 (Sun, 30 Sep 2007) | 6 lines
+    Re-add "What to show in properties dialog:" label before the table.
 
-editors.c was almost completely rewritten:
-- centralized template parsing
-- better control of executed editors
-- possibility to get editor exit status via callback
+commit 9c6fe295906cac617f7ffb57e1f80519982263c0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 4 22:12:28 2008 +0000
 
+    Rename exif preferences tab to "Properties", and name the
+    subsection "Exif".
 
-------------------------------------------------------------------------
-r232 | nadvornik | 2007-09-12 23:17:31 +0200 (Wed, 12 Sep 2007) | 4 lines
+commit b74a5e41092be8d442a5edc8927c388f8f064ab4
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Fri Apr 4 18:50:52 2008 +0000
 
-display sidecar extensions in filelist
-some cleanup of file marks
+    Fix a segfault occuring when enabling debug mode.
+    At this point il->fd can be null.
 
+commit e8cca019825f81696bed7d0e7ac8adb46107d66e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 23:29:14 2008 +0000
 
-------------------------------------------------------------------------
-r231 | nadvornik | 2007-09-11 22:06:29 +0200 (Tue, 11 Sep 2007) | 3 lines
+    Make the wmclass value unique among the code by defining
+    it in main header file as GQ_WMCLASS.
+    Before this patch, it was set using PACKAGE (="geeqie"),
+    or by the hardcoded string "Geeqie".
+    Now all Geeqie windows have the same value for wmclass.
 
-replaced gchar* path with FileData *fd
+commit ba02c7206762d6851a1af2776361daaf16a3db9a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:39:50 2008 +0000
 
+    Initialize variables, clearing a gcc warning.
 
-------------------------------------------------------------------------
-r230 | nadvornik | 2007-08-23 22:45:59 +0200 (Thu, 23 Aug 2007) | 2 lines
+commit 9c57ca463347c5dfe77e25e634135ee282a11d6a
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:33:28 2008 +0000
 
-started support for sidecar files like xmp, raw+jpeg etc.
+    Add missing prototype to header file.
 
-------------------------------------------------------------------------
-r229 | nadvornik | 2007-08-20 22:11:32 +0200 (Mon, 20 Aug 2007) | 2 lines
+commit 1d07e403b4460791de952fa6b3089e667b60264b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:29:20 2008 +0000
 
-more external commands
+    Add few missing prototypes to header file.
 
-------------------------------------------------------------------------
-r228 | nadvornik | 2007-08-16 22:57:09 +0200 (Thu, 16 Aug 2007) | 2 lines
+commit bae17221c04c2d7ac5a473e94ac0562603d83507
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:20:42 2008 +0000
 
-improved external delete command
+    Drop a bunch of unused variables.
 
-------------------------------------------------------------------------
-r227 | nadvornik | 2007-08-15 23:37:51 +0200 (Wed, 15 Aug 2007) | 2 lines
+commit 4233904c10730a743c21449f929ff99ab6a9cb2e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:14:37 2008 +0000
 
-started implementation of external commands; external Delete should work
+    Add missing #include.
 
-------------------------------------------------------------------------
-r226 | bruclik | 2007-07-20 09:10:48 +0200 (Fri, 20 Jul 2007) | 3 lines
+commit b5004054f8709b415a62b457fc166216014e4d6c
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:13:12 2008 +0000
 
-compilation fix
+    Remove unused variables.
 
+commit 0f370af7df0f6b59e783a3c6655d6b8db4986ce9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:09:36 2008 +0000
 
-------------------------------------------------------------------------
-r225 | bruclik | 2007-07-13 16:03:08 +0200 (Fri, 13 Jul 2007) | 3 lines
+    Add missing prototype.
 
-First implementation of marks for all photos.
+commit 46cbdf33c88a15bca579a00022356361f7854ec8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:06:31 2008 +0000
 
+    Drop 3 unused variables and comment out 2 unused functions.
 
-------------------------------------------------------------------------
-r224 | nadvornik | 2007-07-12 22:46:28 +0200 (Thu, 12 Jul 2007) | 2 lines
+commit b452f41cefd0a7d578b4e5310543d397ec4ca21b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:03:14 2008 +0000
 
-relative scroll is working; some cleanup
+    Add parenthesis around affection to clear a gcc warning.
 
-------------------------------------------------------------------------
-r223 | nadvornik | 2007-07-11 23:10:25 +0200 (Wed, 11 Jul 2007) | 2 lines
+commit fab357ea72855cdc4397ad4e4009206f47e9065e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 22:01:08 2008 +0000
 
-connected zoom
+    Fix a signedness warning.
 
-------------------------------------------------------------------------
-r222 | nadvornik | 2007-07-11 22:00:07 +0200 (Wed, 11 Jul 2007) | 2 lines
+commit 91d0e07df572f7e7b2bb4564b3d96737ba432650
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 21:54:23 2008 +0000
 
-started relative scroll, keep scroll position 
+    Main configuration file was renamed from gqviewrc to geeqierc.
 
-------------------------------------------------------------------------
-r221 | nadvornik | 2007-07-10 23:25:51 +0200 (Tue, 10 Jul 2007) | 2 lines
+commit 94fe3fcbb8e57a53b1ca2fbd2874d319988a3f05
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 21:50:53 2008 +0000
 
-improved connected scroll and active image switching
+    Fix a segfault occuring when using --without-exiv2 and
+    concerning exif stuff.
 
-------------------------------------------------------------------------
-r220 | nadvornik | 2007-06-29 17:16:46 +0200 (Fri, 29 Jun 2007) | 4 lines
+commit c34caea4863dc67b9420eefeab15fea347482d00
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 21:49:17 2008 +0000
 
-implemented split windows
-TODO: menus and hotkeys, connected zoom, activating on drag
+    Fix missing bit of previous patch.
 
+commit 287ce3f2961b8d47d7b16b14206de769419a70b0
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 21:04:19 2008 +0000
 
-------------------------------------------------------------------------
+    Fix two more gcc warnings related to function declarations.
+
+commit 7c014bcacbdf6a41bf9b4d056c23af1b095d2c5e
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:53:13 2008 +0000
+
+    Remove two unused variables declarations, and add a missing #include.
+
+commit ae6a05ca1496e697792873538344986662731d33
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:46:55 2008 +0000
+
+    Drop unused variable.
+
+commit 71e3199f6438dedfad6c9f887c61377e25d2ecd8
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:45:55 2008 +0000
+
+    Add missing return at the end of editor_command_next_start().
+
+commit f73531befc98f27f324b2d8931037cb992cee5eb
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:40:15 2008 +0000
+
+    Drop unused variable.
+
+commit 66f99ad9b066545846752becd21c8fe28360d27d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:38:59 2008 +0000
+
+    Make collect_manager_process_action() static.
+
+commit 8e4da844d26d88157198173ae9085700c3ad7e15
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:34:49 2008 +0000
+
+    Fix typos in functions names: file_list -> filelist.
+
+commit c2eef3c9f81fcfdc2871d68fc70429ee0022b0a1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:25:22 2008 +0000
+
+    Remove unused variable declarations.
+
+commit 6c8390b4bf350c22d5dadc4f7cbeecfcf66b2241
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:24:20 2008 +0000
+
+    Fix missing header include (filelist.h).
+
+commit a161508a7fcab4d94be9661e844e1cbadb459016
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:19:16 2008 +0000
+
+    Remove unused variables declarations.
+
+commit 8746b22d3ed1b600016bd97a5547dc10248cc0e5
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 20:11:09 2008 +0000
+
+    Move tabs code from config_window_create() to new smaller functions.
+    Each tab has now its own function named:
+    config_tab_general(), config_tab_image(), config_tab_windows(),
+    config_tab_filtering(), config_tab_editors(), config_tab_exif(),
+    config_tab_advanced();
+
+commit 1557cbb59eeb34ce818337a2c9a57cb8e03c9c05
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 18:20:39 2008 +0000
+
+    Use more generic names for some cache manager callback functions.
+
+commit aecafd20f3ac481c1c919484ebb2dd79af07caca
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 17:34:30 2008 +0000
+
+    Replace some occurences of gqview by Geeqie.
+
+commit e10dc3fb90621a74d1641c54cba4e3eb58ed306b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 17:15:49 2008 +0000
+
+    Add a debug level spinner at the end of Preferences > Advanced.
+    One can now enable debug mode without restarting geeqie.
+    A possibility to disable all debugging code and related options
+    at compile time was added.
+
+commit 7cc8e4c3ec69055695aea75aec756ab8623d9b1b
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 14:35:03 2008 +0000
+
+    Fix and simplify thumbnails size combo box related code.
+    Some variables were unused, code was buggy (spurious entry at
+    the end of the list). A sanity check for values coming from
+    rc file was added. Two constants now define the default
+    thumbnail size.
+
+commit 1671ec2fa789db8370f51fb6ef8efca946865931
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 13:58:20 2008 +0000
+
+    Make the preferences window resizeable, and try to improve
+    display of editors tab.
+
+commit ab990a8c71aed99def1757293cbb888da37af2a9
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 13:24:13 2008 +0000
+
+    Tidy up. Fix indentation and missing whitespaces.
+    Make editors table creation code a bit more readable.
+
+commit cf5166859290614def5203aea1900d302d02c6de
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Thu Apr 3 08:51:32 2008 +0000
+
+    Setting no limit size to trash directory is now possible using zero as value.
+    A tooltip was added to the spinner to inform the user of this possibility.
+    When 0 is set, no remaining/free space check occurs.
+    Default size of the trash was set to a 128M and maximum size is now 2048MB, which
+    is more conform to today's standards.
+    The delete dialog now displays more information:
+    - if external command will be used
+    - if safe delete is on, max size and path to the trash
+    - if safe delete is off
+
+commit 84a0008e3167969e2250ac1169da57ad8464624d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Apr 2 20:44:40 2008 +0000
+
+    various exif improvements based on patch by Uwe Ohse
+    try to compute 35mm focal length
+
+commit a667d7a3491b2758ffff532fc66c76bd84de59cf
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 2 12:12:50 2008 +0000
+
+    Make properties tabs reorderable through drag'n drop.
+    Order is preserved during the whole session.
+    When a new properties dialog is open, it uses the last order used.
+    Currently, order isn't saved to rc file.
+
+commit 119f6773b7605d8ce443c6f79ee1becd5d2250b2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Wed Apr 2 10:40:54 2008 +0000
+
+    Honor selection while fullscreen navigation.
+    The behavior is now consistent in full screen and windowed mode.
+    It fixes the fact that the selection was discarded on "Next".
+    Patch by Uwe Ohse. Cleanups by Laurent Monin.
+
+commit 9c13e122221c8c594e9c686eb44c00ebe5653a8d
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Tue Apr 1 07:42:31 2008 +0000
+
+    Fix display of image number in properties dialog when more than one image is selected.
+
+commit 46b72816ae905359b0f58dc9306391a045c64851
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 31 22:10:25 2008 +0000
+
+    Customizable info overlay in fullscreen, based on the patch posted to gqview-devel list by Timo on 2007-09-10.
+
+commit 04eaaa21a6ba71239f7c4564ff98a3268326cc40
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 31 21:09:36 2008 +0000
+
+    use quoted_value everywhere
+    simplify parsing of multiple quoted values on one line
+
+commit e24208c28c3cc4cebd512e16b81183ec1df6bae1
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Mon Mar 31 07:29:03 2008 +0000
+
+    Indentation and white lines minor fixes.
+
+commit fcd13bbcea7020864510cb36b878e08fab2f90b2
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 30 19:26:35 2008 +0000
+
+    Move strlen() calls outside the while loop.
+
+commit 05e266040ad17850e0b808ba3ddc94fefb526120
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 30 14:19:34 2008 +0000
+
+    Comment out forgotten debugging code.
+
+commit 7bfda96a852553fd035ffefcd44c82dab63de722
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 30 14:18:04 2008 +0000
+
+    Fix two minor compilation warnings.
+
+commit a3842d6ede2ca127f40bdab206c0bfd35b31e92b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 30 11:47:14 2008 +0000
+
+    differentiate among normal image, raw image and metadata
+    removed raw extension lists on various places and fixed most of the
+    Exiv2 warnings
+    todo: configuration and a special icons for unreadable raw or metadata
+
+commit 07a39dad79cab9d0ffb31934ffffb46cac283614
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sun Mar 30 07:14:37 2008 +0000
+
+    Make the zoom increment spinner more precise, step is now 0.1 instead of 1.
+
+commit 4cd843a2af59ae49b25ee2cf0cc1a4e777567628
+Author: Laurent Monin <geeqie@norz.org>
+Date:   Sat Mar 29 21:47:10 2008 +0000
+
+    Improve escaping and quoting of strings saved in rc files.
+
+commit a6b652131200ed7c783431147a4ea52024341200
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 29 14:59:14 2008 +0000
+
+    configurable frame around image - geeqie_autofit_maxsize.patch by Laurent MONIN
+
+commit 34d53a4678e430076251d04a4e7e4e4c755a21e1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 29 10:38:15 2008 +0000
+
+    set user-defined color as image background - patch by Laurent MONIN
+
+commit a33be8446827d48bdf2c3a390cac83a46c998a9b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 29 10:11:02 2008 +0000
+
+    fixed color management initialization
+
+commit c8156a82ec7f5c50ca3879f3d7950be7d2141ad0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 26 12:07:00 2008 +0000
+
+    README fixes
+
+commit 407aa583a11e3dc639b45941cd642636e90b8da4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 26 08:02:45 2008 +0000
+
+    updated README files
+
+commit 326749190b90a0d6856aadc41863147f4036ef74
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Mar 26 08:00:46 2008 +0000
+
+    improved xmp vs. legacy metadata handling
+
+commit 6d057f053b0096f75d54ca1072efbc3519fb1fd6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 24 23:15:29 2008 +0000
+
+    fixed crashes with --debug
+
+commit b62f6a36bb78ebcfdc7e3ebb5ed8053e4602ff31
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 24 20:42:39 2008 +0000
+
+    added all possible raw extensions that I could find
+
+commit 667f7560d8b10468f4c7297519555a3c8decbc4c
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 24 14:49:00 2008 +0000
+
+    improved support for older exiv2 versions
+
+commit da4c691f61c0f2ca628b9ad5e97c3214df774d69
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 24 14:03:46 2008 +0000
+
+    exiv2 version checks
+
+commit 84ae856159768b019f9e84bc7755870d81919ff4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 24 12:04:31 2008 +0000
+
+    more renames
+
+commit 70dabcc54b1d89de945f04eda7b3a64c353f9b55
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 24 10:27:22 2008 +0000
+
+    changed logo
+
+commit 81d7720e912922961e82aa9b1a1dc87e7d75a74a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Mar 24 09:55:09 2008 +0000
+
+    more renames
+
+commit 63da021597cd98d86a924b3e233ef17974df5360
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 23 20:38:54 2008 +0000
+
+    rename GQview -> Geeqie over the code
+
+commit a0778c990d5e40044d61b06dc2fbdbb9a7e70b04
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 23 20:18:51 2008 +0000
+
+    renamed to geeqie
+
+commit ea452132ffaeb843e0679ff75cea362888cf1e6d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 22 19:28:45 2008 +0000
+
+    raw related fixes
+
+commit 492c7832025b9958963965fafb009de3d8fde085
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 22 17:32:43 2008 +0000
+
+    overview of supported raw formats
+
+commit 6974277ce5e41e0271523dbbd5ece82abeec678e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 22 17:09:14 2008 +0000
+
+    configure --without-exiv2
+
+commit 2e9a8e8d10e6aefb5965f7b68c7ea0304bc962b2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 22 16:43:59 2008 +0000
+
+    crw preview support with exiv2
+
+commit 7f9de3a441f0cda2f3f6338e605ac623c0939e60
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 16 14:11:22 2008 +0000
+
+    whitelist of files that can have an xmp sidecar, sample external command
+    for creating sidecar
+
+commit a7b47030ebe7432a344a9af140418143a3e60510
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 16 10:52:44 2008 +0000
+
+    fixed reading sidecar extensions from config file
+
+commit 7597fd790455ba66f96c22589c14f77041473c04
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Mar 16 10:32:52 2008 +0000
+
+    write comment and keywords to xmp, sidecars are used if exist
+
+commit c0cdc48934658fca8cd0c98c642f6f79139eb546
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Mar 15 19:53:33 2008 +0000
+
+    write support in Exiv2 wrapper; for now only string values
+
+commit 61e73a06de7a43766561aa634ed092f92074fda8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Feb 24 18:55:19 2008 +0000
+
+    a hack to read raw previews with exiv2 0.16, however it should be fixed
+    in the library
+
+commit 406e5426f94d6f73156a64864486bfc15a57e18e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Feb 15 10:48:09 2008 +0000
+
+    read also iptc and xmp
+
+commit 8c7b5e49053a0f3c00c437d10b0456ccfe08149d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Feb 14 14:04:43 2008 +0000
+
+    more exiv2 fixes
+
+commit 2b56231212f7ea7f07ce26525b1b20d8acfba5e4
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Feb 14 11:03:20 2008 +0000
+
+    more exiv2 fixes
+
+commit 0330894fadd7202f8df008f7c8b68c6806d480ac
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 13 23:02:48 2008 +0000
+
+    more exiv2 fixes
+
+commit 4f5f09180a9a03d951a695611df2426342201596
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 13 19:31:50 2008 +0000
+
+    unified tag names between exiv2 and internal rxif parser
+
+commit bf05ea3fd28410a74676a407f659899e4c912046
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 13 17:47:55 2008 +0000
+
+    more exiv2 fixes
+
+commit 69bc9e2f08edac2dd933f5b7ea25864a30c5d660
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 13 17:08:04 2008 +0000
+
+    and first version that actually shows some exif data (see advanced view)
+
+commit fd37e582550777f9c82609aacb4dd5fc2b4aab86
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 13 16:52:41 2008 +0000
+
+    first exiv2 support that does not crash immediately
+
+commit d5f48145d5d4cc13c73fb372b6d6a618eca3ce75
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 13 14:46:23 2008 +0000
+
+    started exiv2 integration
+
+commit dd9103a22cd380d10bffb153f495109066f8065e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Feb 13 13:57:31 2008 +0000
+
+    simplified exif.h, moved implementation-specific stuff to exif-int.h
+
+commit 431265bcd9755e6074140f587a9512bb50f0549a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Feb 11 15:23:43 2008 +0000
+
+    do not show frame for full-window images
+
+commit b3b7ee17996db74480664bcc1f68e0ef2b15d420
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Feb 11 12:51:28 2008 +0000
+
+    improved drawing of image frames
+
+commit 0628b6e3e6e9712711131850b85d7d471fd22b20
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Jan 26 21:18:23 2008 +0000
+
+    updated TODO list
+
+commit bf5d79e01c27563022cf7bf091b12d62375157d6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Jan 20 19:04:18 2008 +0000
+
+    debug messages cleanup
+
+commit 631cb03570ea6c6ea72b1b16246c954ddb0e10d8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jan 16 19:37:54 2008 +0000
+
+    added file with release notes and TODO
+
+commit 6d82f53ecfeab8d6094f82a95cbdd7746d295fa1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 23 21:24:48 2007 +0000
+
+    basic sidecar files configuration via preferences dialog
+
+commit 45bbe448e671704146e0bc767810ba93df03ce50
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 23 20:28:50 2007 +0000
+
+    fixed loading thumbnails for sidecar files
+
+commit 29b1508bf7b5e237cfeebcb70d1db839105d6e72
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 23 15:49:23 2007 +0000
+
+    fixed vflist_find_row and vflist_sort_set to work correctly with sidecar
+    files
+
+commit c1a3110b9f809032dbc8b8aa87fe5ba30e5fedc6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 22 20:33:09 2007 +0000
+
+    fixed filelist refresh
+
+commit b06e457b334a134777618c729eb99e71bf1725c9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 22 10:10:40 2007 +0000
+
+    preserve marks setting on layout change
+
+commit c753cf51a86606bdcc34cb5bafde19ad9e75bda2
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 22 09:51:12 2007 +0000
+
+    basic support for marks in view_file_icon.c
+
+commit ec7b00c244dd33aa0db84f09db46e5603f9f3dc1
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Dec 20 22:43:52 2007 +0000
+
+    update FileData on file change
+
+commit 9114e31e1e4e433948d6b6380ea955b4909ddff0
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Dec 20 16:18:28 2007 +0000
+
+    <num> toggles mark num
+    <control><num> selects mark num
+
+commit eda3ed612bc1b1f96ef2956db9d1a07e4da1509f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Dec 20 16:06:20 2007 +0000
+
+    created menu "Select" with selection and marks operations
+
+commit 3d075305738ca1931d074e207e546f3a5c3fcd3d
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Dec 19 22:01:46 2007 +0000
+
+    complete set of boolean operation with marks -
+    union, intersection, complement
+
+commit 89bad26edcaf2df8dd67d3b965ffdb89ceb05a6f
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Dec 18 21:15:16 2007 +0000
+
+    use accels also in fullscreen mode
+
+commit a9437da31efbdf69f6d9f7bba573f3925dc6a3aa
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Dec 17 21:42:24 2007 +0000
+
+    moved some actions to menu and accels
+
+commit a38f59e3953d625d8209673f67380f2cd34ef824
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Dec 17 19:34:43 2007 +0000
+
+    removed unused variable
+
+commit 345a2cf80b5165d3eb651ef6ade21323280d6ebe
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 16 22:30:19 2007 +0000
+
+    fixed in-place rename
+
+commit 05cfc9b2aa804a81b39e792cdf5d7fe8119e8df6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Dec 15 17:58:51 2007 +0000
+
+    better integration of split image functions into menu
+
+commit 69f60d962f323105247e0eaae029ab5d4c4d7395
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Dec 14 21:51:46 2007 +0000
+
+    show active marks in image overlay
+
+commit 9ccee7c53567b57b5d54b727ad0d82e453c69d58
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 9 21:20:27 2007 +0000
+
+    fixed image focus
+
+commit b44635e7ed331a57eda5ba5d5b4886ddfaf453dc
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 9 12:33:51 2007 +0000
+
+    fixed copying zoom an scroll values from the original image on splitting
+
+commit ce0883ff7b010d5562f1d7d1213b326503229644
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 9 11:58:39 2007 +0000
+
+    do not hilight selected image in SPLIT_NONE
+
+commit 4c1e2733efabf185cf89ce1c12da428f3402f5e9
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Dec 9 00:11:40 2007 +0000
+
+    improved drawing of frame around selected image
+
+commit 7ea79525bc616c4b570ed79cd5a930d85e34cbb6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Nov 25 10:25:25 2007 +0000
+
+    more operations with file marks
+
+commit a0cf6aaa112b855b737422d74eb8ba048598d223
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sat Nov 24 21:06:30 2007 +0000
+
+    marks: fixes and cleanup
+
+commit 5c3c80672cb96a81b25289f09f82d3f642cf2846
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Nov 22 21:15:35 2007 +0000
+
+    improved directory scanning a bit
+
+commit 106211b13e3e057b69bb7676d70155e64eb093cd
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Nov 21 22:46:50 2007 +0000
+
+    added possibility to specify prefered file type for external commands
+
+commit 439688c617f392e5e63b68bac42663a05be7df61
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Nov 21 21:21:17 2007 +0000
+
+    prevent duplicate sidecar files; code cleanup
+
+commit 07fcc6b5f7298e70aa7fc5530427997eece2bb44
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Nov 20 22:28:40 2007 +0000
+
+    fixed grouping sidecar files and made it configurable via config file
+    (no gui yet)
+
+commit f4cbb100a217060899694be8fbe42a496f00f443
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Oct 22 19:58:47 2007 +0000
+
+    fixed preloading images in file list
+
+commit db51b5674d885e18d75a4c4638ec70a5fbb0ee6a
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Oct 8 19:41:49 2007 +0000
+
+    improved FileDataChangeInfo structure, check for another file operation in progress
+
+commit 0f0a7caad365e1040b989a58a53c5cd22270d631
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Oct 2 21:49:02 2007 +0000
+
+    display sidecar files (jpeg + raw)  using gtk_tree_store
+    This is just a prototype to test the functionality, it needs more work.
+    
+    Please test, omments are welcome :)
+
+commit bd71fb9aabd65b6e530a82bf61b0787d5f9218a6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Oct 1 19:52:10 2007 +0000
+
+    use FileData even for sidecar file list
+
+commit dab00f02153474d52c62447e25e4a89f70ce918b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Sun Sep 30 21:10:54 2007 +0000
+
+    editors.c was almost completely rewritten:
+    - centralized template parsing
+    - better control of executed editors
+    - possibility to get editor exit status via callback
+
+commit 0521644af7926c994e85a57345d7d9e4045dee23
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Sep 12 21:17:31 2007 +0000
+
+    display sidecar extensions in filelist
+    some cleanup of file marks
+
+commit 06959abbda81a200519ad4b57b16995487b8acd8
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Sep 11 20:06:29 2007 +0000
+
+    replaced gchar* path with FileData *fd
+
+commit d9367f6d1ce776d8a9c2cf67fe9f8166e4e41b6b
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Aug 23 20:45:59 2007 +0000
+
+    started support for sidecar files like xmp, raw+jpeg etc.
+
+commit d42c34b8f61d1769f068d253d52043862cc49e56
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Mon Aug 20 20:11:32 2007 +0000
+
+    more external commands
+
+commit a4e65742955bd3ca929032eac09ea49b57a6873e
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Aug 16 20:57:09 2007 +0000
+
+    improved external delete command
+
+commit 19d0a14182426bf5e9a9591c65f44af4c6fc3c06
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Aug 15 21:37:51 2007 +0000
+
+    started implementation of external commands; external Delete should work
+
+commit 57c15b1c97b8d075ebb879fc4af67ba41a5d8471
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Fri Jul 20 07:10:48 2007 +0000
+
+    compilation fix
+
+commit 84f67e529bc28f1888d58736ed92d69b227a72a4
+Author: Petr Ostadal <postadal@suse.cz>
+Date:   Fri Jul 13 14:03:08 2007 +0000
+
+    First implementation of marks for all photos.
+
+commit f231104ffad164bd37990a2b4d8e4ffa392f3949
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Thu Jul 12 20:46:28 2007 +0000
+
+    relative scroll is working; some cleanup
+
+commit 45424fcc2bf63a47442a1669f19c57233ed07386
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 11 21:10:25 2007 +0000
+
+    connected zoom
+
+commit 625f31c5f44e5ad9b1689949b3e0553a1a89a2a6
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Wed Jul 11 20:00:07 2007 +0000
+
+    started relative scroll, keep scroll position
+
+commit 44d8cd9bde65b823801ea1f5eca8137641ce5c18
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Tue Jul 10 21:25:51 2007 +0000
+
+    improved connected scroll and active image switching
+
+commit f2c63eb24b224a0f9023dc2fa27dc1fe64a5c047
+Author: Vladimir Nadvornik <nadvornik@suse.cz>
+Date:   Fri Jun 29 15:16:46 2007 +0000
+
+    implemented split windows
+    TODO: menus and hotkeys, connected zoom, activating on drag
 
 Wed Jan 17 16:50:39 2007  John Ellis  <johne@verizon.net>
 
diff --git a/NEWS b/NEWS
index 1afed18..9556e72 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,17 @@
+Geeqie 1.1
+==========
 
-This is a snapshot of a wiki page, from the time of release. For current version
-of the page look at http://geeqie.wiki.sourceforge.net/new_features
+- support for stereoscopic images
+  - input: side-by-side (JPS) and MPO format
+  - output: single image, anaglyph, SBS, mirror, SBS half size (3DTV)
 
-================================================================================
+- custom tiff loader - better handling of large tiff files
+
+- rewritten file grouping
+
+
+Geeqie 1.0
+==========
 
 Comparing images side-to-side
 
diff --git a/README b/README
index 86bce95..9e12393 100644 (file)
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
 ###################################################################
-##                            Geeqie 1.0                         ##
+##                            Geeqie 1.1                         ##
 ##                                                               ##
-##              Copyright (C) 2008 - 2010 The Geeqie Team        ##
+##              Copyright (C) 2008 - 2012 The Geeqie Team        ##
 ##              Copyright (C) 1999 - 2006 John Ellis.            ##
 ##                                                               ##
 ##                      Use at your own risk!                    ##
@@ -17,8 +17,8 @@ possible to contact gqview author and the only maintainer.
 Geeqie projects goal is to move the development forward and 
 also integrate the existing patches.
 
-Geeqie is currently in beta state. All planed features for 1.0 are implemented,
-but there are bugs. Please report any crash or odd behavior to the bugtracker:
+Geeqie is currently considered stable. 
+Please report any crash or odd behavior to the bugtracker:
 https://sourceforge.net/tracker/?group_id=222125&atid=1054680
 
 For more info see:
@@ -48,10 +48,7 @@ geeqie-devel@lists.sourceforge.net
 ======== Requirements
 
   Required libraries:
-    GTK+ 2.??.x: ftp://ftp.gtk.org/pub/gtk
-FIXME: determine realistic requirements.
-It compiles with GTK 2.10, but some features are disabled and the testing was
-minimal. Please report success or  falilures.
+    GTK+ 2.20: ftp://ftp.gtk.org/pub/gtk
 
   Optional libraries:
     lcms, for color management support: http://www.littlecms.com
@@ -104,6 +101,11 @@ See http://geeqie.wiki.sourceforge.net/new_features
     - Comparison of images to find duplicates by name, size, date,
       dimensions, or image content similarity.
     - EXIF support.
+    
+  Geeqie 1.1:
+    - support for stereoscopic images
+      - input: side-by-side (JPS) and MPO format
+      - output: single image, anaglyph, SBS, mirror, SBS half size (3DTV)
 
 ======== Documentation (brief)                         [section:documentation]
 
@@ -319,7 +321,7 @@ Overlay info format string syntax is: %tag[:max_length][:extra]%
     "1/200 - 80 mm" if there's no ISO information in the Exif data.
 
   If a line is empty, it is removed.
-  This allows to add lines that totally disappear when no data is available.
+  This allows one to add lines that totally disappear when no data is available.
 
   Extra string uses special character '*' to mark the position of the data.
   If no '*' is present, then extra string is just appended to data.
@@ -331,7 +333,7 @@ Overlay info format string syntax is: %tag[:max_length][:extra]%
   "%name:<i>*</i>\n%" -> name is displayed in italics ended with a newline
   "%size:\n%"         -> size is displayed with a newline at end
   "%formatted.ISOSpeedRating:ISO *%"      -> ie. "ISO 100"
-  "Collection <b>*</b>\n" -> display collection name in bold prefixed by
+  "%collection: Collection <b>*</b>\n%" -> display collection name in bold prefixed by
                              "Collection " and a newline is appended
 
 
index 2481deb..c5b726c 100644 (file)
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.  -*- Autoconf
  -*-
 
 dnl This file is a part of Geeqie project (http://geeqie.sourceforge.net/).
-dnl Copyright (C) 2008 - 2010 The Geeqie Team
+dnl Copyright (C) 2008 - 2012 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
@@ -15,7 +15,7 @@ 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, 1.0, geeqie-devel@lists.sourceforge.net)
+AC_INIT(geeqie, 1.1, geeqie-devel@lists.sourceforge.net)
 
 # Check for rightly dirs
 AC_CONFIG_SRCDIR([src/main.c])
@@ -128,6 +128,7 @@ AC_PROG_CC
 AC_PROG_CXX
 AC_STDC_HEADERS
 AC_ARG_PROGRAM
+AC_SYS_LARGEFILE
 IT_PROG_INTLTOOL([0.35.0])
 
 
@@ -188,8 +189,23 @@ else
   prefix=$prefix
 fi
 
-AM_PATH_GLIB_2_0(2.4.0,,AC_MSG_ERROR(GLIB >= 2.4.0 not installed.))
-AM_PATH_GTK_2_0(2.4.0,,AC_MSG_ERROR(GTK+ >= 2.4.0 not installed.))
+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],
@@ -274,14 +290,22 @@ AC_ARG_ENABLE([lcms],
     [liblcms=$enableval], [liblcms=auto])
 
 if test "x${liblcms}" != "xno"; then
-  PKG_CHECK_MODULES(LCMS, [lcms >= 1.14],
+  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])
     ],
     [
-      HAVE_LCMS=no
-      AC_MSG_WARN([$LCMS_PKG_ERRORS])
+    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
@@ -380,15 +404,50 @@ AC_SUBST(CPPFLAGS)
 AC_SUBST(LDFLAGS)
 
 
+#  clutter support - experimental
+# ----------------------------------------------------------------------
+
+AC_ARG_ENABLE([clutter],
+  AC_HELP_STRING([--enable-clutter], [enable clutter support - experimental]),
+    [libclutter=$enableval], [libclutter=auto])
+
+if test "x${libclutter}" = "xyes" -o "x${libgps}" = "xyes"; 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 GPS map facility - experimental
 # ----------------------------------------------------------------------
 
 AC_ARG_ENABLE([gps],
   AC_HELP_STRING([--enable-gps], [enable GPS map support - experimental]),
-    [libgps=$enableval], [libgps=auto])
+    [libgps=$enableval], [libgps=yes])
 
-if test "x${libgps}" = "xyes"; then
-  PKG_CHECK_MODULES(LIBCHAMPLAIN, [champlain-0.4 >= 0.4],
+if test "x${libgps}" = "xyes" -a "x${HAVE_CLUTTER}" = "xyes" ; then
+  PKG_CHECK_MODULES(LIBCHAMPLAIN, [champlain-0.12 >= 0.12],
     [
       HAVE_LIBCHAMPLAIN=yes
       AC_DEFINE(HAVE_LIBCHAMPLAIN, 1, [define to enable use of GPS maps])
@@ -401,8 +460,8 @@ else
   HAVE_LIBCHAMPLAIN=disabled
 fi
 
-if test "x${libgps}" = "xyes"; then
-  PKG_CHECK_MODULES(LIBCHAMPLAIN_GTK, [champlain-gtk-0.4 >= 0.4],
+if test "x${libgps}" = "xyes" -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 GPS maps])
@@ -454,7 +513,7 @@ AH_TOP([
 
 /*
  *  This file is a part of Geeqie project (http://geeqie.sourceforge.net/).
- *  Copyright (C) 2008 - 2010 The Geeqie Team
+ *  Copyright (C) 2008 - 2012 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
@@ -519,7 +578,7 @@ Flags:
   Gtk:           $GTK_CFLAGS
   Glib:          $GLIB_CFLAGS
   Thread:        $GTHREAD_LIBS
-  Others:       $JPEG_LIBS $TIFF_LIBS $LCMS_LIBS $EXIV2_LIBS $LIBCHAMPLAIN_LIBS $LIBCHAMPLAIN_GTK_LIBS $LUA_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
@@ -535,6 +594,7 @@ Support:
   LCMS:          $HAVE_LCMS
   Exiv2:        $HAVE_EXIV2
   Lirc:          $HAVE_LIRC
+  Clutter:       $HAVE_CLUTTER
   Libchamplain:                $HAVE_LIBCHAMPLAIN
   Libchamplain-gtk:    $HAVE_LIBCHAMPLAIN_GTK
   Lua:          $HAVE_LUA
index 75f1c31..ac68a9a 100644 (file)
@@ -10,7 +10,7 @@ Upstream Authors:
 
 Copyright:
 
-    Copyright (C) 2008 - 2010 The Geeqie Team
+    Copyright (C) 2008 - 2012 The Geeqie Team
     Copyright (C) 2006 John Ellis
 
 License:
diff --git a/doc/.cvsignore b/doc/.cvsignore
deleted file mode 100644 (file)
index 3dda729..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
index a6b745f..7055ea1 100644 (file)
@@ -2,9 +2,6 @@
 
 helpdir = @htmldir@
 
-# empty help_DATA just installs the directory
-help_DATA = 
-
 EXTRA_DIST = docbook2html.sh docbook
 
 html/GuideIndex.html: docbook/GuideIndex.xml
@@ -19,6 +16,7 @@ html: html/GuideIndex.html
 
 install-data-hook: html
        if [ -x "$(GNOME_DOC_TOOL)" ]; then \
+               $(MKDIR_P) "$(DESTDIR)$(helpdir)" || exit 1; \
                cd html; for f in * ; do $(INSTALL_DATA) "$$f" "$(DESTDIR)$(helpdir)/$$f" ; done; \
                ln -s GuideIndex.html "$(DESTDIR)$(helpdir)/index.html" ; \
        fi
index 29c717c..6e3a178 100644 (file)
       Displaying images side by side
     </title>
     <para>
-      Using View &gt; Split item from the main menu, image pane can be splitted in up to four panes, this allows to display images side by side. You may use drag'n drop to change images in each pane.
+      Using View &gt; Split item from the main menu, image pane can be splitted in up to four panes, this allows one to display images side by side. You may use drag'n drop to change images in each pane.
     </para>
     <para>
       Connected zoom is possible through the View &gt; Connected zoom menu. Zoom is then applied to all displayed images.
index 3e107ec..8a4940b 100644 (file)
@@ -93,7 +93,7 @@
       Enable this option to show a "Copy path" menu item in applicable menus.
     </para>
     <para>
-      This allows to copy path to files or directories to the clipboard, names are enclosed with double quotes and separated by space.
+      This allows one to copy path to files or directories to the clipboard, names are enclosed with double quotes and separated by space.
     </para>
     <variablelist><varlistentry><term>
         Open recent list maximum size
index 42ee775..a26c206 100644 (file)
@@ -48,7 +48,7 @@
         Limit image size when autofitting
       </term><listitem><para/></listitem></varlistentry></variablelist>
     <para>
-      This percentage will affect the size of the image when Fit image to window is set, instead of using 100% of the window, it will use the specified percentage. It allows to keep a border around the image (values lower than 100%) or to auto zoom the image (values greater than 100%). It affects fullscreen mode too.
+      This percentage will affect the size of the image when Fit image to window is set, instead of using 100% of the window, it will use the specified percentage. It allows one to keep a border around the image (values lower than 100%) or to auto zoom the image (values greater than 100%). It affects fullscreen mode too.
     </para>
     <variablelist><varlistentry><term>
         Zoom increment
index d114eee..7f4b4fe 100644 (file)
       "1/200 - 80 mm" if there's no ISO information in the Exif data.<?db2html element="br"?>
     </para>
     <para>
-      If a line is empty, it is removed. This allows to add lines that totally disappear when no data is available.
+      If a line is empty, it is removed. This allows one to add lines that totally disappear when no data is available.
     </para>
     <para>
       Extra string uses special character '*' to mark the position of the data. If no '*' is present, then extra string is just appended to data. Any "\n" is replaced by a newline on display. Pango mark up is accepted in left and right parts. If data is empty, nothing will be displayed.
index 27c6f5a..bc5772a 100644 (file)
@@ -1,15 +1,9 @@
 # norootforbuild
 
-BuildRequires:  gtk2-devel gcc-c++ intltool
+BuildRequires:  gtk2-devel gcc-c++ intltool gnome-doc-utils libjpeg-devel libtiff-devel
 %if 0%{?suse_version}
 BuildRequires:  liblcms-devel update-desktop-files
 %define docname        %{name}
-%if %suse_version < 1030
-%define _prefix            /opt/gnome
-%define _sysconfdir /etc%{prefix}
-# workaround for gtk2 include conflicts on older SUSE versions:
-%define _includedir %{_usr}
-%endif
 %else
 BuildRequires:  lcms-devel
 %define docname        %{name}-%{version}
@@ -29,7 +23,7 @@ BuildRequires:  libexiv2-devel
 %endif
 
 
-Summary:        Graphics file browser utility.
+Summary:        Graphics file browser utility
 Summary(fr):    Explorateur de fichiers graphiques
 Summary(es):    Navegador de archivos gráficos
 Summary(it):    Visualizzatore di archivi grafici
@@ -40,6 +34,7 @@ License:        GNU General Public License version 2 or later (GPL v2 or later)
 Group:          Productivity/Graphics/Viewers
 Source:         geeqie-%{version}.tar.gz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
+URL:            http://geeqie.sourceforge.net/
 #
 # these are requirements of the plugins
 Requires: exiv2 exiftran ImageMagick ufraw
index 5c4cdb3..59ffb85 100755 (executable)
@@ -9,7 +9,7 @@
 [ ! -e "ChangeLog" ] && exit 1
 
 tail -6614 ChangeLog > ChangeLog.$$.old && \
-LC_ALL=C svn log -rHEAD:220 > ChangeLog.$$.new && \
+LC_ALL=C git log 1b58572cf58e9d2d4a0305108395dab5c66d3a09..HEAD > ChangeLog.$$.new && \
 cat ChangeLog.$$.old >> ChangeLog.$$.new && \
 mv -f ChangeLog ChangeLog.bak && \
 mv -f ChangeLog.$$.new ChangeLog
index 939c272..1c1184e 100755 (executable)
@@ -8,7 +8,7 @@ GQ_METADATA_DIR="$HOME/.local/share/geeqie/metadata"
 rotate()
 {
     ext=`echo "${1##*.}" |tr "[:upper:]" "[:lower:]"`
-    [ "x$ext" == "x" ] && return 1 #no extension
+    [ "x$ext" = "x" ] && return 1 #no extension
 
     gq_metadata="$GQ_METADATA_DIR/$1.gq.xmp"
     if [ -f "$gq_metadata" ]; then
@@ -48,7 +48,7 @@ rotate()
 }
 
 get_sidecars=
-if [ "x$1" == "x-g" ] ; then
+if [ "x$1" = "x-g" ] ; then
     get_sidecars=yes
     shift
 fi
diff --git a/po/.cvsignore b/po/.cvsignore
deleted file mode 100644 (file)
index 2229300..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Makefile
-Makefile.in
-Makefile.in.in
-POTFILES
-cat-id-tbl.c
-gqview.pot
-stamp-cat-id
-*.gmo
-gqview.pot
index b14ed59..e9e60e9 100644 (file)
@@ -31,5 +31,5 @@ th
 tr
 uk
 vi
-zh_CN.GB2312
+zh_CN
 zh_TW
index 3a835bc..2f65839 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -2,17 +2,21 @@
 # Copyright (C) 2003 Free Software Foundation, Inc.
 # www.kyfieithu.co.uk, www.gyfieithu.co.uk, 2003.
 # angel mompo <mecatxis@ya.com>, 2010.
+# Àngel Mompó <mecatxis@gmail.com>, 2012.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: Geeqie 1.5.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-27 20:56+0100\n"
-"PO-Revision-Date: 2010-01-10 18:36+0100\n"
-"Last-Translator: angel mompo <mecatxis@ya.com>\n"
-"Language-Team: catalan <traducció@catux.com>\n"
+"POT-Creation-Date: 2012-08-13 12:19+0200\n"
+"PO-Revision-Date: 2012-07-07 12:32+0200\n"
+"Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
+"Language-Team: Catalan <ca@dodds.net> <>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
 
 #: ../geeqie.desktop.in.h:1
 msgid "Geeqie"
@@ -54,12 +58,12 @@ msgstr "Edita la ID del fitxer UFRAW"
 msgid "UFRaw Batch recursive"
 msgstr "Lot recursiu UFRaw"
 
-#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1284
-#: ../src/preferences.c:93 ../src/preferences.c:1595
+#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1304
+#: ../src/preferences.c:93 ../src/preferences.c:1789
 msgid "Metadata"
 msgstr "Metadades"
 
-#: ../src/advanced_exif.c:376 ../src/preferences.c:1512
+#: ../src/advanced_exif.c:376 ../src/preferences.c:1703
 msgid "Description"
 msgstr "Descripció"
 
@@ -67,8 +71,8 @@ msgstr "Descripció"
 msgid "Value"
 msgstr "Valor"
 
-#: ../src/advanced_exif.c:378 ../src/desktop_file.c:515 ../src/dupe.c:2647
-#: ../src/dupe.c:3165 ../src/print.c:3201 ../src/search.c:2844
+#: ../src/advanced_exif.c:378 ../src/desktop_file.c:515 ../src/dupe.c:2651
+#: ../src/dupe.c:3173 ../src/print.c:3213 ../src/search.c:2852
 #: ../src/utilops.c:462 ../src/view_file_list.c:2046
 msgid "Name"
 msgstr "Nom"
@@ -94,11 +98,11 @@ msgstr "Histograma"
 msgid "Title"
 msgstr "Títol"
 
-#: ../src/bar.c:169 ../src/search.c:2767
+#: ../src/bar.c:169 ../src/search.c:2775
 msgid "Keywords"
 msgstr "Paraules clau"
 
-#: ../src/bar.c:170 ../src/search.c:2779
+#: ../src/bar.c:170 ../src/search.c:2787
 msgid "Comment"
 msgstr "Comentari"
 
@@ -115,7 +119,7 @@ msgstr "Informació del fitxer"
 msgid "Location and GPS"
 msgstr "Localització i GPS"
 
-#: ../src/bar.c:175 ../src/exif.c:347
+#: ../src/bar.c:175 ../src/exif.c:348
 msgid "Copyright"
 msgstr "Copyright"
 
@@ -127,11 +131,11 @@ msgstr "Mapa GPS"
 msgid "Move to _top"
 msgstr "Mou a _dalt de tot"
 
-#: ../src/bar.c:298 ../src/ui_bookmark.c:405
+#: ../src/bar.c:298 ../src/ui_bookmark.c:410
 msgid "Move _up"
 msgstr "Mou _amunt"
 
-#: ../src/bar.c:299 ../src/ui_bookmark.c:407
+#: ../src/bar.c:299 ../src/ui_bookmark.c:412
 msgid "Move _down"
 msgstr "Mou a_vall"
 
@@ -143,11 +147,11 @@ msgstr "Mou a _baix de tot"
 msgid "Remove"
 msgstr "Suprimeix"
 
-#: ../src/bar_comment.c:191
+#: ../src/bar_comment.c:195
 msgid "Add text to selected files"
 msgstr "Afegeix un text als fitxers seleccionats"
 
-#: ../src/bar_comment.c:192
+#: ../src/bar_comment.c:196
 msgid "Replace existing text in selected files"
 msgstr "Reemplaça el text existent als fitxers seleccionats"
 
@@ -155,43 +159,43 @@ msgstr "Reemplaça el text existent als fitxers seleccionats"
 msgid "<empty label, fixme>"
 msgstr "<etiqueta buida, cal arreglar-la>"
 
-#: ../src/bar_exif.c:538 ../src/bar_exif.c:548
+#: ../src/bar_exif.c:546 ../src/bar_exif.c:556
 msgid "Configure entry"
 msgstr "Configura el registre"
 
 #. for the pane
-#: ../src/bar_exif.c:538 ../src/bar_exif.c:548 ../src/bar_exif.c:621
+#: ../src/bar_exif.c:546 ../src/bar_exif.c:556 ../src/bar_exif.c:629
 msgid "Add entry"
 msgstr "Afegeix un registre"
 
-#: ../src/bar_exif.c:554
+#: ../src/bar_exif.c:562
 msgid "Key:"
 msgstr "Clau:"
 
-#: ../src/bar_exif.c:563
+#: ../src/bar_exif.c:571
 msgid "Title:"
 msgstr "Títol:"
 
-#: ../src/bar_exif.c:572
+#: ../src/bar_exif.c:580
 msgid "Show only if set"
 msgstr "Mostra'l només si no és buit"
 
-#: ../src/bar_exif.c:573
+#: ../src/bar_exif.c:581
 msgid "Editable (supported only for XMP)"
 msgstr "Editable (només suportat per XMP)"
 
 #. for the entry
-#: ../src/bar_exif.c:609
+#: ../src/bar_exif.c:617
 #, c-format
 msgid "Configure \"%s\""
 msgstr "Configura «%s»"
 
-#: ../src/bar_exif.c:610 ../src/bar_keywords.c:1143
+#: ../src/bar_exif.c:618 ../src/bar_keywords.c:1207
 #, c-format
 msgid "Remove \"%s\""
 msgstr "Suprimeix «%s»"
 
-#: ../src/bar_exif.c:622
+#: ../src/bar_exif.c:630
 msgid "Show hidden entries"
 msgstr "Mostra els registres ocults"
 
@@ -238,117 +242,121 @@ msgid "Map Centreing"
 msgstr "Centrat del mapa"
 
 #. use the same strings as in layout_util.c
-#: ../src/bar_histogram.c:242 ../src/layout_util.c:1392
+#: ../src/bar_histogram.c:265 ../src/layout_util.c:1432
 msgid "Histogram on _Red"
 msgstr "Histograma del ve_rmell"
 
-#: ../src/bar_histogram.c:243 ../src/layout_util.c:1393
+#: ../src/bar_histogram.c:266 ../src/layout_util.c:1433
 msgid "Histogram on _Green"
 msgstr "Histograma del _verd"
 
-#: ../src/bar_histogram.c:244 ../src/layout_util.c:1394
+#: ../src/bar_histogram.c:267 ../src/layout_util.c:1434
 msgid "Histogram on _Blue"
 msgstr "Histograma del _blau"
 
-#: ../src/bar_histogram.c:245 ../src/layout_util.c:1395
+#: ../src/bar_histogram.c:268 ../src/layout_util.c:1435
 msgid "_Histogram on RGB"
 msgstr "_Histograma del RGB"
 
-#: ../src/bar_histogram.c:246 ../src/layout_util.c:1396
+#: ../src/bar_histogram.c:269 ../src/layout_util.c:1436
 msgid "Histogram on _Value"
 msgstr "Histograma _segons el valor"
 
-#: ../src/bar_histogram.c:250 ../src/layout_util.c:1400
+#: ../src/bar_histogram.c:273 ../src/layout_util.c:1440
 msgid "Li_near Histogram"
 msgstr "Histograma li_neal"
 
-#: ../src/bar_histogram.c:251
+#: ../src/bar_histogram.c:274
 msgid "L_og Histogram"
 msgstr "Histograma l_ogarítmic"
 
-#: ../src/bar_keywords.c:410
+#: ../src/bar_keywords.c:414
 msgid "Add keywords to selected files"
 msgstr "Afegeix paraules clau als fitxers seleccionats"
 
-#: ../src/bar_keywords.c:411
+#: ../src/bar_keywords.c:415
 msgid "Replace existing keywords in selected files"
 msgstr "Reemplaça les paraules clau dels fitxers seleccionats"
 
-#: ../src/bar_keywords.c:884
+#: ../src/bar_keywords.c:888
 msgid "Edit keyword"
 msgstr "Edita la paraula clau"
 
-#: ../src/bar_keywords.c:884
+#: ../src/bar_keywords.c:888
 msgid "Add keywords"
 msgstr "Afegeix paraules clau"
 
-#: ../src/bar_keywords.c:891
+#: ../src/bar_keywords.c:895
 msgid "Configure keyword"
 msgstr "Configura la paraula clau"
 
-#: ../src/bar_keywords.c:891 ../src/bar_keywords.c:1101
+#: ../src/bar_keywords.c:895 ../src/bar_keywords.c:1161
 msgid "Add keyword"
 msgstr "Afegeix una paraula clau"
 
-#: ../src/bar_keywords.c:897
+#: ../src/bar_keywords.c:901
 msgid "Keyword:"
 msgstr "Paraula clau:"
 
-#: ../src/bar_keywords.c:906
+#: ../src/bar_keywords.c:910
 msgid "Keyword type:"
 msgstr "Tipus de paraula clau:"
 
-#: ../src/bar_keywords.c:908
+#: ../src/bar_keywords.c:912
 msgid "Active keyword"
 msgstr "Paraula clau activa"
 
-#: ../src/bar_keywords.c:911
+#: ../src/bar_keywords.c:915
 msgid "Helper"
 msgstr "Ajuda"
 
-#: ../src/bar_keywords.c:1121
+#: ../src/bar_keywords.c:1165
+msgid "Add keyword to all selected images"
+msgstr "Afegeix paraules clau a les imatges seleccionades"
+
+#: ../src/bar_keywords.c:1185
 #, c-format
 msgid "Hide \"%s\""
 msgstr "Oculta «%s»"
 
-#: ../src/bar_keywords.c:1128
+#: ../src/bar_keywords.c:1192
 #, c-format
 msgid "Mark %d"
 msgstr "Marca _%d"
 
-#: ../src/bar_keywords.c:1133
+#: ../src/bar_keywords.c:1197
 #, c-format
 msgid "Connect \"%s\" to mark"
 msgstr "Connecta «%s» a la marca"
 
-#: ../src/bar_keywords.c:1140
+#: ../src/bar_keywords.c:1204
 #, c-format
 msgid "Edit \"%s\""
 msgstr "Edita «%s»"
 
-#: ../src/bar_keywords.c:1150
+#: ../src/bar_keywords.c:1214
 #, c-format
 msgid "Disconnect \"%s\" from mark %s"
 msgstr "Desconnecta «%s» de la marca %s"
 
 #. for the pane
-#: ../src/bar_keywords.c:1162 ../src/bar_keywords.c:1171
+#: ../src/bar_keywords.c:1226 ../src/bar_keywords.c:1235
 msgid "Expand checked"
 msgstr "Amplia els seleccionats"
 
-#: ../src/bar_keywords.c:1163 ../src/bar_keywords.c:1172
+#: ../src/bar_keywords.c:1227 ../src/bar_keywords.c:1236
 msgid "Collapse unchecked"
 msgstr "Redueix els seleccionats"
 
-#: ../src/bar_keywords.c:1164 ../src/bar_keywords.c:1173
+#: ../src/bar_keywords.c:1228 ../src/bar_keywords.c:1237
 msgid "Hide unchecked"
 msgstr "Oculta els seleccionats"
 
-#: ../src/bar_keywords.c:1165
+#: ../src/bar_keywords.c:1229
 msgid "Show all"
 msgstr "Mostra'ls tots"
 
-#: ../src/bar_keywords.c:1168
+#: ../src/bar_keywords.c:1232
 msgid "On any change"
 msgstr "Si hi ha algun canvi"
 
@@ -396,11 +404,11 @@ msgstr "Nom:"
 msgid "Sort Manager"
 msgstr "Gestor d'ordenació"
 
-#: ../src/bar_sort.c:606 ../src/pan-view.c:2395 ../src/ui_pathsel.c:1099
+#: ../src/bar_sort.c:606 ../src/pan-view.c:2417 ../src/ui_pathsel.c:1106
 msgid "Folders"
 msgstr "Carpetes"
 
-#: ../src/bar_sort.c:607 ../src/options.c:140
+#: ../src/bar_sort.c:607 ../src/options.c:148
 msgid "Collections"
 msgstr "Col·leccions"
 
@@ -433,77 +441,77 @@ msgstr ""
 "s'ha produït un error en desar les dades de la memòria cau del sim: %s\n"
 "error: %s\n"
 
-#: ../src/cache_maint.c:129 ../src/cache_maint.c:722 ../src/cache_maint.c:938
-#: ../src/editors.c:1176
+#: ../src/cache_maint.c:129 ../src/cache_maint.c:730 ../src/cache_maint.c:954
+#: ../src/editors.c:1177
 msgid "done"
 msgstr "fet"
 
-#: ../src/cache_maint.c:307
+#: ../src/cache_maint.c:311
 msgid "Removing old metadata..."
 msgstr "S'estan esborrant les metadades antigues..."
 
-#: ../src/cache_maint.c:311
+#: ../src/cache_maint.c:315
 msgid "Clearing cached thumbnails..."
 msgstr "Netejant les miniatures de la memòria cau..."
 
-#: ../src/cache_maint.c:315 ../src/cache_maint.c:1096
+#: ../src/cache_maint.c:319 ../src/cache_maint.c:1116
 msgid "Removing old thumbnails..."
 msgstr "S'estan esborrant les miniatures antigues..."
 
-#: ../src/cache_maint.c:318 ../src/cache_maint.c:1099
+#: ../src/cache_maint.c:322 ../src/cache_maint.c:1119
 msgid "Maintenance"
 msgstr "Manteniment"
 
-#: ../src/cache_maint.c:833
+#: ../src/cache_maint.c:845
 msgid "Invalid folder"
 msgstr "Carpeta no vàlida"
 
-#: ../src/cache_maint.c:834
+#: ../src/cache_maint.c:846
 msgid "The specified folder can not be found."
 msgstr "No s'ha pogut trobar la carpeta especificada."
 
-#: ../src/cache_maint.c:865 ../src/cache_maint.c:879 ../src/cache_maint.c:1275
+#: ../src/cache_maint.c:877 ../src/cache_maint.c:891 ../src/cache_maint.c:1295
 msgid "Create thumbnails"
 msgstr "Crea miniatures"
 
-#: ../src/cache_maint.c:873 ../src/cache_maint.c:1106
+#: ../src/cache_maint.c:885 ../src/cache_maint.c:1126
 msgid "S_tart"
 msgstr "I_nici"
 
-#: ../src/cache_maint.c:886 ../src/preferences.c:1782
+#: ../src/cache_maint.c:898 ../src/preferences.c:1977
 msgid "Folder:"
 msgstr "Carpeta:"
 
-#: ../src/cache_maint.c:889
+#: ../src/cache_maint.c:901
 msgid "Select folder"
 msgstr "Seleccioneu una carpeta"
 
-#: ../src/cache_maint.c:893
+#: ../src/cache_maint.c:905
 msgid "Include subfolders"
 msgstr "Inclou les subcarpetes"
 
-#: ../src/cache_maint.c:894
+#: ../src/cache_maint.c:906
 msgid "Store thumbnails local to source images"
 msgstr "Desa les miniatures al mateix lloc que les imatges originals"
 
-#: ../src/cache_maint.c:903 ../src/cache_maint.c:1115
+#: ../src/cache_maint.c:915 ../src/cache_maint.c:1135
 msgid "click start to begin"
 msgstr "feu clic a inici per començar"
 
-#: ../src/cache_maint.c:1042 ../src/editors.c:1102
+#: ../src/cache_maint.c:1062 ../src/editors.c:1103
 msgid "running..."
 msgstr "executant..."
 
-#: ../src/cache_maint.c:1091
+#: ../src/cache_maint.c:1111
 msgid "Clearing thumbnails..."
 msgstr "Esborrant miniatures..."
 
-#: ../src/cache_maint.c:1157 ../src/cache_maint.c:1160
-#: ../src/cache_maint.c:1253 ../src/cache_maint.c:1270
+#: ../src/cache_maint.c:1177 ../src/cache_maint.c:1180
+#: ../src/cache_maint.c:1273 ../src/cache_maint.c:1290
 msgid "Clear cache"
 msgstr "Buida la memòria cau"
 
-#: ../src/cache_maint.c:1161
+#: ../src/cache_maint.c:1181
 msgid ""
 "This will remove all thumbnails that have\n"
 "been saved to disk, continue?"
@@ -511,49 +519,49 @@ msgstr ""
 "Aquesta acció esborrarà totes les miniatures que\n"
 "s'han desat al disc, voleu continuar?"
 
-#: ../src/cache_maint.c:1203
+#: ../src/cache_maint.c:1223
 #, c-format
 msgid "Location: %s"
 msgstr "Ubicació: %s"
 
-#: ../src/cache_maint.c:1228
+#: ../src/cache_maint.c:1248
 msgid "Cache Maintenance"
 msgstr "Manteniment de la memòria cau"
 
-#: ../src/cache_maint.c:1238
+#: ../src/cache_maint.c:1258
 msgid "Cache and Data Maintenance"
 msgstr "Manteniment de Memòria cau i Dades"
 
-#: ../src/cache_maint.c:1242
+#: ../src/cache_maint.c:1262
 msgid "Thumbnail cache"
 msgstr "Memòria cau de miniatures"
 
-#: ../src/cache_maint.c:1248 ../src/cache_maint.c:1265
-#: ../src/cache_maint.c:1290
+#: ../src/cache_maint.c:1268 ../src/cache_maint.c:1285
+#: ../src/cache_maint.c:1310
 msgid "Clean up"
 msgstr "Neteja"
 
-#: ../src/cache_maint.c:1251 ../src/cache_maint.c:1268
+#: ../src/cache_maint.c:1271 ../src/cache_maint.c:1288
 msgid "Remove orphaned or outdated thumbnails."
 msgstr "Suprimeix les miniatures orfes o desactualitzades."
 
-#: ../src/cache_maint.c:1256 ../src/cache_maint.c:1273
+#: ../src/cache_maint.c:1276 ../src/cache_maint.c:1293
 msgid "Delete all cached thumbnails."
 msgstr "Suprimeix totes les miniatures de la memòria cau."
 
-#: ../src/cache_maint.c:1259
+#: ../src/cache_maint.c:1279
 msgid "Shared thumbnail cache"
 msgstr "Miniatures de la memòria cau compartides"
 
-#: ../src/cache_maint.c:1279
+#: ../src/cache_maint.c:1299
 msgid "Render"
 msgstr "Representa"
 
-#: ../src/cache_maint.c:1282
+#: ../src/cache_maint.c:1302
 msgid "Render thumbnails for a specific folder."
 msgstr "Genera les miniatures per a una carpeta específica."
 
-#: ../src/cache_maint.c:1293
+#: ../src/cache_maint.c:1313
 msgid "Remove orphaned keywords and comments."
 msgstr "Suprimeix les paraules clau i els comentaris orfes."
 
@@ -687,140 +695,140 @@ msgstr "%s, %d imatges (%s, %d)"
 msgid "%s, %d images"
 msgstr "%s, %d imatges"
 
-#: ../src/collect-table.c:223 ../src/layout_util.c:1194
-#: ../src/layout_util.c:2231
+#: ../src/collect-table.c:223 ../src/layout_util.c:1232
+#: ../src/layout_util.c:2289
 msgid "Empty"
 msgstr "Buida"
 
 #: ../src/collect-table.c:237 ../src/dupe.c:1319 ../src/search.c:320
-#: ../src/view_file.c:835 ../src/view_file.c:938
+#: ../src/view_file.c:835 ../src/view_file.c:942
 msgid "Loading thumbs..."
 msgstr "S'estan carregant les miniatures..."
 
-#: ../src/collect-table.c:866 ../src/dupe.c:2242 ../src/dupe.c:2555
-#: ../src/layout_util.c:1241 ../src/search.c:1000
+#: ../src/collect-table.c:870 ../src/dupe.c:2246 ../src/dupe.c:2559
+#: ../src/layout_util.c:1279 ../src/search.c:1000
 msgid "_View"
 msgstr "_Visualitza"
 
-#: ../src/collect-table.c:868 ../src/dupe.c:2244 ../src/dupe.c:2557
-#: ../src/img-view.c:1281 ../src/layout_image.c:505 ../src/pan-view.c:2823
+#: ../src/collect-table.c:872 ../src/dupe.c:2248 ../src/dupe.c:2561
+#: ../src/img-view.c:1289 ../src/layout_image.c:505 ../src/pan-view.c:2845
 #: ../src/search.c:1002 ../src/view_file.c:588
 msgid "View in _new window"
-msgstr "Visualitzar en una finestra _nova"
+msgstr "Visualitza en una finestra _nova"
 
-#: ../src/collect-table.c:871 ../src/dupe.c:2278 ../src/dupe.c:2565
+#: ../src/collect-table.c:875 ../src/dupe.c:2282 ../src/dupe.c:2569
 #: ../src/search.c:1032
 msgid "Rem_ove"
 msgstr "Sup_rimeix"
 
-#: ../src/collect-table.c:874
+#: ../src/collect-table.c:878
 msgid "Append from file list"
 msgstr "Afegeix des de la llista de fitxers"
 
-#: ../src/collect-table.c:876
+#: ../src/collect-table.c:880
 msgid "Append from collection..."
 msgstr "Afegeix des de col·lecció..."
 
-#: ../src/collect-table.c:880
+#: ../src/collect-table.c:884
 msgid "_Selection"
 msgstr "_Selecciona"
 
-#: ../src/collect-table.c:882 ../src/dupe.c:2247 ../src/dupe.c:2560
-#: ../src/layout_util.c:1287 ../src/search.c:1005
+#: ../src/collect-table.c:886 ../src/dupe.c:2251 ../src/dupe.c:2564
+#: ../src/layout_util.c:1326 ../src/search.c:1005
 msgid "Select all"
 msgstr "Selecciona-ho tot"
 
-#: ../src/collect-table.c:884 ../src/dupe.c:2249 ../src/dupe.c:2562
-#: ../src/layout_util.c:1288 ../src/search.c:1007
+#: ../src/collect-table.c:888 ../src/dupe.c:2253 ../src/dupe.c:2566
+#: ../src/layout_util.c:1327 ../src/search.c:1007
 msgid "Select none"
 msgstr "Desfés la selecció"
 
-#: ../src/collect-table.c:886
+#: ../src/collect-table.c:890
 msgid "Invert selection"
 msgstr "Inverteix la selecció"
 
-#: ../src/collect-table.c:898 ../src/dupe.c:2267 ../src/img-view.c:1285
-#: ../src/layout_image.c:513 ../src/layout_util.c:1270 ../src/pan-view.c:2827
+#: ../src/collect-table.c:902 ../src/dupe.c:2271 ../src/img-view.c:1293
+#: ../src/layout_image.c:513 ../src/layout_util.c:1309 ../src/pan-view.c:2849
 #: ../src/search.c:1021 ../src/view_file.c:592
 msgid "_Copy..."
 msgstr "_Copia..."
 
-#: ../src/collect-table.c:900 ../src/dupe.c:2269 ../src/img-view.c:1286
-#: ../src/layout_image.c:515 ../src/layout_util.c:1271 ../src/pan-view.c:2829
+#: ../src/collect-table.c:904 ../src/dupe.c:2273 ../src/img-view.c:1294
+#: ../src/layout_image.c:515 ../src/layout_util.c:1310 ../src/pan-view.c:2851
 #: ../src/search.c:1023 ../src/view_file.c:594
 msgid "_Move..."
 msgstr "_Mou..."
 
-#: ../src/collect-table.c:902 ../src/dupe.c:2271 ../src/img-view.c:1287
-#: ../src/layout_image.c:517 ../src/layout_util.c:1272 ../src/pan-view.c:2831
+#: ../src/collect-table.c:906 ../src/dupe.c:2275 ../src/img-view.c:1295
+#: ../src/layout_image.c:517 ../src/layout_util.c:1311 ../src/pan-view.c:2853
 #: ../src/search.c:1025 ../src/view_dir.c:666 ../src/view_file.c:596
 msgid "_Rename..."
 msgstr "Can_via el nom..."
 
-#: ../src/collect-table.c:904 ../src/dupe.c:2273 ../src/img-view.c:1288
-#: ../src/layout_image.c:519 ../src/layout_util.c:1273
-#: ../src/layout_util.c:1274 ../src/layout_util.c:1275 ../src/pan-view.c:2833
+#: ../src/collect-table.c:908 ../src/dupe.c:2277 ../src/img-view.c:1296
+#: ../src/layout_image.c:519 ../src/layout_util.c:1312
+#: ../src/layout_util.c:1313 ../src/layout_util.c:1314 ../src/pan-view.c:2855
 #: ../src/search.c:1027 ../src/view_dir.c:668 ../src/view_file.c:598
 msgid "_Delete..."
 msgstr "_Suprimeix..."
 
-#: ../src/collect-table.c:906 ../src/dupe.c:2275 ../src/img-view.c:1289
-#: ../src/layout_image.c:522 ../src/pan-view.c:2835 ../src/search.c:1029
+#: ../src/collect-table.c:910 ../src/dupe.c:2279 ../src/img-view.c:1297
+#: ../src/layout_image.c:522 ../src/pan-view.c:2857 ../src/search.c:1029
 #: ../src/view_dir.c:671 ../src/view_file.c:600
 msgid "_Copy path"
 msgstr "_Copia el camí"
 
-#: ../src/collect-table.c:912
+#: ../src/collect-table.c:916
 msgid "Randomize"
 msgstr "Barreja-les"
 
-#: ../src/collect-table.c:914 ../src/view_file.c:616
+#: ../src/collect-table.c:918 ../src/view_file.c:616
 msgid "_Sort"
 msgstr "_Ordena"
 
-#: ../src/collect-table.c:917 ../src/view_file.c:632
+#: ../src/collect-table.c:921 ../src/view_file.c:632
 msgid "Show filename _text"
 msgstr "Mostra el _nom del fitxer"
 
-#: ../src/collect-table.c:920
+#: ../src/collect-table.c:924
 msgid "_Save collection"
 msgstr "_Desa la col·lecció"
 
-#: ../src/collect-table.c:922
+#: ../src/collect-table.c:926
 msgid "Save collection _as..."
 msgstr "_Anomena i desa la col·lecció..."
 
-#: ../src/collect-table.c:925 ../src/layout_util.c:1266
+#: ../src/collect-table.c:929 ../src/layout_util.c:1305
 msgid "_Find duplicates..."
 msgstr "_Cerca imatges duplicades"
 
-#: ../src/collect-table.c:927 ../src/dupe.c:2264 ../src/layout_util.c:1268
+#: ../src/collect-table.c:931 ../src/dupe.c:2268 ../src/layout_util.c:1307
 #: ../src/search.c:1018
 msgid "Print..."
 msgstr "Imprimeix..."
 
-#: ../src/collect-table.c:2085 ../src/dupe.c:3355 ../src/img-view.c:1443
+#: ../src/collect-table.c:2097 ../src/dupe.c:3363 ../src/img-view.c:1451
 msgid "Dropped list includes folders."
 msgstr "La llista deixada inclou carpetes."
 
-#: ../src/collect-table.c:2087 ../src/dupe.c:3357 ../src/img-view.c:1445
+#: ../src/collect-table.c:2099 ../src/dupe.c:3365 ../src/img-view.c:1453
 msgid "_Add contents"
 msgstr "_Afegeix continguts"
 
-#: ../src/collect-table.c:2089 ../src/dupe.c:3358 ../src/img-view.c:1446
+#: ../src/collect-table.c:2101 ../src/dupe.c:3366 ../src/img-view.c:1454
 msgid "Add contents _recursive"
 msgstr "Afegeix continguts _recursivament"
 
-#: ../src/collect-table.c:2091 ../src/dupe.c:3359 ../src/img-view.c:1447
+#: ../src/collect-table.c:2103 ../src/dupe.c:3367 ../src/img-view.c:1455
 msgid "_Skip folders"
 msgstr "_Salta carpetes"
 
-#: ../src/collect-table.c:2094 ../src/dupe.c:3361 ../src/img-view.c:1449
+#: ../src/collect-table.c:2106 ../src/dupe.c:3369 ../src/img-view.c:1457
 #: ../src/view_dir.c:417
 msgid "Cancel"
 msgstr "Cancel·la"
 
-#: ../src/color-man.c:420 ../src/exif.c:232 ../src/exif-common.c:403
+#: ../src/color-man.c:420 ../src/exif.c:233 ../src/exif-common.c:433
 msgid "sRGB"
 msgstr "sRGB"
 
@@ -888,8 +896,8 @@ msgstr "Editors"
 msgid "Hidden"
 msgstr "Ocult"
 
-#: ../src/desktop_file.c:543 ../src/dupe.c:2653 ../src/dupe.c:3169
-#: ../src/print.c:3203 ../src/search.c:2848 ../src/ui_pathsel.c:1111
+#: ../src/desktop_file.c:543 ../src/dupe.c:2657 ../src/dupe.c:3177
+#: ../src/print.c:3215 ../src/search.c:2856 ../src/ui_pathsel.c:1118
 #: ../src/utilops.c:458
 msgid "Path"
 msgstr "Camí"
@@ -932,120 +940,120 @@ msgstr "S'està comparant..."
 msgid "Sorting..."
 msgstr "S'està ordenant..."
 
-#: ../src/dupe.c:2251
+#: ../src/dupe.c:2255
 msgid "Select group _1 duplicates"
 msgstr "Seleccioneu duplicats del grup _1"
 
-#: ../src/dupe.c:2253
+#: ../src/dupe.c:2257
 msgid "Select group _2 duplicates"
 msgstr "Seleccioneu duplicats del grup_ 2 duplicats"
 
-#: ../src/dupe.c:2262 ../src/search.c:1016
+#: ../src/dupe.c:2266 ../src/search.c:1016
 msgid "Add to new collection"
 msgstr "Afegeix a una nova col·lecció"
 
-#: ../src/dupe.c:2280 ../src/dupe.c:2567 ../src/search.c:1034
+#: ../src/dupe.c:2284 ../src/dupe.c:2571 ../src/search.c:1034
 msgid "C_lear"
 msgstr "Nete_ja"
 
-#: ../src/dupe.c:2283 ../src/dupe.c:2570
+#: ../src/dupe.c:2287 ../src/dupe.c:2574
 msgid "Close _window"
 msgstr "Tanca la _finestra"
 
-#: ../src/dupe.c:2443
+#: ../src/dupe.c:2447
 #, c-format
 msgid "%d files (set 2)"
 msgstr "%d fitxers (definiu-ne 2)"
 
-#: ../src/dupe.c:2648
+#: ../src/dupe.c:2652
 msgid "Name case-insensitive"
 msgstr "El nom no distingeix entre majúscules i minúscules"
 
-#: ../src/dupe.c:2649 ../src/dupe.c:3166 ../src/preferences.c:1336
-#: ../src/print.c:3207 ../src/search.c:2845 ../src/view_file_list.c:2050
+#: ../src/dupe.c:2653 ../src/dupe.c:3174 ../src/preferences.c:1527
+#: ../src/print.c:3219 ../src/search.c:2853 ../src/view_file_list.c:2050
 msgid "Size"
 msgstr "Mida"
 
-#: ../src/dupe.c:2650 ../src/dupe.c:3167 ../src/exif.c:341
-#: ../src/exif-common.c:514 ../src/print.c:3205 ../src/search.c:2846
+#: ../src/dupe.c:2654 ../src/dupe.c:3175 ../src/exif.c:342
+#: ../src/exif-common.c:544 ../src/print.c:3217 ../src/search.c:2854
 #: ../src/view_file_list.c:2054
 msgid "Date"
 msgstr "Data"
 
-#: ../src/dupe.c:2651 ../src/dupe.c:3168 ../src/print.c:3209
-#: ../src/search.c:2847
+#: ../src/dupe.c:2655 ../src/dupe.c:3176 ../src/print.c:3221
+#: ../src/search.c:2855
 msgid "Dimensions"
 msgstr "Dimensions"
 
-#: ../src/dupe.c:2652
+#: ../src/dupe.c:2656
 msgid "Checksum"
 msgstr "Suma de verificació"
 
-#: ../src/dupe.c:2654
+#: ../src/dupe.c:2658
 msgid "Similarity (high)"
 msgstr "Semblança (alta)"
 
-#: ../src/dupe.c:2655
+#: ../src/dupe.c:2659
 msgid "Similarity"
 msgstr "Semblança"
 
-#: ../src/dupe.c:2656
+#: ../src/dupe.c:2660
 msgid "Similarity (low)"
 msgstr "Semblança (baixa)"
 
-#: ../src/dupe.c:2657
+#: ../src/dupe.c:2661
 msgid "Similarity (custom)"
 msgstr "Semblança (personalitzada)"
 
-#: ../src/dupe.c:3119
+#: ../src/dupe.c:3127
 msgid "Find duplicates"
 msgstr "Cerca els duplicats"
 
-#: ../src/dupe.c:3201
+#: ../src/dupe.c:3209
 msgid "Compare to:"
 msgstr "Compara amb:"
 
-#: ../src/dupe.c:3214
+#: ../src/dupe.c:3222
 msgid "Compare by:"
 msgstr "Compara per:"
 
-#: ../src/dupe.c:3222 ../src/preferences.c:1171 ../src/search.c:2861
+#: ../src/dupe.c:3230 ../src/preferences.c:1359 ../src/search.c:2869
 msgid "Thumbnails"
 msgstr "Miniatures"
 
-#: ../src/dupe.c:3229
+#: ../src/dupe.c:3237
 msgid "Compare two file sets"
 msgstr "Compara dos conjunts de fitxers"
 
-#: ../src/editors.c:280
+#: ../src/editors.c:281
 #, c-format
 msgid "Desktop file '%s' should not include extension in Icon key: '%s'\n"
 msgstr ""
 "El fixer desktop '%s' no hauria d'incloure extensió a la clau Icon: «%s»\n"
 
 #. flash fired (bit 0)
-#: ../src/editors.c:334 ../src/exif.c:225 ../src/exif-common.c:332
+#: ../src/editors.c:335 ../src/exif.c:226 ../src/exif-common.c:362
 msgid "yes"
 msgstr "sí"
 
-#: ../src/editors.c:334 ../src/exif.c:224 ../src/exif-common.c:332
+#: ../src/editors.c:335 ../src/exif.c:225 ../src/exif-common.c:362
 msgid "no"
 msgstr "no"
 
-#: ../src/editors.c:506
+#: ../src/editors.c:507
 msgid "stopping..."
 msgstr "aturant..."
 
-#: ../src/editors.c:527
+#: ../src/editors.c:528
 msgid "Edit command results"
 msgstr "Edita els resultats de la comanda"
 
-#: ../src/editors.c:530
+#: ../src/editors.c:531
 #, c-format
 msgid "Output of %s"
 msgstr "Sortida de %s"
 
-#: ../src/editors.c:1053
+#: ../src/editors.c:1054
 #, c-format
 msgid ""
 "Failed to run command:\n"
@@ -1054,11 +1062,11 @@ msgstr ""
 "No es pot executar la comanda:\n"
 "%s\n"
 
-#: ../src/editors.c:1180
+#: ../src/editors.c:1181
 msgid "stopped by user"
 msgstr "aturat per l'usuari"
 
-#: ../src/editors.c:1265
+#: ../src/editors.c:1266
 #, c-format
 msgid ""
 "%s\n"
@@ -1067,824 +1075,824 @@ msgstr ""
 "%s\n"
 "«%s»"
 
-#: ../src/editors.c:1267
+#: ../src/editors.c:1268
 msgid "Invalid editor command"
 msgstr "comanda invalida del editor"
 
-#: ../src/editors.c:1354
+#: ../src/editors.c:1355
 msgid "Editor template is empty."
 msgstr "La plantilla de l'editor és buida."
 
-#: ../src/editors.c:1355
+#: ../src/editors.c:1356
 msgid "Editor template has incorrect syntax."
 msgstr "La plantilla de l'editor te una sintaxi incorrecta."
 
-#: ../src/editors.c:1356
+#: ../src/editors.c:1357
 msgid "Editor template uses incompatible macros."
 msgstr "La plantilla de l'editor fa servir macros incompatibles."
 
-#: ../src/editors.c:1357
+#: ../src/editors.c:1358
 msgid "Can't find matching file type."
 msgstr "No es troba cap tipus de fitxer coincident."
 
-#: ../src/editors.c:1358
+#: ../src/editors.c:1359
 msgid "Can't execute external editor."
 msgstr "No es pot executar l'editor extern."
 
-#: ../src/editors.c:1359
+#: ../src/editors.c:1360
 msgid "External editor returned error status."
 msgstr "L'editor extern a retornat un error."
 
-#: ../src/editors.c:1360
+#: ../src/editors.c:1361
 msgid "File was skipped."
 msgstr "S'ha omès el fitxer."
 
-#: ../src/editors.c:1361
+#: ../src/editors.c:1362
 msgid "Unknown error."
 msgstr "Error desconegut."
 
-#: ../src/exif.c:147 ../src/exif.c:160 ../src/exif.c:174 ../src/exif.c:199
-#: ../src/exif.c:316 ../src/exif.c:663 ../src/exif-common.c:308
-#: ../src/exif-common.c:311 ../src/exif-common.c:378
+#: ../src/exif.c:148 ../src/exif.c:161 ../src/exif.c:175 ../src/exif.c:200
+#: ../src/exif.c:317 ../src/exif.c:664 ../src/exif-common.c:338
+#: ../src/exif-common.c:341 ../src/exif-common.c:408
 msgid "unknown"
 msgstr "desconegut"
 
-#: ../src/exif.c:148
+#: ../src/exif.c:149
 msgid "top left"
 msgstr "superior esquerra"
 
-#: ../src/exif.c:149
+#: ../src/exif.c:150
 msgid "top right"
 msgstr "superior dreta"
 
-#: ../src/exif.c:150
+#: ../src/exif.c:151
 msgid "bottom right"
 msgstr "inferior dreta"
 
-#: ../src/exif.c:151
+#: ../src/exif.c:152
 msgid "bottom left"
 msgstr "inferior esquerra"
 
-#: ../src/exif.c:152
+#: ../src/exif.c:153
 msgid "left top"
 msgstr "esquerra superior"
 
-#: ../src/exif.c:153
+#: ../src/exif.c:154
 msgid "right top"
 msgstr "dreta superior"
 
-#: ../src/exif.c:154
+#: ../src/exif.c:155
 msgid "right bottom"
 msgstr "dreta inferior"
 
-#: ../src/exif.c:155
+#: ../src/exif.c:156
 msgid "left bottom"
 msgstr "esquerra inferior"
 
-#: ../src/exif.c:162
+#: ../src/exif.c:163
 msgid "inch"
 msgstr "polzada"
 
-#: ../src/exif.c:163
+#: ../src/exif.c:164
 msgid "centimeter"
 msgstr "centímetre"
 
-#: ../src/exif.c:175
+#: ../src/exif.c:176
 msgid "average"
 msgstr "mitjana"
 
-#: ../src/exif.c:176
+#: ../src/exif.c:177
 msgid "center weighted"
 msgstr "centre ponderat"
 
-#: ../src/exif.c:177
+#: ../src/exif.c:178
 msgid "spot"
 msgstr "punts"
 
-#: ../src/exif.c:178
+#: ../src/exif.c:179
 msgid "multi-spot"
 msgstr "multi-punt"
 
-#: ../src/exif.c:179
+#: ../src/exif.c:180
 msgid "multi-segment"
 msgstr "multi-segment"
 
-#: ../src/exif.c:180
+#: ../src/exif.c:181
 msgid "partial"
 msgstr "parcial"
 
-#: ../src/exif.c:181 ../src/exif.c:219
+#: ../src/exif.c:182 ../src/exif.c:220
 msgid "other"
 msgstr "altres"
 
-#: ../src/exif.c:186 ../src/exif.c:238
+#: ../src/exif.c:187 ../src/exif.c:239
 msgid "not defined"
 msgstr "sense definir"
 
-#: ../src/exif.c:187 ../src/exif.c:266 ../src/exif.c:273
+#: ../src/exif.c:188 ../src/exif.c:267 ../src/exif.c:274
 msgid "manual"
 msgstr "manual"
 
-#: ../src/exif.c:188 ../src/exif.c:259 ../src/exif.c:295 ../src/exif.c:302
-#: ../src/exif.c:309
+#: ../src/exif.c:189 ../src/exif.c:260 ../src/exif.c:296 ../src/exif.c:303
+#: ../src/exif.c:310
 msgid "normal"
 msgstr "normal"
 
-#: ../src/exif.c:189
+#: ../src/exif.c:190
 msgid "aperture"
 msgstr "obertura"
 
-#: ../src/exif.c:190
+#: ../src/exif.c:191
 msgid "shutter"
 msgstr "obturador"
 
-#: ../src/exif.c:191
+#: ../src/exif.c:192
 msgid "creative"
 msgstr "creatiu"
 
-#: ../src/exif.c:192
+#: ../src/exif.c:193
 msgid "action"
 msgstr "acció"
 
-#: ../src/exif.c:193 ../src/exif.c:280
+#: ../src/exif.c:194 ../src/exif.c:281
 msgid "portrait"
 msgstr "vertical"
 
-#: ../src/exif.c:194 ../src/exif.c:279
+#: ../src/exif.c:195 ../src/exif.c:280
 msgid "landscape"
 msgstr "apaïsat"
 
-#: ../src/exif.c:200
+#: ../src/exif.c:201
 msgid "daylight"
 msgstr "llum de dia"
 
-#: ../src/exif.c:201
+#: ../src/exif.c:202
 msgid "fluorescent"
 msgstr "fluorescent"
 
-#: ../src/exif.c:202
+#: ../src/exif.c:203
 msgid "tungsten (incandescent)"
 msgstr "tungstè (incandescent)"
 
-#: ../src/exif.c:203
+#: ../src/exif.c:204
 msgid "flash"
 msgstr "flaix"
 
-#: ../src/exif.c:204
+#: ../src/exif.c:205
 msgid "fine weather"
 msgstr "bon temps"
 
-#: ../src/exif.c:205
+#: ../src/exif.c:206
 msgid "cloudy weather"
 msgstr "ennuvolat"
 
-#: ../src/exif.c:206
+#: ../src/exif.c:207
 msgid "shade"
 msgstr "ombra"
 
-#: ../src/exif.c:207
+#: ../src/exif.c:208
 msgid "daylight fluorescent"
 msgstr "fluorescent llum de dia"
 
-#: ../src/exif.c:208
+#: ../src/exif.c:209
 msgid "day white fluorescent"
 msgstr "fluorescent day white"
 
-#: ../src/exif.c:209
+#: ../src/exif.c:210
 msgid "cool white fluorescent"
 msgstr "fluorescent cool white"
 
-#: ../src/exif.c:210
+#: ../src/exif.c:211
 msgid "white fluorescent"
 msgstr "fluorescent blanc"
 
-#: ../src/exif.c:211
+#: ../src/exif.c:212
 msgid "standard light A"
 msgstr "llum estàndard A"
 
-#: ../src/exif.c:212
+#: ../src/exif.c:213
 msgid "standard light B"
 msgstr "llum estàndard B"
 
-#: ../src/exif.c:213
+#: ../src/exif.c:214
 msgid "standard light C"
 msgstr "llum estàndard C"
 
-#: ../src/exif.c:214
+#: ../src/exif.c:215
 msgid "D55"
 msgstr "D55"
 
-#: ../src/exif.c:215
+#: ../src/exif.c:216
 msgid "D65"
 msgstr "D65"
 
-#: ../src/exif.c:216
+#: ../src/exif.c:217
 msgid "D75"
 msgstr "D75"
 
-#: ../src/exif.c:217
+#: ../src/exif.c:218
 msgid "D50"
 msgstr "D50"
 
-#: ../src/exif.c:218
+#: ../src/exif.c:219
 msgid "ISO studio tungsten"
 msgstr "ISO tungstè d'estudi"
 
-#: ../src/exif.c:226
+#: ../src/exif.c:227
 msgid "yes, not detected by strobe"
 msgstr "sí, no detectat per l'efecte estroboscòpic "
 
-#: ../src/exif.c:227
+#: ../src/exif.c:228
 msgid "yes, detected by strobe"
 msgstr "sí, detectat per l'efecte estroboscòpic"
 
-#: ../src/exif.c:233
+#: ../src/exif.c:234
 msgid "uncalibrated"
 msgstr "sense calibrar"
 
-#: ../src/exif.c:239
+#: ../src/exif.c:240
 msgid "1 chip color area"
 msgstr "1 chip d'àrea de color"
 
-#: ../src/exif.c:240
+#: ../src/exif.c:241
 msgid "2 chip color area"
 msgstr "2 chips d'àrea de color"
 
-#: ../src/exif.c:241
+#: ../src/exif.c:242
 msgid "3 chip color area"
 msgstr "3 chips d'àrea de color"
 
-#: ../src/exif.c:242
+#: ../src/exif.c:243
 msgid "color sequential area"
 msgstr "àrea de color seqüencial"
 
-#: ../src/exif.c:243
+#: ../src/exif.c:244
 msgid "trilinear"
 msgstr "trilineal"
 
-#: ../src/exif.c:244
+#: ../src/exif.c:245
 msgid "color sequential linear"
 msgstr "color seqüencial lineal"
 
-#: ../src/exif.c:249
+#: ../src/exif.c:250
 msgid "digital still camera"
 msgstr "càmera de fotografiar digital "
 
-#: ../src/exif.c:254
+#: ../src/exif.c:255
 msgid "direct photo"
 msgstr "fotografia directa"
 
-#: ../src/exif.c:260
+#: ../src/exif.c:261
 msgid "custom"
 msgstr "personalitzat"
 
-#: ../src/exif.c:265 ../src/exif.c:272 ../src/exif-common.c:346
+#: ../src/exif.c:266 ../src/exif.c:273 ../src/exif-common.c:376
 msgid "auto"
 msgstr "automàtic"
 
-#: ../src/exif.c:267
+#: ../src/exif.c:268
 msgid "auto bracket"
 msgstr "enforquillament automàtic"
 
-#: ../src/exif.c:278
+#: ../src/exif.c:279
 msgid "standard"
 msgstr "estàndard"
 
-#: ../src/exif.c:281
+#: ../src/exif.c:282
 msgid "night scene"
 msgstr "escena nocturna"
 
-#: ../src/exif.c:286
+#: ../src/exif.c:287
 msgid "none"
 msgstr "cap"
 
-#: ../src/exif.c:287
+#: ../src/exif.c:288
 msgid "low gain up"
 msgstr "guany baix incrementat"
 
-#: ../src/exif.c:288
+#: ../src/exif.c:289
 msgid "high gain up"
 msgstr "guany alt incrementat"
 
-#: ../src/exif.c:289
+#: ../src/exif.c:290
 msgid "low gain down"
 msgstr "guany baix disminuït"
 
-#: ../src/exif.c:290
+#: ../src/exif.c:291
 msgid "high gain down"
 msgstr "guany alt disminuït"
 
-#: ../src/exif.c:296 ../src/exif.c:310
+#: ../src/exif.c:297 ../src/exif.c:311
 msgid "soft"
 msgstr "suau"
 
-#: ../src/exif.c:297 ../src/exif.c:311
+#: ../src/exif.c:298 ../src/exif.c:312
 msgid "hard"
 msgstr "dur"
 
-#: ../src/exif.c:303
+#: ../src/exif.c:304
 msgid "low"
 msgstr "baix"
 
-#: ../src/exif.c:304
+#: ../src/exif.c:305
 msgid "high"
 msgstr "alt"
 
-#: ../src/exif.c:317
+#: ../src/exif.c:318
 msgid "macro"
 msgstr "macro"
 
-#: ../src/exif.c:318
+#: ../src/exif.c:319
 msgid "close"
 msgstr "tancat"
 
-#: ../src/exif.c:319
+#: ../src/exif.c:320
 msgid "distant"
 msgstr "distant"
 
-#: ../src/exif.c:329
+#: ../src/exif.c:330
 msgid "Image Width"
 msgstr "Amplada de la imatge"
 
-#: ../src/exif.c:330
+#: ../src/exif.c:331
 msgid "Image Height"
 msgstr "Alçada de la imatge"
 
-#: ../src/exif.c:331
+#: ../src/exif.c:332
 msgid "Bits per Sample/Pixel"
 msgstr "Bits per mostra/pixel"
 
-#: ../src/exif.c:332
+#: ../src/exif.c:333
 msgid "Compression"
 msgstr "Compressió"
 
-#: ../src/exif.c:333
+#: ../src/exif.c:334
 msgid "Image description"
 msgstr "Descripció de la imatge"
 
-#: ../src/exif.c:334
+#: ../src/exif.c:335
 msgid "Camera make"
 msgstr "Fabricant de la càmera"
 
-#: ../src/exif.c:335
+#: ../src/exif.c:336
 msgid "Camera model"
 msgstr "Model de la càmera"
 
-#: ../src/exif.c:336
+#: ../src/exif.c:337
 msgid "Orientation"
 msgstr "Orientació"
 
-#: ../src/exif.c:337
+#: ../src/exif.c:338
 msgid "X resolution"
 msgstr "Resolució X"
 
-#: ../src/exif.c:338
+#: ../src/exif.c:339
 msgid "Y Resolution"
 msgstr "Resolució Y"
 
-#: ../src/exif.c:339
+#: ../src/exif.c:340
 msgid "Resolution units"
 msgstr "Unitats de la resolució"
 
-#: ../src/exif.c:340
+#: ../src/exif.c:341
 msgid "Firmware"
 msgstr "Microprogramari"
 
-#: ../src/exif.c:342
+#: ../src/exif.c:343
 msgid "White point"
 msgstr "Punt blanc"
 
-#: ../src/exif.c:343
+#: ../src/exif.c:344
 msgid "Primary chromaticities"
 msgstr "Cromaticitats primàries"
 
-#: ../src/exif.c:344
+#: ../src/exif.c:345
 msgid "YCbCy coefficients"
 msgstr "Coeficients YCbCy"
 
-#: ../src/exif.c:345
+#: ../src/exif.c:346
 msgid "YCbCr positioning"
 msgstr "Posicionament YCbCr"
 
-#: ../src/exif.c:346
+#: ../src/exif.c:347
 msgid "Black white reference"
 msgstr "Referència de blanc i negre"
 
-#: ../src/exif.c:348
+#: ../src/exif.c:349
 msgid "SubIFD Exif offset"
 msgstr "Òfset del Exif SubIFD"
 
 #. subIFD follows
-#: ../src/exif.c:350
+#: ../src/exif.c:351
 msgid "Exposure time (seconds)"
 msgstr "Temps d'exposició (segons)"
 
-#: ../src/exif.c:351
+#: ../src/exif.c:352
 msgid "FNumber"
 msgstr "Número F"
 
-#: ../src/exif.c:352
+#: ../src/exif.c:353
 msgid "Exposure program"
 msgstr "Programació del diafragma"
 
-#: ../src/exif.c:353
+#: ../src/exif.c:354
 msgid "Spectral Sensitivity"
 msgstr "Sensibilitat espectral"
 
-#: ../src/exif.c:354 ../src/exif.c:390 ../src/exif-common.c:518
+#: ../src/exif.c:355 ../src/exif.c:391 ../src/exif-common.c:548
 msgid "ISO sensitivity"
 msgstr "Sensibilitat ISO"
 
-#: ../src/exif.c:355
+#: ../src/exif.c:356
 msgid "Optoelectric conversion factor"
 msgstr "Factor de conversió optoelèctrica"
 
-#: ../src/exif.c:356
+#: ../src/exif.c:357
 msgid "Exif version"
 msgstr "Versió de l'Exif"
 
-#: ../src/exif.c:357
+#: ../src/exif.c:358
 msgid "Date original"
 msgstr "Data original"
 
-#: ../src/exif.c:358
+#: ../src/exif.c:359
 msgid "Date digitized"
 msgstr "Data de digitalització"
 
-#: ../src/exif.c:359
+#: ../src/exif.c:360
 msgid "Pixel format"
 msgstr "Format del píxel"
 
-#: ../src/exif.c:360
+#: ../src/exif.c:361
 msgid "Compression ratio"
 msgstr "Ràtio de compressió"
 
-#: ../src/exif.c:361 ../src/exif-common.c:515
+#: ../src/exif.c:362 ../src/exif-common.c:545
 msgid "Shutter speed"
 msgstr "Velocitat de l'obturador"
 
-#: ../src/exif.c:362 ../src/exif-common.c:516
+#: ../src/exif.c:363 ../src/exif-common.c:546
 msgid "Aperture"
 msgstr "Obertura"
 
-#: ../src/exif.c:363
+#: ../src/exif.c:364
 msgid "Brightness"
 msgstr "Brillantor"
 
-#: ../src/exif.c:364 ../src/exif-common.c:517
+#: ../src/exif.c:365 ../src/exif-common.c:547
 msgid "Exposure bias"
 msgstr "Obertura del diafragma"
 
-#: ../src/exif.c:365
+#: ../src/exif.c:366
 msgid "Maximum aperture"
 msgstr "Obertura màxima"
 
-#: ../src/exif.c:366 ../src/exif-common.c:521
+#: ../src/exif.c:367 ../src/exif-common.c:551
 msgid "Subject distance"
 msgstr "Distància al subjecte"
 
-#: ../src/exif.c:367
+#: ../src/exif.c:368
 msgid "Metering mode"
 msgstr "Mètode de mesurament"
 
-#: ../src/exif.c:368
+#: ../src/exif.c:369
 msgid "Light source"
 msgstr "Font de llum"
 
-#: ../src/exif.c:369 ../src/exif-common.c:522
+#: ../src/exif.c:370 ../src/exif-common.c:552
 msgid "Flash"
 msgstr "Flaix"
 
-#: ../src/exif.c:370 ../src/exif-common.c:519
+#: ../src/exif.c:371 ../src/exif-common.c:549
 msgid "Focal length"
 msgstr "Distància focal"
 
-#: ../src/exif.c:371
+#: ../src/exif.c:372
 msgid "Subject area"
 msgstr "Àrea del subjecte"
 
-#: ../src/exif.c:372
+#: ../src/exif.c:373
 msgid "MakerNote"
 msgstr "Nota del fabricant"
 
-#: ../src/exif.c:373
+#: ../src/exif.c:374
 msgid "UserComment"
 msgstr "Comentari del usuari"
 
-#: ../src/exif.c:374
+#: ../src/exif.c:375
 msgid "Subsecond time"
 msgstr "Dècimes de segon"
 
-#: ../src/exif.c:375
+#: ../src/exif.c:376
 msgid "Subsecond time original"
 msgstr "Dècimes de segon de l'hora original"
 
-#: ../src/exif.c:376
+#: ../src/exif.c:377
 msgid "Subsecond time digitized"
 msgstr "Dècimes de segon de l'hora de digitalització"
 
-#: ../src/exif.c:377
+#: ../src/exif.c:378
 msgid "FlashPix version"
 msgstr "Versió del FlashPix"
 
-#: ../src/exif.c:378
+#: ../src/exif.c:379
 msgid "Colorspace"
 msgstr "Espai de color"
 
 #. ExifImageWidth, ExifImageHeight can also be unsigned short
-#: ../src/exif.c:380
+#: ../src/exif.c:381 ../src/preferences.c:2224
 msgid "Width"
 msgstr "Amplada"
 
-#: ../src/exif.c:381
+#: ../src/exif.c:382 ../src/preferences.c:2226
 msgid "Height"
 msgstr "Alçada"
 
-#: ../src/exif.c:382
+#: ../src/exif.c:383
 msgid "Audio data"
 msgstr "Dades d'àudio"
 
-#: ../src/exif.c:383
+#: ../src/exif.c:384
 msgid "ExifR98 extension"
 msgstr "Extensió ExifR98"
 
-#: ../src/exif.c:384
+#: ../src/exif.c:385
 msgid "Flash strength"
 msgstr "Força del flaix"
 
-#: ../src/exif.c:385
+#: ../src/exif.c:386
 msgid "Spatial frequency response"
 msgstr "Resposta de la freqüència espacial"
 
-#: ../src/exif.c:386
+#: ../src/exif.c:387
 msgid "X Pixel density"
 msgstr "Densitat de pixelat X"
 
-#: ../src/exif.c:387
+#: ../src/exif.c:388
 msgid "Y Pixel density"
 msgstr "Densitat de pixelat Y"
 
-#: ../src/exif.c:388
+#: ../src/exif.c:389
 msgid "Pixel density units"
 msgstr "Unitats de densitat del pixelat"
 
-#: ../src/exif.c:389
+#: ../src/exif.c:390
 msgid "Subject location"
 msgstr "Localització del subjecte"
 
-#: ../src/exif.c:391
+#: ../src/exif.c:392
 msgid "Sensor type"
 msgstr "Tipus de sensor"
 
-#: ../src/exif.c:392
+#: ../src/exif.c:393
 msgid "Source type"
 msgstr "Tipus de font"
 
-#: ../src/exif.c:393
+#: ../src/exif.c:394
 msgid "Scene type"
 msgstr "Tipus d'escena"
 
-#: ../src/exif.c:394
+#: ../src/exif.c:395
 msgid "Color filter array pattern"
 msgstr "Patró de la matriu de filtres de color"
 
 #. tags a4xx were added for Exif 2.2 (not just these - some above, as well)
-#: ../src/exif.c:396
+#: ../src/exif.c:397
 msgid "Render process"
 msgstr "Procés de renderització"
 
-#: ../src/exif.c:397
+#: ../src/exif.c:398
 msgid "Exposure mode"
 msgstr "Mode d'exposició"
 
-#: ../src/exif.c:398
+#: ../src/exif.c:399
 msgid "White balance"
 msgstr "Balanç de blanc"
 
-#: ../src/exif.c:399
+#: ../src/exif.c:400
 msgid "Digital zoom ratio"
 msgstr "Ràtio de l'ampliació digital"
 
-#: ../src/exif.c:400
+#: ../src/exif.c:401
 msgid "Focal length (35mm)"
 msgstr "Longitud focal (35mm)"
 
-#: ../src/exif.c:401
+#: ../src/exif.c:402
 msgid "Scene capture type"
 msgstr "Tipus d'escena capturada"
 
-#: ../src/exif.c:402
+#: ../src/exif.c:403
 msgid "Gain control"
 msgstr "Control del guany"
 
-#: ../src/exif.c:403
+#: ../src/exif.c:404
 msgid "Contrast"
 msgstr "Contrast"
 
-#: ../src/exif.c:404
+#: ../src/exif.c:405
 msgid "Saturation"
 msgstr "Saturació"
 
-#: ../src/exif.c:405
+#: ../src/exif.c:406
 msgid "Sharpness"
 msgstr "Nitidesa"
 
-#: ../src/exif.c:406
+#: ../src/exif.c:407
 msgid "Device setting"
 msgstr "Preferències del dispositiu"
 
-#: ../src/exif.c:407
+#: ../src/exif.c:408
 msgid "Subject range"
 msgstr "Distància al subjecte"
 
-#: ../src/exif.c:408
+#: ../src/exif.c:409
 msgid "Image serial number"
 msgstr "Número de sèrie de la imatge"
 
-#: ../src/exif-common.c:307
+#: ../src/exif-common.c:337
 msgid "infinity"
 msgstr "infinit"
 
-#: ../src/exif-common.c:336
+#: ../src/exif-common.c:366
 msgid "mode:"
 msgstr "mode:"
 
-#: ../src/exif-common.c:340 ../src/trash.c:205
+#: ../src/exif-common.c:370 ../src/trash.c:205
 msgid "on"
 msgstr "actiu"
 
-#: ../src/exif-common.c:343 ../src/trash.c:210
+#: ../src/exif-common.c:373 ../src/trash.c:210
 msgid "off"
 msgstr "inactiu"
 
-#: ../src/exif-common.c:352
+#: ../src/exif-common.c:382
 msgid "not detected by strobe"
 msgstr "no ha estat detectat per l'efecte estroboscòpic"
 
-#: ../src/exif-common.c:353
+#: ../src/exif-common.c:383
 msgid "detected by strobe"
 msgstr "ha estat detectat per l'efecte estroboscòpic"
 
 #. we ignore flash function (bit 5)
 #. red-eye (bit 6)
-#: ../src/exif-common.c:358
+#: ../src/exif-common.c:388
 msgid "red-eye reduction"
 msgstr "reducció de l'efecte <ulls vermells>"
 
-#: ../src/exif-common.c:378
+#: ../src/exif-common.c:408
 msgid "dot"
 msgstr "punts"
 
-#: ../src/exif-common.c:408
+#: ../src/exif-common.c:438
 msgid "AdobeRGB"
 msgstr "AdobeRGB"
 
-#: ../src/exif-common.c:416
+#: ../src/exif-common.c:446
 msgid "embedded"
 msgstr "incrustat"
 
-#: ../src/exif-common.c:505
+#: ../src/exif-common.c:535
 msgid "Above Sea Level"
 msgstr "Sobre el nivell del mar"
 
-#: ../src/exif-common.c:505
+#: ../src/exif-common.c:535
 msgid "Below Sea Level"
 msgstr "Sota el nivell del mar"
 
-#: ../src/exif-common.c:513
+#: ../src/exif-common.c:543
 msgid "Camera"
 msgstr "Càmera"
 
-#: ../src/exif-common.c:520
+#: ../src/exif-common.c:550
 msgid "Focal length 35mm"
 msgstr "Distància focal 35mm"
 
-#: ../src/exif-common.c:523
+#: ../src/exif-common.c:553
 msgid "Resolution"
 msgstr "Resolució"
 
-#: ../src/exif-common.c:524
+#: ../src/exif-common.c:554
 msgid "Color profile"
 msgstr "Perfil de color"
 
-#: ../src/exif-common.c:525
+#: ../src/exif-common.c:555
 msgid "GPS position"
 msgstr "posició GPS"
 
-#: ../src/exif-common.c:526
+#: ../src/exif-common.c:556
 msgid "GPS altitude"
 msgstr "altitud GPS"
 
-#: ../src/exif-common.c:527
+#: ../src/exif-common.c:557
 msgid "File size"
 msgstr "Mida del fitxer"
 
-#: ../src/exif-common.c:528
+#: ../src/exif-common.c:558
 msgid "File date"
 msgstr "Data del fitxer"
 
-#: ../src/exif-common.c:529
+#: ../src/exif-common.c:559
 msgid "File mode"
 msgstr "Mode del fitxer"
 
-#: ../src/filedata.c:91
+#: ../src/filedata.c:97
 #, c-format
 msgid "%d bytes"
 msgstr "%d bytes"
 
-#: ../src/filedata.c:95
+#: ../src/filedata.c:101
 #, c-format
 msgid "%.1f K"
 msgstr "%.1f K"
 
-#: ../src/filedata.c:99
+#: ../src/filedata.c:105
 #, c-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: ../src/filedata.c:104
+#: ../src/filedata.c:110
 #, c-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: ../src/filedata.c:2185
+#: ../src/filedata.c:2316
 msgid "file or directory does not exist"
 msgstr "el fitxer o el directori no existeix"
 
-#: ../src/filedata.c:2191
+#: ../src/filedata.c:2322
 msgid "destination already exists"
 msgstr "el destí ja existeix"
 
-#: ../src/filedata.c:2197
+#: ../src/filedata.c:2328
 msgid "destination can't be overwritten"
 msgstr "el destí no es pot sobreescriure"
 
-#: ../src/filedata.c:2203
+#: ../src/filedata.c:2334
 msgid "destination directory is not writable"
 msgstr "no es pot escriure al directori destí"
 
-#: ../src/filedata.c:2209
+#: ../src/filedata.c:2340
 msgid "destination directory does not exist"
 msgstr "el directori de destí no existeix"
 
-#: ../src/filedata.c:2215
+#: ../src/filedata.c:2346
 msgid "source directory is not writable"
 msgstr "no es pot escriure al directori font"
 
-#: ../src/filedata.c:2221
+#: ../src/filedata.c:2352
 msgid "no read permission"
 msgstr "no teniu permís de lectura"
 
-#: ../src/filedata.c:2227
+#: ../src/filedata.c:2358
 msgid "file is readonly"
 msgstr "el fitxer és de només lectura"
 
-#: ../src/filedata.c:2233
+#: ../src/filedata.c:2364
 msgid "destination already exists and will be overwritten"
 msgstr "el destí ja existeix i es sobreescriurà"
 
-#: ../src/filedata.c:2239
+#: ../src/filedata.c:2370
 msgid "source and destination are the same"
 msgstr "L'origen i el destí són els mateixos"
 
-#: ../src/filedata.c:2245
+#: ../src/filedata.c:2376
 msgid "source and destination have different extension"
 msgstr "L'origen i el destí tenen extensió diferent"
 
-#: ../src/filedata.c:2251
+#: ../src/filedata.c:2382
 msgid "there are unsaved metadata changes for the file"
 msgstr "hi ha canvis a les metadades del fitxer que no s'han desat"
 
-#: ../src/fullscreen.c:243 ../src/layout_util.c:1329 ../src/layout_util.c:1330
-#: ../src/layout_util.c:1331 ../src/preferences.c:1349
+#: ../src/fullscreen.c:248 ../src/layout_util.c:1368 ../src/layout_util.c:1369
+#: ../src/layout_util.c:1370 ../src/preferences.c:1540
 msgid "Full screen"
 msgstr "Pantalla completa"
 
-#: ../src/fullscreen.c:391
+#: ../src/fullscreen.c:409
 msgid "Full size"
 msgstr "Mida Màxima"
 
-#: ../src/fullscreen.c:396
+#: ../src/fullscreen.c:417
 msgid "Monitor"
 msgstr "Monitor"
 
-#: ../src/fullscreen.c:401
+#: ../src/fullscreen.c:423
 msgid "Screen"
 msgstr "Pantalla"
 
-#: ../src/fullscreen.c:638
+#: ../src/fullscreen.c:660
 msgid "Stay above other windows"
 msgstr "Mantenir sobre les altres finestres"
 
-#: ../src/fullscreen.c:645
+#: ../src/fullscreen.c:667
 msgid "Determined by Window Manager"
-msgstr "Determinat pel Gestor de Finestres"
+msgstr "Determinat pel gestor de finestres"
 
-#: ../src/fullscreen.c:646
+#: ../src/fullscreen.c:668
 msgid "Active screen"
 msgstr "Pantalla activa"
 
-#: ../src/fullscreen.c:648
+#: ../src/fullscreen.c:670
 msgid "Active monitor"
 msgstr "Monitor actiu"
 
@@ -1938,62 +1946,68 @@ msgstr "No és possible escriure llistats d'històrics a: %s\n"
 msgid " (Collection %s)"
 msgstr "(Col·leccions %s)"
 
-#: ../src/img-view.c:1266 ../src/layout_image.c:489 ../src/layout_util.c:1296
-#: ../src/layout_util.c:1297 ../src/layout_util.c:1312
-#: ../src/layout_util.c:1313 ../src/pan-view.c:2808
+#: ../src/image_load_jpeg.c:177
+#, c-format
+msgid "Error interpreting JPEG image file (%s)"
+msgstr ""
+"S'ha produït un error en la interpretació del fitxer d'imatge JPEG (%s)"
+
+#: ../src/img-view.c:1274 ../src/layout_image.c:489 ../src/layout_util.c:1335
+#: ../src/layout_util.c:1336 ../src/layout_util.c:1351
+#: ../src/layout_util.c:1352 ../src/pan-view.c:2830
 msgid "Zoom _in"
 msgstr "Apropa"
 
-#: ../src/img-view.c:1267 ../src/layout_image.c:490 ../src/layout_util.c:1298
-#: ../src/layout_util.c:1299 ../src/layout_util.c:1314
-#: ../src/layout_util.c:1315 ../src/pan-view.c:2810
+#: ../src/img-view.c:1275 ../src/layout_image.c:490 ../src/layout_util.c:1337
+#: ../src/layout_util.c:1338 ../src/layout_util.c:1353
+#: ../src/layout_util.c:1354 ../src/pan-view.c:2832
 msgid "Zoom _out"
 msgstr "Allunya"
 
-#: ../src/img-view.c:1268 ../src/layout_image.c:491 ../src/layout_util.c:1300
-#: ../src/layout_util.c:1301 ../src/layout_util.c:1316
-#: ../src/layout_util.c:1317 ../src/pan-view.c:2812
+#: ../src/img-view.c:1276 ../src/layout_image.c:491 ../src/layout_util.c:1339
+#: ../src/layout_util.c:1340 ../src/layout_util.c:1355
+#: ../src/layout_util.c:1356 ../src/pan-view.c:2834
 msgid "Zoom _1:1"
 msgstr "Escala real"
 
-#: ../src/img-view.c:1269 ../src/layout_image.c:492
+#: ../src/img-view.c:1277 ../src/layout_image.c:492
 msgid "Fit image to _window"
 msgstr "Ajusta la imatge a la _finestra"
 
-#: ../src/img-view.c:1277 ../src/layout_image.c:501 ../src/layout_util.c:1294
+#: ../src/img-view.c:1285 ../src/layout_image.c:501 ../src/layout_util.c:1333
 msgid "Set as _wallpaper"
 msgstr "Posa com a _fons d'escriptori"
 
-#: ../src/img-view.c:1282 ../src/layout_image.c:508
+#: ../src/img-view.c:1290 ../src/layout_image.c:508
 msgid "_Go to directory view"
 msgstr "_Ves a la vista de directoris"
 
-#: ../src/img-view.c:1295 ../src/layout_image.c:529
+#: ../src/img-view.c:1303 ../src/layout_image.c:529
 msgid "_Stop slideshow"
 msgstr "_Atura les diapositives"
 
-#: ../src/img-view.c:1298 ../src/layout_image.c:532
+#: ../src/img-view.c:1306 ../src/layout_image.c:532
 msgid "Continue slides_how"
 msgstr "_Continua mostrant diapositives"
 
-#: ../src/img-view.c:1303 ../src/img-view.c:1311 ../src/layout_image.c:537
+#: ../src/img-view.c:1311 ../src/img-view.c:1319 ../src/layout_image.c:537
 #: ../src/layout_image.c:544
 msgid "Pause slides_how"
 msgstr "_Pausa la seqüència de diapositives"
 
-#: ../src/img-view.c:1309 ../src/layout_image.c:543
+#: ../src/img-view.c:1317 ../src/layout_image.c:543
 msgid "_Start slideshow"
 msgstr "_Inicia la seqüència de diapositives"
 
-#: ../src/img-view.c:1317 ../src/layout_image.c:554 ../src/pan-view.c:2881
+#: ../src/img-view.c:1325 ../src/layout_image.c:554 ../src/pan-view.c:2903
 msgid "Exit _full screen"
 msgstr "Sortir del mode _pantalla completa"
 
-#: ../src/img-view.c:1321 ../src/layout_image.c:550 ../src/pan-view.c:2885
+#: ../src/img-view.c:1329 ../src/layout_image.c:550 ../src/pan-view.c:2907
 msgid "_Full screen"
 msgstr "_Pantalla completa"
 
-#: ../src/img-view.c:1325 ../src/layout_util.c:1279 ../src/pan-view.c:2889
+#: ../src/img-view.c:1333 ../src/layout_util.c:1318 ../src/pan-view.c:2911
 msgid "C_lose window"
 msgstr "_Tanca la finestra"
 
@@ -2024,79 +2038,79 @@ msgstr "%s, %d fitxers%s"
 msgid "%d files%s"
 msgstr "%d fitxers%s"
 
-#: ../src/layout.c:510
+#: ../src/layout.c:511
 #, c-format
 msgid "(no read permission) %s bytes"
 msgstr "(no teniu permís de lectura) %s bytes"
 
-#: ../src/layout.c:514
+#: ../src/layout.c:515
 #, c-format
 msgid "( ? x ? ) %s bytes"
 msgstr "( ? x ? ) %s bytes"
 
-#: ../src/layout.c:522
+#: ../src/layout.c:523
 #, c-format
 msgid "( %d x %d ) %s bytes"
 msgstr "( %d x %d ) %s bytes"
 
-#: ../src/layout.c:1231 ../src/layout_config.c:58
+#: ../src/layout.c:1244 ../src/layout_config.c:58
 msgid "Tools"
 msgstr "Eines"
 
-#: ../src/layout.c:1853
+#: ../src/layout.c:1874
 msgid "Window options and layout"
 msgstr "Opcions de finestra i distribució"
 
-#: ../src/layout.c:1912
+#: ../src/layout.c:1933
 msgid "General options"
 msgstr "Opcions Generals"
 
-#: ../src/layout.c:1914
+#: ../src/layout.c:1935
 msgid "Home path (empty to use your home directory)"
 msgstr "Directori de l'usuari (deixeu-ho buit per indicar el vostre)"
 
-#: ../src/layout.c:1922
+#: ../src/layout.c:1943
 msgid "Use current"
 msgstr "Fes servir l'actual"
 
-#: ../src/layout.c:1925
+#: ../src/layout.c:1946
 msgid "Show date in directories list view"
 msgstr "Mostra la data a la llista de directoris"
 
-#: ../src/layout.c:1928
+#: ../src/layout.c:1949
 msgid "Exit program when this window is closed"
 msgstr "Surt del programa quan es tanqui aquesta finestra"
 
-#: ../src/layout.c:1931
+#: ../src/layout.c:1952
 msgid "Start-up directory:"
 msgstr "Directori inicial:"
 
-#: ../src/layout.c:1933
+#: ../src/layout.c:1954
 msgid "No change"
 msgstr "Sense canvi"
 
-#: ../src/layout.c:1936
+#: ../src/layout.c:1957
 msgid "Restore last path"
 msgstr "Restaura l'últim camí"
 
-#: ../src/layout.c:1939
+#: ../src/layout.c:1960
 msgid "Home path"
 msgstr "Directori de l'usuari"
 
-#: ../src/layout.c:1943 ../src/print.c:3373 ../src/print.c:3380
+#: ../src/layout.c:1964 ../src/print.c:3385 ../src/print.c:3392
 msgid "Layout"
 msgstr "Format"
 
-#: ../src/layout.c:2187
+#: ../src/layout.c:2208
 msgid "Invalid geometry\n"
 msgstr "Geometria invàlida\n"
 
-#: ../src/layout_config.c:58 ../src/preferences.c:1446
-#: ../src/ui_pathsel.c:1179
+#: ../src/layout_config.c:58 ../src/preferences.c:1637
+#: ../src/ui_pathsel.c:1186
 msgid "Files"
 msgstr "Fitxers"
 
-#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1240
+#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1428
 #: ../src/print.c:123
 msgid "Image"
 msgstr "Imatge"
@@ -2109,932 +2123,976 @@ msgstr "(arrossegueu per canviar l'ordre)"
 msgid "Hide file _list"
 msgstr "Oculta la _llista de fitxers"
 
-#: ../src/layout_image.c:1559
+#: ../src/layout_image.c:1594
 #, c-format
 msgid "[%*d,%*d]: RGB(%3d,%3d,%3d)"
 msgstr "[%*d,%*d]: RGB(%3d,%3d,%3d)"
 
-#: ../src/layout_image.c:1567
+#: ../src/layout_image.c:1602
 #, c-format
 msgid "[%*s,%*s]: RGB(---,---,---)"
 msgstr "[%*s,%*s]: RGB(---,---,---)"
 
-#: ../src/layout_util.c:1234
+#: ../src/layout_util.c:1272
 msgid "_File"
 msgstr "_Fitxer"
 
-#: ../src/layout_util.c:1235
+#: ../src/layout_util.c:1273
 msgid "_Go"
 msgstr "_Ves"
 
-#: ../src/layout_util.c:1236 ../src/menu.c:109
+#: ../src/layout_util.c:1274 ../src/menu.c:109
 msgid "_Edit"
 msgstr "_Edita"
 
-#: ../src/layout_util.c:1237
+#: ../src/layout_util.c:1275
 msgid "_Select"
 msgstr "_Selecció"
 
-#: ../src/layout_util.c:1238 ../src/menu.c:276
+#: ../src/layout_util.c:1276 ../src/menu.c:280
 msgid "_Orientation"
 msgstr "_Orientació"
 
-#: ../src/layout_util.c:1239
+#: ../src/layout_util.c:1277
 msgid "E_xternal Editors"
 msgstr "Editors e_xterns"
 
-#: ../src/layout_util.c:1240
+#: ../src/layout_util.c:1278
 msgid "P_references"
 msgstr "P_referències"
 
-#: ../src/layout_util.c:1242
+#: ../src/layout_util.c:1280
 msgid "_Files and Folders"
 msgstr "_Fitxers i carpetes"
 
-#: ../src/layout_util.c:1243
+#: ../src/layout_util.c:1281
 msgid "_Zoom"
 msgstr "_Lupa"
 
-#: ../src/layout_util.c:1244
+#: ../src/layout_util.c:1282
 msgid "_Color Management"
 msgstr "Gestió del _color"
 
-#: ../src/layout_util.c:1245
+#: ../src/layout_util.c:1283
 msgid "_Connected Zoom"
 msgstr "Ampliació _connectada"
 
-#: ../src/layout_util.c:1246
+#: ../src/layout_util.c:1284
 msgid "Spli_t"
 msgstr "_Dividir"
 
-#: ../src/layout_util.c:1247 ../src/layout_util.c:1361
+#: ../src/layout_util.c:1285
+msgid "Stere_o"
+msgstr "Estère_o"
+
+#: ../src/layout_util.c:1286 ../src/layout_util.c:1401
 msgid "Image _Overlay"
 msgstr "Imatge _sobreposada"
 
-#: ../src/layout_util.c:1248
+#: ../src/layout_util.c:1287
 msgid "_Help"
 msgstr "_Ajuda"
 
-#: ../src/layout_util.c:1250
+#: ../src/layout_util.c:1289
 msgid "_First Image"
 msgstr "_Primera imatge"
 
-#: ../src/layout_util.c:1250
+#: ../src/layout_util.c:1289
 msgid "First Image"
 msgstr "Primera imatge"
 
-#: ../src/layout_util.c:1251 ../src/layout_util.c:1252
-#: ../src/layout_util.c:1253
+#: ../src/layout_util.c:1290 ../src/layout_util.c:1291
+#: ../src/layout_util.c:1292
 msgid "_Previous Image"
 msgstr "Imatge _anterior"
 
-#: ../src/layout_util.c:1251 ../src/layout_util.c:1252
-#: ../src/layout_util.c:1253
+#: ../src/layout_util.c:1290 ../src/layout_util.c:1291
+#: ../src/layout_util.c:1292
 msgid "Previous Image"
 msgstr "Imatge anterior"
 
-#: ../src/layout_util.c:1254 ../src/layout_util.c:1255
-#: ../src/layout_util.c:1256
+#: ../src/layout_util.c:1293 ../src/layout_util.c:1294
+#: ../src/layout_util.c:1295
 msgid "_Next Image"
 msgstr "Imatge _següent"
 
-#: ../src/layout_util.c:1254 ../src/layout_util.c:1255
-#: ../src/layout_util.c:1256
+#: ../src/layout_util.c:1293 ../src/layout_util.c:1294
+#: ../src/layout_util.c:1295
 msgid "Next Image"
 msgstr "Imatge següent"
 
-#: ../src/layout_util.c:1257
+#: ../src/layout_util.c:1296
 msgid "_Last Image"
 msgstr "_Última imatge"
 
-#: ../src/layout_util.c:1257
+#: ../src/layout_util.c:1296
 msgid "Last Image"
 msgstr "Última imatge"
 
-#: ../src/layout_util.c:1258
+#: ../src/layout_util.c:1297
 msgid "_Back"
 msgstr "_Enrrere"
 
-#: ../src/layout_util.c:1258
+#: ../src/layout_util.c:1297
 msgid "Back"
 msgstr "Enrrere"
 
-#: ../src/layout_util.c:1259
+#: ../src/layout_util.c:1298
 msgid "_Home"
 msgstr "_Directori de l'usuari"
 
-#: ../src/layout_util.c:1259 ../src/options.c:136 ../src/ui_bookmark.c:543
-#: ../src/ui_pathsel.c:1047
+#: ../src/layout_util.c:1298 ../src/options.c:144 ../src/ui_bookmark.c:548
+#: ../src/ui_pathsel.c:1054
 msgid "Home"
 msgstr "Directori de l'usuari"
 
-#: ../src/layout_util.c:1261
+#: ../src/layout_util.c:1300
 msgid "New _window"
 msgstr "Nova _finestra"
 
-#: ../src/layout_util.c:1261
+#: ../src/layout_util.c:1300
 msgid "New window"
 msgstr "Nova finestra"
 
-#: ../src/layout_util.c:1262
+#: ../src/layout_util.c:1301
 msgid "_New collection"
 msgstr "_Nova col·lecció"
 
-#: ../src/layout_util.c:1262
+#: ../src/layout_util.c:1301
 msgid "New collection"
 msgstr "Nova col·lecció"
 
-#: ../src/layout_util.c:1263
+#: ../src/layout_util.c:1302
 msgid "_Open collection..."
 msgstr "_Obre una col·lecció..."
 
-#: ../src/layout_util.c:1263
+#: ../src/layout_util.c:1302
 msgid "Open collection..."
 msgstr "Obre una col·lecció..."
 
-#: ../src/layout_util.c:1264
+#: ../src/layout_util.c:1303
 msgid "Open recen_t"
 msgstr "Obre recen_ts"
 
-#: ../src/layout_util.c:1264
+#: ../src/layout_util.c:1303
 msgid "Open recent"
 msgstr "Obre recents"
 
-#: ../src/layout_util.c:1265
+#: ../src/layout_util.c:1304
 msgid "_Search..."
 msgstr "_Cerca..."
 
-#: ../src/layout_util.c:1265
+#: ../src/layout_util.c:1304
 msgid "Search..."
 msgstr "Cerca..."
 
-#: ../src/layout_util.c:1266
+#: ../src/layout_util.c:1305
 msgid "Find duplicates..."
 msgstr "Cerca imatges duplicades"
 
-#: ../src/layout_util.c:1267
+#: ../src/layout_util.c:1306
 msgid "Pa_n view"
 msgstr "Vista pa_noràmica"
 
-#: ../src/layout_util.c:1267
+#: ../src/layout_util.c:1306
 msgid "Pan view"
 msgstr "Vista panoràmica"
 
-#: ../src/layout_util.c:1268
+#: ../src/layout_util.c:1307
 msgid "_Print..."
 msgstr "_Imprimeix..."
 
-#: ../src/layout_util.c:1269
+#: ../src/layout_util.c:1308
 msgid "N_ew folder..."
 msgstr "_Nova carpeta..."
 
-#: ../src/layout_util.c:1269
+#: ../src/layout_util.c:1308
 msgid "New folder..."
 msgstr "Nova carpeta..."
 
-#: ../src/layout_util.c:1270
+#: ../src/layout_util.c:1309
 msgid "Copy..."
 msgstr "Copia..."
 
-#: ../src/layout_util.c:1271
+#: ../src/layout_util.c:1310
 msgid "Move..."
 msgstr "Mou..."
 
-#: ../src/layout_util.c:1272
+#: ../src/layout_util.c:1311
 msgid "Rename..."
 msgstr "Canvia el nom..."
 
-#: ../src/layout_util.c:1273 ../src/layout_util.c:1274
-#: ../src/layout_util.c:1275
+#: ../src/layout_util.c:1312 ../src/layout_util.c:1313
+#: ../src/layout_util.c:1314
 msgid "Delete..."
 msgstr "Suprimeix..."
 
-#: ../src/layout_util.c:1276 ../src/view_file.c:603
+#: ../src/layout_util.c:1315 ../src/view_file.c:603
 msgid "Enable file _grouping"
 msgstr "Habilita els _grups de fitxers"
 
-#: ../src/layout_util.c:1276
+#: ../src/layout_util.c:1315
 msgid "Enable file grouping"
 msgstr "Habilita els grups de fitxers"
 
-#: ../src/layout_util.c:1277 ../src/view_file.c:605
+#: ../src/layout_util.c:1316 ../src/view_file.c:605
 msgid "Disable file groupi_ng"
 msgstr "I_nhabilita els grups de fitxers"
 
-#: ../src/layout_util.c:1277
+#: ../src/layout_util.c:1316
 msgid "Disable file grouping"
 msgstr "Inhabilita els grups de fitxers"
 
-#: ../src/layout_util.c:1278
+#: ../src/layout_util.c:1317
 msgid "_Copy path to clipboard"
 msgstr "_Copia el camí al portapapers"
 
-#: ../src/layout_util.c:1278
+#: ../src/layout_util.c:1317
 msgid "Copy path to clipboard"
 msgstr "Copia el camí al portapapers"
 
-#: ../src/layout_util.c:1279
+#: ../src/layout_util.c:1318
 msgid "Close window"
 msgstr "Tanca la finestra"
 
-#: ../src/layout_util.c:1280
+#: ../src/layout_util.c:1319
 msgid "_Quit"
 msgstr "_Surt"
 
-#: ../src/layout_util.c:1280
+#: ../src/layout_util.c:1319
 msgid "Quit"
 msgstr "Surt"
 
-#: ../src/layout_util.c:1281 ../src/menu.c:218
+#: ../src/layout_util.c:1320 ../src/menu.c:222
 msgid "_Rotate clockwise"
 msgstr "_Gira en sentit horari"
 
-#: ../src/layout_util.c:1281
+#: ../src/layout_util.c:1320
 msgid "Rotate clockwise"
 msgstr "Gira en sentit horari"
 
-#: ../src/layout_util.c:1282 ../src/menu.c:221
+#: ../src/layout_util.c:1321 ../src/menu.c:225
 msgid "Rotate _counterclockwise"
 msgstr "Gira en sentit _antihorari"
 
-#: ../src/layout_util.c:1282
+#: ../src/layout_util.c:1321
 msgid "Rotate counterclockwise"
 msgstr "Gira en sentit antihorari"
 
-#: ../src/layout_util.c:1283
+#: ../src/layout_util.c:1322
 msgid "Rotate 1_80"
 msgstr "Gira 1_80"
 
-#: ../src/layout_util.c:1283
+#: ../src/layout_util.c:1322
 msgid "Rotate 180"
 msgstr "Gira 180"
 
-#: ../src/layout_util.c:1284 ../src/menu.c:227
+#: ../src/layout_util.c:1323 ../src/menu.c:231
 msgid "_Mirror"
 msgstr "_Reflexa"
 
-#: ../src/layout_util.c:1284
+#: ../src/layout_util.c:1323
 msgid "Mirror"
 msgstr "Reflexa"
 
-#: ../src/layout_util.c:1285 ../src/menu.c:230
+#: ../src/layout_util.c:1324 ../src/menu.c:234
 msgid "_Flip"
 msgstr "_Inverteix"
 
-#: ../src/layout_util.c:1285
+#: ../src/layout_util.c:1324
 msgid "Flip"
 msgstr "Inverteix"
 
-#: ../src/layout_util.c:1286 ../src/menu.c:233
+#: ../src/layout_util.c:1325 ../src/menu.c:237
 msgid "_Original state"
 msgstr "Estat _original"
 
-#: ../src/layout_util.c:1286
+#: ../src/layout_util.c:1325
 msgid "Original state"
 msgstr "Estat original"
 
-#: ../src/layout_util.c:1287
+#: ../src/layout_util.c:1326
 msgid "Select _all"
 msgstr "Selecciona-ho _tot"
 
-#: ../src/layout_util.c:1288
+#: ../src/layout_util.c:1327
 msgid "Select _none"
 msgstr "_Desfés la selecció"
 
-#: ../src/layout_util.c:1289
+#: ../src/layout_util.c:1328
 msgid "_Invert Selection"
 msgstr "_Inverteix la Selecció"
 
-#: ../src/layout_util.c:1289
+#: ../src/layout_util.c:1328
 msgid "Invert Selection"
 msgstr "Inverteix la Selecció"
 
-#: ../src/layout_util.c:1290
+#: ../src/layout_util.c:1329
 msgid "P_references..."
 msgstr "P_referències..."
 
-#: ../src/layout_util.c:1290
+#: ../src/layout_util.c:1329
 msgid "Preferences..."
 msgstr "Preferències..."
 
-#: ../src/layout_util.c:1291
+#: ../src/layout_util.c:1330
 msgid "Configure _Editors..."
 msgstr "Configura els _editors..."
 
-#: ../src/layout_util.c:1291
+#: ../src/layout_util.c:1330
 msgid "Configure Editors..."
 msgstr "Configura els editors..."
 
-#: ../src/layout_util.c:1292
+#: ../src/layout_util.c:1331
 msgid "_Configure this window..."
 msgstr "_Configura aquesta finestra..."
 
-#: ../src/layout_util.c:1292
+#: ../src/layout_util.c:1331
 msgid "Configure this window..."
 msgstr "Configura aquesta finestra..."
 
-#: ../src/layout_util.c:1293
+#: ../src/layout_util.c:1332
 msgid "_Thumbnail maintenance..."
 msgstr "Manteniment de les _Miniatures..."
 
-#: ../src/layout_util.c:1293
+#: ../src/layout_util.c:1332
 msgid "Thumbnail maintenance..."
 msgstr "Manteniment de les Miniatures..."
 
-#: ../src/layout_util.c:1294
+#: ../src/layout_util.c:1333
 msgid "Set as wallpaper"
 msgstr "Posa com a fons d'escriptori"
 
-#: ../src/layout_util.c:1295
+#: ../src/layout_util.c:1334
 msgid "_Save metadata"
 msgstr "De_sa les metadades"
 
-#: ../src/layout_util.c:1295
+#: ../src/layout_util.c:1334
 msgid "Save metadata"
 msgstr "Desa les metadades"
 
-#: ../src/layout_util.c:1296 ../src/layout_util.c:1297
+#: ../src/layout_util.c:1335 ../src/layout_util.c:1336
 msgid "Zoom in"
 msgstr "Apropa"
 
-#: ../src/layout_util.c:1298 ../src/layout_util.c:1299
+#: ../src/layout_util.c:1337 ../src/layout_util.c:1338
 msgid "Zoom out"
 msgstr "Allunya"
 
-#: ../src/layout_util.c:1300 ../src/layout_util.c:1301
+#: ../src/layout_util.c:1339 ../src/layout_util.c:1340
 msgid "Zoom 1:1"
 msgstr "Escala real"
 
-#: ../src/layout_util.c:1302 ../src/layout_util.c:1303
-#: ../src/layout_util.c:1318 ../src/layout_util.c:1319
+#: ../src/layout_util.c:1341 ../src/layout_util.c:1342
+#: ../src/layout_util.c:1357 ../src/layout_util.c:1358
 msgid "_Zoom to fit"
 msgstr "_Amplia fins que encaixi"
 
-#: ../src/layout_util.c:1302 ../src/layout_util.c:1303
+#: ../src/layout_util.c:1341 ../src/layout_util.c:1342
 msgid "Zoom to fit"
 msgstr "Amplia fins que encaixi"
 
-#: ../src/layout_util.c:1304 ../src/layout_util.c:1320
+#: ../src/layout_util.c:1343 ../src/layout_util.c:1359
 msgid "Fit _Horizontally"
 msgstr "Ajusta _Horitzontalment"
 
-#: ../src/layout_util.c:1304
+#: ../src/layout_util.c:1343
 msgid "Fit Horizontally"
 msgstr "Ajusta Horitzontalment"
 
-#: ../src/layout_util.c:1305 ../src/layout_util.c:1321
+#: ../src/layout_util.c:1344 ../src/layout_util.c:1360
 msgid "Fit _Vertically"
 msgstr "Ajusta _Verticalment"
 
-#: ../src/layout_util.c:1305
+#: ../src/layout_util.c:1344
 msgid "Fit Vertically"
 msgstr "Ajusta Verticalment"
 
-#: ../src/layout_util.c:1306 ../src/layout_util.c:1322
+#: ../src/layout_util.c:1345 ../src/layout_util.c:1361
 msgid "Zoom _2:1"
 msgstr "Escala _2:1"
 
-#: ../src/layout_util.c:1306
+#: ../src/layout_util.c:1345
 msgid "Zoom 2:1"
 msgstr "Escala 2:1"
 
-#: ../src/layout_util.c:1307 ../src/layout_util.c:1323
+#: ../src/layout_util.c:1346 ../src/layout_util.c:1362
 msgid "Zoom _3:1"
 msgstr "Escala _3:1"
 
-#: ../src/layout_util.c:1307
+#: ../src/layout_util.c:1346
 msgid "Zoom 3:1"
 msgstr "Escala 3:1"
 
-#: ../src/layout_util.c:1308 ../src/layout_util.c:1324
+#: ../src/layout_util.c:1347 ../src/layout_util.c:1363
 msgid "Zoom _4:1"
 msgstr "Escala _4:1"
 
-#: ../src/layout_util.c:1308
+#: ../src/layout_util.c:1347
 msgid "Zoom 4:1"
 msgstr "Escala 4:1"
 
-#: ../src/layout_util.c:1309 ../src/layout_util.c:1325
+#: ../src/layout_util.c:1348 ../src/layout_util.c:1364
 msgid "Zoom 1:2"
 msgstr "Escala 1:2"
 
-#: ../src/layout_util.c:1310 ../src/layout_util.c:1326
+#: ../src/layout_util.c:1349 ../src/layout_util.c:1365
 msgid "Zoom 1:3"
 msgstr "Escala 1:3"
 
-#: ../src/layout_util.c:1311 ../src/layout_util.c:1327
+#: ../src/layout_util.c:1350 ../src/layout_util.c:1366
 msgid "Zoom 1:4"
 msgstr "Escala 1:4"
 
-#: ../src/layout_util.c:1312 ../src/layout_util.c:1313
+#: ../src/layout_util.c:1351 ../src/layout_util.c:1352
 msgid "Connected Zoom in"
 msgstr "Ampliació connectada"
 
-#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+#: ../src/layout_util.c:1353 ../src/layout_util.c:1354
 msgid "Connected Zoom out"
 msgstr "Reducció connectada"
 
-#: ../src/layout_util.c:1316 ../src/layout_util.c:1317
+#: ../src/layout_util.c:1355 ../src/layout_util.c:1356
 msgid "Connected Zoom 1:1"
 msgstr "Escala real connectada"
 
-#: ../src/layout_util.c:1318 ../src/layout_util.c:1319
+#: ../src/layout_util.c:1357 ../src/layout_util.c:1358
 msgid "Connected Zoom to fit"
 msgstr "Ampliació fins que encaixi connectada"
 
-#: ../src/layout_util.c:1320
+#: ../src/layout_util.c:1359
 msgid "Connected Fit Horizontally"
 msgstr "Ajusta Horitzontalment connectat"
 
-#: ../src/layout_util.c:1321
+#: ../src/layout_util.c:1360
 msgid "Connected Fit Vertically"
 msgstr "Ajusta Verticalment connectat"
 
-#: ../src/layout_util.c:1322
+#: ../src/layout_util.c:1361
 msgid "Connected Zoom 2:1"
 msgstr "Escala 2:1 connectada"
 
-#: ../src/layout_util.c:1323
+#: ../src/layout_util.c:1362
 msgid "Connected Zoom 3:1"
 msgstr "Escala 3:1 connectada"
 
-#: ../src/layout_util.c:1324
+#: ../src/layout_util.c:1363
 msgid "Connected Zoom 4:1"
 msgstr "Escala 4:1 connectada"
 
-#: ../src/layout_util.c:1325
+#: ../src/layout_util.c:1364
 msgid "Connected Zoom 1:2"
 msgstr "Escala 1:2 connectada"
 
-#: ../src/layout_util.c:1326
+#: ../src/layout_util.c:1365
 msgid "Connected Zoom 1:3"
 msgstr "Escala 1:3 connectada"
 
-#: ../src/layout_util.c:1327
+#: ../src/layout_util.c:1366
 msgid "Connected Zoom 1:4"
 msgstr "Escala 1:4 connectada"
 
-#: ../src/layout_util.c:1328
+#: ../src/layout_util.c:1367
 msgid "_View in new window"
-msgstr "_Visualitzar en una finestra nova"
+msgstr "_Visualitza en una finestra nova"
 
-#: ../src/layout_util.c:1328
+#: ../src/layout_util.c:1367
 msgid "View in new window"
-msgstr "Visualitzar en una finestra nova"
+msgstr "Visualitza en una finestra nova"
 
-#: ../src/layout_util.c:1329 ../src/layout_util.c:1330
-#: ../src/layout_util.c:1331
+#: ../src/layout_util.c:1368 ../src/layout_util.c:1369
+#: ../src/layout_util.c:1370
 msgid "F_ull screen"
 msgstr "_Pantalla completa"
 
-#: ../src/layout_util.c:1332 ../src/layout_util.c:1333
+#: ../src/layout_util.c:1371 ../src/layout_util.c:1372
 msgid "_Leave full screen"
 msgstr "_Surt de la pantalla completa"
 
-#: ../src/layout_util.c:1332 ../src/layout_util.c:1333
+#: ../src/layout_util.c:1371 ../src/layout_util.c:1372
 msgid "Leave full screen"
 msgstr "Surt de la pantalla completa"
 
-#: ../src/layout_util.c:1334
+#: ../src/layout_util.c:1373
 msgid "_Cycle through overlay modes"
 msgstr "_Commuta a través dels modes de capa"
 
-#: ../src/layout_util.c:1334
+#: ../src/layout_util.c:1373
 msgid "Cycle through Overlay modes"
 msgstr "Commuta a través dels modes de capa"
 
-#: ../src/layout_util.c:1335
+#: ../src/layout_util.c:1374
 msgid "Cycle through histogram ch_annels"
 msgstr "Commuta a través dels c_anals  d'histograma"
 
-#: ../src/layout_util.c:1335
+#: ../src/layout_util.c:1374
 msgid "Cycle through histogram channels"
 msgstr "Commuta a través dels canals  d'histograma"
 
-#: ../src/layout_util.c:1336
+#: ../src/layout_util.c:1375
 msgid "Cycle through histogram mo_des"
 msgstr "Commuta a través dels mo_des  d'histograma"
 
-#: ../src/layout_util.c:1336
+#: ../src/layout_util.c:1375
 msgid "Cycle through histogram modes"
 msgstr "Commuta a través dels modes  d'histograma"
 
-#: ../src/layout_util.c:1337
+#: ../src/layout_util.c:1376
 msgid "_Hide file list"
 msgstr "Oculta la _llista de fitxers"
 
-#: ../src/layout_util.c:1337
+#: ../src/layout_util.c:1376
 msgid "Hide file list"
 msgstr "Oculta la llista de fitxers"
 
-#: ../src/layout_util.c:1338
+#: ../src/layout_util.c:1377
 msgid "_Pause slideshow"
 msgstr "_Pausa la seqüència de diapositives"
 
-#: ../src/layout_util.c:1338
+#: ../src/layout_util.c:1377
 msgid "Pause slideshow"
 msgstr "Pausa la seqüència de diapositives"
 
-#: ../src/layout_util.c:1339
+#: ../src/layout_util.c:1378
 msgid "_Refresh"
 msgstr "_Actualitza"
 
-#: ../src/layout_util.c:1339
+#: ../src/layout_util.c:1378
 msgid "Refresh"
 msgstr "Actualitza"
 
-#: ../src/layout_util.c:1340
+#: ../src/layout_util.c:1379
 msgid "_Contents"
 msgstr "C_ontinguts"
 
-#: ../src/layout_util.c:1340
+#: ../src/layout_util.c:1379
 msgid "Contents"
 msgstr "Continguts"
 
-#: ../src/layout_util.c:1341
+#: ../src/layout_util.c:1380
 msgid "_Keyboard shortcuts"
 msgstr "_Tecles de drecera"
 
-#: ../src/layout_util.c:1341
+#: ../src/layout_util.c:1380
 msgid "Keyboard shortcuts"
 msgstr "Tecles de drecera"
 
-#: ../src/layout_util.c:1342
+#: ../src/layout_util.c:1381
 msgid "_Release notes"
 msgstr "_Notes de la versió"
 
-#: ../src/layout_util.c:1342
+#: ../src/layout_util.c:1381
 msgid "Release notes"
 msgstr "Notes de la versió"
 
-#: ../src/layout_util.c:1343
+#: ../src/layout_util.c:1382
 msgid "_About"
 msgstr "_Quant a"
 
-#: ../src/layout_util.c:1343 ../src/preferences.c:2108
+#: ../src/layout_util.c:1382 ../src/preferences.c:2381
 msgid "About"
 msgstr "Quant a"
 
-#: ../src/layout_util.c:1344
+#: ../src/layout_util.c:1383
 msgid "_Log Window"
 msgstr "Finestra de _Registre"
 
-#: ../src/layout_util.c:1344
+#: ../src/layout_util.c:1383
 msgid "Log Window"
 msgstr "Finestra de Registre"
 
-#: ../src/layout_util.c:1345
+#: ../src/layout_util.c:1384
 msgid "_Exif window"
 msgstr "Finestra _Exif"
 
-#: ../src/layout_util.c:1345
+#: ../src/layout_util.c:1384
 msgid "Exif window"
 msgstr "Finestra Exif"
 
-#: ../src/layout_util.c:1350
+#: ../src/layout_util.c:1385
+msgid "_Cycle through stereo modes"
+msgstr "_Commuta a través dels modes estèreo"
+
+#: ../src/layout_util.c:1385
+msgid "Cycle through stereo modes"
+msgstr "Commuta a través dels modes estèreo"
+
+#: ../src/layout_util.c:1390
 msgid "Show _Thumbnails"
 msgstr "Mostra les _miniatures"
 
-#: ../src/layout_util.c:1350
+#: ../src/layout_util.c:1390
 msgid "Show Thumbnails"
 msgstr "Mostra les miniatures"
 
-#: ../src/layout_util.c:1351
+#: ../src/layout_util.c:1391
 msgid "Show _Marks"
-msgstr "Mostra les _Marques"
+msgstr "Mostra les _marques"
 
-#: ../src/layout_util.c:1351
+#: ../src/layout_util.c:1391
 msgid "Show Marks"
 msgstr "Mostra les Marques"
 
-#: ../src/layout_util.c:1352
+#: ../src/layout_util.c:1392
 msgid "Pi_xel Info"
 msgstr "Informació del pí_xel"
 
-#: ../src/layout_util.c:1352
+#: ../src/layout_util.c:1392
 msgid "Show Pixel Info"
 msgstr "Mostra la informació del píxel"
 
-#: ../src/layout_util.c:1353
+#: ../src/layout_util.c:1393
 msgid "_Float file list"
 msgstr "_Llista de fitxers flotant"
 
-#: ../src/layout_util.c:1353
+#: ../src/layout_util.c:1393
 msgid "Float file list"
 msgstr "Llista de fitxers flotant"
 
-#: ../src/layout_util.c:1354
+#: ../src/layout_util.c:1394
 msgid "Hide tool_bar"
 msgstr "Oculta la _barra d'eines"
 
-#: ../src/layout_util.c:1354
+#: ../src/layout_util.c:1394
 msgid "Hide toolbar"
 msgstr "Oculta la barra d'eines"
 
-#: ../src/layout_util.c:1355
+#: ../src/layout_util.c:1395
 msgid "_Info sidebar"
 msgstr "Barra lateral d'_informació"
 
-#: ../src/layout_util.c:1355
+#: ../src/layout_util.c:1395
 msgid "Info sidebar"
 msgstr "Barra lateral d'informació"
 
-#: ../src/layout_util.c:1356
+#: ../src/layout_util.c:1396
 msgid "Sort _manager"
 msgstr "_Gestor d'ordenació"
 
-#: ../src/layout_util.c:1356
+#: ../src/layout_util.c:1396
 msgid "Sort manager"
 msgstr "Gestor d'ordenació"
 
-#: ../src/layout_util.c:1357
+#: ../src/layout_util.c:1397
 msgid "Toggle _slideshow"
 msgstr "_Commuta la projecció de diapositives"
 
-#: ../src/layout_util.c:1357
+#: ../src/layout_util.c:1397
 msgid "Toggle slideshow"
 msgstr "Commuta la projecció de diapositives"
 
-#: ../src/layout_util.c:1358
+#: ../src/layout_util.c:1398
 msgid "Use _color profiles"
 msgstr "Utilitza els perfils de _color"
 
-#: ../src/layout_util.c:1358
+#: ../src/layout_util.c:1398
 msgid "Use color profiles"
 msgstr "Utilitza els perfils de color"
 
-#: ../src/layout_util.c:1359
+#: ../src/layout_util.c:1399
 msgid "Use profile from _image"
 msgstr "Utilitza els perfils de la _imatge"
 
-#: ../src/layout_util.c:1359
+#: ../src/layout_util.c:1399
 msgid "Use profile from image"
 msgstr "Utilitza els perfils de la imatge"
 
-#: ../src/layout_util.c:1360
+#: ../src/layout_util.c:1400
 msgid "Toggle _grayscale"
 msgstr "Commuta l'escala de _grisos"
 
-#: ../src/layout_util.c:1360
+#: ../src/layout_util.c:1400
 msgid "Toggle grayscale"
 msgstr "Commuta l'escala de grisos"
 
-#: ../src/layout_util.c:1361
+#: ../src/layout_util.c:1401
 msgid "Image Overlay"
 msgstr "Imatge sobreposada"
 
-#: ../src/layout_util.c:1362
+#: ../src/layout_util.c:1402
 msgid "_Show Histogram"
 msgstr "_Mostra l'histograma"
 
-#: ../src/layout_util.c:1362
+#: ../src/layout_util.c:1402
 msgid "Show Histogram"
 msgstr "Mostra l'histograma"
 
-#: ../src/layout_util.c:1366
+#: ../src/layout_util.c:1406
 msgid "Image _List"
 msgstr "_Llista d'imatges"
 
-#: ../src/layout_util.c:1366
+#: ../src/layout_util.c:1406
 msgid "View Images as List"
 msgstr "Mostra les imatges en una llista"
 
-#: ../src/layout_util.c:1367
+#: ../src/layout_util.c:1407
 msgid "I_cons"
 msgstr "_Icones"
 
-#: ../src/layout_util.c:1367
+#: ../src/layout_util.c:1407
 msgid "View Images as Icons"
 msgstr "Mostra les imatges com a icones"
 
-#: ../src/layout_util.c:1371
+#: ../src/layout_util.c:1411
 msgid "Folder Li_st"
 msgstr "Li_sta de carpetes"
 
-#: ../src/layout_util.c:1371
+#: ../src/layout_util.c:1411
 msgid "View Folders as List"
 msgstr "Mostra les carpetes en una llista"
 
-#: ../src/layout_util.c:1372
+#: ../src/layout_util.c:1412
 msgid "Folder T_ree"
 msgstr "A_rbre de carpetes"
 
-#: ../src/layout_util.c:1372
+#: ../src/layout_util.c:1412
 msgid "View Folders as Tree"
 msgstr "Mostra les carpetes en arbre"
 
-#: ../src/layout_util.c:1376
+#: ../src/layout_util.c:1416
 msgid "_Horizontal"
 msgstr "_Horitzontal"
 
-#: ../src/layout_util.c:1376
+#: ../src/layout_util.c:1416
 msgid "Split Horizontal"
 msgstr "Divideix _Horitzontalment"
 
-#: ../src/layout_util.c:1377
+#: ../src/layout_util.c:1417
 msgid "_Vertical"
 msgstr "_Vertical"
 
-#: ../src/layout_util.c:1377
+#: ../src/layout_util.c:1417
 msgid "Split Vertical"
 msgstr "Divideix _Verticalment"
 
-#: ../src/layout_util.c:1378
+#: ../src/layout_util.c:1418
 msgid "_Quad"
 msgstr "_Quatre"
 
-#: ../src/layout_util.c:1378
+#: ../src/layout_util.c:1418
 msgid "Split Quad"
 msgstr "Divideix en quatre"
 
-#: ../src/layout_util.c:1379
+#: ../src/layout_util.c:1419
 msgid "_Single"
 msgstr "Sola"
 
-#: ../src/layout_util.c:1379
+#: ../src/layout_util.c:1419
 msgid "Split Single"
 msgstr "Deixa sola"
 
-#: ../src/layout_util.c:1383
+#: ../src/layout_util.c:1423
 msgid "Input _0: sRGB"
-msgstr "Entrada _0:sRGB"
+msgstr "Entrada _0: sRGB"
 
-#: ../src/layout_util.c:1383
+#: ../src/layout_util.c:1423
 msgid "Input 0: sRGB"
-msgstr "Entrada 0:sRGB"
+msgstr "Entrada 0: sRGB"
 
-#: ../src/layout_util.c:1384
+#: ../src/layout_util.c:1424
 msgid "Input _1: AdobeRGB compatible"
-msgstr "Entrada_1: Compatible amb AdobeRGB"
+msgstr "Entrada _1: Compatible amb AdobeRGB"
 
-#: ../src/layout_util.c:1384
+#: ../src/layout_util.c:1424
 msgid "Input 1: AdobeRGB compatible"
-msgstr "Entrada_1: Compatible amb AdobeRGB"
+msgstr "Entrada _1: Compatible amb AdobeRGB"
 
-#: ../src/layout_util.c:1385
+#: ../src/layout_util.c:1425
 msgid "Input _2"
 msgstr "Entrada _2"
 
-#: ../src/layout_util.c:1385
+#: ../src/layout_util.c:1425
 msgid "Input 2"
 msgstr "Entrada 2"
 
-#: ../src/layout_util.c:1386
+#: ../src/layout_util.c:1426
 msgid "Input _3"
 msgstr "Entrada _3"
 
-#: ../src/layout_util.c:1386
+#: ../src/layout_util.c:1426
 msgid "Input 3"
 msgstr "Entrada 3"
 
-#: ../src/layout_util.c:1387
+#: ../src/layout_util.c:1427
 msgid "Input _4"
 msgstr "Entrada _4"
 
-#: ../src/layout_util.c:1387
+#: ../src/layout_util.c:1427
 msgid "Input 4"
 msgstr "Entrada 4"
 
-#: ../src/layout_util.c:1388
+#: ../src/layout_util.c:1428
 msgid "Input _5"
 msgstr "Entrada _5"
 
-#: ../src/layout_util.c:1388
+#: ../src/layout_util.c:1428
 msgid "Input 5"
 msgstr "Entrada 5"
 
-#: ../src/layout_util.c:1392
+#: ../src/layout_util.c:1432
 msgid "Histogram on Red"
 msgstr "Histograma del vermell"
 
-#: ../src/layout_util.c:1393
+#: ../src/layout_util.c:1433
 msgid "Histogram on Green"
 msgstr "Histograma del verd"
 
-#: ../src/layout_util.c:1394
+#: ../src/layout_util.c:1434
 msgid "Histogram on Blue"
 msgstr "Histograma del blau"
 
-#: ../src/layout_util.c:1395
+#: ../src/layout_util.c:1435
 msgid "Histogram on RGB"
 msgstr "Histograma del RGB"
 
-#: ../src/layout_util.c:1396
+#: ../src/layout_util.c:1436
 msgid "Histogram on Value"
 msgstr "histograma segons el valor"
 
-#: ../src/layout_util.c:1400
+#: ../src/layout_util.c:1440
 msgid "Linear Histogram"
 msgstr "histograma lineal"
 
-#: ../src/layout_util.c:1401
+#: ../src/layout_util.c:1441
 msgid "_Log Histogram"
 msgstr "Histograma _logarítmic"
 
-#: ../src/layout_util.c:1401
+#: ../src/layout_util.c:1441
 msgid "Log Histogram"
 msgstr "Histograma logarítmic"
 
-#: ../src/layout_util.c:1667
+#: ../src/layout_util.c:1445
+msgid "_Auto"
+msgstr "_Auto"
+
+#: ../src/layout_util.c:1445
+msgid "Stereo Auto"
+msgstr "Estèreo auto"
+
+#: ../src/layout_util.c:1446
+msgid "_Side by Side"
+msgstr "_De costat"
+
+#: ../src/layout_util.c:1446
+msgid "Stereo Side by Side"
+msgstr "Estèreo de costat"
+
+#: ../src/layout_util.c:1447
+msgid "_Cross"
+msgstr "_Creuat"
+
+#: ../src/layout_util.c:1447
+msgid "Stereo Cross"
+msgstr "Estèreo creuat"
+
+#: ../src/layout_util.c:1448
+msgid "_Off"
+msgstr "A_pagat"
+
+#: ../src/layout_util.c:1448
+msgid "Stereo Off"
+msgstr "Estèreo apagat"
+
+#: ../src/layout_util.c:1722
 #, c-format
 msgid "Mark _%d"
 msgstr "Marca _%d"
 
-#: ../src/layout_util.c:1668 ../src/view_file.c:540
+#: ../src/layout_util.c:1723 ../src/view_file.c:540
 #, c-format
 msgid "_Set mark %d"
 msgstr "_Posa marca %d"
 
-#: ../src/layout_util.c:1668
+#: ../src/layout_util.c:1723
 #, c-format
 msgid "Set mark %d"
 msgstr "Posa marca %d"
 
-#: ../src/layout_util.c:1669 ../src/view_file.c:541
+#: ../src/layout_util.c:1724 ../src/view_file.c:541
 #, c-format
 msgid "_Reset mark %d"
 msgstr "_Esborra marca %d"
 
-#: ../src/layout_util.c:1669
+#: ../src/layout_util.c:1724
 #, c-format
 msgid "Reset mark %d"
 msgstr "Esborra marca %d"
 
-#: ../src/layout_util.c:1670 ../src/layout_util.c:1671 ../src/view_file.c:542
+#: ../src/layout_util.c:1725 ../src/layout_util.c:1726 ../src/view_file.c:542
 #, c-format
 msgid "_Toggle mark %d"
 msgstr "_Commuta la marca %d"
 
-#: ../src/layout_util.c:1670 ../src/layout_util.c:1671
+#: ../src/layout_util.c:1725 ../src/layout_util.c:1726
 #, c-format
 msgid "Toggle mark %d"
 msgstr "Commuta la marca %d"
 
-#: ../src/layout_util.c:1672
+#: ../src/layout_util.c:1727
 #, c-format
 msgid "Se_lect mark %d"
 msgstr "Se_lecciona la marca %d"
 
-#: ../src/layout_util.c:1672 ../src/layout_util.c:1673
+#: ../src/layout_util.c:1727 ../src/layout_util.c:1728
 #, c-format
 msgid "Select mark %d"
 msgstr "Selecciona la marca %d"
 
-#: ../src/layout_util.c:1673 ../src/view_file.c:543
+#: ../src/layout_util.c:1728 ../src/view_file.c:543
 #, c-format
 msgid "_Select mark %d"
 msgstr "_Selecciona la marca %d"
 
-#: ../src/layout_util.c:1674 ../src/view_file.c:544
+#: ../src/layout_util.c:1729 ../src/view_file.c:544
 #, c-format
 msgid "_Add mark %d"
 msgstr "_Afegeix la marca %d"
 
-#: ../src/layout_util.c:1674
+#: ../src/layout_util.c:1729
 #, c-format
 msgid "Add mark %d"
 msgstr "Afegeix la marca %d"
 
-#: ../src/layout_util.c:1675 ../src/view_file.c:545
+#: ../src/layout_util.c:1730 ../src/view_file.c:545
 #, c-format
 msgid "_Intersection with mark %d"
 msgstr "_Intersecció amb la marca %d"
 
-#: ../src/layout_util.c:1675
+#: ../src/layout_util.c:1730
 #, c-format
 msgid "Intersection with mark %d"
 msgstr "Intersecció amb la marca %d"
 
-#: ../src/layout_util.c:1676 ../src/view_file.c:546
+#: ../src/layout_util.c:1731 ../src/view_file.c:546
 #, c-format
 msgid "_Unselect mark %d"
 msgstr "_No seleccionis la marca %d"
 
-#: ../src/layout_util.c:1676
+#: ../src/layout_util.c:1731
 #, c-format
 msgid "Unselect mark %d"
 msgstr "No seleccionis la marca %d"
 
-#: ../src/layout_util.c:1677
+#: ../src/layout_util.c:1732
 #, c-format
 msgid "_Filter mark %d"
 msgstr "_Filtra la marca %d"
 
-#: ../src/layout_util.c:1677
+#: ../src/layout_util.c:1732
 #, c-format
 msgid "Filter mark %d"
 msgstr "Filtra la marca %d"
 
-#: ../src/layout_util.c:2205
+#: ../src/layout_util.c:2263
 #, c-format
 msgid "Number of files with unsaved metadata: %d"
 msgstr "Nombre de fitxers amb medades sense desar: %d"
 
-#: ../src/layout_util.c:2211
+#: ../src/layout_util.c:2269
 msgid "No unsaved metadata"
 msgstr "No hi ha metadades sense desar"
 
-#: ../src/layout_util.c:2258
+#: ../src/layout_util.c:2316
 #, c-format
 msgid ""
 "Image profile: %s\n"
@@ -3043,15 +3101,15 @@ msgstr ""
 "Perfil d'imatge: %s\n"
 "Perfil de pantalla: %s"
 
-#: ../src/layout_util.c:2266
+#: ../src/layout_util.c:2324
 msgid "Click to enable color management"
 msgstr "Fes clic per habilitar la gestió de color"
 
-#: ../src/layout_util.c:2271
+#: ../src/layout_util.c:2329
 msgid "Color profiles not supported"
 msgstr "Perfils de color no suportats"
 
-#: ../src/layout_util.c:2293
+#: ../src/layout_util.c:2351
 #, c-format
 msgid "Input _%d: %s"
 msgstr "Entrada _%d: %s"
@@ -3207,7 +3265,7 @@ msgstr "Surt %s"
 msgid "Collections have been modified. Quit anyway?"
 msgstr "Les col·leccions han estat modificades. Voleu sortir igualment?"
 
-#: ../src/main.c:878 ../src/remote.c:601
+#: ../src/main.c:881 ../src/remote.c:601
 msgid "Command line"
 msgstr "Línia de comandes"
 
@@ -3220,262 +3278,267 @@ msgid "Sort by date"
 msgstr "Ordena segons la data"
 
 #: ../src/menu.c:139
+#, fuzzy
+msgid "Sort by Exif-date"
+msgstr "Ordena segons la data de l'Exif"
+
+#: ../src/menu.c:142
 msgid "Unsorted"
 msgstr "Desordenat"
 
-#: ../src/menu.c:142
+#: ../src/menu.c:145
 msgid "Sort by path"
 msgstr "Ordena segons el camí"
 
-#: ../src/menu.c:145
+#: ../src/menu.c:148
 msgid "Sort by number"
 msgstr "Ordena segons el número"
 
-#: ../src/menu.c:149
+#: ../src/menu.c:152
 msgid "Sort by name"
 msgstr "Ordena segons el nom"
 
-#: ../src/menu.c:199
+#: ../src/menu.c:203
 msgid "Sort"
 msgstr "Ordena"
 
-#: ../src/menu.c:224
+#: ../src/menu.c:228
 msgid "Rotate _180"
 msgstr "Gira _180"
 
-#: ../src/metadata.c:1443
+#: ../src/metadata.c:1599
 msgid "People"
 msgstr "Gent"
 
-#: ../src/metadata.c:1444
+#: ../src/metadata.c:1600
 msgid "Family"
 msgstr "Família"
 
-#: ../src/metadata.c:1445
+#: ../src/metadata.c:1601
 msgid "Free time"
 msgstr "Temps lliure"
 
-#: ../src/metadata.c:1446
+#: ../src/metadata.c:1602
 msgid "Children"
 msgstr "quitxalla"
 
-#: ../src/metadata.c:1447
+#: ../src/metadata.c:1603
 msgid "Sport"
 msgstr "Esport"
 
-#: ../src/metadata.c:1448
+#: ../src/metadata.c:1604
 msgid "Culture"
 msgstr "Cultura"
 
-#: ../src/metadata.c:1449
+#: ../src/metadata.c:1605
 msgid "Festival"
 msgstr "Festival"
 
-#: ../src/metadata.c:1450
+#: ../src/metadata.c:1606
 msgid "Nature"
 msgstr "Natura"
 
-#: ../src/metadata.c:1451
+#: ../src/metadata.c:1607
 msgid "Animal"
 msgstr "Animal"
 
-#: ../src/metadata.c:1452
+#: ../src/metadata.c:1608
 msgid "Bird"
 msgstr "Ocell"
 
-#: ../src/metadata.c:1453
+#: ../src/metadata.c:1609
 msgid "Insect"
 msgstr "Insecte"
 
-#: ../src/metadata.c:1454
+#: ../src/metadata.c:1610
 msgid "Pets"
 msgstr "Domèstic"
 
-#: ../src/metadata.c:1455
+#: ../src/metadata.c:1611
 msgid "Wildlife"
 msgstr "Salvatge"
 
-#: ../src/metadata.c:1456
+#: ../src/metadata.c:1612
 msgid "Zoo"
 msgstr "Zoo"
 
-#: ../src/metadata.c:1457
+#: ../src/metadata.c:1613
 msgid "Plant"
 msgstr "Planta"
 
-#: ../src/metadata.c:1458
+#: ../src/metadata.c:1614
 msgid "Tree"
 msgstr "Arbre"
 
-#: ../src/metadata.c:1459
+#: ../src/metadata.c:1615
 msgid "Flower"
 msgstr "Flor"
 
-#: ../src/metadata.c:1460
+#: ../src/metadata.c:1616
 msgid "Water"
 msgstr "Aigua"
 
-#: ../src/metadata.c:1461
+#: ../src/metadata.c:1617
 msgid "River"
 msgstr "Riu"
 
-#: ../src/metadata.c:1462
+#: ../src/metadata.c:1618
 msgid "Lake"
 msgstr "Llac"
 
-#: ../src/metadata.c:1463
+#: ../src/metadata.c:1619
 msgid "Sea"
 msgstr "Mar"
 
-#: ../src/metadata.c:1464 ../src/print.c:375
+#: ../src/metadata.c:1620 ../src/print.c:375
 msgid "Landscape"
 msgstr "Apaïsat"
 
-#: ../src/metadata.c:1465
+#: ../src/metadata.c:1621
 msgid "Art"
 msgstr "Art"
 
-#: ../src/metadata.c:1466
+#: ../src/metadata.c:1622
 msgid "Statue"
 msgstr "Estatua"
 
-#: ../src/metadata.c:1467
+#: ../src/metadata.c:1623
 msgid "Painting"
 msgstr "Pintura"
 
-#: ../src/metadata.c:1468 ../src/metadata.c:1482
+#: ../src/metadata.c:1624 ../src/metadata.c:1638
 msgid "Historic"
 msgstr "Històric"
 
-#: ../src/metadata.c:1469 ../src/metadata.c:1483
+#: ../src/metadata.c:1625 ../src/metadata.c:1639
 msgid "Modern"
 msgstr "Modern"
 
-#: ../src/metadata.c:1470
+#: ../src/metadata.c:1626
 msgid "City"
 msgstr "Ciutat"
 
-#: ../src/metadata.c:1471
+#: ../src/metadata.c:1627
 msgid "Park"
 msgstr "Parc"
 
-#: ../src/metadata.c:1472
+#: ../src/metadata.c:1628
 msgid "Street"
 msgstr "Carrer"
 
-#: ../src/metadata.c:1473
+#: ../src/metadata.c:1629
 msgid "Square"
 msgstr "Plaça"
 
-#: ../src/metadata.c:1474
+#: ../src/metadata.c:1630
 msgid "Architecture"
 msgstr "Arquitectura"
 
-#: ../src/metadata.c:1475
+#: ../src/metadata.c:1631
 msgid "Buildings"
 msgstr "Edificis"
 
-#: ../src/metadata.c:1476
+#: ../src/metadata.c:1632
 msgid "House"
 msgstr "Casa"
 
-#: ../src/metadata.c:1477
+#: ../src/metadata.c:1633
 msgid "Cathedral"
 msgstr "Catedral"
 
-#: ../src/metadata.c:1478
+#: ../src/metadata.c:1634
 msgid "Palace"
 msgstr "Palau"
 
-#: ../src/metadata.c:1479
+#: ../src/metadata.c:1635
 msgid "Castle"
 msgstr "Castell"
 
-#: ../src/metadata.c:1480
+#: ../src/metadata.c:1636
 msgid "Bridge"
 msgstr "Pont"
 
-#: ../src/metadata.c:1481
+#: ../src/metadata.c:1637
 msgid "Interior"
 msgstr "interior"
 
-#: ../src/metadata.c:1484
+#: ../src/metadata.c:1640
 msgid "Places"
 msgstr "Llocs"
 
-#: ../src/metadata.c:1485
+#: ../src/metadata.c:1641
 msgid "Conditions"
 msgstr "Condicions"
 
-#: ../src/metadata.c:1486
+#: ../src/metadata.c:1642
 msgid "Night"
 msgstr "Nit"
 
-#: ../src/metadata.c:1487
+#: ../src/metadata.c:1643
 msgid "Lights"
 msgstr "Llums"
 
-#: ../src/metadata.c:1488
+#: ../src/metadata.c:1644
 msgid "Reflections"
 msgstr "Reflexes"
 
-#: ../src/metadata.c:1489
+#: ../src/metadata.c:1645
 msgid "Sun"
 msgstr "Sol"
 
-#: ../src/metadata.c:1490
+#: ../src/metadata.c:1646
 msgid "Weather"
 msgstr "Clima"
 
-#: ../src/metadata.c:1491
+#: ../src/metadata.c:1647
 msgid "Fog"
 msgstr "Boira"
 
-#: ../src/metadata.c:1492
+#: ../src/metadata.c:1648
 msgid "Rain"
 msgstr "Pluja"
 
-#: ../src/metadata.c:1493
+#: ../src/metadata.c:1649
 msgid "Clouds"
 msgstr "Núvols"
 
-#: ../src/metadata.c:1494
+#: ../src/metadata.c:1650
 msgid "Snow"
 msgstr "Neu"
 
-#: ../src/metadata.c:1495
+#: ../src/metadata.c:1651
 msgid "Sunny weather"
 msgstr "Assolellat"
 
-#: ../src/metadata.c:1496
+#: ../src/metadata.c:1652
 msgid "Photo"
 msgstr "Foto"
 
-#: ../src/metadata.c:1497
+#: ../src/metadata.c:1653
 msgid "Edited"
 msgstr "Editada"
 
-#: ../src/metadata.c:1498
+#: ../src/metadata.c:1654
 msgid "Detail"
 msgstr "Detall"
 
-#: ../src/metadata.c:1499
+#: ../src/metadata.c:1655
 msgid "Macro"
 msgstr "Macro"
 
-#: ../src/metadata.c:1500 ../src/print.c:374
+#: ../src/metadata.c:1656 ../src/print.c:374
 msgid "Portrait"
 msgstr "Vertical"
 
-#: ../src/metadata.c:1501
+#: ../src/metadata.c:1657
 msgid "Black and White"
 msgstr "Blanc i negre"
 
-#: ../src/metadata.c:1502
+#: ../src/metadata.c:1658
 msgid "Perspective"
 msgstr "Perspectiva"
 
-#: ../src/options.c:138 ../src/ui_bookmark.c:550
+#: ../src/options.c:146 ../src/ui_bookmark.c:555
 msgid "Desktop"
 msgstr "Escriptori"
 
@@ -3501,128 +3564,128 @@ msgstr "S'estan llegint les dades de la imatge..."
 msgid "Sorting images..."
 msgstr "S'estan ordenant les imatges..."
 
-#: ../src/pan-view.c:1546 ../src/print.c:2601
+#: ../src/pan-view.c:1552 ../src/print.c:2613
 msgid "Filename:"
 msgstr "Nom del fitxer:"
 
-#: ../src/pan-view.c:1548 ../src/pan-view.c:2384 ../src/preferences.c:1353
+#: ../src/pan-view.c:1554 ../src/pan-view.c:2406 ../src/preferences.c:1544
 msgid "Location:"
 msgstr "Ubicació:"
 
-#: ../src/pan-view.c:1550 ../src/pan-view.c:1916
+#: ../src/pan-view.c:1556 ../src/pan-view.c:1922
 msgid "Date:"
 msgstr "Data:"
 
-#: ../src/pan-view.c:1552 ../src/preferences.c:1174 ../src/print.c:3214
-#: ../src/print.c:3425
+#: ../src/pan-view.c:1558 ../src/preferences.c:1362 ../src/print.c:3226
+#: ../src/print.c:3437
 msgid "Size:"
 msgstr "Mida:"
 
-#: ../src/pan-view.c:1654
+#: ../src/pan-view.c:1660
 msgid "path found"
 msgstr "s'ha trobat el camí"
 
-#: ../src/pan-view.c:1654
+#: ../src/pan-view.c:1660
 msgid "filename found"
 msgstr "s'ha trobat el nom del fitxer"
 
-#: ../src/pan-view.c:1702
+#: ../src/pan-view.c:1708
 msgid "partial match"
 msgstr "concordança parcial"
 
-#: ../src/pan-view.c:1913 ../src/pan-view.c:1946
+#: ../src/pan-view.c:1919 ../src/pan-view.c:1952
 msgid "no match"
 msgstr "sense concordança"
 
-#: ../src/pan-view.c:2272 ../src/search.c:2219
+#: ../src/pan-view.c:2294 ../src/search.c:2219
 msgid "Folder not found"
 msgstr "No s'ha trobat la carpeta"
 
-#: ../src/pan-view.c:2273
+#: ../src/pan-view.c:2295
 msgid "The entered path is not a folder"
 msgstr "El camí indicat no és una carpeta"
 
-#: ../src/pan-view.c:2368
+#: ../src/pan-view.c:2390
 msgid "Pan View"
 msgstr "Vista Panoràmica"
 
-#: ../src/pan-view.c:2393
+#: ../src/pan-view.c:2415
 msgid "Timeline"
 msgstr "Línia de temps"
 
-#: ../src/pan-view.c:2394
+#: ../src/pan-view.c:2416
 msgid "Calendar"
 msgstr "Calendari"
 
-#: ../src/pan-view.c:2396
+#: ../src/pan-view.c:2418
 msgid "Folders (flower)"
 msgstr "Carpetes (flor)"
 
-#: ../src/pan-view.c:2397
+#: ../src/pan-view.c:2419
 msgid "Grid"
 msgstr "Graella"
 
-#: ../src/pan-view.c:2406
+#: ../src/pan-view.c:2428
 msgid "Dots"
 msgstr "Punts"
 
-#: ../src/pan-view.c:2407
+#: ../src/pan-view.c:2429
 msgid "No Images"
 msgstr "Cap Imatge"
 
-#: ../src/pan-view.c:2408
+#: ../src/pan-view.c:2430
 msgid "Small Thumbnails"
 msgstr "Miniatures Petites"
 
-#: ../src/pan-view.c:2409
+#: ../src/pan-view.c:2431
 msgid "Normal Thumbnails"
 msgstr "Miniatures Normal"
 
-#: ../src/pan-view.c:2410
+#: ../src/pan-view.c:2432
 msgid "Large Thumbnails"
 msgstr "Miniatures Grans"
 
-#: ../src/pan-view.c:2411 ../src/pan-view.c:2871
+#: ../src/pan-view.c:2433 ../src/pan-view.c:2893
 msgid "1:10 (10%)"
 msgstr "1:10 (10%)"
 
-#: ../src/pan-view.c:2412 ../src/pan-view.c:2867
+#: ../src/pan-view.c:2434 ../src/pan-view.c:2889
 msgid "1:4 (25%)"
 msgstr "1:4 (25%)"
 
-#: ../src/pan-view.c:2413 ../src/pan-view.c:2863
+#: ../src/pan-view.c:2435 ../src/pan-view.c:2885
 msgid "1:3 (33%)"
 msgstr "1:3 (33%)"
 
-#: ../src/pan-view.c:2414 ../src/pan-view.c:2859
+#: ../src/pan-view.c:2436 ../src/pan-view.c:2881
 msgid "1:2 (50%)"
 msgstr "1:2 (50%)"
 
-#: ../src/pan-view.c:2415
+#: ../src/pan-view.c:2437
 msgid "1:1 (100%)"
 msgstr "1:1 (100%)"
 
-#: ../src/pan-view.c:2463
+#: ../src/pan-view.c:2485
 msgid "Find:"
 msgstr "Cerca:"
 
-#: ../src/pan-view.c:2506
+#: ../src/pan-view.c:2528
 msgid "Use Exif date"
 msgstr "Fes servir la data de l'Exif"
 
-#: ../src/pan-view.c:2519
+#: ../src/pan-view.c:2541
 msgid "Find"
 msgstr "Cerca"
 
-#: ../src/pan-view.c:2586
+#: ../src/pan-view.c:2608
 msgid "Pan View Performance"
 msgstr "Rendiment de la vista panoràmica"
 
-#: ../src/pan-view.c:2593
+#: ../src/pan-view.c:2615
 msgid "Pan view performance may be poor."
 msgstr "El rendiment de la vista panoràmica podria ser pobre."
 
-#: ../src/pan-view.c:2594
+#: ../src/pan-view.c:2616
 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 "
@@ -3632,35 +3695,35 @@ msgstr ""
 "activar les següents opcions. Fixeu-vos que cal activar les dues opcions per "
 "notar canvis en el rendiment."
 
-#: ../src/pan-view.c:2602 ../src/preferences.c:1177
+#: ../src/pan-view.c:2624 ../src/preferences.c:1365
 msgid "Cache thumbnails"
-msgstr "Desa les miniatures en memòria cau"
+msgstr "Desa les miniatures a la memòria cau"
 
-#: ../src/pan-view.c:2604
+#: ../src/pan-view.c:2626
 msgid "Use shared thumbnail cache"
 msgstr "Utilitza la memòria cau compartida de miniatures"
 
-#: ../src/pan-view.c:2610
+#: ../src/pan-view.c:2632
 msgid "Do not show this dialog again"
 msgstr "No tornis a mostrar aquesta finestra"
 
-#: ../src/pan-view.c:2839
+#: ../src/pan-view.c:2861
 msgid "Sort by E_xif date"
 msgstr "Ordena segons la data de l'Exif"
 
-#: ../src/pan-view.c:2845
+#: ../src/pan-view.c:2867
 msgid "_Show Exif information"
 msgstr "_Mostra la informació de l'Exif"
 
-#: ../src/pan-view.c:2847
+#: ../src/pan-view.c:2869
 msgid "Show im_age"
 msgstr "Mostra la im_atge"
 
-#: ../src/pan-view.c:2851
+#: ../src/pan-view.c:2873
 msgid "_None"
 msgstr "_Cap"
 
-#: ../src/pan-view.c:2855
+#: ../src/pan-view.c:2877
 msgid "_Full size"
 msgstr "_Mida Completa"
 
@@ -3672,43 +3735,79 @@ msgstr "Desconegut"
 msgid "RAW Image"
 msgstr "Imatge RAW"
 
-#: ../src/preferences.c:417
+#: ../src/preferences.c:439
 msgid "Nearest (worst, but fastest)"
 msgstr "El més proper (el pitjor, però el més ràpid)"
 
-#: ../src/preferences.c:419
+#: ../src/preferences.c:441
 msgid "Tiles"
 msgstr "Mosaic"
 
-#: ../src/preferences.c:421
+#: ../src/preferences.c:443
 msgid "Bilinear"
 msgstr "Bilineal"
 
-#: ../src/preferences.c:423
+#: ../src/preferences.c:445
 msgid "Hyper (best, but slowest)"
 msgstr "Hyper (el millor, però el més lent)"
 
-#: ../src/preferences.c:451
+#: ../src/preferences.c:473
 msgid "None"
 msgstr "Cap"
 
-#: ../src/preferences.c:452
+#: ../src/preferences.c:474
 msgid "Normal"
 msgstr "Normal"
 
-#: ../src/preferences.c:453
+#: ../src/preferences.c:475
 msgid "Best"
 msgstr "El millor"
 
-#: ../src/preferences.c:515 ../src/print.c:380
+#: ../src/preferences.c:537 ../src/print.c:380
 msgid "Custom"
 msgstr "Personalitzat"
 
-#: ../src/preferences.c:757 ../src/preferences.c:760
+#: ../src/preferences.c:602
+msgid "Single image"
+msgstr "Una sola imatge"
+
+#: ../src/preferences.c:604
+msgid "Anaglyph Red-Cyan"
+msgstr "Anàglif vermell-cian"
+
+#: ../src/preferences.c:606
+msgid "Anaglyph Gray Red-Cyan"
+msgstr "Anàglif gris vermell-cian"
+
+#: ../src/preferences.c:608
+msgid "Anaglyph Dubois"
+msgstr "Anàglif Dubois"
+
+#: ../src/preferences.c:611
+msgid "Side by Side"
+msgstr "De costat"
+
+#: ../src/preferences.c:612
+msgid "Side by Side Half size"
+msgstr "De costat i la meitat de petites"
+
+#: ../src/preferences.c:619
+msgid "Top - Bottom"
+msgstr "De dalt a baix"
+
+#: ../src/preferences.c:620
+msgid "Top - Bottom Half size"
+msgstr "De dalt a baix i la meitat de petites"
+
+#: ../src/preferences.c:629 ../src/preferences.c:2222
+msgid "Fixed position"
+msgstr "Posició fixa"
+
+#: ../src/preferences.c:926 ../src/preferences.c:929
 msgid "Reset filters"
 msgstr "Reinicia els filtres"
 
-#: ../src/preferences.c:761
+#: ../src/preferences.c:930
 msgid ""
 "This will reset the file filters to the defaults.\n"
 "Continue?"
@@ -3716,19 +3815,19 @@ msgstr ""
 "Això deixarà els filtres amb les opcions per defecte.\n"
 "Voleu continuar?"
 
-#: ../src/preferences.c:788 ../src/preferences.c:791
+#: ../src/preferences.c:957 ../src/preferences.c:960
 msgid "Clear trash"
 msgstr "Buida la paperera"
 
-#: ../src/preferences.c:792
+#: ../src/preferences.c:961
 msgid "This will remove the trash contents."
 msgstr "Això eliminarà el contingut de la paperera."
 
-#: ../src/preferences.c:836 ../src/preferences.c:839
+#: ../src/preferences.c:1005 ../src/preferences.c:1008
 msgid "Reset image overlay template string"
 msgstr "Reiniciar el text de la plantilla que es superposarà a la imatge"
 
-#: ../src/preferences.c:840
+#: ../src/preferences.c:1009
 msgid ""
 "This will reset the image overlay template string to the default.\n"
 "Continue?"
@@ -3737,204 +3836,209 @@ msgstr ""
 "per defecte.\n"
 "Voleu continuar?"
 
-#: ../src/preferences.c:1169
+#: ../src/preferences.c:1357
 msgid "General"
 msgstr "General"
 
-#: ../src/preferences.c:1175 ../src/preferences.c:1248
+#: ../src/preferences.c:1363 ../src/preferences.c:1436
 msgid "Quality:"
 msgstr "Qualitat:"
 
-#: ../src/preferences.c:1183
+#: ../src/preferences.c:1371
 msgid "Use standard thumbnail cache, shared with other applications"
 msgstr ""
-"Fes servir la memòria intermèdia estàndard per a les miniatures, compartida "
-"amb altres aplicacions"
+"Fes servir la memòria cau estàndard per a les miniatures, compartida amb "
+"altres aplicacions"
 
-#: ../src/preferences.c:1189
+#: ../src/preferences.c:1377
 msgid ""
 "Store thumbnails in '.thumbnails' folder, local to image folder (non-"
 "standard)"
 msgstr ""
-"Desa les miniatures a la carpeta'.thumnails', a la carpeta de les imatges "
+"Desa les miniatures a la carpeta '.thumnails', carpeta local de les imatges "
 "(no estàndard)"
 
-#: ../src/preferences.c:1193
+#: ../src/preferences.c:1381
 msgid "Use xvpics thumbnails when found (read only)"
 msgstr ""
 "Fes servir les miniatures de xvpics quan estiguin disponibles (només de "
 "lectura)"
 
-#: ../src/preferences.c:1197
+#: ../src/preferences.c:1385
 msgid "Use EXIF thumbnails when available (EXIF thumbnails may be outdated)"
 msgstr ""
 "Fes servir les miniatures de EXID quan estiguin disponibles (poden no estar "
 "actualitzades)"
 
-#: ../src/preferences.c:1200
+#: ../src/preferences.c:1388
 msgid "Slide show"
 msgstr "Projecció de diapositives"
 
-#: ../src/preferences.c:1203
+#: ../src/preferences.c:1391
 msgid "Delay between image change:"
 msgstr "Retard abans del canvi d'imatge:"
 
-#: ../src/preferences.c:1203
+#: ../src/preferences.c:1391
 msgid "seconds"
 msgstr "segons"
 
-#: ../src/preferences.c:1209
+#: ../src/preferences.c:1397
 msgid "Random"
 msgstr "Aleatori"
 
-#: ../src/preferences.c:1210
+#: ../src/preferences.c:1398
 msgid "Repeat"
 msgstr "Repeteix"
 
-#: ../src/preferences.c:1212
+#: ../src/preferences.c:1400
 msgid "Image loading and caching"
 msgstr "Lectura de les imatges i memòria cau"
 
-#: ../src/preferences.c:1215
+#: ../src/preferences.c:1403
 msgid "Offscreen cache size (Mb per image):"
 msgstr "Mida a la memòria cau fora d'enquadrament"
 
-#: ../src/preferences.c:1219
+#: ../src/preferences.c:1407
 msgid "Decoded image cache size (Mb):"
 msgstr "Mida a la memòria cau de la imatge descodificada (MB):"
 
-#: ../src/preferences.c:1221
+#: ../src/preferences.c:1409
 msgid "Preload next image"
 msgstr "Precarrega la següent imatge"
 
-#: ../src/preferences.c:1224
+#: ../src/preferences.c:1412
 msgid "Refresh on file change"
-msgstr "Actualitzar quant hi hagi un canvi a l'arxiu"
+msgstr "Actualitza quant hi hagi un canvi a l'arxiu"
 
-#: ../src/preferences.c:1242
+#: ../src/preferences.c:1430
 msgid "Zoom"
 msgstr "Ampliació"
 
-#: ../src/preferences.c:1245
+#: ../src/preferences.c:1433
 msgid "Dithering method:"
 msgstr "Mètode de tramat:"
 
-#: ../src/preferences.c:1250
+#: ../src/preferences.c:1438
 msgid "Two pass rendering (apply HQ zoom and color correction in second pass)"
 msgstr ""
 "renderització en dos pasos (aplica ampliació HQ i correcció de color al "
 "segon pas)"
 
-#: ../src/preferences.c:1253
+#: ../src/preferences.c:1441
 msgid "Allow enlargement of image for zoom to fit"
 msgstr "Permet l'ampliació de la imatge per que encaixi"
 
-#: ../src/preferences.c:1257
+#: ../src/preferences.c:1445
 msgid "Limit image size when autofitting (%):"
 msgstr "Limita la mida quan es dimensioni automàticament la finestra (%):"
 
-#: ../src/preferences.c:1265
+#: ../src/preferences.c:1453
 msgid "Zoom increment:"
 msgstr "Increment de l'ampliació:"
 
-#: ../src/preferences.c:1270
+#: ../src/preferences.c:1458
 msgid "When new image is selected:"
 msgstr "Quan se seleccioni una nova imatge:"
 
-#: ../src/preferences.c:1274
+#: ../src/preferences.c:1462
 msgid "Zoom to original size"
 msgstr "Mostra en la mida original"
 
-#: ../src/preferences.c:1277
+#: ../src/preferences.c:1465
 msgid "Fit image to window"
 msgstr "Ajusta la imatge a la finestra"
 
-#: ../src/preferences.c:1280
+#: ../src/preferences.c:1468
 msgid "Leave Zoom at previous setting"
 msgstr "Amplia com a l'estat anterior"
 
-#: ../src/preferences.c:1286
+#: ../src/preferences.c:1474
 msgid "Scroll to top left corner"
 msgstr "Desplaça't a la cantonada superior esquerra"
 
-#: ../src/preferences.c:1289
+#: ../src/preferences.c:1477
 msgid "Scroll to image center"
 msgstr "Desplaça't al centre de la imatge"
 
-#: ../src/preferences.c:1292
+#: ../src/preferences.c:1480
 msgid "Keep the region from previous image"
 msgstr "Conserva la zona de la imàtge prèvia"
 
-#: ../src/preferences.c:1297
+#: ../src/preferences.c:1485
 msgid "Appearance"
 msgstr "Aspecte"
 
-#: ../src/preferences.c:1299
+#: ../src/preferences.c:1487
 msgid "Use custom border color in window mode"
 msgstr "Fes servir el color de vora personalitzat en mode finestra"
 
-#: ../src/preferences.c:1302
+#: ../src/preferences.c:1490
 msgid "Use custom border color in fullscreen mode"
 msgstr "Fes servir el color de vora personalitzat en mode pantalla completa"
 
-#: ../src/preferences.c:1305
+#: ../src/preferences.c:1493
 msgid "Border color"
 msgstr "Color de la vora"
 
-#: ../src/preferences.c:1308
+#: ../src/preferences.c:1496
 msgid "Convenience"
 msgstr "Conveniència"
 
-#: ../src/preferences.c:1310
+#: ../src/preferences.c:1498
 msgid "Auto rotate image using Exif information"
-msgstr "Gira la imatge automàticament usant la informació Exif"
+msgstr "Gira la imatge automàticament fent servir la informació Exif"
 
-#: ../src/preferences.c:1327
+#: ../src/preferences.c:1501
+#, fuzzy
+msgid "Auto rotate proofs using Exif information"
+msgstr "Gira la imatge automàticament fent servir la informació Exif"
+
+#: ../src/preferences.c:1518
 msgid "Windows"
 msgstr "Finestres"
 
-#: ../src/preferences.c:1329
+#: ../src/preferences.c:1520
 msgid "State"
 msgstr "Estat"
 
-#: ../src/preferences.c:1331
+#: ../src/preferences.c:1522
 msgid "Remember window positions"
 msgstr "Recorda la posició de les finestres"
 
-#: ../src/preferences.c:1333
+#: ../src/preferences.c:1524
 msgid "Remember tool state (float/hidden)"
 msgstr "Recorda l'estat de les eines (en pantalla/ocult)"
 
-#: ../src/preferences.c:1338
+#: ../src/preferences.c:1529
 msgid "Fit window to image when tools are hidden/floating"
 msgstr ""
 "Ajusta la finestra a la imatge quan les eines estiguin amagades o flotant"
 
-#: ../src/preferences.c:1342
+#: ../src/preferences.c:1533
 msgid "Limit size when auto-sizing window (%):"
 msgstr "Limita la mida quan es dimensioni automaticament la finestra (%):"
 
-#: ../src/preferences.c:1357
+#: ../src/preferences.c:1548
 msgid "Smooth image flip"
 msgstr "Inverteix la imatge suaument"
 
-#: ../src/preferences.c:1359
+#: ../src/preferences.c:1550
 msgid "Disable screen saver"
 msgstr "Desactiva l'estalvi de pantalla"
 
-#: ../src/preferences.c:1363
+#: ../src/preferences.c:1554
 msgid "Overlay Screen Display"
 msgstr "Pantalla d'imatge sobreposada"
 
-#: ../src/preferences.c:1365
+#: ../src/preferences.c:1556
 msgid "Image overlay template"
 msgstr "Plantilla d'imatge sobreposada"
 
-#: ../src/preferences.c:1379
+#: ../src/preferences.c:1570
 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"
+"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"
 "To access exif data use the exif name, e. g. <i>%formatted.Camera%</i> is "
@@ -3944,8 +4048,8 @@ msgid ""
 "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 - "
+"<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 to add lines that totally "
@@ -3963,69 +4067,69 @@ msgstr ""
 "caràcters i hi afegirà 3 punts al final per reflectir-ho.\n"
 "Si dues o més variables estan connectades amb el signe |-, mostra les "
 "variables disponibles amb un separador.\n"
-"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>%"
-"formatted.FocalLength%</i> mostrarà \"1/20s - 400 - 80 mm\" o \"1/200 - 80 mm"
-"\",\n"
+"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>"
+"%formatted.FocalLength%</i> mostrarà \"1/20s - 400 - 80 mm\" o \"1/200 - 80 "
+"mm\",\n"
 "si no hi ha la informació ISO a les dades Exif.\n"
 "Si una línia és buida, es treu. Això permet afegir línies que no es mostren "
 "quan no hi ha dades disponibles.\n"
 
-#: ../src/preferences.c:1396 ../src/preferences.c:1569
-#: ../src/preferences.c:1941
+#: ../src/preferences.c:1587 ../src/preferences.c:1763
+#: ../src/preferences.c:2136
 msgid "Defaults"
 msgstr "Opcions per defecte"
 
-#: ../src/preferences.c:1450
+#: ../src/preferences.c:1641
 msgid "Show hidden files or folders"
 msgstr "Mostra els fitxers ocults"
 
-#: ../src/preferences.c:1453
+#: ../src/preferences.c:1644
 msgid "Show dot directory"
 msgstr "Mostra el directori punt"
 
-#: ../src/preferences.c:1456
+#: ../src/preferences.c:1647
 msgid "Case sensitive sort"
 msgstr "Ordena distingint entre majúscules i minúscules"
 
-#: ../src/preferences.c:1459
+#: ../src/preferences.c:1650
 msgid "Disable File Filtering"
 msgstr "Desactivar els filtres de fitxers"
 
-#: ../src/preferences.c:1463
+#: ../src/preferences.c:1654
 msgid "Grouping sidecar extensions"
 msgstr "Agrupant les extensions sidecar"
 
-#: ../src/preferences.c:1470
+#: ../src/preferences.c:1661
 msgid "File types"
 msgstr "Tipus de fitxers"
 
-#: ../src/preferences.c:1492
+#: ../src/preferences.c:1683
 msgid "Filter"
 msgstr "Filtre"
 
-#: ../src/preferences.c:1524
+#: ../src/preferences.c:1718
 msgid "Class"
 msgstr "Clase"
 
-#: ../src/preferences.c:1541
+#: ../src/preferences.c:1735
 msgid "Writable"
 msgstr "S'hi pot escriure"
 
-#: ../src/preferences.c:1552
+#: ../src/preferences.c:1746
 msgid "Sidecar is allowed"
 msgstr "Es permeten les metadades en sidecar"
 
-#: ../src/preferences.c:1598
+#: ../src/preferences.c:1792
 msgid "Metadata writing process"
 msgstr "Procés d'escriptura de les metadades"
 
-#: ../src/preferences.c:1600
+#: ../src/preferences.c:1794
 msgid "Warning: Geeqie is built without Exiv2. Some options are disabled."
 msgstr ""
 "Atenció: Geeqie s'ha compilat sense Exiv2. Algunes opcions estan "
 "desabilitades"
 
-#: ../src/preferences.c:1602
+#: ../src/preferences.c:1796
 msgid ""
 "Metadata are written in the following order. The process ends after first "
 "success."
@@ -4033,7 +4137,7 @@ msgstr ""
 "Les metadades es desen en l'ordre següent. El procés acaba després del "
 "primer èxit."
 
-#: ../src/preferences.c:1605
+#: ../src/preferences.c:1799
 msgid ""
 "1) Save metadata in image files, resp. sidecar files, according to the XMP "
 "standard"
@@ -4041,23 +4145,23 @@ msgstr ""
 "1) Desa les metadades als fitxers d'imatge, als resp. fitxers sidecar, "
 "conforme l'estàndard SMP"
 
-#: ../src/preferences.c:1611
+#: ../src/preferences.c:1805
 msgid ""
 "2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
 msgstr ""
 "2) Desa les metadades a la carpeta'.metadata', al directori de la imatge (no "
 "estàndard)"
 
-#: ../src/preferences.c:1614
+#: ../src/preferences.c:1808
 #, c-format
 msgid "3) Save metadata in Geeqie private directory '%s'"
-msgstr "3) Desa les metadades al directori privat de Geeqie '%s'"
+msgstr "3) Desa-les al directori de Geeqie '%s'"
 
-#: ../src/preferences.c:1619
+#: ../src/preferences.c:1814
 msgid "Step 1: Write to image files"
 msgstr "Pas 1: Escriu als fitxers d'imatge"
 
-#: ../src/preferences.c:1627
+#: ../src/preferences.c:1822
 msgid ""
 "Store metadata also in legacy IPTC tags (converted according to IPTC4XMP "
 "standard)"
@@ -4065,19 +4169,19 @@ msgstr ""
 "Desa-les també en les antigues etiquetes IPTC (convertides segons "
 "l'estàndard IPTC4XMP)"
 
-#: ../src/preferences.c:1630
+#: ../src/preferences.c:1825
 msgid "Warn if the image files are unwritable"
 msgstr "Avisa si no es pot escriure als fitxers de imatge"
 
-#: ../src/preferences.c:1633
+#: ../src/preferences.c:1828
 msgid "Ask before writing to image files"
 msgstr "Pregunta abans d'escriure als fitxers d'imatge"
 
-#: ../src/preferences.c:1636
+#: ../src/preferences.c:1831
 msgid "Step 2 and 3: write to Geeqie private files"
 msgstr "Pasos 2 i 3: escriu als fitxers privat de Geeqie"
 
-#: ../src/preferences.c:1641
+#: ../src/preferences.c:1836
 msgid ""
 "Use GQview legacy metadata format (supports only keywords and comments) "
 "instead of XMP"
@@ -4085,11 +4189,11 @@ msgstr ""
 "Antic format de metadades de GQview (només paraules clau i comentaris) en "
 "comptes de XMP"
 
-#: ../src/preferences.c:1645 ../src/preferences.c:1833
+#: ../src/preferences.c:1840 ../src/preferences.c:2028
 msgid "Miscellaneous"
 msgstr "Miscel·lània"
 
-#: ../src/preferences.c:1646
+#: ../src/preferences.c:1841
 msgid ""
 "Write the same description tags (keywords, comment, etc.) to all grouped "
 "sidecars"
@@ -4097,189 +4201,245 @@ msgstr ""
 "Escriu les mateixes etiquetes (paraules, comentaris, etc.) a tots els "
 "fitxers sidecars agrupats"
 
-#: ../src/preferences.c:1649
+#: ../src/preferences.c:1844
 msgid "Allow keywords to differ only in case"
 msgstr ""
 "Permet les paraules claus diferenciar-se només en les majúscules/minúscules"
 
-#: ../src/preferences.c:1652
+#: ../src/preferences.c:1847
 msgid "Write altered image orientation to the metadata"
-msgstr "Desa la orientaciño de la imatge alterada a les metadades"
+msgstr "Desa la orientació de la imatge alterada a les metadades"
 
-#: ../src/preferences.c:1658
+#: ../src/preferences.c:1853
 msgid "Auto-save options"
 msgstr "Opcions de desat automàtic"
 
-#: ../src/preferences.c:1660
+#: ../src/preferences.c:1855
 msgid "Write metadata after timeout"
-msgstr "Escriu les metadades cada temps d'espera"
+msgstr "Escriu les metadades periòdicament"
 
-#: ../src/preferences.c:1666
+#: ../src/preferences.c:1861
 msgid "Timeout (seconds):"
-msgstr "Temps d'espera (segons):"
+msgstr "Període (segons):"
 
-#: ../src/preferences.c:1669
+#: ../src/preferences.c:1864
 msgid "Write metadata on image change"
 msgstr "Escriu les metadades en canviar d'imatge:"
 
-#: ../src/preferences.c:1672
+#: ../src/preferences.c:1867
 msgid "Write metadata on directory change"
 msgstr "Escriu les metadades en canviar de directori"
 
-#: ../src/preferences.c:1686
+#: ../src/preferences.c:1881
 msgid "Color management"
 msgstr "Gestió del color"
 
-#: ../src/preferences.c:1688
+#: ../src/preferences.c:1883
 msgid "Input profiles"
 msgstr "Entrada de perfils"
 
-#: ../src/preferences.c:1696
+#: ../src/preferences.c:1891
 msgid "Type"
 msgstr "Tipus"
 
-#: ../src/preferences.c:1699
+#: ../src/preferences.c:1894
 msgid "Menu name"
 msgstr "Nom del menú"
 
-#: ../src/preferences.c:1702
+#: ../src/preferences.c:1897
 msgid "File"
 msgstr "Fitxer"
 
-#: ../src/preferences.c:1710
+#: ../src/preferences.c:1905
 #, c-format
 msgid "Input %d:"
 msgstr "Entrada %d:"
 
-#: ../src/preferences.c:1727 ../src/preferences.c:1747
+#: ../src/preferences.c:1922 ../src/preferences.c:1942
 msgid "Select color profile"
 msgstr "Seleccioneu un perfil de color"
 
-#: ../src/preferences.c:1735
+#: ../src/preferences.c:1930
 msgid "Screen profile"
 msgstr "Perfil de pantalla"
 
-#: ../src/preferences.c:1739
+#: ../src/preferences.c:1934
 msgid "Use system screen profile if available"
 msgstr "Fes servir el perfil de pantalla del sistema si està disponible"
 
-#: ../src/preferences.c:1744
+#: ../src/preferences.c:1939
 msgid "Screen:"
 msgstr "Pantalla:"
 
-#: ../src/preferences.c:1766 ../src/preferences.c:1809
+#: ../src/preferences.c:1961 ../src/preferences.c:2004
 msgid "Behavior"
 msgstr "Comportament"
 
-#: ../src/preferences.c:1768 ../src/utilops.c:1985
+#: ../src/preferences.c:1963 ../src/utilops.c:1985
 msgid "Delete"
 msgstr "Suprimeix"
 
-#: ../src/preferences.c:1770
+#: ../src/preferences.c:1965
 msgid "Confirm file delete"
-msgstr "Confirmeu l'eliminació del fitxer"
+msgstr "DEmana confirmació de l'eliminació del fitxer"
 
-#: ../src/preferences.c:1772
+#: ../src/preferences.c:1967
 msgid "Enable Delete key"
 msgstr "Activa la tecla de supressió"
 
-#: ../src/preferences.c:1775
+#: ../src/preferences.c:1970
 msgid "Safe delete"
 msgstr "Supressió segura"
 
-#: ../src/preferences.c:1793
+#: ../src/preferences.c:1988
 msgid "Maximum size:"
 msgstr "Mida màxima:"
 
-#: ../src/preferences.c:1793
+#: ../src/preferences.c:1988
 msgid "MB"
 msgstr "MB"
 
-#: ../src/preferences.c:1796
+#: ../src/preferences.c:1991
 msgid "Set to 0 for unlimited size"
 msgstr "Poseu-ho a 0 per indicar una mida il·limitada"
 
-#: ../src/preferences.c:1798
+#: ../src/preferences.c:1993
 msgid "View"
 msgstr "Visualització"
 
-#: ../src/preferences.c:1811
+#: ../src/preferences.c:2006
 msgid "Rectangular selection in icon view"
 msgstr "Selecció rectangular a la vista d'icones"
 
-#: ../src/preferences.c:1814
+#: ../src/preferences.c:2009
 msgid "Descend folders in tree view"
 msgstr "Carpetes descendents en la vista d'arbre"
 
-#: ../src/preferences.c:1817
+#: ../src/preferences.c:2012
 msgid "In place renaming"
 msgstr "Canvia el nom en el lloc"
 
-#: ../src/preferences.c:1820
+#: ../src/preferences.c:2015
 msgid "Open recent list maximum size"
 msgstr "Mida màxima de la llista de fitxers recents"
 
-#: ../src/preferences.c:1823
+#: ../src/preferences.c:2018
 msgid "Drag'n drop icon size"
 msgstr "Mida de la icona d'arrossegar i deixar anar"
 
-#: ../src/preferences.c:1826
+#: ../src/preferences.c:2021
 msgid "Navigation"
 msgstr "Navegació"
 
-#: ../src/preferences.c:1828
+#: ../src/preferences.c:2023
 msgid "Progressive keyboard scrolling"
 msgstr "Desplaçament progressiu des del teclat"
 
-#: ../src/preferences.c:1830
+#: ../src/preferences.c:2025
 msgid "Mouse wheel scrolls image"
 msgstr "La rodeta del ratolí desplaça la imatge"
 
-#: ../src/preferences.c:1835
+#: ../src/preferences.c:2030
 msgid "Custom similarity threshold:"
 msgstr "Llindar de semblança personalitzat:"
 
-#: ../src/preferences.c:1840
+#: ../src/preferences.c:2035
 msgid "Debugging"
 msgstr "Depuració"
 
-#: ../src/preferences.c:1842
+#: ../src/preferences.c:2037
 msgid "Debug level:"
 msgstr "Nivell de depuració:"
 
-#: ../src/preferences.c:1861
+#: ../src/preferences.c:2056
 msgid "Keyboard"
 msgstr "Teclat"
 
-#: ../src/preferences.c:1863
+#: ../src/preferences.c:2058
 msgid "Accelerators"
 msgstr "Tecles de drecera"
 
-#: ../src/preferences.c:1882
+#: ../src/preferences.c:2077
 msgid "Action"
 msgstr "Acció"
 
-#: ../src/preferences.c:1904
+#: ../src/preferences.c:2099
 msgid "KEY"
 msgstr "Tecla"
 
-#: ../src/preferences.c:1915
+#: ../src/preferences.c:2110
 msgid "Tooltip"
 msgstr "Indicador de funció"
 
-#: ../src/preferences.c:1953
+#: ../src/preferences.c:2148
 msgid "Reset selected"
 msgstr "Reinicia els seleccionats"
 
-#: ../src/preferences.c:1959
+#: ../src/preferences.c:2154
 msgid "Add Alt"
 msgstr "Afegeix Alt"
 
-#: ../src/preferences.c:1978
+#: ../src/preferences.c:2172
+msgid "Stereo"
+msgstr "Estèreo"
+
+#: ../src/preferences.c:2174 ../src/preferences.c:2177
+msgid "Windowed stereo mode"
+msgstr "Mode estèreo en finestra"
+
+#: ../src/preferences.c:2181 ../src/preferences.c:2206
+msgid "Mirror left image"
+msgstr "Mirall de la imatge esquerra"
+
+#: ../src/preferences.c:2184 ../src/preferences.c:2209
+msgid "Flip left image"
+msgstr "Inversió de la imatge esquerra"
+
+#: ../src/preferences.c:2187 ../src/preferences.c:2212
+msgid "Mirror right image"
+msgstr "Mirall de la imatge dreta"
+
+#: ../src/preferences.c:2190 ../src/preferences.c:2215
+msgid "Flip right image"
+msgstr "Inversió de la imatge dreta"
+
+#: ../src/preferences.c:2192 ../src/preferences.c:2217
+msgid "Swap left and right images"
+msgstr "intercanvia les imatges dreta i esquerra"
+
+#: ../src/preferences.c:2194 ../src/preferences.c:2219
+msgid "Disable stereo mode on single image source"
+msgstr "Deshabilita el mode estèreo a les imatges d'una sola font"
+
+#: ../src/preferences.c:2197 ../src/preferences.c:2203
+msgid "Fullscreen stereo mode"
+msgstr "Mode estèreo de pantalla completa"
+
+#: ../src/preferences.c:2198
+msgid "Use different settings for fullscreen"
+msgstr "Fes servir una configuració diferent per la pantalla completa"
+
+#: ../src/preferences.c:2228
+msgid "Left X"
+msgstr "X esquerra"
+
+#: ../src/preferences.c:2230
+msgid "Left Y"
+msgstr "Y esquerra"
+
+#: ../src/preferences.c:2232
+msgid "Right X"
+msgstr "X dreta"
+
+#: ../src/preferences.c:2234
+msgid "Right Y"
+msgstr "Y dreta"
+
+#: ../src/preferences.c:2250
 msgid "Preferences"
 msgstr "Preferències"
 
-#: ../src/preferences.c:2125
+#: ../src/preferences.c:2398
 #, c-format
 msgid ""
 "%s %s\n"
@@ -4300,7 +4460,7 @@ msgstr ""
 "\n"
 "Alliberat sota la Llicència Pública General GNU"
 
-#: ../src/preferences.c:2144
+#: ../src/preferences.c:2417
 msgid "Credits..."
 msgstr "Crèdits..."
 
@@ -4348,7 +4508,7 @@ msgstr "jpeg, qualitat normal"
 msgid "jpeg, high quality"
 msgstr "jpeg, qualitat alta"
 
-#: ../src/print.c:365 ../src/print.c:3214
+#: ../src/print.c:365 ../src/print.c:3226
 msgid "points"
 msgstr "punts"
 
@@ -4476,130 +4636,130 @@ msgstr "S'ha produït l'error SIGPIPE en escriure a la impressora."
 msgid "Page %d"
 msgstr "Pàgina %d"
 
-#: ../src/print.c:1964 ../src/print.c:1969
+#: ../src/print.c:1968 ../src/print.c:1973
 msgid "Printing error"
 msgstr "Error d'impressió"
 
-#: ../src/print.c:1968
+#: ../src/print.c:1972
 #, c-format
 msgid "An error occured printing to %s."
 msgstr "S'ha produït un error en imprimir a %s."
 
-#: ../src/print.c:1972
+#: ../src/print.c:1976
 msgid "Details"
 msgstr "Detalls"
 
-#: ../src/print.c:2589 ../src/print.c:3349
+#: ../src/print.c:2601 ../src/print.c:3361
 msgid "Print"
 msgstr "Imprimeix"
 
-#: ../src/print.c:2593
+#: ../src/print.c:2605
 #, c-format
 msgid "Printing %d pages to %s."
 msgstr "Imprimint %d pàgines a %s."
 
-#: ../src/print.c:2693
+#: ../src/print.c:2705
 msgid "Format:"
 msgstr "Format:"
 
-#: ../src/print.c:2768
+#: ../src/print.c:2780
 msgid "Units:"
 msgstr "Unitats:"
 
-#: ../src/print.c:2812
+#: ../src/print.c:2824
 msgid "Orientation:"
 msgstr "Orientació:"
 
-#: ../src/print.c:2944
+#: ../src/print.c:2956
 msgid "Destination:"
 msgstr "Destí:"
 
-#: ../src/print.c:2992
+#: ../src/print.c:3004
 msgid "<printer name>"
 msgstr "<nom de la impressora>"
 
-#: ../src/print.c:3081
+#: ../src/print.c:3093
 msgid "Unlimited"
 msgstr "Sense límit"
 
-#: ../src/print.c:3199
+#: ../src/print.c:3211
 msgid "Show"
 msgstr "Mostra"
 
-#: ../src/print.c:3212
+#: ../src/print.c:3224
 msgid "Font"
 msgstr "Font"
 
-#: ../src/print.c:3376
+#: ../src/print.c:3388
 msgid "Source"
 msgstr "Origen"
 
-#: ../src/print.c:3388
+#: ../src/print.c:3400
 msgid "Image size:"
 msgstr "Mida de la imatge:"
 
-#: ../src/print.c:3392
+#: ../src/print.c:3404
 msgid "Proof size:"
 msgstr "Mida de la prova:"
 
-#: ../src/print.c:3408
+#: ../src/print.c:3420
 msgid "Text"
 msgstr "Text"
 
-#: ../src/print.c:3418
+#: ../src/print.c:3430
 msgid "Paper"
 msgstr "Paper"
 
-#: ../src/print.c:3441
+#: ../src/print.c:3453
 msgid "Margins"
 msgstr "Marges"
 
-#: ../src/print.c:3443
+#: ../src/print.c:3455
 msgid "Left:"
 msgstr "Esquerre:"
 
-#: ../src/print.c:3446
+#: ../src/print.c:3458
 msgid "Right:"
 msgstr "Dret:"
 
-#: ../src/print.c:3449
+#: ../src/print.c:3461
 msgid "Top:"
 msgstr "Superior:"
 
-#: ../src/print.c:3452
+#: ../src/print.c:3464
 msgid "Bottom:"
 msgstr "Inferior:"
 
-#: ../src/print.c:3461
+#: ../src/print.c:3473
 msgid "Printer"
 msgstr "Impressora"
 
-#: ../src/print.c:3467
+#: ../src/print.c:3479
 msgid "Custom printer:"
 msgstr "Impressora personalitzada:"
 
-#: ../src/print.c:3476
+#: ../src/print.c:3488
 msgid "File:"
 msgstr "Fitxer:"
 
-#: ../src/print.c:3485
+#: ../src/print.c:3497
 msgid "File format:"
 msgstr "Format del fitxer:"
 
-#: ../src/print.c:3490
+#: ../src/print.c:3502
 msgid "DPI:"
 msgstr "PPP:"
 
-#: ../src/print.c:3498
+#: ../src/print.c:3510
 msgid "Remember print settings"
 msgstr "Recorda els ajustos d'impressió"
 
-#: ../src/rcfile.c:495
+#: ../src/rcfile.c:504
 #, c-format
 msgid "error saving config file: %s\n"
 msgstr "s'ha produït un error en desar el fitxer de configuració: %s\n"
 
-#: ../src/rcfile.c:553
+#: ../src/rcfile.c:562
 #, c-format
 msgid ""
 "error saving config file: %s\n"
@@ -4693,12 +4853,21 @@ msgstr "obre el fitxer en una nova finestra"
 msgid "Remote command list:\n"
 msgstr "Llista de comandes remotes:\n"
 
-#: ../src/remote.c:781
+#: ../src/remote.c:739
+msgid ""
+"\n"
+"  All other command line parameters are used as plain files if they exists.\n"
+msgstr ""
+"\n"
+"  Tots els altres paràmetres de línia de comandes es fan servir com a "
+"fitxers de text pla si existeixen.\n"
+
+#: ../src/remote.c:789
 #, c-format
 msgid "Remote %s not running, starting..."
 msgstr "El %s remot no s'està executant, s'està iniciant..."
 
-#: ../src/remote.c:917
+#: ../src/remote.c:925
 msgid "Remote not available\n"
 msgstr "Geeqie remot no està disponible\n"
 
@@ -4789,52 +4958,52 @@ msgid "Please enter an existing folder to search."
 msgstr ""
 "Si us plau, introdueixi el nom d'una carpeta que existeixi per la cerca."
 
-#: ../src/search.c:2638
+#: ../src/search.c:2646
 msgid "Image search"
 msgstr "Cerca d'imatges"
 
-#: ../src/search.c:2668
+#: ../src/search.c:2676
 msgid "Search:"
 msgstr "Cerca:"
 
-#: ../src/search.c:2682
+#: ../src/search.c:2690
 msgid "Recurse"
 msgstr "Recursivitat"
 
-#: ../src/search.c:2687
+#: ../src/search.c:2695
 msgid "File name"
 msgstr "Nom del fitxer"
 
-#: ../src/search.c:2693 ../src/search.c:2788
+#: ../src/search.c:2701 ../src/search.c:2796
 msgid "Match case"
 msgstr "Coincidència definida"
 
-#: ../src/search.c:2698
+#: ../src/search.c:2706
 msgid "File size is"
 msgstr "La mida del fitxer és"
 
-#: ../src/search.c:2705 ../src/search.c:2721 ../src/search.c:2740
+#: ../src/search.c:2713 ../src/search.c:2729 ../src/search.c:2748
 msgid "and"
 msgstr "i"
 
-#: ../src/search.c:2711
+#: ../src/search.c:2719
 msgid "File date is"
 msgstr "La data del fitxer és"
 
-#: ../src/search.c:2729
+#: ../src/search.c:2737
 msgid "Image dimensions are"
 msgstr "Les mides de la imatge són"
 
-#: ../src/search.c:2750
+#: ../src/search.c:2758
 msgid "Image content is"
 msgstr "El contingut de la imatge és"
 
-#: ../src/search.c:2756
+#: ../src/search.c:2764
 #, no-c-format
 msgid "% similar to"
 msgstr "% semblant a"
 
-#: ../src/search.c:2842
+#: ../src/search.c:2850
 msgid "Rank"
 msgstr "Rang"
 
@@ -4953,11 +5122,11 @@ msgstr "Icona:"
 msgid "Select icon"
 msgstr "Selecciona la icona"
 
-#: ../src/ui_bookmark.c:403
+#: ../src/ui_bookmark.c:408
 msgid "_Properties..."
 msgstr "_Propietats..."
 
-#: ../src/ui_bookmark.c:409
+#: ../src/ui_bookmark.c:414
 msgid "_Remove"
 msgstr "_Suprimeix"
 
@@ -5057,11 +5226,11 @@ msgstr "Afegeix _adreça d'interès"
 msgid "_Delete"
 msgstr "_Suprimeix"
 
-#: ../src/ui_pathsel.c:748 ../src/ui_pathsel.c:1049 ../src/utilops.c:2674
+#: ../src/ui_pathsel.c:751 ../src/ui_pathsel.c:1056 ../src/utilops.c:2674
 msgid "New folder"
 msgstr "Nova carpeta"
 
-#: ../src/ui_pathsel.c:758
+#: ../src/ui_pathsel.c:761
 #, c-format
 msgid ""
 "Unable to create folder:\n"
@@ -5070,27 +5239,27 @@ msgstr ""
 "No es pot crear la carpeta:\n"
 "%s"
 
-#: ../src/ui_pathsel.c:759
+#: ../src/ui_pathsel.c:762
 msgid "Error creating folder"
 msgstr "Error quan s'intentava crear la carpeta"
 
-#: ../src/ui_pathsel.c:980
+#: ../src/ui_pathsel.c:987
 msgid "All Files"
 msgstr "Tots els Fitxers"
 
-#: ../src/ui_pathsel.c:1052
+#: ../src/ui_pathsel.c:1059
 msgid "Show hidden"
 msgstr "Mostra els ocults"
 
-#: ../src/ui_pathsel.c:1136
+#: ../src/ui_pathsel.c:1143
 msgid "Filter:"
 msgstr "Filtra:"
 
-#: ../src/ui_tabcomp.c:925
+#: ../src/ui_tabcomp.c:933
 msgid "Select path"
 msgstr "Seleccioneu el camí"
 
-#: ../src/ui_tabcomp.c:941
+#: ../src/ui_tabcomp.c:949
 msgid "All files"
 msgstr "Tots els fitxers"
 
@@ -5486,7 +5655,7 @@ msgstr "Visualitza com a _icones"
 msgid "Show _thumbnails"
 msgstr "Mostra les _miniatures"
 
-#: ../src/view_file_icon.c:2179 ../src/view_file_list.c:899
+#: ../src/view_file_icon.c:2199 ../src/view_file_list.c:899
 msgid " [NO GROUPING]"
 msgstr "[NO S'AGRUPEN]"
 
@@ -6179,10 +6348,6 @@ msgstr "Ajuda"
 #~ msgid "Always show fullscreen info"
 #~ msgstr "treu la pantalla completa"
 
-#, fuzzy
-#~ msgid "Fullscreen info string"
-#~ msgstr "Pantalla completa"
-
 #, fuzzy
 #~ msgid "List"
 #~ msgstr "_Llista"
index 21725d8..5f0ae47 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -13,10 +13,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: geeqie-1.0betaX\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-25 10:22+0200\n"
-"PO-Revision-Date: 2009-07-25 10:22+0100\n"
+"POT-Creation-Date: 2012-08-16 23:32+0200\n"
+"PO-Revision-Date: 2012-08-16 23:32+0100\n"
 "Last-Translator: Laurent Monin <i18n@norz.org>\n"
 "Language-Team: french <geeqie-devel@lists.sourceforge.net>\n"
+"Language: french\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -66,12 +67,12 @@ msgstr "Éditer un fichier UFRaw ID"
 msgid "UFRaw Batch recursive"
 msgstr "Traitement par lots UFRaw récursif"
 
-#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1284
-#: ../src/preferences.c:93 ../src/preferences.c:1595
+#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1304
+#: ../src/preferences.c:93 ../src/preferences.c:1759
 msgid "Metadata"
 msgstr "Méta-données"
 
-#: ../src/advanced_exif.c:376 ../src/preferences.c:1512
+#: ../src/advanced_exif.c:376 ../src/preferences.c:1673
 msgid "Description"
 msgstr "Description"
 
@@ -79,9 +80,9 @@ msgstr "Description"
 msgid "Value"
 msgstr "Valeur"
 
-#: ../src/advanced_exif.c:378 ../src/desktop_file.c:497 ../src/dupe.c:2647
-#: ../src/dupe.c:3161 ../src/print.c:3250 ../src/search.c:2840
-#: ../src/utilops.c:449 ../src/view_file_list.c:2037
+#: ../src/advanced_exif.c:378 ../src/desktop_file.c:515 ../src/dupe.c:2651
+#: ../src/dupe.c:3173 ../src/print.c:3213 ../src/search.c:2838
+#: ../src/utilops.c:462 ../src/view_file_list.c:2039
 msgid "Name"
 msgstr "Nom"
 
@@ -106,11 +107,11 @@ msgstr "Histogramme"
 msgid "Title"
 msgstr "Titre"
 
-#: ../src/bar.c:169 ../src/search.c:2763
+#: ../src/bar.c:169 ../src/search.c:2761
 msgid "Keywords"
 msgstr "Mots-clés"
 
-#: ../src/bar.c:170 ../src/search.c:2775
+#: ../src/bar.c:170 ../src/search.c:2773
 msgid "Comment"
 msgstr "Commentaire"
 
@@ -127,11 +128,11 @@ msgstr "Informations fichier"
 msgid "Location and GPS"
 msgstr "Position et GPS"
 
-#: ../src/bar.c:175 ../src/exif.c:347
+#: ../src/bar.c:175 ../src/exif.c:348
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/bar.c:178 ../src/bar_gps.c:771
+#: ../src/bar.c:178 ../src/bar_gps.c:763
 msgid "GPS Map"
 msgstr "Carte GPS"
 
@@ -139,11 +140,11 @@ msgstr "Carte GPS"
 msgid "Move to _top"
 msgstr "Déplacer tout en hau_t"
 
-#: ../src/bar.c:298 ../src/ui_bookmark.c:405
+#: ../src/bar.c:298 ../src/ui_bookmark.c:407
 msgid "Move _up"
 msgstr "_Monter"
 
-#: ../src/bar.c:299 ../src/ui_bookmark.c:407
+#: ../src/bar.c:299 ../src/ui_bookmark.c:409
 msgid "Move _down"
 msgstr "_Descendre"
 
@@ -155,11 +156,11 @@ msgstr "Déplacer tout en _bas"
 msgid "Remove"
 msgstr "Enlever"
 
-#: ../src/bar_comment.c:188
+#: ../src/bar_comment.c:195
 msgid "Add text to selected files"
 msgstr "Ajouter un texte aux fichiers sélectionnés"
 
-#: ../src/bar_comment.c:189
+#: ../src/bar_comment.c:196
 msgid "Replace existing text in selected files"
 msgstr "Remplacer le texte existant dans les fichiers sélectionnés"
 
@@ -167,69 +168,69 @@ msgstr "Remplacer le texte existant dans les fichiers sélectionnés"
 msgid "<empty label, fixme>"
 msgstr "<label vide, à corriger>"
 
-#: ../src/bar_exif.c:538 ../src/bar_exif.c:548
+#: ../src/bar_exif.c:549 ../src/bar_exif.c:559
 msgid "Configure entry"
 msgstr "Configurer l'entrée"
 
 #. for the pane
-#: ../src/bar_exif.c:538 ../src/bar_exif.c:548 ../src/bar_exif.c:621
+#: ../src/bar_exif.c:549 ../src/bar_exif.c:559 ../src/bar_exif.c:632
 msgid "Add entry"
 msgstr "Ajouter l'entrée"
 
-#: ../src/bar_exif.c:554
+#: ../src/bar_exif.c:565
 msgid "Key:"
 msgstr "Clé :"
 
-#: ../src/bar_exif.c:563
+#: ../src/bar_exif.c:574
 msgid "Title:"
 msgstr "Titre :"
 
-#: ../src/bar_exif.c:572
+#: ../src/bar_exif.c:583
 msgid "Show only if set"
 msgstr "Montrer seulement si défini"
 
-#: ../src/bar_exif.c:573
+#: ../src/bar_exif.c:584
 msgid "Editable (supported only for XMP)"
 msgstr "Modifiable (seulement pour XMP)"
 
 #. for the entry
-#: ../src/bar_exif.c:609
+#: ../src/bar_exif.c:620
 #, c-format
 msgid "Configure \"%s\""
 msgstr "Configurer « %s »"
 
-#: ../src/bar_exif.c:610 ../src/bar_keywords.c:1135
+#: ../src/bar_exif.c:621 ../src/bar_keywords.c:1207
 #, c-format
 msgid "Remove \"%s\""
 msgstr "Enlever « %s »"
 
-#: ../src/bar_exif.c:622
+#: ../src/bar_exif.c:633
 msgid "Show hidden entries"
 msgstr "Montrer les entrées cachées"
 
-#: ../src/bar_gps.c:496
+#: ../src/bar_gps.c:485
 #, c-format
 msgid "Zoom %i"
 msgstr "Zoom %i"
 
-#: ../src/bar_gps.c:514
+#: ../src/bar_gps.c:503
 #, c-format
 msgid "Zoom level %i"
 msgstr "Niveau zoom %i"
 
-#: ../src/bar_gps.c:519
+#: ../src/bar_gps.c:508
 msgid "Loading map"
 msgstr "Chargement de la carte"
 
-#: ../src/bar_gps.c:581
+#: ../src/bar_gps.c:575
 msgid "Enable markers"
 msgstr "Activer les marqueurs"
 
-#: ../src/bar_gps.c:583
+#: ../src/bar_gps.c:577
 msgid "Centre map on marker"
 msgstr "Centrer la carte sur le marqueur"
 
-#: ../src/bar_gps.c:606
+#: ../src/bar_gps.c:600
 msgid ""
 "Move map centre to marker\n"
 " is disabled"
@@ -237,7 +238,7 @@ msgstr ""
 "Centrer la carte sur le marqueur\n"
 " désactivé"
 
-#: ../src/bar_gps.c:611
+#: ../src/bar_gps.c:605
 msgid ""
 "Move map centre to marker\n"
 " is enabled"
@@ -245,122 +246,126 @@ msgstr ""
 "Centrer la carte sur le marqueur\n"
 " activé"
 
-#: ../src/bar_gps.c:620
+#: ../src/bar_gps.c:614
 msgid "Map Centreing"
 msgstr "Centrage de la carte"
 
 #. use the same strings as in layout_util.c
-#: ../src/bar_histogram.c:240 ../src/layout_util.c:1388
+#: ../src/bar_histogram.c:265 ../src/layout_util.c:1434
 msgid "Histogram on _Red"
 msgstr "Histogramme sur le _rouge"
 
-#: ../src/bar_histogram.c:241 ../src/layout_util.c:1389
+#: ../src/bar_histogram.c:266 ../src/layout_util.c:1435
 msgid "Histogram on _Green"
 msgstr "Histogramme sur le _vert"
 
-#: ../src/bar_histogram.c:242 ../src/layout_util.c:1390
+#: ../src/bar_histogram.c:267 ../src/layout_util.c:1436
 msgid "Histogram on _Blue"
 msgstr "Histogramme sur le _bleu"
 
-#: ../src/bar_histogram.c:243 ../src/layout_util.c:1391
+#: ../src/bar_histogram.c:268 ../src/layout_util.c:1437
 msgid "_Histogram on RGB"
 msgstr "_Histogramme RVB"
 
-#: ../src/bar_histogram.c:244 ../src/layout_util.c:1392
+#: ../src/bar_histogram.c:269 ../src/layout_util.c:1438
 msgid "Histogram on _Value"
 msgstr "Histogramme sur la _valeur"
 
-#: ../src/bar_histogram.c:248 ../src/layout_util.c:1396
+#: ../src/bar_histogram.c:273 ../src/layout_util.c:1442
 msgid "Li_near Histogram"
 msgstr "Histogramme _linéaire"
 
-#: ../src/bar_histogram.c:249
+#: ../src/bar_histogram.c:274
 msgid "L_og Histogram"
 msgstr "Histogramme l_ogarithmique"
 
-#: ../src/bar_keywords.c:406
+#: ../src/bar_keywords.c:414
 msgid "Add keywords to selected files"
 msgstr "Ajouter les mots-clés aux fichiers sélectionnés"
 
-#: ../src/bar_keywords.c:407
+#: ../src/bar_keywords.c:415
 msgid "Replace existing keywords in selected files"
 msgstr "Remplacer les mots-clés existants dans les fichiers sélectionnés"
 
-#: ../src/bar_keywords.c:880
+#: ../src/bar_keywords.c:888
 msgid "Edit keyword"
 msgstr "Éditer le mot-clé"
 
-#: ../src/bar_keywords.c:880
+#: ../src/bar_keywords.c:888
 msgid "Add keywords"
 msgstr "Ajouter des mots-clés"
 
-#: ../src/bar_keywords.c:887
+#: ../src/bar_keywords.c:895
 msgid "Configure keyword"
 msgstr "Configurer le mot-clé"
 
-#: ../src/bar_keywords.c:887 ../src/bar_keywords.c:1169
+#: ../src/bar_keywords.c:895 ../src/bar_keywords.c:1161
 msgid "Add keyword"
 msgstr "Ajouter un mot-clé"
 
-#: ../src/bar_keywords.c:893
+#: ../src/bar_keywords.c:901
 msgid "Keyword:"
 msgstr "Mot-clé :"
 
-#: ../src/bar_keywords.c:902
+#: ../src/bar_keywords.c:910
 msgid "Keyword type:"
 msgstr "Type de mot-clé :"
 
-#: ../src/bar_keywords.c:904
+#: ../src/bar_keywords.c:912
 msgid "Active keyword"
 msgstr "Mot-clé actif"
 
-#: ../src/bar_keywords.c:907
+#: ../src/bar_keywords.c:915
 msgid "Helper"
 msgstr "Assistant"
 
-#: ../src/bar_keywords.c:1113
+#: ../src/bar_keywords.c:1165
+msgid "Add keyword to all selected images"
+msgstr "Ajouter un mot-clé à toutes les images sélectionnées"
+
+#: ../src/bar_keywords.c:1185
 #, c-format
 msgid "Hide \"%s\""
 msgstr "Cacher « %s »"
 
-#: ../src/bar_keywords.c:1120
+#: ../src/bar_keywords.c:1192
 #, c-format
 msgid "Mark %d"
 msgstr "Marque %d"
 
-#: ../src/bar_keywords.c:1125
+#: ../src/bar_keywords.c:1197
 #, c-format
 msgid "Connect \"%s\" to mark"
 msgstr "Connecter « %s » à la marque"
 
-#: ../src/bar_keywords.c:1132
+#: ../src/bar_keywords.c:1204
 #, c-format
 msgid "Edit \"%s\""
 msgstr "Éditer « %s »"
 
-#: ../src/bar_keywords.c:1142
+#: ../src/bar_keywords.c:1214
 #, c-format
 msgid "Disconnect \"%s\" from mark %s"
 msgstr "Déconnecter « %s » de la marque %s"
 
 #. for the pane
-#: ../src/bar_keywords.c:1154 ../src/bar_keywords.c:1163
+#: ../src/bar_keywords.c:1226 ../src/bar_keywords.c:1235
 msgid "Expand checked"
 msgstr "Déployer cochés"
 
-#: ../src/bar_keywords.c:1155 ../src/bar_keywords.c:1164
+#: ../src/bar_keywords.c:1227 ../src/bar_keywords.c:1236
 msgid "Collapse unchecked"
 msgstr "Plier non cochés"
 
-#: ../src/bar_keywords.c:1156 ../src/bar_keywords.c:1165
+#: ../src/bar_keywords.c:1228 ../src/bar_keywords.c:1237
 msgid "Hide unchecked"
 msgstr "Cacher non cochés"
 
-#: ../src/bar_keywords.c:1157
+#: ../src/bar_keywords.c:1229
 msgid "Show all"
 msgstr "Montrer tout"
 
-#: ../src/bar_keywords.c:1160
+#: ../src/bar_keywords.c:1232
 msgid "On any change"
 msgstr "Sur tout changement"
 
@@ -379,7 +384,7 @@ msgstr ""
 msgid "Collection exists"
 msgstr "Collection existante"
 
-#: ../src/bar_sort.c:464 ../src/collect.c:1098 ../src/collect-dlg.c:85
+#: ../src/bar_sort.c:464 ../src/collect.c:1101 ../src/collect-dlg.c:85
 #, c-format
 msgid ""
 "Failed to save the collection:\n"
@@ -388,7 +393,7 @@ msgstr ""
 "Impossible d'enregistrer la collection :\n"
 "%s"
 
-#: ../src/bar_sort.c:465 ../src/collect.c:1099 ../src/collect-dlg.c:86
+#: ../src/bar_sort.c:465 ../src/collect.c:1102 ../src/collect-dlg.c:86
 msgid "Save Failed"
 msgstr "Erreur à l'enregistrement"
 
@@ -408,19 +413,19 @@ msgstr "Nom : "
 msgid "Sort Manager"
 msgstr "Gestionnaire de tri"
 
-#: ../src/bar_sort.c:606 ../src/pan-view.c:2395 ../src/ui_pathsel.c:1099
+#: ../src/bar_sort.c:606 ../src/pan-view.c:2419 ../src/ui_pathsel.c:1097
 msgid "Folders"
 msgstr "Dossiers"
 
-#: ../src/bar_sort.c:607 ../src/options.c:140
+#: ../src/bar_sort.c:607 ../src/options.c:147
 msgid "Collections"
 msgstr "Collections"
 
-#: ../src/bar_sort.c:615 ../src/utilops.c:2107
+#: ../src/bar_sort.c:615 ../src/utilops.c:2124
 msgid "Copy"
 msgstr "Copier"
 
-#: ../src/bar_sort.c:618 ../src/utilops.c:2061
+#: ../src/bar_sort.c:618 ../src/utilops.c:2075
 msgid "Move"
 msgstr "Déplacer"
 
@@ -445,77 +450,77 @@ msgstr ""
 "erreur à la sauvegarde du fichier de cache des similarités : %s\n"
 "erreur : %s\n"
 
-#: ../src/cache_maint.c:129 ../src/cache_maint.c:722 ../src/cache_maint.c:938
-#: ../src/editors.c:1133
+#: ../src/cache_maint.c:129 ../src/cache_maint.c:730 ../src/cache_maint.c:954
+#: ../src/editors.c:1177
 msgid "done"
 msgstr "terminé"
 
-#: ../src/cache_maint.c:307
+#: ../src/cache_maint.c:311
 msgid "Removing old metadata..."
 msgstr "Suppression des anciennes méta-données..."
 
-#: ../src/cache_maint.c:311
+#: ../src/cache_maint.c:315
 msgid "Clearing cached thumbnails..."
 msgstr "Purge des vignettes en cache..."
 
-#: ../src/cache_maint.c:315 ../src/cache_maint.c:1096
+#: ../src/cache_maint.c:319 ../src/cache_maint.c:1116
 msgid "Removing old thumbnails..."
 msgstr "Suppression des anciennes vignettes..."
 
-#: ../src/cache_maint.c:318 ../src/cache_maint.c:1099
+#: ../src/cache_maint.c:322 ../src/cache_maint.c:1119
 msgid "Maintenance"
 msgstr "Maintenance"
 
-#: ../src/cache_maint.c:833
+#: ../src/cache_maint.c:845
 msgid "Invalid folder"
 msgstr "Dossier invalide"
 
-#: ../src/cache_maint.c:834
+#: ../src/cache_maint.c:846
 msgid "The specified folder can not be found."
 msgstr "Le dossier spécifié est absent."
 
-#: ../src/cache_maint.c:865 ../src/cache_maint.c:879 ../src/cache_maint.c:1275
+#: ../src/cache_maint.c:877 ../src/cache_maint.c:891 ../src/cache_maint.c:1295
 msgid "Create thumbnails"
 msgstr "Créer les vignettes"
 
-#: ../src/cache_maint.c:873 ../src/cache_maint.c:1106
+#: ../src/cache_maint.c:885 ../src/cache_maint.c:1126
 msgid "S_tart"
 msgstr "Dé_but"
 
-#: ../src/cache_maint.c:886 ../src/preferences.c:1782
+#: ../src/cache_maint.c:898 ../src/preferences.c:1947
 msgid "Folder:"
 msgstr "Dossier :"
 
-#: ../src/cache_maint.c:889
+#: ../src/cache_maint.c:901
 msgid "Select folder"
 msgstr "Sélectionner un dossier"
 
-#: ../src/cache_maint.c:893
+#: ../src/cache_maint.c:905
 msgid "Include subfolders"
 msgstr "Inclure les sous-dossiers"
 
-#: ../src/cache_maint.c:894
+#: ../src/cache_maint.c:906
 msgid "Store thumbnails local to source images"
 msgstr "Sauver les vignettes avec les images sources"
 
-#: ../src/cache_maint.c:903 ../src/cache_maint.c:1115
+#: ../src/cache_maint.c:915 ../src/cache_maint.c:1135
 msgid "click start to begin"
 msgstr "cliquer sur Début pour démarrer"
 
-#: ../src/cache_maint.c:1042 ../src/editors.c:1059
+#: ../src/cache_maint.c:1062 ../src/editors.c:1103
 msgid "running..."
 msgstr "en cours..."
 
-#: ../src/cache_maint.c:1091
+#: ../src/cache_maint.c:1111
 msgid "Clearing thumbnails..."
 msgstr "Suppression des vignettes..."
 
-#: ../src/cache_maint.c:1157 ../src/cache_maint.c:1160
-#: ../src/cache_maint.c:1253 ../src/cache_maint.c:1270
+#: ../src/cache_maint.c:1177 ../src/cache_maint.c:1180
+#: ../src/cache_maint.c:1273 ../src/cache_maint.c:1290
 msgid "Clear cache"
 msgstr "Vider le cache"
 
-#: ../src/cache_maint.c:1161
+#: ../src/cache_maint.c:1181
 msgid ""
 "This will remove all thumbnails that have\n"
 "been saved to disk, continue?"
@@ -523,55 +528,55 @@ msgstr ""
 "Ceci va effacer toutes les vignettes\n"
 "présentes sur le disque, continuer ?"
 
-#: ../src/cache_maint.c:1203
+#: ../src/cache_maint.c:1223
 #, c-format
 msgid "Location: %s"
 msgstr "Emplacement : %s"
 
-#: ../src/cache_maint.c:1228
+#: ../src/cache_maint.c:1248
 msgid "Cache Maintenance"
 msgstr "Maintenance du cache"
 
-#: ../src/cache_maint.c:1238
+#: ../src/cache_maint.c:1258
 msgid "Cache and Data Maintenance"
 msgstr "Maintenance des données et du cache"
 
-#: ../src/cache_maint.c:1242
+#: ../src/cache_maint.c:1262
 msgid "Thumbnail cache"
 msgstr "Cache des vignettes"
 
-#: ../src/cache_maint.c:1248 ../src/cache_maint.c:1265
-#: ../src/cache_maint.c:1290
+#: ../src/cache_maint.c:1268 ../src/cache_maint.c:1285
+#: ../src/cache_maint.c:1310
 msgid "Clean up"
 msgstr "Nettoyage"
 
-#: ../src/cache_maint.c:1251 ../src/cache_maint.c:1268
+#: ../src/cache_maint.c:1271 ../src/cache_maint.c:1288
 msgid "Remove orphaned or outdated thumbnails."
 msgstr "Éliminer les vignettes orphelines ou plus à jour."
 
-#: ../src/cache_maint.c:1256 ../src/cache_maint.c:1273
+#: ../src/cache_maint.c:1276 ../src/cache_maint.c:1293
 msgid "Delete all cached thumbnails."
 msgstr "Effacer toutes les vignettes en cache."
 
-#: ../src/cache_maint.c:1259
+#: ../src/cache_maint.c:1279
 msgid "Shared thumbnail cache"
 msgstr "Cache partagé des vignettes"
 
-#: ../src/cache_maint.c:1279
+#: ../src/cache_maint.c:1299
 msgid "Render"
 msgstr "Générer"
 
-#: ../src/cache_maint.c:1282
+#: ../src/cache_maint.c:1302
 msgid "Render thumbnails for a specific folder."
 msgstr "Générer les vignettes pour un dossier spécifique."
 
-#: ../src/cache_maint.c:1293
+#: ../src/cache_maint.c:1313
 msgid "Remove orphaned keywords and comments."
 msgstr "Supprimer les mots-clés et commentaires orphelins."
 
 #. When does this occur ??
-#: ../src/collect.c:366 ../src/image.c:160 ../src/image-overlay.c:513
-#: ../src/image-overlay.c:592
+#: ../src/collect.c:366 ../src/image.c:160 ../src/image-overlay.c:512
+#: ../src/image-overlay.c:591
 msgid "Untitled"
 msgstr "Sans_Titre"
 
@@ -580,16 +585,16 @@ msgstr "Sans_Titre"
 msgid "Untitled (%d)"
 msgstr "Sans_Titre (%d)"
 
-#: ../src/collect.c:1016
+#: ../src/collect.c:1019
 #, c-format
 msgid "%s - Collection - %s"
 msgstr "%s - Collection - %s"
 
-#: ../src/collect.c:1135 ../src/collect.c:1139
+#: ../src/collect.c:1138 ../src/collect.c:1142
 msgid "Close collection"
 msgstr "Fermer collection"
 
-#: ../src/collect.c:1140
+#: ../src/collect.c:1143
 msgid ""
 "Collection has been modified.\n"
 "Save first?"
@@ -597,7 +602,7 @@ msgstr ""
 "La collection a été modifiée.\n"
 "L'enregistrer avant ?"
 
-#: ../src/collect.c:1143
+#: ../src/collect.c:1146
 msgid "_Discard"
 msgstr "_Ignorer"
 
@@ -699,140 +704,140 @@ msgstr "%s, %d images (%s, %d)"
 msgid "%s, %d images"
 msgstr "%s, %d images"
 
-#: ../src/collect-table.c:223 ../src/layout_util.c:1190
-#: ../src/layout_util.c:2135
+#: ../src/collect-table.c:223 ../src/layout_util.c:1234
+#: ../src/layout_util.c:2291
 msgid "Empty"
 msgstr "Vide"
 
 #: ../src/collect-table.c:237 ../src/dupe.c:1319 ../src/search.c:320
-#: ../src/view_file.c:822 ../src/view_file.c:925
+#: ../src/view_file.c:835 ../src/view_file.c:942
 msgid "Loading thumbs..."
 msgstr "Chargement des vignettes..."
 
-#: ../src/collect-table.c:866 ../src/dupe.c:2242 ../src/dupe.c:2555
-#: ../src/layout_util.c:1237 ../src/search.c:996
+#: ../src/collect-table.c:872 ../src/dupe.c:2246 ../src/dupe.c:2559
+#: ../src/layout_util.c:1281 ../src/search.c:1000
 msgid "_View"
 msgstr "_Affichage"
 
-#: ../src/collect-table.c:868 ../src/dupe.c:2244 ../src/dupe.c:2557
-#: ../src/img-view.c:1281 ../src/layout_image.c:498 ../src/pan-view.c:2825
-#: ../src/search.c:998 ../src/view_file.c:575
+#: ../src/collect-table.c:874 ../src/dupe.c:2248 ../src/dupe.c:2561
+#: ../src/img-view.c:1289 ../src/layout_image.c:505 ../src/pan-view.c:2847
+#: ../src/search.c:1002 ../src/view_file.c:588
 msgid "View in _new window"
 msgstr "Voir dans une _nouvelle fenêtre"
 
-#: ../src/collect-table.c:871 ../src/dupe.c:2278 ../src/dupe.c:2565
-#: ../src/search.c:1028
+#: ../src/collect-table.c:877 ../src/dupe.c:2282 ../src/dupe.c:2569
+#: ../src/search.c:1032
 msgid "Rem_ove"
 msgstr "_Enlever"
 
-#: ../src/collect-table.c:874
+#: ../src/collect-table.c:880
 msgid "Append from file list"
 msgstr "Ajouter à partir de la liste des fichiers"
 
-#: ../src/collect-table.c:876
+#: ../src/collect-table.c:882
 msgid "Append from collection..."
 msgstr "Ajouter à partir de la collection..."
 
-#: ../src/collect-table.c:880
+#: ../src/collect-table.c:886
 msgid "_Selection"
 msgstr "_Sélection"
 
-#: ../src/collect-table.c:882 ../src/dupe.c:2247 ../src/dupe.c:2560
-#: ../src/layout_util.c:1283 ../src/search.c:1001
+#: ../src/collect-table.c:888 ../src/dupe.c:2251 ../src/dupe.c:2564
+#: ../src/layout_util.c:1328 ../src/search.c:1005
 msgid "Select all"
 msgstr "Tout sélectionner"
 
-#: ../src/collect-table.c:884 ../src/dupe.c:2249 ../src/dupe.c:2562
-#: ../src/layout_util.c:1284 ../src/search.c:1003
+#: ../src/collect-table.c:890 ../src/dupe.c:2253 ../src/dupe.c:2566
+#: ../src/layout_util.c:1329 ../src/search.c:1007
 msgid "Select none"
 msgstr "Désélectionner"
 
-#: ../src/collect-table.c:886
+#: ../src/collect-table.c:892
 msgid "Invert selection"
 msgstr "Inverser la sélection"
 
-#: ../src/collect-table.c:898 ../src/dupe.c:2267 ../src/img-view.c:1285
-#: ../src/layout_image.c:506 ../src/layout_util.c:1266 ../src/pan-view.c:2829
-#: ../src/search.c:1017 ../src/view_file.c:579
+#: ../src/collect-table.c:904 ../src/dupe.c:2271 ../src/img-view.c:1293
+#: ../src/layout_image.c:513 ../src/layout_util.c:1311 ../src/pan-view.c:2851
+#: ../src/search.c:1021 ../src/view_file.c:592
 msgid "_Copy..."
 msgstr "_Copier..."
 
-#: ../src/collect-table.c:900 ../src/dupe.c:2269 ../src/img-view.c:1286
-#: ../src/layout_image.c:508 ../src/layout_util.c:1267 ../src/pan-view.c:2831
-#: ../src/search.c:1019 ../src/view_file.c:581
+#: ../src/collect-table.c:906 ../src/dupe.c:2273 ../src/img-view.c:1294
+#: ../src/layout_image.c:515 ../src/layout_util.c:1312 ../src/pan-view.c:2853
+#: ../src/search.c:1023 ../src/view_file.c:594
 msgid "_Move..."
 msgstr "_Déplacer..."
 
-#: ../src/collect-table.c:902 ../src/dupe.c:2271 ../src/img-view.c:1287
-#: ../src/layout_image.c:510 ../src/layout_util.c:1268 ../src/pan-view.c:2833
-#: ../src/search.c:1021 ../src/view_dir.c:665 ../src/view_file.c:583
+#: ../src/collect-table.c:908 ../src/dupe.c:2275 ../src/img-view.c:1295
+#: ../src/layout_image.c:517 ../src/layout_util.c:1313 ../src/pan-view.c:2855
+#: ../src/search.c:1025 ../src/view_dir.c:666 ../src/view_file.c:596
 msgid "_Rename..."
 msgstr "_Renommer..."
 
-#: ../src/collect-table.c:904 ../src/dupe.c:2273 ../src/img-view.c:1288
-#: ../src/layout_image.c:512 ../src/layout_util.c:1269
-#: ../src/layout_util.c:1270 ../src/layout_util.c:1271 ../src/pan-view.c:2835
-#: ../src/search.c:1023 ../src/view_dir.c:667 ../src/view_file.c:585
+#: ../src/collect-table.c:910 ../src/dupe.c:2277 ../src/img-view.c:1296
+#: ../src/layout_image.c:519 ../src/layout_util.c:1314
+#: ../src/layout_util.c:1315 ../src/layout_util.c:1316 ../src/pan-view.c:2857
+#: ../src/search.c:1027 ../src/view_dir.c:668 ../src/view_file.c:598
 msgid "_Delete..."
 msgstr "_Supprimer..."
 
-#: ../src/collect-table.c:906 ../src/dupe.c:2275 ../src/img-view.c:1289
-#: ../src/layout_image.c:515 ../src/pan-view.c:2837 ../src/search.c:1025
-#: ../src/view_dir.c:670 ../src/view_file.c:587
+#: ../src/collect-table.c:912 ../src/dupe.c:2279 ../src/img-view.c:1297
+#: ../src/layout_image.c:522 ../src/pan-view.c:2859 ../src/search.c:1029
+#: ../src/view_dir.c:671 ../src/view_file.c:600
 msgid "_Copy path"
 msgstr "_Copier chemin"
 
-#: ../src/collect-table.c:912
+#: ../src/collect-table.c:918
 msgid "Randomize"
 msgstr "Tri aléatoire"
 
-#: ../src/collect-table.c:914 ../src/view_file.c:603
+#: ../src/collect-table.c:920 ../src/view_file.c:616
 msgid "_Sort"
 msgstr "_Trier"
 
-#: ../src/collect-table.c:917 ../src/view_file.c:619
+#: ../src/collect-table.c:923 ../src/view_file.c:632
 msgid "Show filename _text"
 msgstr "Montrer le _nom de fichier"
 
-#: ../src/collect-table.c:920
+#: ../src/collect-table.c:926
 msgid "_Save collection"
 msgstr "_Enregistrer collection"
 
-#: ../src/collect-table.c:922
+#: ../src/collect-table.c:928
 msgid "Save collection _as..."
 msgstr "Enregistrer collection _sous..."
 
-#: ../src/collect-table.c:925 ../src/layout_util.c:1262
+#: ../src/collect-table.c:931 ../src/layout_util.c:1307
 msgid "_Find duplicates..."
 msgstr "Rechercher les _doublons..."
 
-#: ../src/collect-table.c:927 ../src/dupe.c:2264 ../src/layout_util.c:1264
-#: ../src/search.c:1014
+#: ../src/collect-table.c:933 ../src/dupe.c:2268 ../src/layout_util.c:1309
+#: ../src/search.c:1018
 msgid "Print..."
 msgstr "Imprimer..."
 
-#: ../src/collect-table.c:2081 ../src/dupe.c:3351 ../src/img-view.c:1443
+#: ../src/collect-table.c:2117 ../src/dupe.c:3363 ../src/img-view.c:1451
 msgid "Dropped list includes folders."
 msgstr "La liste ajoutée contient des dossiers."
 
-#: ../src/collect-table.c:2083 ../src/dupe.c:3353 ../src/img-view.c:1445
+#: ../src/collect-table.c:2119 ../src/dupe.c:3365 ../src/img-view.c:1453
 msgid "_Add contents"
 msgstr "_Ajouter le contenu"
 
-#: ../src/collect-table.c:2085 ../src/dupe.c:3354 ../src/img-view.c:1446
+#: ../src/collect-table.c:2121 ../src/dupe.c:3366 ../src/img-view.c:1454
 msgid "Add contents _recursive"
 msgstr "Ajouter le contenu _récursivement"
 
-#: ../src/collect-table.c:2087 ../src/dupe.c:3355 ../src/img-view.c:1447
+#: ../src/collect-table.c:2123 ../src/dupe.c:3367 ../src/img-view.c:1455
 msgid "_Skip folders"
 msgstr "Omettre les dossier_s"
 
-#: ../src/collect-table.c:2090 ../src/dupe.c:3357 ../src/img-view.c:1449
-#: ../src/view_dir.c:416
+#: ../src/collect-table.c:2126 ../src/dupe.c:3369 ../src/img-view.c:1457
+#: ../src/view_dir.c:417
 msgid "Cancel"
 msgstr "Annuler"
 
-#: ../src/color-man.c:420 ../src/exif.c:232 ../src/exif-common.c:403
+#: ../src/color-man.c:420 ../src/exif.c:233 ../src/exif-common.c:433
 msgid "sRGB"
 msgstr "sRGB"
 
@@ -844,23 +849,23 @@ msgstr "compatible Adobe RGB"
 msgid "Custom profile"
 msgstr "Profil utilisateur"
 
-#: ../src/desktop_file.c:72 ../src/desktop_file.c:84 ../src/desktop_file.c:90
+#: ../src/desktop_file.c:74 ../src/desktop_file.c:86 ../src/desktop_file.c:92
 msgid "Can't save"
 msgstr "Sauvegarde impossible"
 
-#: ../src/desktop_file.c:72
+#: ../src/desktop_file.c:74
 msgid "Please specify file name."
 msgstr "Merci d'indiquer un nom de fichier."
 
-#: ../src/desktop_file.c:84
+#: ../src/desktop_file.c:86
 msgid "Could not create directory"
 msgstr "Impossible de créer le dossier"
 
-#: ../src/desktop_file.c:177 ../src/desktop_file.c:520
+#: ../src/desktop_file.c:182 ../src/desktop_file.c:534
 msgid "Desktop file"
 msgstr "Fichier .desktop"
 
-#: ../src/desktop_file.c:286 ../src/ui_pathsel.c:494
+#: ../src/desktop_file.c:291 ../src/ui_pathsel.c:485
 #, c-format
 msgid ""
 "Unable to delete file:\n"
@@ -869,17 +874,17 @@ msgstr ""
 "Impossible de supprimer le fichier :\n"
 "%s"
 
-#: ../src/desktop_file.c:287 ../src/ui_pathsel.c:495 ../src/utilops.c:1948
-#: ../src/utilops.c:1975 ../src/utilops.c:2489
+#: ../src/desktop_file.c:292 ../src/ui_pathsel.c:486 ../src/utilops.c:1962
+#: ../src/utilops.c:1989 ../src/utilops.c:2509
 msgid "File deletion failed"
 msgstr "La suppression du fichier a échoué"
 
-#: ../src/desktop_file.c:329 ../src/desktop_file.c:337 ../src/ui_pathsel.c:537
-#: ../src/ui_pathsel.c:545
+#: ../src/desktop_file.c:336 ../src/desktop_file.c:344 ../src/ui_pathsel.c:528
+#: ../src/ui_pathsel.c:536
 msgid "Delete file"
 msgstr "Supprimer fichier"
 
-#: ../src/desktop_file.c:335 ../src/ui_pathsel.c:543
+#: ../src/desktop_file.c:342 ../src/ui_pathsel.c:534
 #, c-format
 msgid ""
 "About to delete the file:\n"
@@ -888,21 +893,21 @@ msgstr ""
 "Sur le point de supprimer le fichier :\n"
 " %s"
 
-#: ../src/desktop_file.c:367
+#: ../src/desktop_file.c:374
 msgid "new.desktop"
 msgstr "nouveau.desktop"
 
-#: ../src/desktop_file.c:440
+#: ../src/desktop_file.c:453
 msgid "Editors"
 msgstr "Éditeurs"
 
-#: ../src/desktop_file.c:506
+#: ../src/desktop_file.c:524
 msgid "Hidden"
 msgstr "Caché"
 
-#: ../src/desktop_file.c:529 ../src/dupe.c:2653 ../src/dupe.c:3165
-#: ../src/print.c:3252 ../src/search.c:2844 ../src/ui_pathsel.c:1111
-#: ../src/utilops.c:445
+#: ../src/desktop_file.c:543 ../src/dupe.c:2657 ../src/dupe.c:3177
+#: ../src/print.c:3215 ../src/search.c:2842 ../src/ui_pathsel.c:1109
+#: ../src/utilops.c:458
 msgid "Path"
 msgstr "Chemin"
 
@@ -944,112 +949,121 @@ msgstr "Comparaison..."
 msgid "Sorting..."
 msgstr "Tri..."
 
-#: ../src/dupe.c:2251
+#: ../src/dupe.c:2255
 msgid "Select group _1 duplicates"
 msgstr "Sélectionner les doubles du groupe _1"
 
-#: ../src/dupe.c:2253
+#: ../src/dupe.c:2257
 msgid "Select group _2 duplicates"
 msgstr "Sélectionner les doubles du groupe _2"
 
-#: ../src/dupe.c:2262 ../src/search.c:1012
+#: ../src/dupe.c:2266 ../src/search.c:1016
 msgid "Add to new collection"
 msgstr "Ajouter à la nouvelle collection"
 
-#: ../src/dupe.c:2280 ../src/dupe.c:2567 ../src/search.c:1030
+#: ../src/dupe.c:2284 ../src/dupe.c:2571 ../src/search.c:1034
 msgid "C_lear"
 msgstr "_Vider"
 
-#: ../src/dupe.c:2283 ../src/dupe.c:2570
+#: ../src/dupe.c:2287 ../src/dupe.c:2574
 msgid "Close _window"
 msgstr "Fermer la _fenêtre"
 
-#: ../src/dupe.c:2443
+#: ../src/dupe.c:2447
 #, c-format
 msgid "%d files (set 2)"
 msgstr "%d fichiers (groupe 2)"
 
-#: ../src/dupe.c:2648
+#: ../src/dupe.c:2652
 msgid "Name case-insensitive"
 msgstr "Nom insensible à la casse"
 
-#: ../src/dupe.c:2649 ../src/dupe.c:3162 ../src/preferences.c:1336
-#: ../src/print.c:3256 ../src/search.c:2841 ../src/view_file_list.c:2041
+#: ../src/dupe.c:2653 ../src/dupe.c:3174 ../src/preferences.c:1497
+#: ../src/print.c:3219 ../src/search.c:2839 ../src/view_file_list.c:2043
 msgid "Size"
 msgstr "Taille"
 
-#: ../src/dupe.c:2650 ../src/dupe.c:3163 ../src/exif.c:341
-#: ../src/exif-common.c:514 ../src/print.c:3254 ../src/search.c:2842
-#: ../src/view_file_list.c:2045
+#: ../src/dupe.c:2654 ../src/dupe.c:3175 ../src/exif.c:342
+#: ../src/exif-common.c:544 ../src/print.c:3217 ../src/search.c:2840
+#: ../src/view_file_list.c:2047
 msgid "Date"
 msgstr "Date"
 
-#: ../src/dupe.c:2651 ../src/dupe.c:3164 ../src/print.c:3258
-#: ../src/search.c:2843
+#: ../src/dupe.c:2655 ../src/dupe.c:3176 ../src/print.c:3221
+#: ../src/search.c:2841
 msgid "Dimensions"
 msgstr "Dimensions"
 
-#: ../src/dupe.c:2652
+#: ../src/dupe.c:2656
 msgid "Checksum"
 msgstr "Somme de contrôle"
 
-#: ../src/dupe.c:2654
+#: ../src/dupe.c:2658
 msgid "Similarity (high)"
 msgstr "Similarité (élevée)"
 
-#: ../src/dupe.c:2655
+#: ../src/dupe.c:2659
 msgid "Similarity"
 msgstr "Similarité"
 
-#: ../src/dupe.c:2656
+#: ../src/dupe.c:2660
 msgid "Similarity (low)"
 msgstr "Similarité (basse)"
 
-#: ../src/dupe.c:2657
+#: ../src/dupe.c:2661
 msgid "Similarity (custom)"
 msgstr "Similarité (personnalisée)"
 
-#: ../src/dupe.c:3115
+#: ../src/dupe.c:3127
 msgid "Find duplicates"
 msgstr "Trouver les doublons"
 
-#: ../src/dupe.c:3197
+#: ../src/dupe.c:3209
 msgid "Compare to:"
 msgstr "Comparer à :"
 
-#: ../src/dupe.c:3210
+#: ../src/dupe.c:3222
 msgid "Compare by:"
 msgstr "Comparer par :"
 
-#: ../src/dupe.c:3218 ../src/preferences.c:1171 ../src/search.c:2857
+#: ../src/dupe.c:3230 ../src/preferences.c:1332 ../src/search.c:2855
 msgid "Thumbnails"
 msgstr "Vignettes"
 
-#: ../src/dupe.c:3225
+#: ../src/dupe.c:3237
 msgid "Compare two file sets"
 msgstr "Comparer deux jeux de fichiers"
 
-#: ../src/editors.c:279
+#: ../src/editors.c:281
 #, c-format
 msgid "Desktop file '%s' should not include extension in Icon key: '%s'\n"
 msgstr ""
 "Le fichier .desktop « %s » ne devrait pas inclure l'extension dans la clé "
 "Icon : « %s »\n"
 
-#: ../src/editors.c:486
+#. flash fired (bit 0)
+#: ../src/editors.c:335 ../src/exif.c:226 ../src/exif-common.c:362
+msgid "yes"
+msgstr "oui"
+
+#: ../src/editors.c:335 ../src/exif.c:225 ../src/exif-common.c:362
+msgid "no"
+msgstr "non"
+
+#: ../src/editors.c:507
 msgid "stopping..."
 msgstr "arrêt..."
 
-#: ../src/editors.c:507
+#: ../src/editors.c:528
 msgid "Edit command results"
 msgstr "Voir le résultat de la commande"
 
-#: ../src/editors.c:510
+#: ../src/editors.c:531
 #, c-format
 msgid "Output of %s"
 msgstr "Sortie de %s"
 
-#: ../src/editors.c:1010
+#: ../src/editors.c:1054
 #, c-format
 msgid ""
 "Failed to run command:\n"
@@ -1058,11 +1072,11 @@ msgstr ""
 "Échec de l'exécution de la commande :\n"
 "%s\n"
 
-#: ../src/editors.c:1137
+#: ../src/editors.c:1181
 msgid "stopped by user"
 msgstr "arrêté par l'utilisateur"
 
-#: ../src/editors.c:1218
+#: ../src/editors.c:1266
 #, c-format
 msgid ""
 "%s\n"
@@ -1071,834 +1085,825 @@ msgstr ""
 "%s\n"
 "« %s »"
 
-#: ../src/editors.c:1220
+#: ../src/editors.c:1268
 msgid "Invalid editor command"
 msgstr "Commande d'éditeur invalide"
 
-#: ../src/editors.c:1307
+#: ../src/editors.c:1355
 msgid "Editor template is empty."
 msgstr "Le gabarit d'éditeur est vide."
 
-#: ../src/editors.c:1308
+#: ../src/editors.c:1356
 msgid "Editor template has incorrect syntax."
 msgstr "Le gabarit d'éditeur a une syntaxe incorrecte."
 
-#: ../src/editors.c:1309
+#: ../src/editors.c:1357
 msgid "Editor template uses incompatible macros."
 msgstr "Le gabarit d'éditeur utilise des macros incompatibles."
 
-#: ../src/editors.c:1310
+#: ../src/editors.c:1358
 msgid "Can't find matching file type."
 msgstr "Ne peut trouver le type de fichier correspondant."
 
-#: ../src/editors.c:1311
+#: ../src/editors.c:1359
 msgid "Can't execute external editor."
 msgstr "Ne peut exécuter l'éditeur externe."
 
-#: ../src/editors.c:1312
+#: ../src/editors.c:1360
 msgid "External editor returned error status."
 msgstr "L'éditeur externe a retourné une erreur."
 
-#: ../src/editors.c:1313
+#: ../src/editors.c:1361
 msgid "File was skipped."
 msgstr "Le fichier a été omis."
 
-#: ../src/editors.c:1314
+#: ../src/editors.c:1362
 msgid "Unknown error."
 msgstr "Erreur inconnue."
 
-#: ../src/exif.c:147 ../src/exif.c:160 ../src/exif.c:174 ../src/exif.c:199
-#: ../src/exif.c:316 ../src/exif.c:663 ../src/exif-common.c:308
-#: ../src/exif-common.c:311 ../src/exif-common.c:378
+#: ../src/exif.c:148 ../src/exif.c:161 ../src/exif.c:175 ../src/exif.c:200
+#: ../src/exif.c:317 ../src/exif.c:664 ../src/exif-common.c:338
+#: ../src/exif-common.c:341 ../src/exif-common.c:408
 msgid "unknown"
 msgstr "inconnu"
 
-#: ../src/exif.c:148
+#: ../src/exif.c:149
 msgid "top left"
 msgstr "haut gauche"
 
-#: ../src/exif.c:149
+#: ../src/exif.c:150
 msgid "top right"
 msgstr "haut droite"
 
-#: ../src/exif.c:150
+#: ../src/exif.c:151
 msgid "bottom right"
 msgstr "bas droite"
 
-#: ../src/exif.c:151
+#: ../src/exif.c:152
 msgid "bottom left"
 msgstr "bas gauche"
 
-#: ../src/exif.c:152
+#: ../src/exif.c:153
 msgid "left top"
 msgstr "gauche haut"
 
-#: ../src/exif.c:153
+#: ../src/exif.c:154
 msgid "right top"
 msgstr "droit haut"
 
-#: ../src/exif.c:154
+#: ../src/exif.c:155
 msgid "right bottom"
 msgstr "droit bas"
 
-#: ../src/exif.c:155
+#: ../src/exif.c:156
 msgid "left bottom"
 msgstr "gauche bas"
 
-#: ../src/exif.c:162
+#: ../src/exif.c:163
 msgid "inch"
 msgstr "pouce"
 
-#: ../src/exif.c:163
+#: ../src/exif.c:164
 msgid "centimeter"
 msgstr "centimètre"
 
-#: ../src/exif.c:175
+#: ../src/exif.c:176
 msgid "average"
 msgstr "moyenne"
 
-#: ../src/exif.c:176
+#: ../src/exif.c:177
 msgid "center weighted"
 msgstr "pondération moyenne"
 
-#: ../src/exif.c:177
+#: ../src/exif.c:178
 msgid "spot"
 msgstr "point"
 
-#: ../src/exif.c:178
+#: ../src/exif.c:179
 msgid "multi-spot"
 msgstr "plusieurs points"
 
-#: ../src/exif.c:179
+#: ../src/exif.c:180
 msgid "multi-segment"
 msgstr "plusieurs segments"
 
-#: ../src/exif.c:180
+#: ../src/exif.c:181
 msgid "partial"
 msgstr "partiel"
 
-#: ../src/exif.c:181 ../src/exif.c:219
+#: ../src/exif.c:182 ../src/exif.c:220
 msgid "other"
 msgstr "autre"
 
-#: ../src/exif.c:186 ../src/exif.c:238
+#: ../src/exif.c:187 ../src/exif.c:239
 msgid "not defined"
 msgstr "indéfini"
 
-#: ../src/exif.c:187 ../src/exif.c:266 ../src/exif.c:273
+#: ../src/exif.c:188 ../src/exif.c:267 ../src/exif.c:274
 msgid "manual"
 msgstr "manuel"
 
-#: ../src/exif.c:188 ../src/exif.c:259 ../src/exif.c:295 ../src/exif.c:302
-#: ../src/exif.c:309
+#: ../src/exif.c:189 ../src/exif.c:260 ../src/exif.c:296 ../src/exif.c:303
+#: ../src/exif.c:310
 msgid "normal"
 msgstr "normal"
 
-#: ../src/exif.c:189
+#: ../src/exif.c:190
 msgid "aperture"
 msgstr "ouverture"
 
-#: ../src/exif.c:190
+#: ../src/exif.c:191
 msgid "shutter"
 msgstr "obturateur"
 
-#: ../src/exif.c:191
+#: ../src/exif.c:192
 msgid "creative"
 msgstr "créatif"
 
-#: ../src/exif.c:192
+#: ../src/exif.c:193
 msgid "action"
 msgstr "action"
 
-#: ../src/exif.c:193 ../src/exif.c:280
+#: ../src/exif.c:194 ../src/exif.c:281
 msgid "portrait"
 msgstr "portrait"
 
-#: ../src/exif.c:194 ../src/exif.c:279
+#: ../src/exif.c:195 ../src/exif.c:280
 msgid "landscape"
 msgstr "paysage"
 
-#: ../src/exif.c:200
+#: ../src/exif.c:201
 msgid "daylight"
 msgstr "lumière naturelle"
 
-#: ../src/exif.c:201
+#: ../src/exif.c:202
 msgid "fluorescent"
 msgstr "fluorescent"
 
-#: ../src/exif.c:202
+#: ../src/exif.c:203
 msgid "tungsten (incandescent)"
 msgstr "tungstène (incandescent)"
 
-#: ../src/exif.c:203
+#: ../src/exif.c:204
 msgid "flash"
 msgstr "flash"
 
-#: ../src/exif.c:204
+#: ../src/exif.c:205
 msgid "fine weather"
 msgstr "beau temps"
 
-#: ../src/exif.c:205
+#: ../src/exif.c:206
 msgid "cloudy weather"
 msgstr "temps nuageux"
 
-#: ../src/exif.c:206
+#: ../src/exif.c:207
 msgid "shade"
 msgstr "ombragé"
 
-#: ../src/exif.c:207
+#: ../src/exif.c:208
 msgid "daylight fluorescent"
 msgstr "lumière du jour fluorescent"
 
-#: ../src/exif.c:208
+#: ../src/exif.c:209
 msgid "day white fluorescent"
 msgstr "fluorescent blanc jour"
 
-#: ../src/exif.c:209
+#: ../src/exif.c:210
 msgid "cool white fluorescent"
 msgstr "fluorescent blanc froid"
 
-#: ../src/exif.c:210
+#: ../src/exif.c:211
 msgid "white fluorescent"
 msgstr "fluorescent blanc"
 
-#: ../src/exif.c:211
+#: ../src/exif.c:212
 msgid "standard light A"
 msgstr "lumière standard A"
 
-#: ../src/exif.c:212
+#: ../src/exif.c:213
 msgid "standard light B"
 msgstr "lumière standard B"
 
-#: ../src/exif.c:213
+#: ../src/exif.c:214
 msgid "standard light C"
 msgstr "lumière standard C"
 
-#: ../src/exif.c:214
+#: ../src/exif.c:215
 msgid "D55"
 msgstr "D55"
 
-#: ../src/exif.c:215
+#: ../src/exif.c:216
 msgid "D65"
 msgstr "D65"
 
-#: ../src/exif.c:216
+#: ../src/exif.c:217
 msgid "D75"
 msgstr "D75"
 
-#: ../src/exif.c:217
+#: ../src/exif.c:218
 msgid "D50"
 msgstr "D50"
 
-#: ../src/exif.c:218
+#: ../src/exif.c:219
 msgid "ISO studio tungsten"
 msgstr "tungstène studio ISO"
 
-#: ../src/exif.c:224 ../src/exif-common.c:332
-msgid "no"
-msgstr "non"
-
-#. flash fired (bit 0)
-#: ../src/exif.c:225 ../src/exif-common.c:332
-msgid "yes"
-msgstr "oui"
-
-#: ../src/exif.c:226
+#: ../src/exif.c:227
 msgid "yes, not detected by strobe"
 msgstr "oui, mais non détecté"
 
-#: ../src/exif.c:227
+#: ../src/exif.c:228
 msgid "yes, detected by strobe"
 msgstr "oui, détecté"
 
-#: ../src/exif.c:233
+#: ../src/exif.c:234
 msgid "uncalibrated"
 msgstr "non calibré"
 
-#: ../src/exif.c:239
+#: ../src/exif.c:240
 msgid "1 chip color area"
 msgstr "mono-CCD"
 
-#: ../src/exif.c:240
+#: ../src/exif.c:241
 msgid "2 chip color area"
 msgstr "bi-CCD"
 
-#: ../src/exif.c:241
+#: ../src/exif.c:242
 msgid "3 chip color area"
 msgstr "tri-CCD"
 
-#: ../src/exif.c:242
+#: ../src/exif.c:243
 msgid "color sequential area"
 msgstr "CCD séquentiel"
 
-#: ../src/exif.c:243
+#: ../src/exif.c:244
 msgid "trilinear"
 msgstr "trilinéaire"
 
-#: ../src/exif.c:244
+#: ../src/exif.c:245
 msgid "color sequential linear"
 msgstr "capteur séquentiel linéaire"
 
-#: ../src/exif.c:249
+#: ../src/exif.c:250
 msgid "digital still camera"
 msgstr "appareil photo numérique"
 
-#: ../src/exif.c:254
+#: ../src/exif.c:255
 msgid "direct photo"
 msgstr "photo directe"
 
-#: ../src/exif.c:260
+#: ../src/exif.c:261
 msgid "custom"
 msgstr "personnalisé"
 
-#: ../src/exif.c:265 ../src/exif.c:272 ../src/exif-common.c:346
+#: ../src/exif.c:266 ../src/exif.c:273 ../src/exif-common.c:376
 msgid "auto"
 msgstr "auto"
 
-#: ../src/exif.c:267
+#: ../src/exif.c:268
 msgid "auto bracket"
 msgstr "bracketing automatique"
 
-#: ../src/exif.c:278
+#: ../src/exif.c:279
 msgid "standard"
 msgstr "standard"
 
-#: ../src/exif.c:281
+#: ../src/exif.c:282
 msgid "night scene"
 msgstr "scène de nuit"
 
-#: ../src/exif.c:286
+#: ../src/exif.c:287
 msgid "none"
 msgstr "aucun"
 
-#: ../src/exif.c:287
+#: ../src/exif.c:288
 msgid "low gain up"
 msgstr "faible augmentation du gain"
 
-#: ../src/exif.c:288
+#: ../src/exif.c:289
 msgid "high gain up"
 msgstr "forte augmentation du gain"
 
-#: ../src/exif.c:289
+#: ../src/exif.c:290
 msgid "low gain down"
 msgstr "faible réduction du gain"
 
-#: ../src/exif.c:290
+#: ../src/exif.c:291
 msgid "high gain down"
 msgstr "forte réduction du gain"
 
-#: ../src/exif.c:296 ../src/exif.c:310
+#: ../src/exif.c:297 ../src/exif.c:311
 msgid "soft"
 msgstr "doux"
 
-#: ../src/exif.c:297 ../src/exif.c:311
+#: ../src/exif.c:298 ../src/exif.c:312
 msgid "hard"
 msgstr "dur"
 
-#: ../src/exif.c:303
+#: ../src/exif.c:304
 msgid "low"
 msgstr "faible"
 
-#: ../src/exif.c:304
+#: ../src/exif.c:305
 msgid "high"
 msgstr "élevé"
 
-#: ../src/exif.c:317
+#: ../src/exif.c:318
 msgid "macro"
 msgstr "macro"
 
-#: ../src/exif.c:318
+#: ../src/exif.c:319
 msgid "close"
 msgstr "près"
 
-#: ../src/exif.c:319
+#: ../src/exif.c:320
 msgid "distant"
 msgstr "loin"
 
-#: ../src/exif.c:329
+#: ../src/exif.c:330
 msgid "Image Width"
 msgstr "Largeur de l'image"
 
-#: ../src/exif.c:330
+#: ../src/exif.c:331
 msgid "Image Height"
 msgstr "Hauteur de l'image"
 
-#: ../src/exif.c:331
+#: ../src/exif.c:332
 msgid "Bits per Sample/Pixel"
 msgstr "Bits compressés par pixel"
 
-#: ../src/exif.c:332
+#: ../src/exif.c:333
 msgid "Compression"
 msgstr "Compression"
 
-#: ../src/exif.c:333
+#: ../src/exif.c:334
 msgid "Image description"
 msgstr "Description de l'image"
 
-#: ../src/exif.c:334
+#: ../src/exif.c:335
 msgid "Camera make"
 msgstr "Marque de l'appareil"
 
-#: ../src/exif.c:335
+#: ../src/exif.c:336
 msgid "Camera model"
 msgstr "Modèle de l'appareil"
 
-#: ../src/exif.c:336
+#: ../src/exif.c:337
 msgid "Orientation"
 msgstr "Orientation"
 
-#: ../src/exif.c:337
+#: ../src/exif.c:338
 msgid "X resolution"
 msgstr "Résolution X"
 
-#: ../src/exif.c:338
+#: ../src/exif.c:339
 msgid "Y Resolution"
 msgstr "Résolution Y"
 
-#: ../src/exif.c:339
+#: ../src/exif.c:340
 msgid "Resolution units"
 msgstr "Unités de résolution"
 
-#: ../src/exif.c:340
+#: ../src/exif.c:341
 msgid "Firmware"
 msgstr "Microcode"
 
-#: ../src/exif.c:342
+#: ../src/exif.c:343
 msgid "White point"
 msgstr "Point blanc"
 
-#: ../src/exif.c:343
+#: ../src/exif.c:344
 msgid "Primary chromaticities"
 msgstr "Chromaticités Primaires"
 
-#: ../src/exif.c:344
+#: ../src/exif.c:345
 msgid "YCbCy coefficients"
 msgstr "Coéfficients YCbCr"
 
-#: ../src/exif.c:345
+#: ../src/exif.c:346
 msgid "YCbCr positioning"
 msgstr "Positionnement YCbCr"
 
-#: ../src/exif.c:346
+#: ../src/exif.c:347
 msgid "Black white reference"
 msgstr "Référence Noir/Blanc"
 
-#: ../src/exif.c:348
+#: ../src/exif.c:349
 msgid "SubIFD Exif offset"
 msgstr "Offset Exif SubIFD"
 
 #. subIFD follows
-#: ../src/exif.c:350
+#: ../src/exif.c:351
 msgid "Exposure time (seconds)"
 msgstr "Temps d'exposition (secondes)"
 
-#: ../src/exif.c:351
+#: ../src/exif.c:352
 msgid "FNumber"
 msgstr "Nombre F"
 
-#: ../src/exif.c:352
+#: ../src/exif.c:353
 msgid "Exposure program"
 msgstr "Programme d'exposition"
 
-#: ../src/exif.c:353
+#: ../src/exif.c:354
 msgid "Spectral Sensitivity"
 msgstr "Sensibilité spectrale"
 
-#: ../src/exif.c:354 ../src/exif.c:390 ../src/exif-common.c:518
+#: ../src/exif.c:355 ../src/exif.c:391 ../src/exif-common.c:548
 msgid "ISO sensitivity"
 msgstr "Sensibilité ISO"
 
-#: ../src/exif.c:355
+#: ../src/exif.c:356
 msgid "Optoelectric conversion factor"
 msgstr "Facteur de conversion opto-électrique"
 
-#: ../src/exif.c:356
+#: ../src/exif.c:357
 msgid "Exif version"
 msgstr "Version d'exif"
 
-#: ../src/exif.c:357
+#: ../src/exif.c:358
 msgid "Date original"
 msgstr "Date de prise de vue"
 
-#: ../src/exif.c:358
+#: ../src/exif.c:359
 msgid "Date digitized"
 msgstr "Date de numérisation"
 
-#: ../src/exif.c:359
+#: ../src/exif.c:360
 msgid "Pixel format"
 msgstr "Format des pixels"
 
-#: ../src/exif.c:360
+#: ../src/exif.c:361
 msgid "Compression ratio"
 msgstr "Rapport de compression"
 
-#: ../src/exif.c:361 ../src/exif-common.c:515
+#: ../src/exif.c:362 ../src/exif-common.c:545
 msgid "Shutter speed"
 msgstr "Vitesse d'obturation"
 
-#: ../src/exif.c:362 ../src/exif-common.c:516
+#: ../src/exif.c:363 ../src/exif-common.c:546
 msgid "Aperture"
 msgstr "Ouverture"
 
-#: ../src/exif.c:363
+#: ../src/exif.c:364
 msgid "Brightness"
 msgstr "Luminosité"
 
-#: ../src/exif.c:364 ../src/exif-common.c:517
+#: ../src/exif.c:365 ../src/exif-common.c:547
 msgid "Exposure bias"
 msgstr "Polarisation d'exposition"
 
-#: ../src/exif.c:365
+#: ../src/exif.c:366
 msgid "Maximum aperture"
 msgstr "Ouverture maximale"
 
-#: ../src/exif.c:366 ../src/exif-common.c:521
+#: ../src/exif.c:367 ../src/exif-common.c:551
 msgid "Subject distance"
 msgstr "Distance du sujet"
 
-#: ../src/exif.c:367
+#: ../src/exif.c:368
 msgid "Metering mode"
 msgstr "Méthode de mesure"
 
-#: ../src/exif.c:368
+#: ../src/exif.c:369
 msgid "Light source"
 msgstr "Source de lumière"
 
-#: ../src/exif.c:369 ../src/exif-common.c:522
+#: ../src/exif.c:370 ../src/exif-common.c:552
 msgid "Flash"
 msgstr "Flash"
 
-#: ../src/exif.c:370 ../src/exif-common.c:519
+#: ../src/exif.c:371 ../src/exif-common.c:549
 msgid "Focal length"
 msgstr "Distance focale"
 
-#: ../src/exif.c:371
+#: ../src/exif.c:372
 msgid "Subject area"
 msgstr "Aire du sujet"
 
-#: ../src/exif.c:372
+#: ../src/exif.c:373
 msgid "MakerNote"
 msgstr "Note du fabriquant"
 
-#: ../src/exif.c:373
+#: ../src/exif.c:374
 msgid "UserComment"
 msgstr "Commentaire utilisateur"
 
-#: ../src/exif.c:374
+#: ../src/exif.c:375
 msgid "Subsecond time"
 msgstr "Heure sub-seconde"
 
-#: ../src/exif.c:375
+#: ../src/exif.c:376
 msgid "Subsecond time original"
 msgstr "Heure sub-seconde originale"
 
-#: ../src/exif.c:376
+#: ../src/exif.c:377
 msgid "Subsecond time digitized"
 msgstr "Date de numérisation sub-seconde"
 
-#: ../src/exif.c:377
+#: ../src/exif.c:378
 msgid "FlashPix version"
 msgstr "Version FlashPix"
 
-#: ../src/exif.c:378
+#: ../src/exif.c:379
 msgid "Colorspace"
 msgstr "Espace de couleurs"
 
 #. ExifImageWidth, ExifImageHeight can also be unsigned short
-#: ../src/exif.c:380
+#: ../src/exif.c:381 ../src/preferences.c:2194
 msgid "Width"
 msgstr "Largeur"
 
-#: ../src/exif.c:381
+#: ../src/exif.c:382 ../src/preferences.c:2196
 msgid "Height"
 msgstr "Hauteur"
 
-#: ../src/exif.c:382
+#: ../src/exif.c:383
 msgid "Audio data"
 msgstr "Données audio"
 
-#: ../src/exif.c:383
+#: ../src/exif.c:384
 msgid "ExifR98 extension"
 msgstr "Extension ExifR98"
 
-#: ../src/exif.c:384
+#: ../src/exif.c:385
 msgid "Flash strength"
 msgstr "Puissance Flash"
 
-#: ../src/exif.c:385
+#: ../src/exif.c:386
 msgid "Spatial frequency response"
 msgstr "Réponse fréquentielle spaciale"
 
-#: ../src/exif.c:386
+#: ../src/exif.c:387
 msgid "X Pixel density"
 msgstr "Densité de points en X"
 
-#: ../src/exif.c:387
+#: ../src/exif.c:388
 msgid "Y Pixel density"
 msgstr "Densité de points en Y"
 
-#: ../src/exif.c:388
+#: ../src/exif.c:389
 msgid "Pixel density units"
 msgstr "Unités de la densité de points"
 
-#: ../src/exif.c:389
+#: ../src/exif.c:390
 msgid "Subject location"
 msgstr "Emplacement du sujet"
 
-#: ../src/exif.c:391
+#: ../src/exif.c:392
 msgid "Sensor type"
 msgstr "Type de capteur"
 
-#: ../src/exif.c:392
+#: ../src/exif.c:393
 msgid "Source type"
 msgstr "Type de source"
 
-#: ../src/exif.c:393
+#: ../src/exif.c:394
 msgid "Scene type"
 msgstr "Type de scène"
 
-#: ../src/exif.c:394
+#: ../src/exif.c:395
 msgid "Color filter array pattern"
 msgstr "Forme du filtre couleur "
 
 #. tags a4xx were added for Exif 2.2 (not just these - some above, as well)
-#: ../src/exif.c:396
+#: ../src/exif.c:397
 msgid "Render process"
 msgstr "Procédé de rendu"
 
-#: ../src/exif.c:397
+#: ../src/exif.c:398
 msgid "Exposure mode"
 msgstr "Mode d'exposition"
 
-#: ../src/exif.c:398
+#: ../src/exif.c:399
 msgid "White balance"
 msgstr "Balance des blancs"
 
-#: ../src/exif.c:399
+#: ../src/exif.c:400
 msgid "Digital zoom ratio"
 msgstr "Rapport de zoom numérique"
 
-#: ../src/exif.c:400
+#: ../src/exif.c:401
 msgid "Focal length (35mm)"
 msgstr "Focale 35mm"
 
-#: ../src/exif.c:401
+#: ../src/exif.c:402
 msgid "Scene capture type"
 msgstr "Type de capture de la scène"
 
-#: ../src/exif.c:402
+#: ../src/exif.c:403
 msgid "Gain control"
 msgstr "Contrôle du gain"
 
-#: ../src/exif.c:403
+#: ../src/exif.c:404
 msgid "Contrast"
 msgstr "Contraste"
 
-#: ../src/exif.c:404
+#: ../src/exif.c:405
 msgid "Saturation"
 msgstr "Saturation"
 
-#: ../src/exif.c:405
+#: ../src/exif.c:406
 msgid "Sharpness"
 msgstr "Netteté"
 
-#: ../src/exif.c:406
+#: ../src/exif.c:407
 msgid "Device setting"
 msgstr "Description des paramètres du périphérique"
 
-#: ../src/exif.c:407
+#: ../src/exif.c:408
 msgid "Subject range"
 msgstr "Distance du sujet"
 
-#: ../src/exif.c:408
+#: ../src/exif.c:409
 msgid "Image serial number"
 msgstr "Numéro de série de l'image"
 
-#: ../src/exif-common.c:307
+#: ../src/exif-common.c:337
 msgid "infinity"
 msgstr "infini"
 
-#: ../src/exif-common.c:336
+#: ../src/exif-common.c:366
 msgid "mode:"
 msgstr "mode :"
 
-#: ../src/exif-common.c:340 ../src/trash.c:205
+#: ../src/exif-common.c:370 ../src/trash.c:205
 msgid "on"
 msgstr "on"
 
-#: ../src/exif-common.c:343 ../src/trash.c:210
+#: ../src/exif-common.c:373 ../src/trash.c:210
 msgid "off"
 msgstr "off"
 
-#: ../src/exif-common.c:352
+#: ../src/exif-common.c:382
 msgid "not detected by strobe"
 msgstr "non détecté"
 
-#: ../src/exif-common.c:353
+#: ../src/exif-common.c:383
 msgid "detected by strobe"
 msgstr "détecté"
 
 #. we ignore flash function (bit 5)
 #. red-eye (bit 6)
-#: ../src/exif-common.c:358
+#: ../src/exif-common.c:388
 msgid "red-eye reduction"
 msgstr "anti-yeux rouges"
 
-#: ../src/exif-common.c:378
+#: ../src/exif-common.c:408
 msgid "dot"
 msgstr "point"
 
-#: ../src/exif-common.c:408
+#: ../src/exif-common.c:438
 msgid "AdobeRGB"
 msgstr "AdobeRGB"
 
-#: ../src/exif-common.c:416
+#: ../src/exif-common.c:446
 msgid "embedded"
 msgstr "embarqué"
 
-#: ../src/exif-common.c:505
+#: ../src/exif-common.c:535
 msgid "Above Sea Level"
 msgstr "Au-dessus du niveau de la mer"
 
-#: ../src/exif-common.c:505
+#: ../src/exif-common.c:535
 msgid "Below Sea Level"
 msgstr "En-dessous du niveau de la mer"
 
-#: ../src/exif-common.c:513
+#: ../src/exif-common.c:543
 msgid "Camera"
 msgstr "Appareil"
 
-#: ../src/exif-common.c:520
+#: ../src/exif-common.c:550
 msgid "Focal length 35mm"
 msgstr "Focale 35mm"
 
-#: ../src/exif-common.c:523
+#: ../src/exif-common.c:553
 msgid "Resolution"
 msgstr "Résolution"
 
-#: ../src/exif-common.c:524
+#: ../src/exif-common.c:554
 msgid "Color profile"
 msgstr "Profil colorimétrique"
 
-#: ../src/exif-common.c:525
+#: ../src/exif-common.c:555
 msgid "GPS position"
 msgstr "Position GPS"
 
-#: ../src/exif-common.c:526
+#: ../src/exif-common.c:556
 msgid "GPS altitude"
 msgstr "Altitude GPS"
 
-#: ../src/exif-common.c:527
+#: ../src/exif-common.c:557
 msgid "File size"
 msgstr "Taille du fichier"
 
-#: ../src/exif-common.c:528
+#: ../src/exif-common.c:558
 msgid "File date"
 msgstr "Date du fichier"
 
-#: ../src/exif-common.c:529
+#: ../src/exif-common.c:559
 msgid "File mode"
 msgstr "Droits du fichier"
 
 # c-format
-#: ../src/filedata.c:90
+#: ../src/filedata.c:97
 #, c-format
 msgid "%d bytes"
 msgstr "%d octets"
 
-#: ../src/filedata.c:94
+#: ../src/filedata.c:101
 #, c-format
 msgid "%.1f K"
 msgstr "%.1f Ko"
 
-#: ../src/filedata.c:98
+#: ../src/filedata.c:105
 #, c-format
 msgid "%.1f MB"
 msgstr "%.1f Mo"
 
-#: ../src/filedata.c:103
+#: ../src/filedata.c:110
 #, c-format
 msgid "%.1f GB"
 msgstr "%.1f Go"
 
-#: ../src/filedata.c:2091
+#: ../src/filedata.c:2316
 msgid "file or directory does not exist"
 msgstr "fichier ou dossier inexistant"
 
-#: ../src/filedata.c:2097
+#: ../src/filedata.c:2322
 msgid "destination already exists"
 msgstr "la destination existe déjà."
 
-#: ../src/filedata.c:2103
+#: ../src/filedata.c:2328
 msgid "destination can't be overwritten"
 msgstr "la destination ne peut être écrasée"
 
-#: ../src/filedata.c:2109
+#: ../src/filedata.c:2334
 msgid "destination directory is not writable"
 msgstr "impossible d'écrire dans le dossier de destination"
 
-#: ../src/filedata.c:2115
+#: ../src/filedata.c:2340
 msgid "destination directory does not exist"
 msgstr "le dossier de destination n'existe pas"
 
-#: ../src/filedata.c:2121
+#: ../src/filedata.c:2346
 msgid "source directory is not writable"
 msgstr "impossible d'écrire dans le dossier source "
 
-#: ../src/filedata.c:2127
+#: ../src/filedata.c:2352
 msgid "no read permission"
 msgstr "pas de permission en lecture"
 
-#: ../src/filedata.c:2133
+#: ../src/filedata.c:2358
 msgid "file is readonly"
 msgstr "fichier en lecture seule"
 
-#: ../src/filedata.c:2139
+#: ../src/filedata.c:2364
 msgid "destination already exists and will be overwritten"
 msgstr "la destination existe déjà et sera écrasée"
 
-#: ../src/filedata.c:2145
+#: ../src/filedata.c:2370
 msgid "source and destination are the same"
 msgstr "source et destination sont identiques"
 
-#: ../src/filedata.c:2151
+#: ../src/filedata.c:2376
 msgid "source and destination have different extension"
 msgstr "source et destination ont des extensions différentes"
 
-#: ../src/filedata.c:2157
+#: ../src/filedata.c:2382
 msgid "there are unsaved metadata changes for the file"
 msgstr "Il y a des méta-données modifiées non sauvées pour ce fichier"
 
-#: ../src/fullscreen.c:243 ../src/layout_util.c:1325 ../src/layout_util.c:1326
-#: ../src/layout_util.c:1327 ../src/preferences.c:1349
+#: ../src/fullscreen.c:236 ../src/layout_util.c:1370 ../src/layout_util.c:1371
+#: ../src/layout_util.c:1372 ../src/preferences.c:1510
 msgid "Full screen"
 msgstr "Plein écran"
 
-#: ../src/fullscreen.c:391
+#: ../src/fullscreen.c:397
 msgid "Full size"
 msgstr "Pleine taille"
 
-#: ../src/fullscreen.c:396
+#: ../src/fullscreen.c:405
 msgid "Monitor"
 msgstr "Moniteur"
 
-#: ../src/fullscreen.c:401
+#: ../src/fullscreen.c:411
 msgid "Screen"
 msgstr "Écran"
 
-#: ../src/fullscreen.c:638
+#: ../src/fullscreen.c:648
 msgid "Stay above other windows"
 msgstr "Rester au-dessus des autres fenêtres"
 
-#: ../src/fullscreen.c:645
+#: ../src/fullscreen.c:655
 msgid "Determined by Window Manager"
 msgstr "Déterminé par le gestionnaire de fenêtres"
 
-#: ../src/fullscreen.c:646
+#: ../src/fullscreen.c:656
 msgid "Active screen"
 msgstr "Écran actif"
 
-#: ../src/fullscreen.c:648
+#: ../src/fullscreen.c:658
 msgid "Active monitor"
 msgstr "Moniteur actif"
 
@@ -1952,66 +1957,71 @@ msgstr "Impossible d'écrire l'historique dans : %s\n"
 msgid " (Collection %s)"
 msgstr " (Collection %s)"
 
-#: ../src/img-view.c:1266 ../src/layout_image.c:482 ../src/layout_util.c:1292
-#: ../src/layout_util.c:1293 ../src/layout_util.c:1308
-#: ../src/layout_util.c:1309 ../src/pan-view.c:2810
+#: ../src/image_load_jpeg.c:177
+#, c-format
+msgid "Error interpreting JPEG image file (%s)"
+msgstr "Erreur lors de l'interprétation de fichier de l'image JPEG (%s)"
+
+#: ../src/img-view.c:1274 ../src/layout_image.c:489 ../src/layout_util.c:1337
+#: ../src/layout_util.c:1338 ../src/layout_util.c:1353
+#: ../src/layout_util.c:1354 ../src/pan-view.c:2832
 msgid "Zoom _in"
 msgstr "Zoom a_vant"
 
-#: ../src/img-view.c:1267 ../src/layout_image.c:483 ../src/layout_util.c:1294
-#: ../src/layout_util.c:1295 ../src/layout_util.c:1310
-#: ../src/layout_util.c:1311 ../src/pan-view.c:2812
+#: ../src/img-view.c:1275 ../src/layout_image.c:490 ../src/layout_util.c:1339
+#: ../src/layout_util.c:1340 ../src/layout_util.c:1355
+#: ../src/layout_util.c:1356 ../src/pan-view.c:2834
 msgid "Zoom _out"
 msgstr "Zoom a_rrière"
 
-#: ../src/img-view.c:1268 ../src/layout_image.c:484 ../src/layout_util.c:1296
-#: ../src/layout_util.c:1297 ../src/layout_util.c:1312
-#: ../src/layout_util.c:1313 ../src/pan-view.c:2814
+#: ../src/img-view.c:1276 ../src/layout_image.c:491 ../src/layout_util.c:1341
+#: ../src/layout_util.c:1342 ../src/layout_util.c:1357
+#: ../src/layout_util.c:1358 ../src/pan-view.c:2836
 msgid "Zoom _1:1"
 msgstr "Taille réelle (_1:1)"
 
-#: ../src/img-view.c:1269 ../src/layout_image.c:485
+#: ../src/img-view.c:1277 ../src/layout_image.c:492
 msgid "Fit image to _window"
 msgstr "Mettre à la taille de la _fenêtre"
 
-#: ../src/img-view.c:1277 ../src/layout_image.c:494 ../src/layout_util.c:1290
+#: ../src/img-view.c:1285 ../src/layout_image.c:501 ../src/layout_util.c:1335
 msgid "Set as _wallpaper"
 msgstr "Utiliser comme _papier peint"
 
-#: ../src/img-view.c:1282 ../src/layout_image.c:501
+#: ../src/img-view.c:1290 ../src/layout_image.c:508
 msgid "_Go to directory view"
 msgstr "_Aller à la vue répertoire"
 
-#: ../src/img-view.c:1295 ../src/layout_image.c:522
+#: ../src/img-view.c:1303 ../src/layout_image.c:529
 msgid "_Stop slideshow"
 msgstr "_Stopper le diaporama"
 
-#: ../src/img-view.c:1298 ../src/layout_image.c:525
+#: ../src/img-view.c:1306 ../src/layout_image.c:532
 msgid "Continue slides_how"
 msgstr "Reprendre le _diaporama"
 
-#: ../src/img-view.c:1303 ../src/img-view.c:1311 ../src/layout_image.c:530
-#: ../src/layout_image.c:537
+#: ../src/img-view.c:1311 ../src/img-view.c:1319 ../src/layout_image.c:537
+#: ../src/layout_image.c:544
 msgid "Pause slides_how"
 msgstr "Suspendre le _diaporama"
 
-#: ../src/img-view.c:1309 ../src/layout_image.c:536
+#: ../src/img-view.c:1317 ../src/layout_image.c:543
 msgid "_Start slideshow"
 msgstr "_Lancer le diaporama"
 
-#: ../src/img-view.c:1317 ../src/layout_image.c:547 ../src/pan-view.c:2883
+#: ../src/img-view.c:1325 ../src/layout_image.c:554 ../src/pan-view.c:2905
 msgid "Exit _full screen"
 msgstr "Sortir du mode plein _écran"
 
-#: ../src/img-view.c:1321 ../src/layout_image.c:543 ../src/pan-view.c:2887
+#: ../src/img-view.c:1329 ../src/layout_image.c:550 ../src/pan-view.c:2909
 msgid "_Full screen"
 msgstr "Plein _écran"
 
-#: ../src/img-view.c:1325 ../src/layout_util.c:1275 ../src/pan-view.c:2891
+#: ../src/img-view.c:1333 ../src/layout_util.c:1320 ../src/pan-view.c:2913
 msgid "C_lose window"
 msgstr "Fermer _la fenêtre"
 
-#: ../src/layout.c:363 ../src/view_file.c:600
+#: ../src/layout.c:363 ../src/view_file.c:613
 msgid "Ascending"
 msgstr "Croissant"
 
@@ -2038,79 +2048,79 @@ msgstr "%s, %d fichiers%s"
 msgid "%d files%s"
 msgstr "%d fichiers%s"
 
-#: ../src/layout.c:510
+#: ../src/layout.c:511
 #, c-format
 msgid "(no read permission) %s bytes"
 msgstr "(pas de permission en lecture) %s octets"
 
-#: ../src/layout.c:514
+#: ../src/layout.c:515
 #, c-format
 msgid "( ? x ? ) %s bytes"
 msgstr "( ? x ? ) %s octets"
 
-#: ../src/layout.c:522
+#: ../src/layout.c:523
 #, c-format
 msgid "( %d x %d ) %s bytes"
 msgstr "( %d x %d ) %s octets"
 
-#: ../src/layout.c:1231 ../src/layout_config.c:58
+#: ../src/layout.c:1267 ../src/layout_config.c:58
 msgid "Tools"
 msgstr "Outils"
 
-#: ../src/layout.c:1853
+#: ../src/layout.c:1897
 msgid "Window options and layout"
 msgstr "Options de fenêtre et de disposition"
 
-#: ../src/layout.c:1912
+#: ../src/layout.c:1956
 msgid "General options"
 msgstr "Options générales"
 
-#: ../src/layout.c:1914
+#: ../src/layout.c:1958
 msgid "Home path (empty to use your home directory)"
 msgstr "Dossier Accueil (laisser vide pour utiliser votre dossier personnel)"
 
-#: ../src/layout.c:1922
+#: ../src/layout.c:1966
 msgid "Use current"
 msgstr "Utiliser le dossier courant"
 
-#: ../src/layout.c:1925
+#: ../src/layout.c:1969
 msgid "Show date in directories list view"
 msgstr "Montrer la date dans la vue des répertoires sous forme de liste"
 
-#: ../src/layout.c:1928
+#: ../src/layout.c:1972
 msgid "Exit program when this window is closed"
 msgstr "Quitter le programme quand cette fenêtre est fermée"
 
-#: ../src/layout.c:1931
+#: ../src/layout.c:1975
 msgid "Start-up directory:"
 msgstr "Dossier de démarrage :"
 
-#: ../src/layout.c:1933
+#: ../src/layout.c:1977
 msgid "No change"
 msgstr "Pas de changement"
 
-#: ../src/layout.c:1936
+#: ../src/layout.c:1980
 msgid "Restore last path"
 msgstr "Restaurer le dernier chemin"
 
-#: ../src/layout.c:1939
+#: ../src/layout.c:1983
 msgid "Home path"
 msgstr "Dossier Accueil"
 
-#: ../src/layout.c:1943 ../src/print.c:3422 ../src/print.c:3429
+#: ../src/layout.c:1987 ../src/print.c:3385 ../src/print.c:3392
 msgid "Layout"
 msgstr "Disposition"
 
-#: ../src/layout.c:2186
+#: ../src/layout.c:2231
 msgid "Invalid geometry\n"
 msgstr "Géométrie invalide\n"
 
-#: ../src/layout_config.c:58 ../src/preferences.c:1446
-#: ../src/ui_pathsel.c:1179
+#: ../src/layout_config.c:58 ../src/preferences.c:1607
+#: ../src/ui_pathsel.c:1176
 msgid "Files"
 msgstr "Fichiers"
 
-#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1240
+#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1401
 #: ../src/print.c:123
 msgid "Image"
 msgstr "Image"
@@ -2119,936 +2129,980 @@ msgstr "Image"
 msgid "(drag to change order)"
 msgstr "(glisser pour changer l'ordre)"
 
-#: ../src/layout_image.c:552
+#: ../src/layout_image.c:559
 msgid "Hide file _list"
 msgstr "Masquer la _liste des fichiers"
 
-#: ../src/layout_image.c:1552
+#: ../src/layout_image.c:1577
 #, c-format
 msgid "[%*d,%*d]: RGB(%3d,%3d,%3d)"
 msgstr "[%*d,%*d]: RVB(%3d,%3d,%3d)"
 
-#: ../src/layout_image.c:1560
+#: ../src/layout_image.c:1585
 #, c-format
 msgid "[%*s,%*s]: RGB(---,---,---)"
 msgstr "[%*s,%*s]: RVB(---,---,---)"
 
-#: ../src/layout_util.c:1230
+#: ../src/layout_util.c:1274
 msgid "_File"
 msgstr "_Fichier"
 
-#: ../src/layout_util.c:1231
+#: ../src/layout_util.c:1275
 msgid "_Go"
 msgstr "A_ller"
 
-#: ../src/layout_util.c:1232 ../src/menu.c:109
+#: ../src/layout_util.c:1276 ../src/menu.c:109
 msgid "_Edit"
 msgstr "Édit_er"
 
-#: ../src/layout_util.c:1233
+#: ../src/layout_util.c:1277
 msgid "_Select"
 msgstr "_Sélection"
 
-#: ../src/layout_util.c:1234 ../src/menu.c:276
+#: ../src/layout_util.c:1278 ../src/menu.c:280
 msgid "_Orientation"
 msgstr "_Orientation"
 
-#: ../src/layout_util.c:1235
+#: ../src/layout_util.c:1279
 msgid "E_xternal Editors"
 msgstr "Éditeurs e_xternes"
 
-#: ../src/layout_util.c:1236
+#: ../src/layout_util.c:1280
 msgid "P_references"
 msgstr "P_références"
 
-#: ../src/layout_util.c:1238
+#: ../src/layout_util.c:1282
 msgid "_Files and Folders"
 msgstr "_Fichiers et Dossiers"
 
-#: ../src/layout_util.c:1239
+#: ../src/layout_util.c:1283
 msgid "_Zoom"
 msgstr "_Zoom"
 
-#: ../src/layout_util.c:1240
+#: ../src/layout_util.c:1284
 msgid "_Color Management"
 msgstr "Gestion des _couleurs"
 
-#: ../src/layout_util.c:1241
+#: ../src/layout_util.c:1285
 msgid "_Connected Zoom"
 msgstr "Zo_om lié"
 
-#: ../src/layout_util.c:1242
+#: ../src/layout_util.c:1286
 msgid "Spli_t"
 msgstr "_Séparer"
 
-#: ../src/layout_util.c:1243 ../src/layout_util.c:1357
+#: ../src/layout_util.c:1287
+msgid "Stere_o"
+msgstr "Stéré_o"
+
+#: ../src/layout_util.c:1288 ../src/layout_util.c:1403
 msgid "Image _Overlay"
 msgstr "Affichage en surimpressi_on"
 
-#: ../src/layout_util.c:1244
+#: ../src/layout_util.c:1289
 msgid "_Help"
 msgstr "A_ide"
 
-#: ../src/layout_util.c:1246
+#: ../src/layout_util.c:1291
 msgid "_First Image"
 msgstr "Première _image"
 
-#: ../src/layout_util.c:1246
+#: ../src/layout_util.c:1291
 msgid "First Image"
 msgstr "Première image"
 
-#: ../src/layout_util.c:1247 ../src/layout_util.c:1248
-#: ../src/layout_util.c:1249
+#: ../src/layout_util.c:1292 ../src/layout_util.c:1293
+#: ../src/layout_util.c:1294
 msgid "_Previous Image"
 msgstr "Image _précédente"
 
-#: ../src/layout_util.c:1247 ../src/layout_util.c:1248
-#: ../src/layout_util.c:1249
+#: ../src/layout_util.c:1292 ../src/layout_util.c:1293
+#: ../src/layout_util.c:1294
 msgid "Previous Image"
 msgstr "Image précédente"
 
-#: ../src/layout_util.c:1250 ../src/layout_util.c:1251
-#: ../src/layout_util.c:1252
+#: ../src/layout_util.c:1295 ../src/layout_util.c:1296
+#: ../src/layout_util.c:1297
 msgid "_Next Image"
 msgstr "Image _suivante"
 
-#: ../src/layout_util.c:1250 ../src/layout_util.c:1251
-#: ../src/layout_util.c:1252
+#: ../src/layout_util.c:1295 ../src/layout_util.c:1296
+#: ../src/layout_util.c:1297
 msgid "Next Image"
 msgstr "Image suivante"
 
-#: ../src/layout_util.c:1253
+#: ../src/layout_util.c:1298
 msgid "_Last Image"
 msgstr "_Dernière image"
 
-#: ../src/layout_util.c:1253
+#: ../src/layout_util.c:1298
 msgid "Last Image"
 msgstr "Dernière image"
 
-#: ../src/layout_util.c:1254
+#: ../src/layout_util.c:1299
 msgid "_Back"
 msgstr "_Retour"
 
-#: ../src/layout_util.c:1254
+#: ../src/layout_util.c:1299
 msgid "Back"
 msgstr "Retour"
 
-#: ../src/layout_util.c:1255
+#: ../src/layout_util.c:1300
 msgid "_Home"
 msgstr "_Rép. perso"
 
-#: ../src/layout_util.c:1255 ../src/options.c:136 ../src/ui_bookmark.c:543
-#: ../src/ui_pathsel.c:1047
+#: ../src/layout_util.c:1300 ../src/options.c:143 ../src/ui_bookmark.c:545
+#: ../src/ui_pathsel.c:1045
 msgid "Home"
 msgstr "Rép. perso"
 
-#: ../src/layout_util.c:1257
+#: ../src/layout_util.c:1302
 msgid "New _window"
 msgstr "Nouvelle _fenêtre"
 
-#: ../src/layout_util.c:1257
+#: ../src/layout_util.c:1302
 msgid "New window"
 msgstr "Nouvelle fenêtre"
 
-#: ../src/layout_util.c:1258
+#: ../src/layout_util.c:1303
 msgid "_New collection"
 msgstr "_Nouvelle collection"
 
-#: ../src/layout_util.c:1258
+#: ../src/layout_util.c:1303
 msgid "New collection"
 msgstr "Nouvelle collection"
 
-#: ../src/layout_util.c:1259
+#: ../src/layout_util.c:1304
 msgid "_Open collection..."
 msgstr "_Ouvrir collection..."
 
-#: ../src/layout_util.c:1259
+#: ../src/layout_util.c:1304
 msgid "Open collection..."
 msgstr "Ouvrir collection..."
 
-#: ../src/layout_util.c:1260
+#: ../src/layout_util.c:1305
 msgid "Open recen_t"
 msgstr "Ouvrir récen_ts"
 
-#: ../src/layout_util.c:1260
+#: ../src/layout_util.c:1305
 msgid "Open recent"
 msgstr "Ouverts récemment"
 
-#: ../src/layout_util.c:1261
+#: ../src/layout_util.c:1306
 msgid "_Search..."
 msgstr "_Recherche..."
 
-#: ../src/layout_util.c:1261
+#: ../src/layout_util.c:1306
 msgid "Search..."
 msgstr "Recherche..."
 
-#: ../src/layout_util.c:1262
+#: ../src/layout_util.c:1307
 msgid "Find duplicates..."
 msgstr "Rechercher les doublons..."
 
-#: ../src/layout_util.c:1263
+#: ../src/layout_util.c:1308
 msgid "Pa_n view"
 msgstr "Affichage pa_noramique"
 
-#: ../src/layout_util.c:1263
+#: ../src/layout_util.c:1308
 msgid "Pan view"
 msgstr "Affichage panoramique"
 
-#: ../src/layout_util.c:1264
+#: ../src/layout_util.c:1309
 msgid "_Print..."
 msgstr "_Imprimer..."
 
-#: ../src/layout_util.c:1265
+#: ../src/layout_util.c:1310
 msgid "N_ew folder..."
 msgstr "Nouv_eau dossier..."
 
-#: ../src/layout_util.c:1265
+#: ../src/layout_util.c:1310
 msgid "New folder..."
 msgstr "Nouveau dossier..."
 
-#: ../src/layout_util.c:1266
+#: ../src/layout_util.c:1311
 msgid "Copy..."
 msgstr "Copier..."
 
-#: ../src/layout_util.c:1267
+#: ../src/layout_util.c:1312
 msgid "Move..."
 msgstr "Déplacer..."
 
-#: ../src/layout_util.c:1268
+#: ../src/layout_util.c:1313
 msgid "Rename..."
 msgstr "Renommer..."
 
-#: ../src/layout_util.c:1269 ../src/layout_util.c:1270
-#: ../src/layout_util.c:1271
+#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+#: ../src/layout_util.c:1316
 msgid "Delete..."
 msgstr "Supprimer..."
 
-#: ../src/layout_util.c:1272 ../src/view_file.c:590
+#: ../src/layout_util.c:1317 ../src/view_file.c:603
 msgid "Enable file _grouping"
 msgstr "_Grouper les fichiers"
 
-#: ../src/layout_util.c:1272
+#: ../src/layout_util.c:1317
 msgid "Enable file grouping"
 msgstr "Grouper les fichiers"
 
-#: ../src/layout_util.c:1273 ../src/view_file.c:592
+#: ../src/layout_util.c:1318 ../src/view_file.c:605
 msgid "Disable file groupi_ng"
 msgstr "Dégrouper les _fichiers"
 
-#: ../src/layout_util.c:1273
+#: ../src/layout_util.c:1318
 msgid "Disable file grouping"
 msgstr "Dégrouper les fichiers"
 
-#: ../src/layout_util.c:1274
+#: ../src/layout_util.c:1319
 msgid "_Copy path to clipboard"
 msgstr "_Copier chemin dans le presse-papiers"
 
-#: ../src/layout_util.c:1274
+#: ../src/layout_util.c:1319
 msgid "Copy path to clipboard"
 msgstr "Copier chemin dans le presse-papiers"
 
-#: ../src/layout_util.c:1275
+#: ../src/layout_util.c:1320
 msgid "Close window"
 msgstr "Fermer la fenêtre"
 
-#: ../src/layout_util.c:1276
+#: ../src/layout_util.c:1321
 msgid "_Quit"
 msgstr "_Quitter"
 
-#: ../src/layout_util.c:1276
+#: ../src/layout_util.c:1321
 msgid "Quit"
 msgstr "Quitter"
 
-#: ../src/layout_util.c:1277 ../src/menu.c:218
+#: ../src/layout_util.c:1322 ../src/menu.c:222
 msgid "_Rotate clockwise"
 msgstr "_Rotation sens horaire"
 
-#: ../src/layout_util.c:1277
+#: ../src/layout_util.c:1322
 msgid "Rotate clockwise"
 msgstr "Rotation sens horaire"
 
-#: ../src/layout_util.c:1278 ../src/menu.c:221
+#: ../src/layout_util.c:1323 ../src/menu.c:225
 msgid "Rotate _counterclockwise"
 msgstr "Rotation sens _anti-horaire"
 
-#: ../src/layout_util.c:1278
+#: ../src/layout_util.c:1323
 msgid "Rotate counterclockwise"
 msgstr "Rotation sens anti-horaire"
 
-#: ../src/layout_util.c:1279
+#: ../src/layout_util.c:1324
 msgid "Rotate 1_80"
 msgstr "Rotation de 1_80°"
 
-#: ../src/layout_util.c:1279
+#: ../src/layout_util.c:1324
 msgid "Rotate 180"
 msgstr "Rotation de 180°"
 
-#: ../src/layout_util.c:1280 ../src/menu.c:227
+#: ../src/layout_util.c:1325 ../src/menu.c:231
 msgid "_Mirror"
 msgstr "Retournement _horizontal"
 
-#: ../src/layout_util.c:1280
+#: ../src/layout_util.c:1325
 msgid "Mirror"
 msgstr "Retournement horizontal"
 
-#: ../src/layout_util.c:1281 ../src/menu.c:230
+#: ../src/layout_util.c:1326 ../src/menu.c:234
 msgid "_Flip"
 msgstr "Retournement _vertical"
 
-#: ../src/layout_util.c:1281
+#: ../src/layout_util.c:1326
 msgid "Flip"
 msgstr "Retournement vertical"
 
-#: ../src/layout_util.c:1282 ../src/menu.c:233
+#: ../src/layout_util.c:1327 ../src/menu.c:237
 msgid "_Original state"
 msgstr "État _original"
 
-#: ../src/layout_util.c:1282
+#: ../src/layout_util.c:1327
 msgid "Original state"
 msgstr "État original"
 
-#: ../src/layout_util.c:1283
+#: ../src/layout_util.c:1328
 msgid "Select _all"
 msgstr "_Tout sélectionner"
 
-#: ../src/layout_util.c:1284
+#: ../src/layout_util.c:1329
 msgid "Select _none"
 msgstr "_Désélectionner"
 
-#: ../src/layout_util.c:1285
+#: ../src/layout_util.c:1330
 msgid "_Invert Selection"
 msgstr "_Inverser la sélection"
 
-#: ../src/layout_util.c:1285
+#: ../src/layout_util.c:1330
 msgid "Invert Selection"
 msgstr "Inverser la sélection"
 
-#: ../src/layout_util.c:1286
+#: ../src/layout_util.c:1331
 msgid "P_references..."
 msgstr "P_références..."
 
-#: ../src/layout_util.c:1286
+#: ../src/layout_util.c:1331
 msgid "Preferences..."
 msgstr "Préférences..."
 
-#: ../src/layout_util.c:1287
+#: ../src/layout_util.c:1332
 msgid "Configure _Editors..."
 msgstr "Configur_er les éditeurs..."
 
-#: ../src/layout_util.c:1287
+#: ../src/layout_util.c:1332
 msgid "Configure Editors..."
 msgstr "Configurer les éditeurs..."
 
-#: ../src/layout_util.c:1288
+#: ../src/layout_util.c:1333
 msgid "_Configure this window..."
 msgstr "_Configurer cette fenêtre..."
 
-#: ../src/layout_util.c:1288
+#: ../src/layout_util.c:1333
 msgid "Configure this window..."
 msgstr "Configurer cette fenêtre..."
 
-#: ../src/layout_util.c:1289
+#: ../src/layout_util.c:1334
 msgid "_Thumbnail maintenance..."
 msgstr "Maintenance des _vignettes..."
 
-#: ../src/layout_util.c:1289
+#: ../src/layout_util.c:1334
 msgid "Thumbnail maintenance..."
 msgstr "Maintenance des vignettes..."
 
-#: ../src/layout_util.c:1290
+#: ../src/layout_util.c:1335
 msgid "Set as wallpaper"
 msgstr "Utiliser comme papier peint"
 
-#: ../src/layout_util.c:1291
+#: ../src/layout_util.c:1336
 msgid "_Save metadata"
 msgstr "Écrire les méta-donnée_s"
 
-#: ../src/layout_util.c:1291
+#: ../src/layout_util.c:1336
 msgid "Save metadata"
 msgstr "Écrire les méta-données"
 
-#: ../src/layout_util.c:1292 ../src/layout_util.c:1293
+#: ../src/layout_util.c:1337 ../src/layout_util.c:1338
 msgid "Zoom in"
 msgstr "Zoom avant"
 
-#: ../src/layout_util.c:1294 ../src/layout_util.c:1295
+#: ../src/layout_util.c:1339 ../src/layout_util.c:1340
 msgid "Zoom out"
 msgstr "Zoom arrière"
 
-#: ../src/layout_util.c:1296 ../src/layout_util.c:1297
+#: ../src/layout_util.c:1341 ../src/layout_util.c:1342
 msgid "Zoom 1:1"
 msgstr "Taille réelle (1:1)"
 
-#: ../src/layout_util.c:1298 ../src/layout_util.c:1299
-#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+#: ../src/layout_util.c:1343 ../src/layout_util.c:1344
+#: ../src/layout_util.c:1359 ../src/layout_util.c:1360
 msgid "_Zoom to fit"
 msgstr "Taille de la fenê_tre"
 
-#: ../src/layout_util.c:1298 ../src/layout_util.c:1299
+#: ../src/layout_util.c:1343 ../src/layout_util.c:1344
 msgid "Zoom to fit"
 msgstr "Taille de la fenêtre"
 
-#: ../src/layout_util.c:1300 ../src/layout_util.c:1316
+#: ../src/layout_util.c:1345 ../src/layout_util.c:1361
 msgid "Fit _Horizontally"
 msgstr "Maximiser _Horizontalement"
 
-#: ../src/layout_util.c:1300
+#: ../src/layout_util.c:1345
 msgid "Fit Horizontally"
 msgstr "Maximiser Horizontalement"
 
-#: ../src/layout_util.c:1301 ../src/layout_util.c:1317
+#: ../src/layout_util.c:1346 ../src/layout_util.c:1362
 msgid "Fit _Vertically"
 msgstr "Maximiser _Verticalement"
 
-#: ../src/layout_util.c:1301
+#: ../src/layout_util.c:1346
 msgid "Fit Vertically"
 msgstr "Maximiser Verticalement"
 
-#: ../src/layout_util.c:1302 ../src/layout_util.c:1318
+#: ../src/layout_util.c:1347 ../src/layout_util.c:1363
 msgid "Zoom _2:1"
 msgstr "Zoom _2:1"
 
-#: ../src/layout_util.c:1302
+#: ../src/layout_util.c:1347
 msgid "Zoom 2:1"
 msgstr "Zoom 2:1"
 
-#: ../src/layout_util.c:1303 ../src/layout_util.c:1319
+#: ../src/layout_util.c:1348 ../src/layout_util.c:1364
 msgid "Zoom _3:1"
 msgstr "Zoom _3:1"
 
-#: ../src/layout_util.c:1303
+#: ../src/layout_util.c:1348
 msgid "Zoom 3:1"
 msgstr "Zoom 3:1"
 
-#: ../src/layout_util.c:1304 ../src/layout_util.c:1320
+#: ../src/layout_util.c:1349 ../src/layout_util.c:1365
 msgid "Zoom _4:1"
 msgstr "Zoom _4:1"
 
-#: ../src/layout_util.c:1304
+#: ../src/layout_util.c:1349
 msgid "Zoom 4:1"
 msgstr "Zoom 4:1"
 
-#: ../src/layout_util.c:1305 ../src/layout_util.c:1321
+#: ../src/layout_util.c:1350 ../src/layout_util.c:1366
 msgid "Zoom 1:2"
 msgstr "Zoom 1:2"
 
-#: ../src/layout_util.c:1306 ../src/layout_util.c:1322
+#: ../src/layout_util.c:1351 ../src/layout_util.c:1367
 msgid "Zoom 1:3"
 msgstr "Zoom 1:3"
 
-#: ../src/layout_util.c:1307 ../src/layout_util.c:1323
+#: ../src/layout_util.c:1352 ../src/layout_util.c:1368
 msgid "Zoom 1:4"
 msgstr "Zoom 1:4"
 
-#: ../src/layout_util.c:1308 ../src/layout_util.c:1309
+#: ../src/layout_util.c:1353 ../src/layout_util.c:1354
 msgid "Connected Zoom in"
 msgstr "Zoom lié avant"
 
-#: ../src/layout_util.c:1310 ../src/layout_util.c:1311
+#: ../src/layout_util.c:1355 ../src/layout_util.c:1356
 msgid "Connected Zoom out"
 msgstr "Zoom lié arrière"
 
-#: ../src/layout_util.c:1312 ../src/layout_util.c:1313
+#: ../src/layout_util.c:1357 ../src/layout_util.c:1358
 msgid "Connected Zoom 1:1"
 msgstr "Zoom lié 1:1"
 
-#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+#: ../src/layout_util.c:1359 ../src/layout_util.c:1360
 msgid "Connected Zoom to fit"
 msgstr "Zoom lié taille de la fenêtre"
 
-#: ../src/layout_util.c:1316
+#: ../src/layout_util.c:1361
 msgid "Connected Fit Horizontally"
 msgstr "Zoom lié Maximiser Horizontalement"
 
-#: ../src/layout_util.c:1317
+#: ../src/layout_util.c:1362
 msgid "Connected Fit Vertically"
 msgstr "Zoom lié Maximiser Verticalement"
 
-#: ../src/layout_util.c:1318
+#: ../src/layout_util.c:1363
 msgid "Connected Zoom 2:1"
 msgstr "Zoom lié 2:1"
 
-#: ../src/layout_util.c:1319
+#: ../src/layout_util.c:1364
 msgid "Connected Zoom 3:1"
 msgstr "Zoom lié 3:1"
 
-#: ../src/layout_util.c:1320
+#: ../src/layout_util.c:1365
 msgid "Connected Zoom 4:1"
 msgstr "Zoom lié 4:1"
 
-#: ../src/layout_util.c:1321
+#: ../src/layout_util.c:1366
 msgid "Connected Zoom 1:2"
 msgstr "Zoom lié 1:2"
 
-#: ../src/layout_util.c:1322
+#: ../src/layout_util.c:1367
 msgid "Connected Zoom 1:3"
 msgstr "Zoom lié 1:3"
 
-#: ../src/layout_util.c:1323
+#: ../src/layout_util.c:1368
 msgid "Connected Zoom 1:4"
 msgstr "Zoom lié 1:4"
 
-#: ../src/layout_util.c:1324
+#: ../src/layout_util.c:1369
 msgid "_View in new window"
 msgstr "_Voir dans une nouvelle fenêtre"
 
-#: ../src/layout_util.c:1324
+#: ../src/layout_util.c:1369
 msgid "View in new window"
 msgstr "Voir dans une nouvelle fenêtre"
 
-#: ../src/layout_util.c:1325 ../src/layout_util.c:1326
-#: ../src/layout_util.c:1327
+#: ../src/layout_util.c:1370 ../src/layout_util.c:1371
+#: ../src/layout_util.c:1372
 msgid "F_ull screen"
 msgstr "Plein _écran"
 
-#: ../src/layout_util.c:1328 ../src/layout_util.c:1329
+#: ../src/layout_util.c:1373 ../src/layout_util.c:1374
 msgid "_Leave full screen"
 msgstr "Quitter le mode p_lein écran"
 
-#: ../src/layout_util.c:1328 ../src/layout_util.c:1329
+#: ../src/layout_util.c:1373 ../src/layout_util.c:1374
 msgid "Leave full screen"
 msgstr "Quitter le mode plein écran"
 
-#: ../src/layout_util.c:1330
+#: ../src/layout_util.c:1375
 msgid "_Cycle through overlay modes"
 msgstr "_Passer en revue les modes de surimpression"
 
-#: ../src/layout_util.c:1330
+#: ../src/layout_util.c:1375
 msgid "Cycle through Overlay modes"
 msgstr "Passer en revue les modes de surimpression"
 
-#: ../src/layout_util.c:1331
+#: ../src/layout_util.c:1376
 msgid "Cycle through histogram ch_annels"
 msgstr "Passer en revue les c_anaux d'histogramme"
 
-#: ../src/layout_util.c:1331
+#: ../src/layout_util.c:1376
 msgid "Cycle through histogram channels"
 msgstr "Passer en revue les canaux d'histogramme"
 
-#: ../src/layout_util.c:1332
+#: ../src/layout_util.c:1377
 msgid "Cycle through histogram mo_des"
 msgstr "Passer en revue les mo_des d'histogramme"
 
-#: ../src/layout_util.c:1332
+#: ../src/layout_util.c:1377
 msgid "Cycle through histogram modes"
 msgstr "Passer en revue les modes d'histogramme"
 
-#: ../src/layout_util.c:1333
+#: ../src/layout_util.c:1378
 msgid "_Hide file list"
 msgstr "_Masquer la liste des fichiers"
 
-#: ../src/layout_util.c:1333
+#: ../src/layout_util.c:1378
 msgid "Hide file list"
 msgstr "Masquer la liste des fichiers"
 
-#: ../src/layout_util.c:1334
+#: ../src/layout_util.c:1379
 msgid "_Pause slideshow"
 msgstr "Sus_pendre le diaporama"
 
-#: ../src/layout_util.c:1334
+#: ../src/layout_util.c:1379
 msgid "Pause slideshow"
 msgstr "Suspendre le diaporama"
 
-#: ../src/layout_util.c:1335
+#: ../src/layout_util.c:1380
 msgid "_Refresh"
 msgstr "_Rafraîchir"
 
-#: ../src/layout_util.c:1335
+#: ../src/layout_util.c:1380
 msgid "Refresh"
 msgstr "Rafraîchir"
 
-#: ../src/layout_util.c:1336
+#: ../src/layout_util.c:1381
 msgid "_Contents"
 msgstr "_Contenu"
 
-#: ../src/layout_util.c:1336
+#: ../src/layout_util.c:1381
 msgid "Contents"
 msgstr "Contenu"
 
-#: ../src/layout_util.c:1337
+#: ../src/layout_util.c:1382
 msgid "_Keyboard shortcuts"
 msgstr "_Raccourcis clavier"
 
-#: ../src/layout_util.c:1337
+#: ../src/layout_util.c:1382
 msgid "Keyboard shortcuts"
 msgstr "Raccourcis clavier"
 
-#: ../src/layout_util.c:1338
+#: ../src/layout_util.c:1383
 msgid "_Release notes"
 msgstr "_Notes de version"
 
-#: ../src/layout_util.c:1338
+#: ../src/layout_util.c:1383
 msgid "Release notes"
 msgstr "Notes pour cette version"
 
-#: ../src/layout_util.c:1339
+#: ../src/layout_util.c:1384
 msgid "_About"
 msgstr "À _propos"
 
-#: ../src/layout_util.c:1339 ../src/preferences.c:2108
+#: ../src/layout_util.c:1384 ../src/preferences.c:2351
 msgid "About"
 msgstr "À propos"
 
-#: ../src/layout_util.c:1340
+#: ../src/layout_util.c:1385
 msgid "_Log Window"
 msgstr "_Journal"
 
-#: ../src/layout_util.c:1340
+#: ../src/layout_util.c:1385
 msgid "Log Window"
 msgstr "Journal"
 
-#: ../src/layout_util.c:1341
+#: ../src/layout_util.c:1386
 msgid "_Exif window"
 msgstr "Fenêtre _Exif"
 
-#: ../src/layout_util.c:1341
+#: ../src/layout_util.c:1386
 msgid "Exif window"
 msgstr "Fenêtre Exif"
 
-#: ../src/layout_util.c:1346
+#: ../src/layout_util.c:1387
+msgid "_Cycle through stereo modes"
+msgstr "_Passer en revue les modes stéréo"
+
+#: ../src/layout_util.c:1387
+msgid "Cycle through stereo modes"
+msgstr "Passer en revue les modes stéréo"
+
+#: ../src/layout_util.c:1392
 msgid "Show _Thumbnails"
 msgstr "Montrer les vigne_ttes"
 
-#: ../src/layout_util.c:1346
+#: ../src/layout_util.c:1392
 msgid "Show Thumbnails"
 msgstr "Montrer les vignettes"
 
-#: ../src/layout_util.c:1347
+#: ../src/layout_util.c:1393
 msgid "Show _Marks"
 msgstr "Montrer les _Marques"
 
-#: ../src/layout_util.c:1347
+#: ../src/layout_util.c:1393
 msgid "Show Marks"
 msgstr "Montrer les marques"
 
-#: ../src/layout_util.c:1348
+#: ../src/layout_util.c:1394
 msgid "Pi_xel Info"
 msgstr "Infos sur le pi_xel"
 
-#: ../src/layout_util.c:1348
+#: ../src/layout_util.c:1394
 msgid "Show Pixel Info"
 msgstr "Montrer les infos sur le pixel"
 
-#: ../src/layout_util.c:1349
+#: ../src/layout_util.c:1395
 msgid "_Float file list"
 msgstr "Liste des fichiers _flottante"
 
-#: ../src/layout_util.c:1349
+#: ../src/layout_util.c:1395
 msgid "Float file list"
 msgstr "Liste des fichiers flottante"
 
-#: ../src/layout_util.c:1350
+#: ../src/layout_util.c:1396
 msgid "Hide tool_bar"
 msgstr "Masquer la _barre d'outils"
 
-#: ../src/layout_util.c:1350
+#: ../src/layout_util.c:1396
 msgid "Hide toolbar"
 msgstr "Masquer la barre d'outils"
 
-#: ../src/layout_util.c:1351
+#: ../src/layout_util.c:1397
 msgid "_Info sidebar"
 msgstr "Barre latérale d'_informations"
 
-#: ../src/layout_util.c:1351
+#: ../src/layout_util.c:1397
 msgid "Info sidebar"
 msgstr "Barre latérale d'informations"
 
-#: ../src/layout_util.c:1352
+#: ../src/layout_util.c:1398
 msgid "Sort _manager"
 msgstr "_Gestionnaire de tris"
 
-#: ../src/layout_util.c:1352
+#: ../src/layout_util.c:1398
 msgid "Sort manager"
 msgstr "Gestionnaire de tris"
 
-#: ../src/layout_util.c:1353
+#: ../src/layout_util.c:1399
 msgid "Toggle _slideshow"
 msgstr "Mode _Diaporama"
 
-#: ../src/layout_util.c:1353
+#: ../src/layout_util.c:1399
 msgid "Toggle slideshow"
 msgstr "Mode diaporama"
 
-#: ../src/layout_util.c:1354
+#: ../src/layout_util.c:1400
 msgid "Use _color profiles"
 msgstr "Utiliser les profils _colorimétriques"
 
-#: ../src/layout_util.c:1354
+#: ../src/layout_util.c:1400
 msgid "Use color profiles"
 msgstr "Utiliser les profils colorimétriques"
 
-#: ../src/layout_util.c:1355
+#: ../src/layout_util.c:1401
 msgid "Use profile from _image"
 msgstr "Utiliser le profil contenu dans l'_image"
 
-#: ../src/layout_util.c:1355
+#: ../src/layout_util.c:1401
 msgid "Use profile from image"
 msgstr "Utiliser le profil contenu dans l'image"
 
-#: ../src/layout_util.c:1356
+#: ../src/layout_util.c:1402
 msgid "Toggle _grayscale"
 msgstr "Bascule niveaux de _gris"
 
-#: ../src/layout_util.c:1356
+#: ../src/layout_util.c:1402
 msgid "Toggle grayscale"
 msgstr "Bascule niveaux de gris"
 
-#: ../src/layout_util.c:1357
+#: ../src/layout_util.c:1403
 msgid "Image Overlay"
 msgstr "Affichage en surimpression"
 
-#: ../src/layout_util.c:1358
+#: ../src/layout_util.c:1404
 msgid "_Show Histogram"
 msgstr "Montrer l'hi_stogramme"
 
-#: ../src/layout_util.c:1358
+#: ../src/layout_util.c:1404
 msgid "Show Histogram"
 msgstr "Montrer l'histogramme"
 
-#: ../src/layout_util.c:1362
+#: ../src/layout_util.c:1408
 msgid "Image _List"
 msgstr "_Liste des images"
 
-#: ../src/layout_util.c:1362
+#: ../src/layout_util.c:1408
 msgid "View Images as List"
 msgstr "Images en liste"
 
-#: ../src/layout_util.c:1363
+#: ../src/layout_util.c:1409
 msgid "I_cons"
 msgstr "I_cônes"
 
-#: ../src/layout_util.c:1363
+#: ../src/layout_util.c:1409
 msgid "View Images as Icons"
 msgstr "Images en Icônes"
 
-#: ../src/layout_util.c:1367
+#: ../src/layout_util.c:1413
 msgid "Folder Li_st"
 msgstr "Li_ste des dossiers"
 
-#: ../src/layout_util.c:1367
+#: ../src/layout_util.c:1413
 msgid "View Folders as List"
 msgstr "Vue des dossiers en liste"
 
-#: ../src/layout_util.c:1368
+#: ../src/layout_util.c:1414
 msgid "Folder T_ree"
 msgstr "A_rbre des dossiers"
 
-#: ../src/layout_util.c:1368
+#: ../src/layout_util.c:1414
 msgid "View Folders as Tree"
 msgstr "Vue des dossiers en arbre"
 
-#: ../src/layout_util.c:1372
+#: ../src/layout_util.c:1418
 msgid "_Horizontal"
 msgstr "_Horizontal"
 
-#: ../src/layout_util.c:1372
+#: ../src/layout_util.c:1418
 msgid "Split Horizontal"
 msgstr "Séparation horizontale"
 
-#: ../src/layout_util.c:1373
+#: ../src/layout_util.c:1419
 msgid "_Vertical"
 msgstr "_Vertical"
 
-#: ../src/layout_util.c:1373
+#: ../src/layout_util.c:1419
 msgid "Split Vertical"
 msgstr "Séparation verticale"
 
-#: ../src/layout_util.c:1374
+#: ../src/layout_util.c:1420
 msgid "_Quad"
 msgstr "_Quatre"
 
-#: ../src/layout_util.c:1374
+#: ../src/layout_util.c:1420
 msgid "Split Quad"
 msgstr "Séparation en quatre"
 
-#: ../src/layout_util.c:1375
+#: ../src/layout_util.c:1421
 msgid "_Single"
 msgstr "_Unique"
 
-#: ../src/layout_util.c:1375
+#: ../src/layout_util.c:1421
 msgid "Split Single"
 msgstr "Unique"
 
-#: ../src/layout_util.c:1379
+#: ../src/layout_util.c:1425
 msgid "Input _0: sRGB"
 msgstr "Entrée _0 : sRGB"
 
-#: ../src/layout_util.c:1379
+#: ../src/layout_util.c:1425
 msgid "Input 0: sRGB"
 msgstr "Entrée 0 : sRGB"
 
-#: ../src/layout_util.c:1380
+#: ../src/layout_util.c:1426
 msgid "Input _1: AdobeRGB compatible"
 msgstr "Entrée _1 : compatible AdobeRGB"
 
-#: ../src/layout_util.c:1380
+#: ../src/layout_util.c:1426
 msgid "Input 1: AdobeRGB compatible"
 msgstr "Entrée 1 : compatible AdobeRGB"
 
-#: ../src/layout_util.c:1381
+#: ../src/layout_util.c:1427
 msgid "Input _2"
 msgstr "Entrée _2"
 
-#: ../src/layout_util.c:1381
+#: ../src/layout_util.c:1427
 msgid "Input 2"
 msgstr "Entrée 2"
 
-#: ../src/layout_util.c:1382
+#: ../src/layout_util.c:1428
 msgid "Input _3"
 msgstr "Entrée _3"
 
-#: ../src/layout_util.c:1382
+#: ../src/layout_util.c:1428
 msgid "Input 3"
 msgstr "Entrée 3"
 
-#: ../src/layout_util.c:1383
+#: ../src/layout_util.c:1429
 msgid "Input _4"
 msgstr "Entrée _4"
 
-#: ../src/layout_util.c:1383
+#: ../src/layout_util.c:1429
 msgid "Input 4"
 msgstr "Entrée 4"
 
-#: ../src/layout_util.c:1384
+#: ../src/layout_util.c:1430
 msgid "Input _5"
 msgstr "Entrée _5"
 
-#: ../src/layout_util.c:1384
+#: ../src/layout_util.c:1430
 msgid "Input 5"
 msgstr "Entrée 5"
 
-#: ../src/layout_util.c:1388
+#: ../src/layout_util.c:1434
 msgid "Histogram on Red"
 msgstr "Histogramme sur le rouge"
 
-#: ../src/layout_util.c:1389
+#: ../src/layout_util.c:1435
 msgid "Histogram on Green"
 msgstr "Histogramme sur le vert"
 
-#: ../src/layout_util.c:1390
+#: ../src/layout_util.c:1436
 msgid "Histogram on Blue"
 msgstr "Histogramme sur le bleu"
 
-#: ../src/layout_util.c:1391
+#: ../src/layout_util.c:1437
 msgid "Histogram on RGB"
 msgstr "Histogramme RVB"
 
-#: ../src/layout_util.c:1392
+#: ../src/layout_util.c:1438
 msgid "Histogram on Value"
 msgstr "Histogramme sur la valeur"
 
-#: ../src/layout_util.c:1396
+#: ../src/layout_util.c:1442
 msgid "Linear Histogram"
 msgstr "Histogramme linéaire"
 
-#: ../src/layout_util.c:1397
+#: ../src/layout_util.c:1443
 msgid "_Log Histogram"
 msgstr "Histogramme _logarithmique"
 
-#: ../src/layout_util.c:1397
+#: ../src/layout_util.c:1443
 msgid "Log Histogram"
 msgstr "Histogramme logarithmique"
 
-#: ../src/layout_util.c:1663
+#: ../src/layout_util.c:1447
+msgid "_Auto"
+msgstr "_Auto"
+
+#: ../src/layout_util.c:1447
+msgid "Stereo Auto"
+msgstr "Stéréo Auto"
+
+#: ../src/layout_util.c:1448
+msgid "_Side by Side"
+msgstr "_Côte-à-côte"
+
+#: ../src/layout_util.c:1448
+msgid "Stereo Side by Side"
+msgstr "Stéréo côte-à-côte"
+
+#: ../src/layout_util.c:1449
+msgid "_Cross"
+msgstr "_Croisé"
+
+#: ../src/layout_util.c:1449
+msgid "Stereo Cross"
+msgstr "Stéréo croisée"
+
+#: ../src/layout_util.c:1450
+msgid "_Off"
+msgstr "_Désactivée"
+
+#: ../src/layout_util.c:1450
+msgid "Stereo Off"
+msgstr "Stéréo désactivée"
+
+#: ../src/layout_util.c:1724
 #, c-format
 msgid "Mark _%d"
 msgstr "Marque _%d"
 
-#: ../src/layout_util.c:1664 ../src/view_file.c:527
+#: ../src/layout_util.c:1725 ../src/view_file.c:540
 #, c-format
 msgid "_Set mark %d"
 msgstr "_Ajout marque %d"
 
-#: ../src/layout_util.c:1664
+#: ../src/layout_util.c:1725
 #, c-format
 msgid "Set mark %d"
 msgstr "Ajout marque %d"
 
-#: ../src/layout_util.c:1665 ../src/view_file.c:528
+#: ../src/layout_util.c:1726 ../src/view_file.c:541
 #, c-format
 msgid "_Reset mark %d"
 msgstr "_Suppression marque %d"
 
-#: ../src/layout_util.c:1665
+#: ../src/layout_util.c:1726
 #, c-format
 msgid "Reset mark %d"
 msgstr "Suppression marque %d"
 
-#: ../src/layout_util.c:1666 ../src/layout_util.c:1667 ../src/view_file.c:529
+#: ../src/layout_util.c:1727 ../src/layout_util.c:1728 ../src/view_file.c:542
 #, c-format
 msgid "_Toggle mark %d"
 msgstr "_Bascule marque %d"
 
-#: ../src/layout_util.c:1666 ../src/layout_util.c:1667
+#: ../src/layout_util.c:1727 ../src/layout_util.c:1728
 #, c-format
 msgid "Toggle mark %d"
 msgstr "Bascule marque %d"
 
-#: ../src/layout_util.c:1668
+#: ../src/layout_util.c:1729
 #, c-format
 msgid "Se_lect mark %d"
 msgstr "Sé_lectionner la marque %d"
 
-#: ../src/layout_util.c:1668 ../src/layout_util.c:1669
+#: ../src/layout_util.c:1729 ../src/layout_util.c:1730
 #, c-format
 msgid "Select mark %d"
 msgstr "Sélectionner la marque %d"
 
-#: ../src/layout_util.c:1669 ../src/view_file.c:530
+#: ../src/layout_util.c:1730 ../src/view_file.c:543
 #, c-format
 msgid "_Select mark %d"
 msgstr "_Sélectionner la marque %d"
 
-#: ../src/layout_util.c:1670 ../src/view_file.c:531
+#: ../src/layout_util.c:1731 ../src/view_file.c:544
 #, c-format
 msgid "_Add mark %d"
 msgstr "Ajouter la marque %d"
 
-#: ../src/layout_util.c:1670
+#: ../src/layout_util.c:1731
 #, c-format
 msgid "Add mark %d"
 msgstr "Ajouter marque %d"
 
-#: ../src/layout_util.c:1671 ../src/view_file.c:532
+#: ../src/layout_util.c:1732 ../src/view_file.c:545
 #, c-format
 msgid "_Intersection with mark %d"
 msgstr "_Intersection avec marque %d"
 
-#: ../src/layout_util.c:1671
+#: ../src/layout_util.c:1732
 #, c-format
 msgid "Intersection with mark %d"
 msgstr "Intersection avec marque %d"
 
-#: ../src/layout_util.c:1672 ../src/view_file.c:533
+#: ../src/layout_util.c:1733 ../src/view_file.c:546
 #, c-format
 msgid "_Unselect mark %d"
 msgstr "_Déselection marque %d"
 
-#: ../src/layout_util.c:1672
+#: ../src/layout_util.c:1733
 #, c-format
 msgid "Unselect mark %d"
 msgstr "Déselection marque %d"
 
-#: ../src/layout_util.c:1673
+#: ../src/layout_util.c:1734
 #, c-format
 msgid "_Filter mark %d"
 msgstr "_Filtrer la marque %d"
 
-#: ../src/layout_util.c:1673
+#: ../src/layout_util.c:1734
 #, c-format
 msgid "Filter mark %d"
 msgstr "Filtrer la marque %d"
 
-#: ../src/layout_util.c:2109
+#: ../src/layout_util.c:2265
 #, c-format
 msgid "Number of files with unsaved metadata: %d"
 msgstr "Nombre de fichiers avec des méta-données à sauver : %d"
 
-#: ../src/layout_util.c:2115
+#: ../src/layout_util.c:2271
 msgid "No unsaved metadata"
 msgstr "Pas de méta-données à sauver"
 
-#: ../src/layout_util.c:2162
+#: ../src/layout_util.c:2318
 #, c-format
 msgid ""
 "Image profile: %s\n"
@@ -3057,31 +3111,31 @@ msgstr ""
 "Profil d'image : %s\n"
 "Profil d'écran : %s"
 
-#: ../src/layout_util.c:2170
+#: ../src/layout_util.c:2326
 msgid "Click to enable color management"
 msgstr "Cliquer pour activer la gestion des couleurs"
 
-#: ../src/layout_util.c:2175
+#: ../src/layout_util.c:2331
 msgid "Color profiles not supported"
 msgstr "Profils colorimétriques non supportés"
 
-#: ../src/layout_util.c:2197
+#: ../src/layout_util.c:2353
 #, c-format
 msgid "Input _%d: %s"
 msgstr "Entrée _%d : %s"
 
 #. something went badly wrong
-#: ../src/lirc.c:193
+#: ../src/lirc.c:197
 #, c-format
 msgid "disconnected from LIRC\n"
 msgstr "déconnecté de LIRC\n"
 
-#: ../src/lirc.c:208
+#: ../src/lirc.c:212
 #, c-format
 msgid "Could not init LIRC support\n"
 msgstr "Impossible d'initialiser le support de LIRC\n"
 
-#: ../src/lirc.c:215
+#: ../src/lirc.c:219
 #, c-format
 msgid ""
 "could not read LIRC config file\n"
@@ -3096,7 +3150,7 @@ msgstr ""
 msgid "Log"
 msgstr "Journal"
 
-#: ../src/main.c:313
+#: ../src/main.c:322
 #, c-format
 msgid ""
 "Usage: %s [options] [path]\n"
@@ -3105,58 +3159,58 @@ msgstr ""
 "Utilisation : %s [options] [chemin]\n"
 "\n"
 
-#: ../src/main.c:314
+#: ../src/main.c:323
 msgid "valid options are:\n"
 msgstr "les options valides sont :\n"
 
-#: ../src/main.c:315
+#: ../src/main.c:324
 msgid "  +t, --with-tools           force show of tools\n"
 msgstr "  +t, --with-tools           force l'affichage des outils\n"
 
-#: ../src/main.c:316
+#: ../src/main.c:325
 msgid "  -t, --without-tools        force hide of tools\n"
 msgstr "  -t, --without-tools        masque les outils\n"
 
-#: ../src/main.c:317
+#: ../src/main.c:326
 msgid "  -f, --fullscreen           start in full screen mode\n"
 msgstr "  -f, --fullscreen           démarre en mode plein écran\n"
 
-#: ../src/main.c:318
+#: ../src/main.c:327
 msgid "  -s, --slideshow            start in slideshow mode\n"
 msgstr "  -s, --slideshow            démarre en mode diaporama\n"
 
-#: ../src/main.c:319
+#: ../src/main.c:328
 msgid "  -l, --list                 open collection window for command line\n"
 msgstr ""
 "  -l, --list                 ouvre une fenêtre de collection pour la ligne "
 "de commande\n"
 
-#: ../src/main.c:320
+#: ../src/main.c:329
 msgid "      --geometry=GEOMETRY    set main window location\n"
 msgstr ""
 "      --geometry=GEOMÉTRIE   détermine la position de la fenêtre principale\n"
 
-#: ../src/main.c:321
+#: ../src/main.c:330
 msgid "  -r, --remote               send following commands to open window\n"
 msgstr ""
 "  -r, --remote               lance la commande suivante pour ouvrir une "
 "fenêtre\n"
 "de commande\n"
 
-#: ../src/main.c:322
+#: ../src/main.c:331
 msgid "  -rh,--remote-help          print remote command list\n"
 msgstr ""
 "  -rh,--remote-help          affiche la liste des commandes à distance\n"
 
-#: ../src/main.c:324
+#: ../src/main.c:333
 msgid "  --debug[=level]            turn on debug output\n"
 msgstr "  --debug[=niveau]           active les sorties de débogage\n"
 
-#: ../src/main.c:326
+#: ../src/main.c:335
 msgid "  -v, --version              print version info\n"
 msgstr "  -v, --version              affiche les infos de version\n"
 
-#: ../src/main.c:327
+#: ../src/main.c:336
 msgid ""
 "  -h, --help                 show this message\n"
 "\n"
@@ -3164,7 +3218,7 @@ msgstr ""
 "  -h, --help                 affiche ce message\n"
 "\n"
 
-#: ../src/main.c:339
+#: ../src/main.c:348
 #, c-format
 msgid ""
 "invalid or ignored: %s\n"
@@ -3173,11 +3227,11 @@ msgstr ""
 "invalide ou ignoré : %s\n"
 "Utilisez --help pour connaître les options\n"
 
-#: ../src/main.c:368
+#: ../src/main.c:377
 msgid "Invalid or ignored remote options: "
 msgstr "Options de commande à distance invalides ou ignorées :"
 
-#: ../src/main.c:377
+#: ../src/main.c:386
 msgid ""
 "\n"
 "Use --remote-help for valid remote options.\n"
@@ -3186,22 +3240,22 @@ msgstr ""
 "Utilisez --remote-help pour voir les options de commande à distance "
 "valides.\n"
 
-#: ../src/main.c:479
+#: ../src/main.c:488
 #, c-format
 msgid "Creating %s dir:%s\n"
 msgstr "Création du dossier %s : %s\n"
 
-#: ../src/main.c:483
+#: ../src/main.c:492
 #, c-format
 msgid "Could not create dir:%s\n"
 msgstr "Impossible de créer le dossier : %s\n"
 
-#: ../src/main.c:535
+#: ../src/main.c:544
 #, c-format
 msgid "error saving file: %s\n"
 msgstr "erreur lors de la sauvegarde du fichier : %s\n"
 
-#: ../src/main.c:554
+#: ../src/main.c:563
 #, c-format
 msgid ""
 "error saving file: %s\n"
@@ -3210,22 +3264,22 @@ msgstr ""
 "erreur lors de la sauvegarde du fichier : %s\n"
 "erreur : %s\n"
 
-#: ../src/main.c:659
+#: ../src/main.c:671
 msgid "exit"
 msgstr "sortie"
 
-#: ../src/main.c:664
+#: ../src/main.c:676
 #, c-format
 msgid "Quit %s"
 msgstr "Quitter %s"
 
-#: ../src/main.c:666
+#: ../src/main.c:678
 msgid "Collections have been modified. Quit anyway?"
 msgstr ""
 "Des collections ont été modifiées.\n"
 "Tout de même quitter ?"
 
-#: ../src/main.c:860 ../src/remote.c:601
+#: ../src/main.c:882 ../src/remote.c:601
 msgid "Command line"
 msgstr "Ligne de commande"
 
@@ -3238,262 +3292,266 @@ msgid "Sort by date"
 msgstr "Trier par date"
 
 #: ../src/menu.c:139
+msgid "Sort by Exif-date"
+msgstr "Trier par date Exif"
+
+#: ../src/menu.c:142
 msgid "Unsorted"
 msgstr "Non trié"
 
-#: ../src/menu.c:142
+#: ../src/menu.c:145
 msgid "Sort by path"
 msgstr "Trier par chemin"
 
-#: ../src/menu.c:145
+#: ../src/menu.c:148
 msgid "Sort by number"
 msgstr "Trier par valeur numérique"
 
-#: ../src/menu.c:149
+#: ../src/menu.c:152
 msgid "Sort by name"
 msgstr "Trier par nom"
 
-#: ../src/menu.c:199
+#: ../src/menu.c:203
 msgid "Sort"
 msgstr "Trier"
 
-#: ../src/menu.c:224
+#: ../src/menu.c:228
 msgid "Rotate _180"
 msgstr "Rotation de _180°"
 
-#: ../src/metadata.c:1382
+#: ../src/metadata.c:1599
 msgid "People"
 msgstr "Personnes"
 
-#: ../src/metadata.c:1383
+#: ../src/metadata.c:1600
 msgid "Family"
 msgstr "Famille"
 
-#: ../src/metadata.c:1384
+#: ../src/metadata.c:1601
 msgid "Free time"
 msgstr "Temps libre"
 
-#: ../src/metadata.c:1385
+#: ../src/metadata.c:1602
 msgid "Children"
 msgstr "Enfants"
 
-#: ../src/metadata.c:1386
+#: ../src/metadata.c:1603
 msgid "Sport"
 msgstr "Sport"
 
-#: ../src/metadata.c:1387
+#: ../src/metadata.c:1604
 msgid "Culture"
 msgstr "Culture"
 
-#: ../src/metadata.c:1388
+#: ../src/metadata.c:1605
 msgid "Festival"
 msgstr "Festival"
 
-#: ../src/metadata.c:1389
+#: ../src/metadata.c:1606
 msgid "Nature"
 msgstr "Nature"
 
-#: ../src/metadata.c:1390
+#: ../src/metadata.c:1607
 msgid "Animal"
 msgstr "Animal"
 
-#: ../src/metadata.c:1391
+#: ../src/metadata.c:1608
 msgid "Bird"
 msgstr "Oiseau"
 
-#: ../src/metadata.c:1392
+#: ../src/metadata.c:1609
 msgid "Insect"
 msgstr "Insecte"
 
-#: ../src/metadata.c:1393
+#: ../src/metadata.c:1610
 msgid "Pets"
 msgstr "Animaux familiers"
 
-#: ../src/metadata.c:1394
+#: ../src/metadata.c:1611
 msgid "Wildlife"
 msgstr "Vie sauvage"
 
-#: ../src/metadata.c:1395
+#: ../src/metadata.c:1612
 msgid "Zoo"
 msgstr "Zoo"
 
-#: ../src/metadata.c:1396
+#: ../src/metadata.c:1613
 msgid "Plant"
 msgstr "Plante"
 
-#: ../src/metadata.c:1397
+#: ../src/metadata.c:1614
 msgid "Tree"
 msgstr "Arbre"
 
-#: ../src/metadata.c:1398
+#: ../src/metadata.c:1615
 msgid "Flower"
 msgstr "Fleur"
 
-#: ../src/metadata.c:1399
+#: ../src/metadata.c:1616
 msgid "Water"
 msgstr "Eau"
 
-#: ../src/metadata.c:1400
+#: ../src/metadata.c:1617
 msgid "River"
 msgstr "Rivière"
 
-#: ../src/metadata.c:1401
+#: ../src/metadata.c:1618
 msgid "Lake"
 msgstr "Lac"
 
-#: ../src/metadata.c:1402
+#: ../src/metadata.c:1619
 msgid "Sea"
 msgstr "Mer"
 
-#: ../src/metadata.c:1403 ../src/print.c:375
+#: ../src/metadata.c:1620 ../src/print.c:375
 msgid "Landscape"
 msgstr "Paysage"
 
-#: ../src/metadata.c:1404
+#: ../src/metadata.c:1621
 msgid "Art"
 msgstr "Art"
 
-#: ../src/metadata.c:1405
+#: ../src/metadata.c:1622
 msgid "Statue"
 msgstr "Statue"
 
-#: ../src/metadata.c:1406
+#: ../src/metadata.c:1623
 msgid "Painting"
 msgstr "Peinture"
 
-#: ../src/metadata.c:1407 ../src/metadata.c:1421
+#: ../src/metadata.c:1624 ../src/metadata.c:1638
 msgid "Historic"
 msgstr "Historique"
 
-#: ../src/metadata.c:1408 ../src/metadata.c:1422
+#: ../src/metadata.c:1625 ../src/metadata.c:1639
 msgid "Modern"
 msgstr "Moderne"
 
-#: ../src/metadata.c:1409
+#: ../src/metadata.c:1626
 msgid "City"
 msgstr "Ville"
 
-#: ../src/metadata.c:1410
+#: ../src/metadata.c:1627
 msgid "Park"
 msgstr "Parc"
 
-#: ../src/metadata.c:1411
+#: ../src/metadata.c:1628
 msgid "Street"
 msgstr "Rue"
 
-#: ../src/metadata.c:1412
+#: ../src/metadata.c:1629
 msgid "Square"
 msgstr "Square"
 
-#: ../src/metadata.c:1413
+#: ../src/metadata.c:1630
 msgid "Architecture"
 msgstr "Architecture"
 
-#: ../src/metadata.c:1414
+#: ../src/metadata.c:1631
 msgid "Buildings"
 msgstr "Constructions"
 
-#: ../src/metadata.c:1415
+#: ../src/metadata.c:1632
 msgid "House"
 msgstr "Maison"
 
-#: ../src/metadata.c:1416
+#: ../src/metadata.c:1633
 msgid "Cathedral"
 msgstr "Cathédrale"
 
-#: ../src/metadata.c:1417
+#: ../src/metadata.c:1634
 msgid "Palace"
 msgstr "Palais"
 
-#: ../src/metadata.c:1418
+#: ../src/metadata.c:1635
 msgid "Castle"
 msgstr "Château"
 
-#: ../src/metadata.c:1419
+#: ../src/metadata.c:1636
 msgid "Bridge"
 msgstr "Pont"
 
-#: ../src/metadata.c:1420
+#: ../src/metadata.c:1637
 msgid "Interior"
 msgstr "Intérieur"
 
-#: ../src/metadata.c:1423
+#: ../src/metadata.c:1640
 msgid "Places"
 msgstr "Lieux"
 
-#: ../src/metadata.c:1424
+#: ../src/metadata.c:1641
 msgid "Conditions"
 msgstr "Conditions"
 
-#: ../src/metadata.c:1425
+#: ../src/metadata.c:1642
 msgid "Night"
 msgstr "Nuit"
 
-#: ../src/metadata.c:1426
+#: ../src/metadata.c:1643
 msgid "Lights"
 msgstr "Lumières"
 
-#: ../src/metadata.c:1427
+#: ../src/metadata.c:1644
 msgid "Reflections"
 msgstr "Réflexions"
 
-#: ../src/metadata.c:1428
+#: ../src/metadata.c:1645
 msgid "Sun"
 msgstr "Soleil"
 
-#: ../src/metadata.c:1429
+#: ../src/metadata.c:1646
 msgid "Weather"
 msgstr "Méteorologie"
 
-#: ../src/metadata.c:1430
+#: ../src/metadata.c:1647
 msgid "Fog"
 msgstr "Brouillard"
 
-#: ../src/metadata.c:1431
+#: ../src/metadata.c:1648
 msgid "Rain"
 msgstr "Pluie"
 
-#: ../src/metadata.c:1432
+#: ../src/metadata.c:1649
 msgid "Clouds"
 msgstr "Nuages"
 
-#: ../src/metadata.c:1433
+#: ../src/metadata.c:1650
 msgid "Snow"
 msgstr "Neige"
 
-#: ../src/metadata.c:1434
+#: ../src/metadata.c:1651
 msgid "Sunny weather"
 msgstr "Temps ensoleillé"
 
-#: ../src/metadata.c:1435
+#: ../src/metadata.c:1652
 msgid "Photo"
 msgstr "Photo"
 
-#: ../src/metadata.c:1436
+#: ../src/metadata.c:1653
 msgid "Edited"
 msgstr "Editée"
 
-#: ../src/metadata.c:1437
+#: ../src/metadata.c:1654
 msgid "Detail"
 msgstr "Détail"
 
-#: ../src/metadata.c:1438
+#: ../src/metadata.c:1655
 msgid "Macro"
 msgstr "Macro"
 
-#: ../src/metadata.c:1439 ../src/print.c:374
+#: ../src/metadata.c:1656 ../src/print.c:374
 msgid "Portrait"
 msgstr "Portrait"
 
-#: ../src/metadata.c:1440
+#: ../src/metadata.c:1657
 msgid "Black and White"
 msgstr "Noir et blanc"
 
-#: ../src/metadata.c:1441
+#: ../src/metadata.c:1658
 msgid "Perspective"
 msgstr "Perspective"
 
-#: ../src/options.c:138 ../src/ui_bookmark.c:550
+#: ../src/options.c:145 ../src/ui_bookmark.c:552
 msgid "Desktop"
 msgstr "Bureau"
 
@@ -3519,167 +3577,167 @@ msgstr "Lecture des données de l'image..."
 msgid "Sorting images..."
 msgstr "Tri des images..."
 
-#: ../src/pan-view.c:1546 ../src/print.c:2650
+#: ../src/pan-view.c:1554 ../src/print.c:2613
 msgid "Filename:"
 msgstr "Nom du fichier :"
 
-#: ../src/pan-view.c:1548 ../src/pan-view.c:2384 ../src/preferences.c:1353
+#: ../src/pan-view.c:1556 ../src/pan-view.c:2408 ../src/preferences.c:1514
 msgid "Location:"
 msgstr "Emplacement :"
 
-#: ../src/pan-view.c:1550 ../src/pan-view.c:1916
+#: ../src/pan-view.c:1558 ../src/pan-view.c:1924
 msgid "Date:"
 msgstr "Date :"
 
-#: ../src/pan-view.c:1552 ../src/preferences.c:1174 ../src/print.c:3263
-#: ../src/print.c:3474
+#: ../src/pan-view.c:1560 ../src/preferences.c:1335 ../src/print.c:3226
+#: ../src/print.c:3437
 msgid "Size:"
 msgstr "Taille :"
 
-#: ../src/pan-view.c:1654
+#: ../src/pan-view.c:1662
 msgid "path found"
 msgstr "chemin trouvé"
 
-#: ../src/pan-view.c:1654
+#: ../src/pan-view.c:1662
 msgid "filename found"
 msgstr "fichier trouvé"
 
-#: ../src/pan-view.c:1702
+#: ../src/pan-view.c:1710
 msgid "partial match"
 msgstr "correspondance partielle"
 
-#: ../src/pan-view.c:1913 ../src/pan-view.c:1946
+#: ../src/pan-view.c:1921 ../src/pan-view.c:1954
 msgid "no match"
 msgstr "pas de correspondance"
 
-#: ../src/pan-view.c:2272 ../src/search.c:2215
+#: ../src/pan-view.c:2296 ../src/search.c:2205
 msgid "Folder not found"
 msgstr "Dossier inexistant"
 
-#: ../src/pan-view.c:2273
+#: ../src/pan-view.c:2297
 msgid "The entered path is not a folder"
 msgstr "Le chemin ne correspond pas à un dossier"
 
-#: ../src/pan-view.c:2368
+#: ../src/pan-view.c:2392
 msgid "Pan View"
 msgstr "Affichage panoramique"
 
-#: ../src/pan-view.c:2393
+#: ../src/pan-view.c:2417
 msgid "Timeline"
 msgstr "Echelle de temps"
 
-#: ../src/pan-view.c:2394
+#: ../src/pan-view.c:2418
 msgid "Calendar"
 msgstr "Calendrier"
 
-#: ../src/pan-view.c:2396
+#: ../src/pan-view.c:2420
 msgid "Folders (flower)"
 msgstr "Dossiers (fleur)"
 
-#: ../src/pan-view.c:2397
+#: ../src/pan-view.c:2421
 msgid "Grid"
 msgstr "Grille"
 
-#: ../src/pan-view.c:2406
+#: ../src/pan-view.c:2430
 msgid "Dots"
 msgstr "Points"
 
-#: ../src/pan-view.c:2407
+#: ../src/pan-view.c:2431
 msgid "No Images"
 msgstr "Aucune image"
 
-#: ../src/pan-view.c:2408
+#: ../src/pan-view.c:2432
 msgid "Small Thumbnails"
 msgstr "Vignettes réduites"
 
-#: ../src/pan-view.c:2409
+#: ../src/pan-view.c:2433
 msgid "Normal Thumbnails"
 msgstr "Vignettes normales"
 
-#: ../src/pan-view.c:2410
+#: ../src/pan-view.c:2434
 msgid "Large Thumbnails"
 msgstr "Vignettes larges"
 
-#: ../src/pan-view.c:2411 ../src/pan-view.c:2873
+#: ../src/pan-view.c:2435 ../src/pan-view.c:2895
 msgid "1:10 (10%)"
 msgstr "1:10 (10%)"
 
-#: ../src/pan-view.c:2412 ../src/pan-view.c:2869
+#: ../src/pan-view.c:2436 ../src/pan-view.c:2891
 msgid "1:4 (25%)"
 msgstr "1:4 (25%)"
 
-#: ../src/pan-view.c:2413 ../src/pan-view.c:2865
+#: ../src/pan-view.c:2437 ../src/pan-view.c:2887
 msgid "1:3 (33%)"
 msgstr "1:3 (33%)"
 
-#: ../src/pan-view.c:2414 ../src/pan-view.c:2861
+#: ../src/pan-view.c:2438 ../src/pan-view.c:2883
 msgid "1:2 (50%)"
 msgstr "1:2 (50%)"
 
-#: ../src/pan-view.c:2415
+#: ../src/pan-view.c:2439
 msgid "1:1 (100%)"
 msgstr "1:1 (100%)"
 
-#: ../src/pan-view.c:2463
+#: ../src/pan-view.c:2487
 msgid "Find:"
 msgstr "Rechercher :"
 
-#: ../src/pan-view.c:2506
+#: ../src/pan-view.c:2530
 msgid "Use Exif date"
 msgstr "Utiliser la date Exif"
 
-#: ../src/pan-view.c:2519
+#: ../src/pan-view.c:2543
 msgid "Find"
 msgstr "Rechercher"
 
-#: ../src/pan-view.c:2586
+#: ../src/pan-view.c:2610
 msgid "Pan View Performance"
 msgstr "Performances vue panoramique"
 
-#: ../src/pan-view.c:2593
+#: ../src/pan-view.c:2617
 msgid "Pan view performance may be poor."
 msgstr "Les performances de la vue panoramique pourraient être mauvaises."
 
-#: ../src/pan-view.c:2594
+#: ../src/pan-view.c:2618
 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 ""
 "Pour améliorer la vitesse de génération des vignettes dans la vue "
-"panoramique, les options suivantes peuvent être utilisées. Notez que les deux "
-"options doivent être validées pour apprécier un changement dans les "
+"panoramique, les options suivantes peuvent être utilisées. Notez que les "
+"deux options doivent être validées pour apprécier un changement dans les "
 "performances."
 
-#: ../src/pan-view.c:2602 ../src/preferences.c:1177
+#: ../src/pan-view.c:2626 ../src/preferences.c:1338
 msgid "Cache thumbnails"
 msgstr "Mettre en cache les vignettes"
 
-#: ../src/pan-view.c:2604
+#: ../src/pan-view.c:2628
 msgid "Use shared thumbnail cache"
 msgstr "Utiliser un cache partagé pour les vignettes"
 
-#: ../src/pan-view.c:2610
+#: ../src/pan-view.c:2634
 msgid "Do not show this dialog again"
 msgstr "Ne plus afficher ce message"
 
-#: ../src/pan-view.c:2841
+#: ../src/pan-view.c:2863
 msgid "Sort by E_xif date"
 msgstr "Trier par date E_xif"
 
-#: ../src/pan-view.c:2847
+#: ../src/pan-view.c:2869
 msgid "_Show Exif information"
 msgstr "_Montrer les infos Exif"
 
-#: ../src/pan-view.c:2849
+#: ../src/pan-view.c:2871
 msgid "Show im_age"
 msgstr "Montrer im_age"
 
-#: ../src/pan-view.c:2853
+#: ../src/pan-view.c:2875
 msgid "_None"
 msgstr "_Aucun"
 
-#: ../src/pan-view.c:2857
+#: ../src/pan-view.c:2879
 msgid "_Full size"
 msgstr "_Pleine taille"
 
@@ -3691,43 +3749,67 @@ msgstr "Inconnu"
 msgid "RAW Image"
 msgstr "Image RAW"
 
-#: ../src/preferences.c:417
+#: ../src/preferences.c:439
 msgid "Nearest (worst, but fastest)"
 msgstr "Au plus près (moins bon, plus rapide)"
 
-#: ../src/preferences.c:419
+#: ../src/preferences.c:441
 msgid "Tiles"
 msgstr "Tuiles"
 
-#: ../src/preferences.c:421
+#: ../src/preferences.c:443
 msgid "Bilinear"
 msgstr "Bilinéaire"
 
-#: ../src/preferences.c:423
+#: ../src/preferences.c:445
 msgid "Hyper (best, but slowest)"
 msgstr "Hyper (meilleur, plus lent)"
 
-#: ../src/preferences.c:451
-msgid "None"
-msgstr "Aucune"
+#: ../src/preferences.c:510 ../src/print.c:380
+msgid "Custom"
+msgstr "Spécifique"
 
-#: ../src/preferences.c:452
-msgid "Normal"
-msgstr "Normale"
+#: ../src/preferences.c:575
+msgid "Single image"
+msgstr "Image simple"
 
-#: ../src/preferences.c:453
-msgid "Best"
-msgstr "Meilleure"
+#: ../src/preferences.c:577
+msgid "Anaglyph Red-Cyan"
+msgstr "Anaglyphe Rouge-Cyan"
 
-#: ../src/preferences.c:515 ../src/print.c:380
-msgid "Custom"
-msgstr "Spécifique"
+#: ../src/preferences.c:579
+msgid "Anaglyph Gray Red-Cyan"
+msgstr "Anaglyphe Gris Rouge-Cyan"
 
-#: ../src/preferences.c:757 ../src/preferences.c:760
+#: ../src/preferences.c:581
+msgid "Anaglyph Dubois"
+msgstr "Anaglyphe Dubois"
+
+#: ../src/preferences.c:584
+msgid "Side by Side"
+msgstr "Côte-à-côte"
+
+#: ../src/preferences.c:585
+msgid "Side by Side Half size"
+msgstr "Côte-à-côte demi-taille"
+
+#: ../src/preferences.c:592
+msgid "Top - Bottom"
+msgstr "Haut - Bas"
+
+#: ../src/preferences.c:593
+msgid "Top - Bottom Half size"
+msgstr "Haut - Bas demi-taille"
+
+#: ../src/preferences.c:602 ../src/preferences.c:2192
+msgid "Fixed position"
+msgstr "Position fixe"
+
+#: ../src/preferences.c:899 ../src/preferences.c:902
 msgid "Reset filters"
 msgstr "RAZ des filtres"
 
-#: ../src/preferences.c:761
+#: ../src/preferences.c:903
 msgid ""
 "This will reset the file filters to the defaults.\n"
 "Continue?"
@@ -3735,19 +3817,19 @@ msgstr ""
 "Ceci va remettre les filtres de fichiers à leur état par défaut.\n"
 "Continuer ?"
 
-#: ../src/preferences.c:788 ../src/preferences.c:791
+#: ../src/preferences.c:930 ../src/preferences.c:933
 msgid "Clear trash"
 msgstr "Vider la corbeille"
 
-#: ../src/preferences.c:792
+#: ../src/preferences.c:934
 msgid "This will remove the trash contents."
 msgstr "Ceci va supprimer le contenu de la corbeille."
 
-#: ../src/preferences.c:836 ../src/preferences.c:839
+#: ../src/preferences.c:978 ../src/preferences.c:981
 msgid "Reset image overlay template string"
 msgstr "Restaurer le modèle par défaut pour l'affichage en surimpression"
 
-#: ../src/preferences.c:840
+#: ../src/preferences.c:982
 msgid ""
 "This will reset the image overlay template string to the default.\n"
 "Continue?"
@@ -3756,20 +3838,20 @@ msgstr ""
 "défaut.\n"
 "Continuer ?"
 
-#: ../src/preferences.c:1169
+#: ../src/preferences.c:1330
 msgid "General"
 msgstr "Général"
 
-#: ../src/preferences.c:1175 ../src/preferences.c:1248
+#: ../src/preferences.c:1336 ../src/preferences.c:1406
 msgid "Quality:"
 msgstr "Qualité :"
 
-#: ../src/preferences.c:1183
+#: ../src/preferences.c:1344
 msgid "Use standard thumbnail cache, shared with other applications"
 msgstr ""
 "Utiliser le cache de vignettes standard, partagé avec les autres applications"
 
-#: ../src/preferences.c:1189
+#: ../src/preferences.c:1350
 msgid ""
 "Store thumbnails in '.thumbnails' folder, local to image folder (non-"
 "standard)"
@@ -3777,181 +3859,181 @@ msgstr ""
 "Sauver les vignettes dans le dossier « .thumbnails », local au dossier de "
 "l'image (non-standard)"
 
-#: ../src/preferences.c:1193
+#: ../src/preferences.c:1354
 msgid "Use xvpics thumbnails when found (read only)"
 msgstr "Utiliser les vignettes xvpics si existantes (lecture seule)"
 
-#: ../src/preferences.c:1197
+#: ../src/preferences.c:1358
 msgid "Use EXIF thumbnails when available (EXIF thumbnails may be outdated)"
 msgstr ""
 "Utiliser les vignettes EXIF si disponibles (les vignettes EXIF peuvent ne "
 "pas être à jour)"
 
-#: ../src/preferences.c:1200
+#: ../src/preferences.c:1361
 msgid "Slide show"
 msgstr "Diaporama"
 
-#: ../src/preferences.c:1203
+#: ../src/preferences.c:1364
 msgid "Delay between image change:"
 msgstr "Délai entre deux images :"
 
-#: ../src/preferences.c:1203
+#: ../src/preferences.c:1364
 msgid "seconds"
 msgstr "secondes"
 
-#: ../src/preferences.c:1209
+#: ../src/preferences.c:1370
 msgid "Random"
 msgstr "Aléatoire"
 
-#: ../src/preferences.c:1210
+#: ../src/preferences.c:1371
 msgid "Repeat"
 msgstr "En boucle"
 
-#: ../src/preferences.c:1212
+#: ../src/preferences.c:1373
 msgid "Image loading and caching"
 msgstr "Chargement et cache des images"
 
-#: ../src/preferences.c:1215
+#: ../src/preferences.c:1376
 msgid "Offscreen cache size (Mb per image):"
 msgstr "Taille du cache mémoire hors-écran (Mo par image) :"
 
-#: ../src/preferences.c:1219
+#: ../src/preferences.c:1380
 msgid "Decoded image cache size (Mb):"
 msgstr "Taille du cache mémoire pour les images décodées (Mo) :"
 
-#: ../src/preferences.c:1221
+#: ../src/preferences.c:1382
 msgid "Preload next image"
 msgstr "Précharger l'image suivante"
 
-#: ../src/preferences.c:1224
+#: ../src/preferences.c:1385
 msgid "Refresh on file change"
 msgstr "Rafraîchir la liste des fichiers"
 
-#: ../src/preferences.c:1242
+#: ../src/preferences.c:1403
 msgid "Zoom"
 msgstr "Zoom"
 
-#: ../src/preferences.c:1245
-msgid "Dithering method:"
-msgstr "Méthode de dithering :"
-
-#: ../src/preferences.c:1250
+#: ../src/preferences.c:1408
 msgid "Two pass rendering (apply HQ zoom and color correction in second pass)"
 msgstr ""
 "Rendu en 2 passes (applique le zoom haute qualité et la correction "
 "colorimétrique durant la seconde passe)"
 
-#: ../src/preferences.c:1253
+#: ../src/preferences.c:1411
 msgid "Allow enlargement of image for zoom to fit"
 msgstr "Permettre d'agrandir les images pour que le zoom convienne"
 
-#: ../src/preferences.c:1257
+#: ../src/preferences.c:1415
 msgid "Limit image size when autofitting (%):"
 msgstr "Limiter la taille de l'image lors de l'auto-dimensionnement (%) :"
 
-#: ../src/preferences.c:1265
+#: ../src/preferences.c:1423
 msgid "Zoom increment:"
 msgstr "Incrément de zoom :"
 
-#: ../src/preferences.c:1270
+#: ../src/preferences.c:1428
 msgid "When new image is selected:"
 msgstr "Sélection d'une nouvelle image :"
 
-#: ../src/preferences.c:1274
+#: ../src/preferences.c:1432
 msgid "Zoom to original size"
 msgstr "Zoom à la taille d'origine"
 
-#: ../src/preferences.c:1277
+#: ../src/preferences.c:1435
 msgid "Fit image to window"
 msgstr "Mettre à la taille de la fenêtre"
 
-#: ../src/preferences.c:1280
+#: ../src/preferences.c:1438
 msgid "Leave Zoom at previous setting"
 msgstr "Garder la valeur précédente du zoom"
 
-#: ../src/preferences.c:1286
+#: ../src/preferences.c:1444
 msgid "Scroll to top left corner"
 msgstr "Défiler au coin en haut à gauche"
 
-#: ../src/preferences.c:1289
+#: ../src/preferences.c:1447
 msgid "Scroll to image center"
 msgstr "Défiler au centre de l'image"
 
-#: ../src/preferences.c:1292
+#: ../src/preferences.c:1450
 msgid "Keep the region from previous image"
 msgstr "Garder la région de l'image précédente"
 
-#: ../src/preferences.c:1297
+#: ../src/preferences.c:1455
 msgid "Appearance"
 msgstr "Apparence"
 
-#: ../src/preferences.c:1299
+#: ../src/preferences.c:1457
 msgid "Use custom border color in window mode"
 msgstr "Utiliser une couleur de bordure personnalisée en mode fenêtré"
 
-#: ../src/preferences.c:1302
+#: ../src/preferences.c:1460
 msgid "Use custom border color in fullscreen mode"
 msgstr "Utiliser une couleur de bordure personnalisée en mode plein écran"
 
-#: ../src/preferences.c:1305
+#: ../src/preferences.c:1463
 msgid "Border color"
 msgstr "Couleur de bordure"
 
-#: ../src/preferences.c:1308
+#: ../src/preferences.c:1466
 msgid "Convenience"
 msgstr "Commodités"
 
-#: ../src/preferences.c:1310
+#: ../src/preferences.c:1468
 msgid "Auto rotate image using Exif information"
 msgstr "Rotation automatique de l'image à l'aide des informations Exif"
 
-#: ../src/preferences.c:1327
+#: ../src/preferences.c:1471
+msgid "Auto rotate proofs using Exif information"
+msgstr "Rotation automatique des épreuves en fonction des informations Exif"
+
+#: ../src/preferences.c:1488
 msgid "Windows"
 msgstr "Fenêtres"
 
-#: ../src/preferences.c:1329
+#: ../src/preferences.c:1490
 msgid "State"
 msgstr "État"
 
-#: ../src/preferences.c:1331
+#: ../src/preferences.c:1492
 msgid "Remember window positions"
 msgstr "Se rappeler la position des fenêtres"
 
-#: ../src/preferences.c:1333
+#: ../src/preferences.c:1494
 msgid "Remember tool state (float/hidden)"
 msgstr "Se rappeler l'état des outils (flottants/cachés)"
 
-#: ../src/preferences.c:1338
+#: ../src/preferences.c:1499
 msgid "Fit window to image when tools are hidden/floating"
 msgstr ""
 "Mettre la fenêtre à la taille de l'image quand les outils sont cachés/"
 "flottants"
 
-#: ../src/preferences.c:1342
+#: ../src/preferences.c:1503
 msgid "Limit size when auto-sizing window (%):"
 msgstr "Limiter la taille quand la fenêtre est auto-dimensionnable (%) :"
 
-#: ../src/preferences.c:1357
+#: ../src/preferences.c:1518
 msgid "Smooth image flip"
 msgstr "Lisser le basculement d'image"
 
-#: ../src/preferences.c:1359
+#: ../src/preferences.c:1520
 msgid "Disable screen saver"
 msgstr "Inhiber l'économiseur d'écran"
 
-#: ../src/preferences.c:1363
+#: ../src/preferences.c:1524
 msgid "Overlay Screen Display"
 msgstr "Affichage en surimpression (OSD)"
 
-#: ../src/preferences.c:1365
+#: ../src/preferences.c:1526
 msgid "Image overlay template"
 msgstr "Modèle pour l'affichage en surimpression"
 
-#: ../src/preferences.c:1379
+#: ../src/preferences.c:1540
 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"
+"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"
 "To access exif data use the exif name, e. g. <i>%formatted.Camera%</i> is "
@@ -3961,89 +4043,89 @@ msgid ""
 "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 - "
+"<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 to add lines that totally "
+"If a line is empty, it is removed. This allows one to add lines that totally "
 "disappear when no data is available.\n"
 msgstr ""
 "<i>%name%</i> correspond au nom de l'image.\n"
-"Aussi disponibles : <i>%collection%</i>, <i>%number%</i>, <i>%total%</i>, <i>%"
-"date%</i>,\n"
+"Aussi disponibles : <i>%collection%</i>, <i>%number%</i>, <i>%total%</i>, <i>"
+"%date%</i>,\n"
 "<i>%size%</i> (taille du fichier), <i>%width%</i> (largeur), <i>%height%</i> "
 "(hauteur), <i>%res%</i> (résolution)\n"
-"Pour afficher les données Exif, utilisez le nom exif, par exemple <i>%"
-"formatted.Camera%</i> est le nom formaté de l'appareil.\n"
+"Pour afficher les données Exif, utilisez le nom exif, par exemple <i>"
+"%formatted.Camera%</i> est le nom formaté de l'appareil.\n"
 "<i>%Exif.Photo.DateTimeOriginal%</i> la date de la photo d'origine.\n"
 "La notation <i>%formatted.Camera:20</i> permet de tronquer l'affichage de "
 "cette donnée à 20 caractères, 3 points seront ajoutés à la fin pour "
 "l'indiquer.\n"
 "Si deux variables ou plus sont séparées par le caractère |, les variables "
 "disponibles seront affichées avec un séparateur.\n"
-"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>%"
-"formatted.FocalLength%</i> montrera \"1/20s - 400 - 80 mm\" ou \"1/200 - 80 "
+"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>"
+"%formatted.FocalLength%</i> montrera \"1/20s - 400 - 80 mm\" ou \"1/200 - 80 "
 "mm\",\n"
 "s'il n'y a pas d'information ISO dans les données Exif.\n"
 "Si une ligne est vide, elle n'est pas affichée. Cela permet d'ajouter des "
-"lignes qui disparaitront totalement si aucune donnée n'est disponible.\n"
+"lignes qui disparaîtront totalement si aucune donnée n'est disponible.\n"
 
-#: ../src/preferences.c:1396 ../src/preferences.c:1569
-#: ../src/preferences.c:1941
+#: ../src/preferences.c:1557 ../src/preferences.c:1733
+#: ../src/preferences.c:2106
 msgid "Defaults"
 msgstr "Configuration par défaut"
 
-#: ../src/preferences.c:1450
+#: ../src/preferences.c:1611
 msgid "Show hidden files or folders"
 msgstr "Montrer les fichiers ou dossiers cachés"
 
-#: ../src/preferences.c:1453
+#: ../src/preferences.c:1614
 msgid "Show dot directory"
 msgstr "Montrer le répertoire point"
 
-#: ../src/preferences.c:1456
+#: ../src/preferences.c:1617
 msgid "Case sensitive sort"
 msgstr "Tri sensible à la casse"
 
-#: ../src/preferences.c:1459
+#: ../src/preferences.c:1620
 msgid "Disable File Filtering"
 msgstr "Désactiver les filtres de fichiers"
 
-#: ../src/preferences.c:1463
+#: ../src/preferences.c:1624
 msgid "Grouping sidecar extensions"
 msgstr "Groupage des extensions de fichiers sidecars"
 
-#: ../src/preferences.c:1470
+#: ../src/preferences.c:1631
 msgid "File types"
 msgstr "Types de fichier"
 
-#: ../src/preferences.c:1492
+#: ../src/preferences.c:1653
 msgid "Filter"
 msgstr "Filtre"
 
-#: ../src/preferences.c:1524
+#: ../src/preferences.c:1688
 msgid "Class"
 msgstr "Classe"
 
-#: ../src/preferences.c:1541
+#: ../src/preferences.c:1705
 msgid "Writable"
 msgstr "Inscriptible"
 
-#: ../src/preferences.c:1552
+#: ../src/preferences.c:1716
 msgid "Sidecar is allowed"
 msgstr "Sidecar permis"
 
-#: ../src/preferences.c:1598
+#: ../src/preferences.c:1762
 msgid "Metadata writing process"
 msgstr "Processus d'écriture des méta-données"
 
-#: ../src/preferences.c:1600
+#: ../src/preferences.c:1764
 msgid "Warning: Geeqie is built without Exiv2. Some options are disabled."
 msgstr ""
 "Attention : Geeqie a été compilé sans Exiv2, quelques options sont donc "
 "inaccessibles."
 
-#: ../src/preferences.c:1602
+#: ../src/preferences.c:1766
 msgid ""
 "Metadata are written in the following order. The process ends after first "
 "success."
@@ -4051,7 +4133,7 @@ msgstr ""
 "Les méta-données sont écrites dans l'ordre suivant. Le processus se termine "
 "dès le premier succès."
 
-#: ../src/preferences.c:1605
+#: ../src/preferences.c:1769
 msgid ""
 "1) Save metadata in image files, resp. sidecar files, according to the XMP "
 "standard"
@@ -4059,23 +4141,23 @@ msgstr ""
 "1) Sauver les méta-données dans les fichiers images, les fichiers sidecars, "
 "en accord avec le standard XMP"
 
-#: ../src/preferences.c:1611
+#: ../src/preferences.c:1775
 msgid ""
 "2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
 msgstr ""
-"2) Sauver les méta-données dans le dossier « .metadata », local au dossier de "
-"l'image (non-standard)"
+"2) Sauver les méta-données dans le dossier « .metadata », local au dossier "
+"de l'image (non-standard)"
 
-#: ../src/preferences.c:1614
+#: ../src/preferences.c:1778
 #, c-format
 msgid "3) Save metadata in Geeqie private directory '%s'"
 msgstr "3) Sauver les méta-données dans le répertoire privé de Geeqie « %s »"
 
-#: ../src/preferences.c:1619
+#: ../src/preferences.c:1784
 msgid "Step 1: Write to image files"
 msgstr "Étape 1 : écriture dans les fichiers images"
 
-#: ../src/preferences.c:1627
+#: ../src/preferences.c:1792
 msgid ""
 "Store metadata also in legacy IPTC tags (converted according to IPTC4XMP "
 "standard)"
@@ -4083,19 +4165,19 @@ msgstr ""
 "Sauver aussi les méta-données dans les tags IPTC (convertis en accord avec "
 "le standard IPTC4XMP)"
 
-#: ../src/preferences.c:1630
+#: ../src/preferences.c:1795
 msgid "Warn if the image files are unwritable"
 msgstr "Prévenir si les images sont protégées en écriture"
 
-#: ../src/preferences.c:1633
+#: ../src/preferences.c:1798
 msgid "Ask before writing to image files"
 msgstr "Demander avant l'écriture dans les images"
 
-#: ../src/preferences.c:1636
+#: ../src/preferences.c:1801
 msgid "Step 2 and 3: write to Geeqie private files"
 msgstr "Étapes 2 et 3 : écriture dans les fichiers privés de Geeqie"
 
-#: ../src/preferences.c:1641
+#: ../src/preferences.c:1806
 msgid ""
 "Use GQview legacy metadata format (supports only keywords and comments) "
 "instead of XMP"
@@ -4103,11 +4185,11 @@ msgstr ""
 "Utiliser le format de méta-données historique de GQview (supporte seulement "
 "les mots-clés et les commentaires) au lieu de XMP"
 
-#: ../src/preferences.c:1645 ../src/preferences.c:1833
+#: ../src/preferences.c:1810 ../src/preferences.c:1998
 msgid "Miscellaneous"
 msgstr "Divers"
 
-#: ../src/preferences.c:1646
+#: ../src/preferences.c:1811
 msgid ""
 "Write the same description tags (keywords, comment, etc.) to all grouped "
 "sidecars"
@@ -4115,188 +4197,244 @@ msgstr ""
 "Écrire les mêmes balises de description (mots-clés, commentaires, etc.) dans "
 "tous les fichiers sidecars groupés"
 
-#: ../src/preferences.c:1649
+#: ../src/preferences.c:1814
 msgid "Allow keywords to differ only in case"
 msgstr "Permettre aux mots-clés de différer sur la casse"
 
-#: ../src/preferences.c:1652
+#: ../src/preferences.c:1817
 msgid "Write altered image orientation to the metadata"
 msgstr "Sauver l'orientation modifiée dans les méta-données"
 
-#: ../src/preferences.c:1658
+#: ../src/preferences.c:1823
 msgid "Auto-save options"
 msgstr "Options de sauvegarde automatique"
 
-#: ../src/preferences.c:1660
+#: ../src/preferences.c:1825
 msgid "Write metadata after timeout"
 msgstr "Écrire les méta-données après un délai"
 
-#: ../src/preferences.c:1666
+#: ../src/preferences.c:1831
 msgid "Timeout (seconds):"
 msgstr "Délai (secondes) :"
 
-#: ../src/preferences.c:1669
+#: ../src/preferences.c:1834
 msgid "Write metadata on image change"
 msgstr "Écrire les méta-données en cas de modification d'image"
 
-#: ../src/preferences.c:1672
+#: ../src/preferences.c:1837
 msgid "Write metadata on directory change"
 msgstr "Écrire les méta-données après une modification de dossier"
 
-#: ../src/preferences.c:1686
+#: ../src/preferences.c:1851
 msgid "Color management"
 msgstr "Gestion des couleurs"
 
-#: ../src/preferences.c:1688
+#: ../src/preferences.c:1853
 msgid "Input profiles"
 msgstr "Profils d'entrée"
 
-#: ../src/preferences.c:1696
+#: ../src/preferences.c:1861
 msgid "Type"
 msgstr "Type"
 
-#: ../src/preferences.c:1699
+#: ../src/preferences.c:1864
 msgid "Menu name"
 msgstr "Nom du menu"
 
-#: ../src/preferences.c:1702
+#: ../src/preferences.c:1867
 msgid "File"
 msgstr "Fichier"
 
-#: ../src/preferences.c:1710
+#: ../src/preferences.c:1875
 #, c-format
 msgid "Input %d:"
 msgstr "Entrée %d :"
 
-#: ../src/preferences.c:1727 ../src/preferences.c:1747
+#: ../src/preferences.c:1892 ../src/preferences.c:1912
 msgid "Select color profile"
 msgstr "Sélectionner un profil colorimétrique"
 
-#: ../src/preferences.c:1735
+#: ../src/preferences.c:1900
 msgid "Screen profile"
 msgstr "Profil d'écran"
 
-#: ../src/preferences.c:1739
+#: ../src/preferences.c:1904
 msgid "Use system screen profile if available"
 msgstr "Utiliser le profil d'écran du système si disponible"
 
-#: ../src/preferences.c:1744
+#: ../src/preferences.c:1909
 msgid "Screen:"
 msgstr "Écran :"
 
-#: ../src/preferences.c:1766 ../src/preferences.c:1809
+#: ../src/preferences.c:1931 ../src/preferences.c:1974
 msgid "Behavior"
 msgstr "Comportement"
 
-#: ../src/preferences.c:1768 ../src/utilops.c:1971
+#: ../src/preferences.c:1933 ../src/utilops.c:1985
 msgid "Delete"
 msgstr "Suppression"
 
-#: ../src/preferences.c:1770
+#: ../src/preferences.c:1935
 msgid "Confirm file delete"
 msgstr "Confirmer la suppression des fichiers"
 
-#: ../src/preferences.c:1772
+#: ../src/preferences.c:1937
 msgid "Enable Delete key"
 msgstr "Utiliser la touche [Suppr]"
 
-#: ../src/preferences.c:1775
+#: ../src/preferences.c:1940
 msgid "Safe delete"
 msgstr "Suppression récupérable"
 
-#: ../src/preferences.c:1793
+#: ../src/preferences.c:1958
 msgid "Maximum size:"
 msgstr "Taille maximale :"
 
-#: ../src/preferences.c:1793
+#: ../src/preferences.c:1958
 msgid "MB"
 msgstr "Mo"
 
-#: ../src/preferences.c:1796
+#: ../src/preferences.c:1961
 msgid "Set to 0 for unlimited size"
 msgstr "Mettre à zéro pour taille infinie"
 
-#: ../src/preferences.c:1798
+#: ../src/preferences.c:1963
 msgid "View"
 msgstr "Vue"
 
-#: ../src/preferences.c:1811
+#: ../src/preferences.c:1976
 msgid "Rectangular selection in icon view"
 msgstr "Sélection rectangulaire dans la vue en icônes"
 
-#: ../src/preferences.c:1814
+#: ../src/preferences.c:1979
 msgid "Descend folders in tree view"
 msgstr "Parcourir les dossiers dans la vue arborescente"
 
-#: ../src/preferences.c:1817
+#: ../src/preferences.c:1982
 msgid "In place renaming"
 msgstr "Renommer en place"
 
-#: ../src/preferences.c:1820
+#: ../src/preferences.c:1985
 msgid "Open recent list maximum size"
 msgstr "Taille maximale de la liste des fichiers récemment ouverts"
 
-#: ../src/preferences.c:1823
+#: ../src/preferences.c:1988
 msgid "Drag'n drop icon size"
 msgstr "Taille de l'icône du glisser-déplacer"
 
-#: ../src/preferences.c:1826
+#: ../src/preferences.c:1991
 msgid "Navigation"
 msgstr "Navigation"
 
-#: ../src/preferences.c:1828
+#: ../src/preferences.c:1993
 msgid "Progressive keyboard scrolling"
 msgstr "Défilement clavier progressif"
 
-#: ../src/preferences.c:1830
+#: ../src/preferences.c:1995
 msgid "Mouse wheel scrolls image"
 msgstr "Navigation dans l'image avec la molette de la souris"
 
-#: ../src/preferences.c:1835
+#: ../src/preferences.c:2000
 msgid "Custom similarity threshold:"
 msgstr "Seuil de similarité personnalisé :"
 
-#: ../src/preferences.c:1840
+#: ../src/preferences.c:2005
 msgid "Debugging"
 msgstr "Débogage"
 
-#: ../src/preferences.c:1842
+#: ../src/preferences.c:2007
 msgid "Debug level:"
 msgstr "Niveau de débogage :"
 
-#: ../src/preferences.c:1861
+#: ../src/preferences.c:2026
 msgid "Keyboard"
 msgstr "Clavier"
 
-#: ../src/preferences.c:1863
+#: ../src/preferences.c:2028
 msgid "Accelerators"
 msgstr "Raccourcis"
 
-#: ../src/preferences.c:1882
+#: ../src/preferences.c:2047
 msgid "Action"
 msgstr "Action"
 
-#: ../src/preferences.c:1904
+#: ../src/preferences.c:2069
 msgid "KEY"
 msgstr "Touche"
 
-#: ../src/preferences.c:1915
+#: ../src/preferences.c:2080
 msgid "Tooltip"
 msgstr "Infobulle"
 
-#: ../src/preferences.c:1953
+#: ../src/preferences.c:2118
 msgid "Reset selected"
 msgstr "RAZ sélection"
 
-#: ../src/preferences.c:1959
+#: ../src/preferences.c:2124
 msgid "Add Alt"
 msgstr "Ajouter Alt"
 
-#: ../src/preferences.c:1978
+#: ../src/preferences.c:2142
+msgid "Stereo"
+msgstr "Stéréo"
+
+#: ../src/preferences.c:2144 ../src/preferences.c:2147
+msgid "Windowed stereo mode"
+msgstr "Mode stéréo fenêtré"
+
+#: ../src/preferences.c:2151 ../src/preferences.c:2176
+msgid "Mirror left image"
+msgstr "Refléter image de gauche"
+
+#: ../src/preferences.c:2154 ../src/preferences.c:2179
+msgid "Flip left image"
+msgstr "Retourner image de gauche"
+
+#: ../src/preferences.c:2157 ../src/preferences.c:2182
+msgid "Mirror right image"
+msgstr "Refléter image de droite"
+
+#: ../src/preferences.c:2160 ../src/preferences.c:2185
+msgid "Flip right image"
+msgstr "Retourner image de droite"
+
+#: ../src/preferences.c:2162 ../src/preferences.c:2187
+msgid "Swap left and right images"
+msgstr "Échanger les images gauche et droite"
+
+#: ../src/preferences.c:2164 ../src/preferences.c:2189
+msgid "Disable stereo mode on single image source"
+msgstr "Désactiver le mode stéréo sur les images simples"
+
+#: ../src/preferences.c:2167 ../src/preferences.c:2173
+msgid "Fullscreen stereo mode"
+msgstr "Mode stéréo plein écran"
+
+#: ../src/preferences.c:2168
+msgid "Use different settings for fullscreen"
+msgstr "Utiliser des réglages différents en plein écran"
+
+#: ../src/preferences.c:2198
+msgid "Left X"
+msgstr "X gauche"
+
+#: ../src/preferences.c:2200
+msgid "Left Y"
+msgstr "Y gauche"
+
+#: ../src/preferences.c:2202
+msgid "Right X"
+msgstr "X droite"
+
+#: ../src/preferences.c:2204
+msgid "Right Y"
+msgstr "Y droite"
+
+#: ../src/preferences.c:2220
 msgid "Preferences"
 msgstr "Préférences"
 
-#: ../src/preferences.c:2125
+#: ../src/preferences.c:2368
 #, c-format
 msgid ""
 "%s %s\n"
@@ -4325,7 +4463,7 @@ msgstr ""
 "\n"
 "Distribué sous GNU General Public License"
 
-#: ../src/preferences.c:2144
+#: ../src/preferences.c:2387
 msgid "Credits..."
 msgstr "Crédits..."
 
@@ -4373,7 +4511,7 @@ msgstr "JPEG, qualité normale"
 msgid "jpeg, high quality"
 msgstr "JPEG, haute qualité"
 
-#: ../src/print.c:365 ../src/print.c:3263
+#: ../src/print.c:365 ../src/print.c:3226
 msgid "points"
 msgstr "points"
 
@@ -4481,150 +4619,155 @@ msgstr ""
 "Impossible d'ouvrir le tube en écriture.\n"
 "« %s »"
 
-#: ../src/print.c:1074 ../src/print.c:1515 ../src/ui_pathsel.c:432
+#: ../src/print.c:1074 ../src/print.c:1466 ../src/ui_pathsel.c:423
 #, c-format
 msgid "A file with name %s already exists."
 msgstr "Un fichier portant le nom %s existe déjà."
 
-#: ../src/print.c:1089 ../src/print.c:1570
+#: ../src/print.c:1089 ../src/print.c:1521
 #, c-format
 msgid "Failure writing to file %s"
 msgstr "Échec à l'écriture dans le fichier %s"
 
 #: ../src/print.c:1144 ../src/print.c:1181 ../src/print.c:1217
-#: ../src/print.c:1334 ../src/print.c:1425 ../src/print.c:1456
+#: ../src/print.c:1334 ../src/print.c:1407
 msgid "SIGPIPE error writing to printer."
 msgstr "Erreur SIGPIPE à l'écriture vers l'imprimante."
 
-#: ../src/print.c:1991
+#: ../src/print.c:1942
 #, c-format
 msgid "Page %d"
 msgstr "Page %d"
 
-#: ../src/print.c:2013 ../src/print.c:2018
+#: ../src/print.c:1968 ../src/print.c:1973
 msgid "Printing error"
 msgstr "Erreur d'impression"
 
-#: ../src/print.c:2017
+#: ../src/print.c:1972
 #, c-format
 msgid "An error occured printing to %s."
 msgstr "Une erreur est apparue lors de l'impression vers %s."
 
-#: ../src/print.c:2021
+#: ../src/print.c:1976
 msgid "Details"
 msgstr "Détails"
 
-#: ../src/print.c:2638 ../src/print.c:3398
+#: ../src/print.c:2601 ../src/print.c:3361
 msgid "Print"
 msgstr "Imprimer"
 
-#: ../src/print.c:2642
+#: ../src/print.c:2605
 #, c-format
 msgid "Printing %d pages to %s."
 msgstr "Impression de %d pages vers %s."
 
-#: ../src/print.c:2742
+#: ../src/print.c:2705
 msgid "Format:"
 msgstr "Format :"
 
-#: ../src/print.c:2817
+#: ../src/print.c:2780
 msgid "Units:"
 msgstr "Unités :"
 
-#: ../src/print.c:2861
+#: ../src/print.c:2824
 msgid "Orientation:"
 msgstr "Orientation :"
 
-#: ../src/print.c:2993
+#: ../src/print.c:2956
 msgid "Destination:"
 msgstr "Destination :"
 
-#: ../src/print.c:3041
+#: ../src/print.c:3004
 msgid "<printer name>"
 msgstr "<Nom de l'imprimante>"
 
-#: ../src/print.c:3130
+#: ../src/print.c:3093
 msgid "Unlimited"
 msgstr "Sans limite"
 
-#: ../src/print.c:3248
+#: ../src/print.c:3211
 msgid "Show"
 msgstr "Montrer"
 
-#: ../src/print.c:3261
+#: ../src/print.c:3224
 msgid "Font"
 msgstr "Police"
 
-#: ../src/print.c:3425
+#: ../src/print.c:3388
 msgid "Source"
 msgstr "Source"
 
-#: ../src/print.c:3437
+#: ../src/print.c:3400
 msgid "Image size:"
 msgstr "Taille de l'image :"
 
-#: ../src/print.c:3441
+#: ../src/print.c:3404
 msgid "Proof size:"
 msgstr "Taille de l'aperçu :"
 
-#: ../src/print.c:3457
+#: ../src/print.c:3420
 msgid "Text"
 msgstr "Texte"
 
-#: ../src/print.c:3467
+#: ../src/print.c:3430
 msgid "Paper"
 msgstr "Papier"
 
-#: ../src/print.c:3490
+#: ../src/print.c:3453
 msgid "Margins"
 msgstr "Marges"
 
-#: ../src/print.c:3492
+#: ../src/print.c:3455
 msgid "Left:"
 msgstr "Gauche :"
 
-#: ../src/print.c:3495
+#: ../src/print.c:3458
 msgid "Right:"
 msgstr "Droite :"
 
-#: ../src/print.c:3498
+#: ../src/print.c:3461
 msgid "Top:"
 msgstr "Haute :"
 
-#: ../src/print.c:3501
+#: ../src/print.c:3464
 msgid "Bottom:"
 msgstr "Basse :"
 
-#: ../src/print.c:3510
+#: ../src/print.c:3473
 msgid "Printer"
 msgstr "Imprimante"
 
-#: ../src/print.c:3516
+#: ../src/print.c:3479
 msgid "Custom printer:"
 msgstr "Imprimante spécifique :"
 
-#: ../src/print.c:3525
+#: ../src/print.c:3488
 msgid "File:"
 msgstr "Fichier :"
 
-#: ../src/print.c:3534
+#: ../src/print.c:3497
 msgid "File format:"
 msgstr "Format du fichier :"
 
-#: ../src/print.c:3539
+#: ../src/print.c:3502
 msgid "DPI:"
 msgstr "DPI :"
 
-#: ../src/print.c:3547
+#: ../src/print.c:3510
 msgid "Remember print settings"
 msgstr "Conserver les paramètres d'impression"
 
-#: ../src/rcfile.c:495
+#: ../src/rcfile.c:81
+#, c-format
+msgid "Option %s ignored: %s\n"
+msgstr "Option %s ignorée: %s\n"
+
+#: ../src/rcfile.c:512
 #, c-format
 msgid "error saving config file: %s\n"
 msgstr "erreur à la sauvegarde du fichier de configuration : %s\n"
 
-#: ../src/rcfile.c:553
+#: ../src/rcfile.c:570
 #, c-format
 msgid ""
 "error saving config file: %s\n"
@@ -4718,12 +4861,21 @@ msgstr "ouvre le fichier indiqué dans une nouvelle fenêtre"
 msgid "Remote command list:\n"
 msgstr "Liste des commandes à distance :\n"
 
-#: ../src/remote.c:781
+#: ../src/remote.c:739
+msgid ""
+"\n"
+"  All other command line parameters are used as plain files if they exists.\n"
+msgstr ""
+"\n"
+"  Tous les autres paramètres de la ligne de commande sont utilisés comme des "
+"fichiers s'ils existent.\n"
+
+#: ../src/remote.c:789
 #, c-format
 msgid "Remote %s not running, starting..."
 msgstr "Pas de %s distant, lancement..."
 
-#: ../src/remote.c:917
+#: ../src/remote.c:925
 msgid "Remote not available\n"
 msgstr "Commande à distance indisponible\n"
 
@@ -4801,64 +4953,64 @@ msgstr "%s, %d fichiers"
 msgid "Searching..."
 msgstr "Recherche..."
 
-#: ../src/search.c:2166
+#: ../src/search.c:2156
 msgid "File not found"
 msgstr "Fichier inexistant"
 
-#: ../src/search.c:2167
+#: ../src/search.c:2157
 msgid "Please enter an existing file for image content."
 msgstr "Sélectionner un fichier existant pour un contenu image."
 
-#: ../src/search.c:2216
+#: ../src/search.c:2206
 msgid "Please enter an existing folder to search."
 msgstr "Sélectionner un dossier existant pour la recherche."
 
-#: ../src/search.c:2634
+#: ../src/search.c:2632
 msgid "Image search"
 msgstr "Recherche d'image"
 
-#: ../src/search.c:2664
+#: ../src/search.c:2662
 msgid "Search:"
 msgstr "Recherche :"
 
-#: ../src/search.c:2678
+#: ../src/search.c:2676
 msgid "Recurse"
 msgstr "Récursivement"
 
-#: ../src/search.c:2683
+#: ../src/search.c:2681
 msgid "File name"
 msgstr "Nom du fichier"
 
-#: ../src/search.c:2689 ../src/search.c:2784
+#: ../src/search.c:2687 ../src/search.c:2782
 msgid "Match case"
 msgstr "Sensible à la casse"
 
-#: ../src/search.c:2694
+#: ../src/search.c:2692
 msgid "File size is"
 msgstr "Taille du fichier est"
 
-#: ../src/search.c:2701 ../src/search.c:2717 ../src/search.c:2736
+#: ../src/search.c:2699 ../src/search.c:2715 ../src/search.c:2734
 msgid "and"
 msgstr "et"
 
-#: ../src/search.c:2707
+#: ../src/search.c:2705
 msgid "File date is"
 msgstr "Date du fichier est"
 
-#: ../src/search.c:2725
+#: ../src/search.c:2723
 msgid "Image dimensions are"
 msgstr "Dimensions de l'image sont"
 
-#: ../src/search.c:2746
+#: ../src/search.c:2744
 msgid "Image content is"
 msgstr "Contenu de l'image est"
 
-#: ../src/search.c:2752
+#: ../src/search.c:2750
 #, no-c-format
 msgid "% similar to"
 msgstr "% similaire à"
 
-#: ../src/search.c:2838
+#: ../src/search.c:2836
 msgid "Rank"
 msgstr "Rang"
 
@@ -4902,8 +5054,8 @@ msgstr "Erreur de sauvegarde fiable du fichier"
 msgid "Thumbnail image in cache failed to load, trying to recreate.\n"
 msgstr "Impossible de charger la vignette depuis le cache, régénération.\n"
 
-#: ../src/trash.c:80 ../src/utilops.c:2428 ../src/utilops.c:2439
-#: ../src/utilops.c:2496
+#: ../src/trash.c:80 ../src/utilops.c:2448 ../src/utilops.c:2459
+#: ../src/utilops.c:2516
 msgid "Delete failed"
 msgstr "Échec de la suppression"
 
@@ -4975,11 +5127,11 @@ msgstr "Icône : "
 msgid "Select icon"
 msgstr "Sélectionner icône"
 
-#: ../src/ui_bookmark.c:403
+#: ../src/ui_bookmark.c:405
 msgid "_Properties..."
 msgstr "_Propriétés..."
 
-#: ../src/ui_bookmark.c:409
+#: ../src/ui_bookmark.c:411
 msgid "_Remove"
 msgstr "Efface_r"
 
@@ -5059,33 +5211,33 @@ msgstr ""
 "Impossible de lancer la commande :\n"
 "%s"
 
-#: ../src/ui_pathsel.c:433 ../src/ui_pathsel.c:439 ../src/utilops.c:2130
-#: ../src/utilops.c:2157 ../src/utilops.c:2620
+#: ../src/ui_pathsel.c:424 ../src/ui_pathsel.c:430 ../src/utilops.c:2147
+#: ../src/utilops.c:2174 ../src/utilops.c:2640
 msgid "Rename failed"
 msgstr "Échec de renommage"
 
-#: ../src/ui_pathsel.c:438
+#: ../src/ui_pathsel.c:429
 #, c-format
 msgid "Failed to rename %s to %s."
 msgstr "Impossible de renommer le fichier %s en %s."
 
-#: ../src/ui_pathsel.c:634 ../src/ui_pathsel.c:642
+#: ../src/ui_pathsel.c:625 ../src/ui_pathsel.c:633
 msgid "_Rename"
 msgstr "_Renommer"
 
-#: ../src/ui_pathsel.c:636 ../src/ui_pathsel.c:646
+#: ../src/ui_pathsel.c:627 ../src/ui_pathsel.c:637
 msgid "Add _Bookmark"
 msgstr "Ajouter un _signet"
 
-#: ../src/ui_pathsel.c:644
+#: ../src/ui_pathsel.c:635
 msgid "_Delete"
 msgstr "_Supprimer"
 
-#: ../src/ui_pathsel.c:748 ../src/ui_pathsel.c:1049 ../src/utilops.c:2654
+#: ../src/ui_pathsel.c:742 ../src/ui_pathsel.c:1047 ../src/utilops.c:2674
 msgid "New folder"
 msgstr "Nouveau dossier"
 
-#: ../src/ui_pathsel.c:758
+#: ../src/ui_pathsel.c:752
 #, c-format
 msgid ""
 "Unable to create folder:\n"
@@ -5094,31 +5246,31 @@ msgstr ""
 "Impossible de créer le dossier :\n"
 "%s"
 
-#: ../src/ui_pathsel.c:759
+#: ../src/ui_pathsel.c:753
 msgid "Error creating folder"
 msgstr "Erreur pendant la création du dossier"
 
-#: ../src/ui_pathsel.c:980
+#: ../src/ui_pathsel.c:978
 msgid "All Files"
 msgstr "Montrer tous les fichiers"
 
-#: ../src/ui_pathsel.c:1052
+#: ../src/ui_pathsel.c:1050
 msgid "Show hidden"
 msgstr "Montrer les fichiers cachés"
 
-#: ../src/ui_pathsel.c:1136
+#: ../src/ui_pathsel.c:1134
 msgid "Filter:"
 msgstr "Filtre :"
 
-#: ../src/ui_tabcomp.c:925
+#: ../src/ui_tabcomp.c:940
 msgid "Select path"
 msgstr "Sélectionner un chemin"
 
-#: ../src/ui_tabcomp.c:941
+#: ../src/ui_tabcomp.c:956
 msgid "All files"
 msgstr "Tous les fichiers"
 
-#: ../src/utilops.c:534
+#: ../src/utilops.c:547
 msgid ""
 "\n"
 " Continue multiple file operation?"
@@ -5126,11 +5278,11 @@ msgstr ""
 "\n"
 " Continuer l'opération de suppression multiple ?"
 
-#: ../src/utilops.c:541 ../src/utilops.c:976
+#: ../src/utilops.c:554 ../src/utilops.c:989
 msgid "Co_ntinue"
 msgstr "Co_ntinuer"
 
-#: ../src/utilops.c:718
+#: ../src/utilops.c:731
 #, c-format
 msgid ""
 "Removal of folder contents failed at this file:\n"
@@ -5141,7 +5293,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../src/utilops.c:864
+#: ../src/utilops.c:877
 #, c-format
 msgid ""
 "%s\n"
@@ -5150,103 +5302,103 @@ msgstr ""
 "%s\n"
 "Impossible de démarrer la commande externe.\n"
 
-#: ../src/utilops.c:944
+#: ../src/utilops.c:957
 #, c-format
 msgid "%s is not a directory"
 msgstr "%s n'est pas un répertoire"
 
-#: ../src/utilops.c:974
+#: ../src/utilops.c:987
 msgid "Really continue?"
 msgstr "Vraiment continuer ?"
 
-#: ../src/utilops.c:988
+#: ../src/utilops.c:1001
 msgid "This operation can't continue:"
 msgstr "Cette opération ne peut continuer :"
 
-#: ../src/utilops.c:1351 ../src/utilops.c:1464 ../src/utilops.c:1848
+#: ../src/utilops.c:1364 ../src/utilops.c:1477 ../src/utilops.c:1861
 msgid "Discard changes"
 msgstr "Ignorer les changements"
 
-#: ../src/utilops.c:1352 ../src/utilops.c:1465 ../src/utilops.c:1798
-#: ../src/utilops.c:1814
+#: ../src/utilops.c:1365 ../src/utilops.c:1478 ../src/utilops.c:1811
+#: ../src/utilops.c:1827
 msgid "File details"
 msgstr "Détails du fichier"
 
-#: ../src/utilops.c:1374 ../src/utilops.c:1472
+#: ../src/utilops.c:1387 ../src/utilops.c:1485
 msgid "Sidecars"
 msgstr "Sidecars"
 
-#: ../src/utilops.c:1376
+#: ../src/utilops.c:1389
 msgid "Write to file"
 msgstr "Écrire dans le fichier"
 
-#: ../src/utilops.c:1416
+#: ../src/utilops.c:1429
 msgid "Choose the destination folder."
 msgstr "Choisir le dossier de destination."
 
-#: ../src/utilops.c:1474
+#: ../src/utilops.c:1487
 msgid "New name"
 msgstr "Nouveau nom"
 
-#: ../src/utilops.c:1504
+#: ../src/utilops.c:1517
 msgid "Manual rename"
 msgstr "Renommage manuel"
 
-#: ../src/utilops.c:1509
+#: ../src/utilops.c:1522
 msgid "Original name:"
 msgstr "Nom d'origine :"
 
-#: ../src/utilops.c:1512
+#: ../src/utilops.c:1525
 msgid "New name:"
 msgstr "Nouveau nom :"
 
-#: ../src/utilops.c:1525
+#: ../src/utilops.c:1538
 msgid "Auto rename"
 msgstr "Renommage auto"
 
-#: ../src/utilops.c:1531
+#: ../src/utilops.c:1544
 msgid "Begin text"
 msgstr "Texte de début"
 
-#: ../src/utilops.c:1539 ../src/utilops.c:1571
+#: ../src/utilops.c:1552 ../src/utilops.c:1584
 msgid "Start #"
 msgstr "N° début"
 
-#: ../src/utilops.c:1545
+#: ../src/utilops.c:1558
 msgid "End text"
 msgstr "Texte de fin"
 
-#: ../src/utilops.c:1553
+#: ../src/utilops.c:1566
 msgid "Padding:"
 msgstr "Bourrage :"
 
-#: ../src/utilops.c:1558
+#: ../src/utilops.c:1571
 msgid "Formatted rename"
 msgstr "Renommage formaté"
 
-#: ../src/utilops.c:1563
+#: ../src/utilops.c:1576
 msgid "Format (* = original name, ## = numbers)"
 msgstr "Format (* = nom original, ## = nombres)"
 
-#: ../src/utilops.c:1701
+#: ../src/utilops.c:1714
 msgid "Another operation in progress.\n"
 msgstr "Autre opération en cours\n"
 
-#: ../src/utilops.c:1757
+#: ../src/utilops.c:1770
 #, c-format
 msgid "File: '%s'\n"
 msgstr "Fichier : « %s »\n"
 
-#: ../src/utilops.c:1762
+#: ../src/utilops.c:1775
 msgid "with sidecar files:\n"
 msgstr "avec les fichiers sidecars :\n"
 
-#: ../src/utilops.c:1768
+#: ../src/utilops.c:1781
 #, c-format
 msgid " '%s'\n"
 msgstr "« %s »\n"
 
-#: ../src/utilops.c:1772
+#: ../src/utilops.c:1785
 msgid ""
 "\n"
 "Status: "
@@ -5254,19 +5406,19 @@ msgstr ""
 "\n"
 "État :"
 
-#: ../src/utilops.c:1784
+#: ../src/utilops.c:1797
 msgid "no problem detected"
 msgstr "aucun problème détecté"
 
-#: ../src/utilops.c:1800 ../src/utilops.c:1847
+#: ../src/utilops.c:1813 ../src/utilops.c:1860
 msgid "Exclude file"
 msgstr "Exclure le fichier"
 
-#: ../src/utilops.c:1845 ../src/utilops.c:1870
+#: ../src/utilops.c:1858 ../src/utilops.c:1883
 msgid "Overview of changed metadata"
 msgstr "Aperçu des méta-données modifiées"
 
-#: ../src/utilops.c:1863
+#: ../src/utilops.c:1876
 #, c-format
 msgid ""
 "The following metadata tags will be written to\n"
@@ -5275,100 +5427,100 @@ msgstr ""
 "Les méta-données suivantes seront écrites dans\n"
 "« %s »."
 
-#: ../src/utilops.c:1867
+#: ../src/utilops.c:1880
 #, c-format
 msgid "The following metadata tags will be written to the image file itself."
 msgstr "Les méta-données suivantes seront écrites dans le fichier de l'image."
 
-#: ../src/utilops.c:1972
+#: ../src/utilops.c:1986
 msgid "Delete files?"
 msgstr "Supprimer les fichiers ?"
 
-#: ../src/utilops.c:1973
+#: ../src/utilops.c:1987
 msgid "This will delete the following files"
 msgstr "Ceci supprimera les fichiers suivants"
 
-#: ../src/utilops.c:1992
+#: ../src/utilops.c:2006
 msgid "Can't write metadata"
 msgstr "Impossible d'écrire les méta-données"
 
-#: ../src/utilops.c:2015
+#: ../src/utilops.c:2029
 msgid "Write metadata"
 msgstr "Écrire les méta-données"
 
-#: ../src/utilops.c:2016
+#: ../src/utilops.c:2030
 msgid "Write metadata?"
 msgstr "Écrire les méta-données ?"
 
-#: ../src/utilops.c:2017
+#: ../src/utilops.c:2031
 msgid "This will write the changed metadata into the following files"
 msgstr "Cela écrira les méta-données modifiées dans les fichiers suivants"
 
-#: ../src/utilops.c:2019
-msgid "Metadata writting failed"
+#: ../src/utilops.c:2033
+msgid "Metadata writing failed"
 msgstr "Échec de l'écriture des méta-données"
 
-#: ../src/utilops.c:2038 ../src/utilops.c:2065
+#: ../src/utilops.c:2052 ../src/utilops.c:2079
 msgid "Move failed"
 msgstr "Échec du déplacement"
 
-#: ../src/utilops.c:2062
+#: ../src/utilops.c:2076
 msgid "Move files?"
 msgstr "Déplacer les fichiers ?"
 
-#: ../src/utilops.c:2063
+#: ../src/utilops.c:2077
 msgid "This will move the following files"
 msgstr "Ceci déplacera les fichiers suivants"
 
-#: ../src/utilops.c:2084 ../src/utilops.c:2111
+#: ../src/utilops.c:2101 ../src/utilops.c:2128
 msgid "Copy failed"
 msgstr "Échec de la copie"
 
-#: ../src/utilops.c:2108
+#: ../src/utilops.c:2125
 msgid "Copy files?"
 msgstr "Copier les fichiers ?"
 
-#: ../src/utilops.c:2109 ../src/utilops.c:2240
+#: ../src/utilops.c:2126 ../src/utilops.c:2260
 msgid "This will copy the following files"
 msgstr "Ceci copiera les fichiers suivants"
 
-#: ../src/utilops.c:2153 ../src/utilops.c:2616
+#: ../src/utilops.c:2170 ../src/utilops.c:2636
 msgid "Rename"
 msgstr "Renommer"
 
-#: ../src/utilops.c:2154
+#: ../src/utilops.c:2171
 msgid "Rename files?"
 msgstr "Renommer les fichiers ?"
 
-#: ../src/utilops.c:2155
+#: ../src/utilops.c:2172
 msgid "This will rename the following files"
 msgstr "Ceci renommera les fichiers suivants"
 
-#: ../src/utilops.c:2204
+#: ../src/utilops.c:2224
 msgid "Can't run external editor"
 msgstr "Ne peut exécuter l'éditeur externe."
 
-#: ../src/utilops.c:2238
+#: ../src/utilops.c:2258
 msgid "Editor"
 msgstr "Éditeur"
 
-#: ../src/utilops.c:2239
+#: ../src/utilops.c:2259
 msgid "Run editor?"
 msgstr "Exécuter l'éditeur ?"
 
-#: ../src/utilops.c:2242
+#: ../src/utilops.c:2262
 msgid "External command failed"
 msgstr "Échec de la commande externe"
 
-#: ../src/utilops.c:2411 ../src/utilops.c:2484
+#: ../src/utilops.c:2431 ../src/utilops.c:2504
 msgid "Delete folder"
 msgstr "Supprimer un dossier"
 
-#: ../src/utilops.c:2412
+#: ../src/utilops.c:2432
 msgid "Delete symbolic link?"
 msgstr "Supprimer le lien symbolique ?"
 
-#: ../src/utilops.c:2414
+#: ../src/utilops.c:2434
 msgid ""
 "This will delete the symbolic link.\n"
 "The folder this link points to will not be deleted."
@@ -5376,11 +5528,11 @@ msgstr ""
 "Cela supprimera le lien symbolique.\n"
 "Le dossier pointé par ce lien symbolique ne sera pas supprimé."
 
-#: ../src/utilops.c:2416
+#: ../src/utilops.c:2436
 msgid "Link deletion failed"
 msgstr "La suppression du lien a échoué"
 
-#: ../src/utilops.c:2426
+#: ../src/utilops.c:2446
 #, c-format
 msgid ""
 "Unable to remove folder %s\n"
@@ -5389,16 +5541,16 @@ msgstr ""
 "Impossible de supprimer le dossier %s\n"
 "Pas de permission pour l'écriture."
 
-#: ../src/utilops.c:2438 ../src/utilops.c:2495
+#: ../src/utilops.c:2458 ../src/utilops.c:2515
 #, c-format
 msgid "Unable to list contents of folder %s"
 msgstr "Impossible de lister le contenu du dossier %s"
 
-#: ../src/utilops.c:2452 ../src/utilops.c:2460
+#: ../src/utilops.c:2472 ../src/utilops.c:2480
 msgid "Folder contains subfolders"
 msgstr "Dossier contenant des sous-dossiers"
 
-#: ../src/utilops.c:2456
+#: ../src/utilops.c:2476
 #, c-format
 msgid ""
 "Unable to delete the folder:\n"
@@ -5414,19 +5566,19 @@ msgstr ""
 "Ce dossier contient des sous-dossiers qui doivent être déplacés avant sa "
 "suppression."
 
-#: ../src/utilops.c:2464
+#: ../src/utilops.c:2484
 msgid "Subfolders:"
 msgstr "Sous-dossiers :"
 
-#: ../src/utilops.c:2485
+#: ../src/utilops.c:2505
 msgid "Delete folder?"
 msgstr "Supprimer le dossier ?"
 
-#: ../src/utilops.c:2486
+#: ../src/utilops.c:2506
 msgid "The folder contains these files:"
 msgstr "Ce dossier contient ces fichiers :"
 
-#: ../src/utilops.c:2487
+#: ../src/utilops.c:2507
 msgid ""
 "This will delete the folder.\n"
 "The contents of this folder will also be deleted."
@@ -5434,87 +5586,87 @@ msgstr ""
 "Cela supprimera le dossier.\n"
 "Le contenu de ce dossier sera aussi supprimé."
 
-#: ../src/utilops.c:2617
+#: ../src/utilops.c:2637
 msgid "Rename folder?"
 msgstr "Renommer le dossier ?"
 
-#: ../src/utilops.c:2618
+#: ../src/utilops.c:2638
 msgid "The folder contains the following files"
 msgstr "Ce dossier contient les fichiers suivants"
 
-#: ../src/utilops.c:2664
+#: ../src/utilops.c:2684
 msgid "Create Folder"
 msgstr "Créer un dossier"
 
-#: ../src/utilops.c:2665
+#: ../src/utilops.c:2685
 msgid "Create folder?"
 msgstr "Créer un dossier ?"
 
-#: ../src/utilops.c:2668
+#: ../src/utilops.c:2688
 msgid "Can't create folder"
 msgstr "Impossible de créer le dossier"
 
-#: ../src/view_dir.c:396
+#: ../src/view_dir.c:397
 msgid "_Copy"
 msgstr "_Copier"
 
-#: ../src/view_dir.c:398
+#: ../src/view_dir.c:399
 msgid "_Move"
 msgstr "_Déplacer"
 
-#: ../src/view_dir.c:644
+#: ../src/view_dir.c:645
 msgid "_Up to parent"
 msgstr "_Remonter"
 
-#: ../src/view_dir.c:649
+#: ../src/view_dir.c:650
 msgid "_Slideshow"
 msgstr "_Diaporama"
 
-#: ../src/view_dir.c:651
+#: ../src/view_dir.c:652
 msgid "Slideshow recursive"
 msgstr "Diaporama récursif"
 
-#: ../src/view_dir.c:655
+#: ../src/view_dir.c:656
 msgid "Find _duplicates..."
 msgstr "Rechercher les _doublons..."
 
-#: ../src/view_dir.c:657
+#: ../src/view_dir.c:658
 msgid "Find duplicates recursive..."
 msgstr "Rechercher récursivement les doublons..."
 
-#: ../src/view_dir.c:662
+#: ../src/view_dir.c:663
 msgid "_New folder..."
 msgstr "_Nouveau dossier..."
 
-#: ../src/view_dir.c:676 ../src/view_file.c:606
+#: ../src/view_dir.c:677 ../src/view_file.c:619
 msgid "View as _List"
 msgstr "Vue en _Liste"
 
-#: ../src/view_dir.c:679
+#: ../src/view_dir.c:680
 msgid "View as _Tree"
 msgstr "Vue en _Arbre"
 
-#: ../src/view_dir.c:684
+#: ../src/view_dir.c:685
 msgid "Show _hidden files"
 msgstr "Montrer les fichiers cac_hés"
 
-#: ../src/view_dir.c:687 ../src/view_file.c:624
+#: ../src/view_dir.c:688 ../src/view_file.c:637
 msgid "Re_fresh"
 msgstr "Ra_fraîchir"
 
-#: ../src/view_file.c:609
+#: ../src/view_file.c:622
 msgid "View as _Icons"
 msgstr "Voir en _Icônes"
 
-#: ../src/view_file.c:615
+#: ../src/view_file.c:628
 msgid "Show _thumbnails"
 msgstr "Montrer les vigne_ttes"
 
-#: ../src/view_file_icon.c:2171 ../src/view_file_list.c:895
+#: ../src/view_file_icon.c:2197 ../src/view_file_list.c:892
 msgid " [NO GROUPING]"
 msgstr " [DÉGROUPÉ]"
 
-#: ../src/view_file_list.c:508
+#: ../src/view_file_list.c:505
 #, c-format
 msgid ""
 "Invalid file name:\n"
@@ -5523,14 +5675,26 @@ msgstr ""
 "Nom de fichier invalide :\n"
 "%s"
 
-#: ../src/view_file_list.c:509
+#: ../src/view_file_list.c:506
 msgid "Error renaming file"
 msgstr "Erreur lors du renommage du fichier"
 
-#: ../src/window.c:251
+#: ../src/window.c:252
 msgid "Help"
 msgstr "Aide"
 
+#~ msgid "None"
+#~ msgstr "Aucune"
+
+#~ msgid "Normal"
+#~ msgstr "Normale"
+
+#~ msgid "Best"
+#~ msgstr "Meilleure"
+
+#~ msgid "Dithering method:"
+#~ msgstr "Méthode de dithering :"
+
 #~ msgid "_Image Overlay"
 #~ msgstr "Aff_ichage en surimpression"
 
index e2eefb6..2ef5801 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -2,159 +2,364 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gqview 2.1.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-05-13 22:14+0200\n"
-"PO-Revision-Date: 2004-01-23 21:53+0100\n"
-"Last-Translator: Wit Wiliński <madman@linux.bydg.org>\n"
+"POT-Creation-Date: 2012-08-30 20:37+0200\n"
+"PO-Revision-Date: 2010-04-05 18:34+0100\n"
+"Last-Translator: Grzegorz Gibas <amigib@gmail.com>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/bar_exif.c:444
-msgid "Tag"
-msgstr "Znacznik"
+#: ../geeqie.desktop.in.h:1
+msgid "Geeqie"
+msgstr "Geeqie"
 
-#: src/bar_exif.c:445 src/dupe.c:2646 src/dupe.c:3167 src/print.c:3232
-#: src/search.c:2760 src/utilops.c:2971 src/view_file_list.c:1820
-msgid "Name"
-msgstr "Nazwa"
+#: ../geeqie.desktop.in.h:2
+msgid "Image Viewer"
+msgstr "Przeglądarka obrazków"
+
+#: ../geeqie.desktop.in.h:3
+msgid "View and manage images"
+msgstr "Wyświetl i zarządzaj obrazami"
+
+#: ../plugins/import/geeqie-import-geeqie.desktop.in.h:1
+msgid "Import Geeqie 1.0alphaX metadata"
+msgstr "Importuj metadane z Geeqie 1.0alphaX"
+
+#: ../plugins/import/geeqie-import-gqview.desktop.in.h:1
+msgid "Import GQView metadata"
+msgstr "Importuj metadane z GQView"
+
+#: ../plugins/rotate/rotate.desktop.in.h:1
+msgid "Apply the orientation to image content"
+msgstr "Zastosuj orientację do zawartości pliku"
+
+#: ../plugins/symlink/symlink.desktop.in.h:1
+msgid "Symlink"
+msgstr "Dowiązanie symboliczne"
+
+#: ../plugins/ufraw/geeqie-ufraw.desktop.in.h:1
+msgid "UFRaw Batch"
+msgstr ""
+
+#: ../plugins/ufraw/geeqie-ufraw-id.desktop.in.h:1
+msgid "Edit UFRaw ID file"
+msgstr ""
+
+#: ../plugins/ufraw/geeqie-ufraw-recursive.desktop.in.h:1
+msgid "UFRaw Batch recursive"
+msgstr ""
+
+#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1111
+#: ../src/preferences.c:93 ../src/preferences.c:1617
+msgid "Metadata"
+msgstr "Metadane"
+
+#: ../src/advanced_exif.c:376 ../src/preferences.c:1531
+msgid "Description"
+msgstr "Opis"
 
-#: src/bar_exif.c:446
+#: ../src/advanced_exif.c:377
 msgid "Value"
 msgstr "Wartość"
 
-#: src/bar_exif.c:447
+#: ../src/advanced_exif.c:378 ../src/desktop_file.c:515 ../src/dupe.c:2647
+#: ../src/dupe.c:3134 ../src/print.c:3199 ../src/search.c:2790
+#: ../src/utilops.c:462 ../src/view_file_list.c:1948
+msgid "Name"
+msgstr "Nazwa"
+
+#: ../src/advanced_exif.c:379
+msgid "Tag"
+msgstr "Znacznik"
+
+#: ../src/advanced_exif.c:380
 msgid "Format"
 msgstr "Format"
 
-#: src/bar_exif.c:448
+#: ../src/advanced_exif.c:381
 msgid "Elements"
 msgstr "Elementy"
 
-#: src/bar_exif.c:449 src/preferences.c:1131
-msgid "Description"
-msgstr "Opis"
+#. default sidebar
+#: ../src/bar.c:167
+msgid "Histogram"
+msgstr ""
+
+#: ../src/bar.c:168
+msgid "Title"
+msgstr "Tytuł"
+
+#: ../src/bar.c:169 ../src/search.c:2717
+msgid "Keywords"
+msgstr "Słowa kluczowe"
 
-#: src/bar_exif.c:576 src/info.c:125 src/preferences.c:1274
+#: ../src/bar.c:170 ../src/search.c:2729
+msgid "Comment"
+msgstr "Komentarz"
+
+#: ../src/bar.c:171
 msgid "Exif"
-msgstr ""
+msgstr "Exif"
 
-#: src/bar_exif.c:650
-msgid "Advanced view"
-msgstr "Widok zaawansowany"
+#. other pre-configured panes
+#: ../src/bar.c:173
+msgid "File info"
+msgstr "Informacje o pliku"
 
-#: src/bar_info.c:35
-msgid "Favorite"
-msgstr "Ulubione"
+#: ../src/bar.c:174
+msgid "Location and GPS"
+msgstr "Położenie i GPS"
 
-#: src/bar_info.c:36
-msgid "Todo"
-msgstr "Do zrobienia"
+#: ../src/bar.c:175 ../src/exif.c:348
+msgid "Copyright"
+msgstr "Prawa autorskie"
 
-#: src/bar_info.c:37
-msgid "People"
-msgstr "Ludzie"
+#: ../src/bar.c:178 ../src/bar_gps.c:763
+msgid "GPS Map"
+msgstr "Mapa GPS"
 
-#: src/bar_info.c:38
-msgid "Places"
-msgstr "Miejsca"
+#: ../src/bar.c:297
+msgid "Move to _top"
+msgstr "Przesuń w _górę"
 
-#: src/bar_info.c:39
-msgid "Art"
-msgstr "Sztuka"
+#: ../src/bar.c:298 ../src/ui_bookmark.c:407
+msgid "Move _up"
+msgstr "Przesuń w _górę"
 
-#: src/bar_info.c:40
-msgid "Nature"
-msgstr "Natura"
+#: ../src/bar.c:299 ../src/ui_bookmark.c:409
+msgid "Move _down"
+msgstr "Przesuń w _dół"
 
-#: src/bar_info.c:41
-msgid "Possessions"
-msgstr "Własności"
+#: ../src/bar.c:300
+msgid "Move to _bottom"
+msgstr "Przesuń w _dół"
 
-#: src/bar_info.c:801
-msgid "Keyword Presets"
-msgstr "Słowa kluczowe"
+#: ../src/bar.c:302
+msgid "Remove"
+msgstr "Usuń"
 
-#: src/bar_info.c:804
-msgid "Favorite keywords list"
-msgstr "Ulubione słowa kluczowe"
+#: ../src/bar_comment.c:195
+msgid "Add text to selected files"
+msgstr "Dodaj tekst do wybranych plików"
 
-#: src/bar_info.c:1301 src/info.c:189 src/search.c:2699
-msgid "Keywords"
-msgstr "Słowa kluczowe"
+#: ../src/bar_comment.c:196
+msgid "Replace existing text in selected files"
+msgstr "Zastąp istniejący tekst w zaznaczonych plikach"
 
-#: src/bar_info.c:1315 src/info.c:825 src/pan-view.c:1542 src/print.c:2632
-msgid "Filename:"
-msgstr "Nazwa pliku:"
+#: ../src/bar_exif.c:213
+msgid "<empty label, fixme>"
+msgstr ""
 
-#: src/bar_info.c:1316 src/info.c:391
-msgid "File date:"
-msgstr "Czas utworzenia pliku:"
+#: ../src/bar_exif.c:541 ../src/bar_exif.c:551
+#, fuzzy
+msgid "Configure entry"
+msgstr "Opcje konfiguracji"
 
-#: src/bar_info.c:1336
-msgid "Keywords:"
-msgstr "Słowa kluczowe:"
+#. for the pane
+#: ../src/bar_exif.c:541 ../src/bar_exif.c:551 ../src/bar_exif.c:624
+#, fuzzy
+msgid "Add entry"
+msgstr "_Dodaj zawartość"
 
-#: src/bar_info.c:1404
-msgid "Comment:"
-msgstr "Komentarz:"
+#: ../src/bar_exif.c:557
+#, fuzzy
+msgid "Key:"
+msgstr "Słowa kluczowe:"
 
-#: src/bar_info.c:1428
-msgid "Edit favorite keywords list."
-msgstr "Zmień listę słów kluczowych."
+#: ../src/bar_exif.c:566
+msgid "Title:"
+msgstr "Tytuł:"
 
-#: src/bar_info.c:1432
-msgid "Add keywords to selected files"
+#: ../src/bar_exif.c:575
+msgid "Show only if set"
 msgstr ""
 
-#: src/bar_info.c:1435
-msgid "Add keywords to selected files, replacing existing ones"
+#: ../src/bar_exif.c:576
+msgid "Editable (supported only for XMP)"
 msgstr ""
 
-#: src/bar_info.c:1438
+#. for the entry
+#: ../src/bar_exif.c:612
+#, fuzzy, c-format
+msgid "Configure \"%s\""
+msgstr "Opcje konfiguracji"
+
+#: ../src/bar_exif.c:613 ../src/bar_keywords.c:1187
+#, c-format
+msgid "Remove \"%s\""
+msgstr "Usuń \"%s\""
+
+#: ../src/bar_exif.c:625
 #, fuzzy
-msgid "Add comment to selected files"
+msgid "Show hidden entries"
+msgstr "Wyświetlanie ukrytych plików"
+
+#: ../src/bar_gps.c:485
+#, fuzzy, c-format
+msgid "Zoom %i"
+msgstr "Powiększ"
+
+#: ../src/bar_gps.c:503
+#, fuzzy, c-format
+msgid "Zoom level %i"
+msgstr "Powiększ"
+
+#: ../src/bar_gps.c:508
+msgid "Loading map"
+msgstr "Wczytywanie mapy"
+
+#: ../src/bar_gps.c:575
+msgid "Enable markers"
 msgstr ""
-"Usunięcie pliku:\n"
-" %s"
 
-#: src/bar_info.c:1441
-msgid "Add comment to selected files, replacing existing one"
+#: ../src/bar_gps.c:577
+msgid "Centre map on marker"
 msgstr ""
 
-#: src/bar_info.c:1446
-msgid "Save comment now"
-msgstr "Zapisz komentarz"
+#: ../src/bar_gps.c:600
+msgid ""
+"Move map centre to marker\n"
+" is disabled"
+msgstr ""
 
-#: src/bar_sort.c:218
-#, fuzzy, c-format
+#: ../src/bar_gps.c:605
 msgid ""
-"Unable to remove symbolic link:\n"
-"%s"
+"Move map centre to marker\n"
+" is enabled"
+msgstr ""
+
+#: ../src/bar_gps.c:614
+msgid "Map Centreing"
+msgstr ""
+
+#. use the same strings as in layout_util.c
+#: ../src/bar_histogram.c:249 ../src/layout_util.c:1411
+msgid "Histogram on _Red"
+msgstr ""
+
+#: ../src/bar_histogram.c:250 ../src/layout_util.c:1412
+msgid "Histogram on _Green"
+msgstr ""
+
+#: ../src/bar_histogram.c:251 ../src/layout_util.c:1413
+msgid "Histogram on _Blue"
 msgstr ""
-"Nie można przenieść pliku:\n"
-"%s\n"
-"do:\n"
-"%s"
 
-#: src/bar_sort.c:219
-msgid "Unlink failed"
+#: ../src/bar_histogram.c:252 ../src/layout_util.c:1414
+msgid "_Histogram on RGB"
+msgstr ""
+
+#: ../src/bar_histogram.c:253 ../src/layout_util.c:1415
+msgid "Histogram on _Value"
+msgstr ""
+
+#: ../src/bar_histogram.c:257 ../src/layout_util.c:1419
+msgid "Li_near Histogram"
+msgstr ""
+
+#: ../src/bar_histogram.c:258
+msgid "L_og Histogram"
+msgstr ""
+
+#: ../src/bar_keywords.c:401
+msgid "Add keywords to selected files"
+msgstr "Dodaj słowo kluczowe do zaznaczonych plików"
+
+#: ../src/bar_keywords.c:402
+msgid "Replace existing keywords in selected files"
+msgstr "Zastąp istniejące słowa kluczowa w zaznaczonych plikach"
+
+#: ../src/bar_keywords.c:873
+#, fuzzy
+msgid "Edit keyword"
+msgstr "Edytory"
+
+#: ../src/bar_keywords.c:873
+msgid "Add keywords"
+msgstr "Dodaj słowa kluczowe"
+
+#: ../src/bar_keywords.c:880
+#, fuzzy
+msgid "Configure keyword"
+msgstr "Opcje konfiguracji"
+
+#: ../src/bar_keywords.c:880 ../src/bar_keywords.c:1141
+msgid "Add keyword"
+msgstr "Dodaj słowo kluczowe"
+
+#: ../src/bar_keywords.c:886
+msgid "Keyword:"
+msgstr "Słowo kluczowe:"
+
+#: ../src/bar_keywords.c:895
+#, fuzzy
+msgid "Keyword type:"
+msgstr "Słowa kluczowe:"
+
+#: ../src/bar_keywords.c:897
+#, fuzzy
+msgid "Active keyword"
+msgstr "Aktywny monitor"
+
+#: ../src/bar_keywords.c:900
+#, fuzzy
+msgid "Helper"
+msgstr "Pomo_c"
+
+#: ../src/bar_keywords.c:1145
+#, fuzzy
+msgid "Add keyword to all selected images"
+msgstr "Dodaj słowo kluczowe do zaznaczonych plików"
+
+#: ../src/bar_keywords.c:1165
+#, c-format
+msgid "Hide \"%s\""
 msgstr ""
 
-#: src/bar_sort.c:300
+#: ../src/bar_keywords.c:1172
 #, fuzzy, c-format
-msgid ""
-"Unable to create symbolic link:\n"
-"%s"
+msgid "Mark %d"
+msgstr "Dodanie zakładki"
+
+#: ../src/bar_keywords.c:1177
+#, c-format
+msgid "Connect \"%s\" to mark"
+msgstr ""
+
+#: ../src/bar_keywords.c:1184
+#, c-format
+msgid "Edit \"%s\""
+msgstr "Edytuj \"%s\""
+
+#: ../src/bar_keywords.c:1194
+#, c-format
+msgid "Disconnect \"%s\" from mark %s"
+msgstr ""
+
+#. for the pane
+#: ../src/bar_keywords.c:1206 ../src/bar_keywords.c:1215
+msgid "Expand checked"
+msgstr ""
+
+#: ../src/bar_keywords.c:1207 ../src/bar_keywords.c:1216
+msgid "Collapse unchecked"
 msgstr ""
-"Błąd tworzenia katalogu:\n"
-"%s"
 
-#: src/bar_sort.c:301
-msgid "Link failed"
+#: ../src/bar_keywords.c:1208 ../src/bar_keywords.c:1217
+msgid "Hide unchecked"
 msgstr ""
 
-#: src/bar_sort.c:452
+#: ../src/bar_keywords.c:1209
+msgid "Show all"
+msgstr "Pokaż wszystko"
+
+#: ../src/bar_keywords.c:1212
+msgid "On any change"
+msgstr ""
+
+#: ../src/bar_sort.c:449
 #, c-format
 msgid ""
 "The collection:\n"
@@ -165,11 +370,11 @@ msgstr ""
 "%s\n"
 "już istnieje."
 
-#: src/bar_sort.c:453
+#: ../src/bar_sort.c:450
 msgid "Collection exists"
 msgstr "Kolekcja istnieje"
 
-#: src/bar_sort.c:467 src/collect.c:1083 src/collect-dlg.c:85
+#: ../src/bar_sort.c:464 ../src/collect.c:1034 ../src/collect-dlg.c:85
 #, c-format
 msgid ""
 "Failed to save the collection:\n"
@@ -178,136 +383,132 @@ msgstr ""
 "Zapisanie kolekcji nie powiodło się:\n"
 "%s"
 
-#: src/bar_sort.c:468 src/collect.c:1084 src/collect-dlg.c:86
+#: ../src/bar_sort.c:465 ../src/collect.c:1035 ../src/collect-dlg.c:86
 msgid "Save Failed"
 msgstr "Zapis nie powiódł się"
 
-#: src/bar_sort.c:502 src/bar_sort.c:628
+#: ../src/bar_sort.c:500 ../src/bar_sort.c:670
 msgid "Add Bookmark"
 msgstr "Dodanie zakładki"
 
-#: src/bar_sort.c:506
+#: ../src/bar_sort.c:504
 msgid "Add Collection"
 msgstr "Dodaj kolekcję"
 
-#: src/bar_sort.c:523 src/ui_bookmark.c:601
+#: ../src/bar_sort.c:521 ../src/ui_bookmark.c:288
 msgid "Name:"
 msgstr "Nazwa:"
 
-#: src/bar_sort.c:585
+#: ../src/bar_sort.c:597
 msgid "Sort Manager"
 msgstr "Menedżer Sortowania"
 
-#: src/bar_sort.c:594 src/pan-view.c:2395 src/ui_pathsel.c:1103
+#: ../src/bar_sort.c:606 ../src/pan-view.c:2194 ../src/ui_pathsel.c:1097
 msgid "Folders"
 msgstr "Katalogi"
 
-#: src/bar_sort.c:595 src/main.c:567
+#: ../src/bar_sort.c:607 ../src/options.c:147
 msgid "Collections"
 msgstr "Kolekcje"
 
-#: src/bar_sort.c:603 src/utilops.c:1177
+#: ../src/bar_sort.c:615 ../src/utilops.c:2122
 msgid "Copy"
 msgstr "Skopiuj"
 
-#: src/bar_sort.c:606 src/utilops.c:1191
+#: ../src/bar_sort.c:618 ../src/utilops.c:2073
 msgid "Move"
 msgstr "Przenieś"
 
-#: src/bar_sort.c:609
-msgid "Link"
-msgstr ""
-
-#: src/bar_sort.c:615
+#: ../src/bar_sort.c:657
 msgid "Add image"
 msgstr "Dodaj obraz"
 
-#: src/bar_sort.c:618
+#: ../src/bar_sort.c:660
 msgid "Add selection"
 msgstr "Dodaj zaznaczone"
 
-#: src/bar_sort.c:631
+#: ../src/bar_sort.c:673
 msgid "Undo last image"
 msgstr "Cofnij ostatni obraz"
 
-#: src/cache.c:175
+#: ../src/cache.c:174
 #, fuzzy, c-format
 msgid ""
 "error saving sim cache data: %s\n"
 "error: %s\n"
 msgstr "błąd przy zapisie pliku konfiguracyjnego: %s\n"
 
-#: src/cache_maint.c:127 src/cache_maint.c:689 src/cache_maint.c:902
-#: src/editors.c:717
+#: ../src/cache_maint.c:110 ../src/cache_maint.c:549 ../src/cache_maint.c:765
+#: ../src/editors.c:1177
 msgid "done"
 msgstr "ukończono"
 
-#: src/cache_maint.c:306
+#: ../src/cache_maint.c:288
 msgid "Removing old metadata..."
 msgstr "Usuwanie starych metadanych..."
 
-#: src/cache_maint.c:310
+#: ../src/cache_maint.c:292
 msgid "Clearing cached thumbnails..."
 msgstr "Czyszczenie cache miniatur..."
 
-#: src/cache_maint.c:314 src/cache_maint.c:1056
+#: ../src/cache_maint.c:296 ../src/cache_maint.c:923
 msgid "Removing old thumbnails..."
 msgstr "Usuwanie starych miniatur..."
 
-#: src/cache_maint.c:317 src/cache_maint.c:1059
+#: ../src/cache_maint.c:299 ../src/cache_maint.c:926
 msgid "Maintenance"
 msgstr ""
 
-#: src/cache_maint.c:800 src/utilops.c:1107
+#: ../src/cache_maint.c:660
 msgid "Invalid folder"
 msgstr "Nieprawidłowy folder"
 
-#: src/cache_maint.c:801
+#: ../src/cache_maint.c:661
 msgid "The specified folder can not be found."
 msgstr "Wybrany folder nie został znaleziony."
 
-#: src/cache_maint.c:829 src/cache_maint.c:843 src/cache_maint.c:1227
+#: ../src/cache_maint.c:692 ../src/cache_maint.c:706 ../src/cache_maint.c:1102
 msgid "Create thumbnails"
 msgstr "Utwórz miniaturki"
 
-#: src/cache_maint.c:837 src/cache_maint.c:1066
+#: ../src/cache_maint.c:700 ../src/cache_maint.c:933
 msgid "S_tart"
 msgstr ""
 
-#: src/cache_maint.c:850 src/preferences.c:1407
+#: ../src/cache_maint.c:713 ../src/preferences.c:1804
 msgid "Folder:"
 msgstr "Katalog:"
 
-#: src/cache_maint.c:853
+#: ../src/cache_maint.c:716
 msgid "Select folder"
 msgstr "Wybierz katalog"
 
-#: src/cache_maint.c:857
+#: ../src/cache_maint.c:720
 msgid "Include subfolders"
 msgstr "Dołącz podkatalogi"
 
-#: src/cache_maint.c:858
+#: ../src/cache_maint.c:721
 msgid "Store thumbnails local to source images"
 msgstr "Zapisuj miniaturki lokalnie"
 
-#: src/cache_maint.c:867 src/cache_maint.c:1075
+#: ../src/cache_maint.c:730 ../src/cache_maint.c:942
 msgid "click start to begin"
 msgstr "kliknij start, aby rozpocząć"
 
-#: src/cache_maint.c:1005 src/editors.c:647
+#: ../src/cache_maint.c:869 ../src/editors.c:1103
 msgid "running..."
 msgstr "przetwarzanie..."
 
-#: src/cache_maint.c:1051
+#: ../src/cache_maint.c:918
 msgid "Clearing thumbnails..."
 msgstr "Czyszczenie miniatur..."
 
-#: src/cache_maint.c:1117 src/cache_maint.c:1120 src/cache_maint.c:1202
-#: src/cache_maint.c:1222
+#: ../src/cache_maint.c:984 ../src/cache_maint.c:987 ../src/cache_maint.c:1080
+#: ../src/cache_maint.c:1097
 msgid "Clear cache"
 msgstr "Wyczyść cache"
 
-#: src/cache_maint.c:1121
+#: ../src/cache_maint.c:988
 msgid ""
 "This will remove all thumbnails that have\n"
 "been saved to disk, continue?"
@@ -315,164 +516,73 @@ msgstr ""
 "Zostaną usunięte wszystkie miniaturki\n"
 "zapisane na dysku, kontynuować?"
 
-#: src/cache_maint.c:1172
-#, fuzzy
+#: ../src/cache_maint.c:1030
+#, c-format
+msgid "Location: %s"
+msgstr "Położenie: %s"
+
+#: ../src/cache_maint.c:1055
 msgid "Cache Maintenance"
-msgstr "Zarządzanie miniaturkami - Geeqie"
+msgstr "Zarządzanie buforem miniaturek"
 
-#: src/cache_maint.c:1184
+#: ../src/cache_maint.c:1065
 msgid "Cache and Data Maintenance"
 msgstr "Zarządzanie cache i danymi"
 
-#: src/cache_maint.c:1188
-#, fuzzy
+#: ../src/cache_maint.c:1069
 msgid "Thumbnail cache"
-msgstr "Cache miniaturek Geeqie"
-
-#: src/cache_maint.c:1190 src/cache_maint.c:1210 src/cache_maint.c:1238
-#: src/pan-view.c:1544 src/pan-view.c:2384 src/preferences.c:1333
-#: src/utilops.c:1747
-msgid "Location:"
-msgstr "Położenie:"
+msgstr "Bufor miniaturek"
 
-#: src/cache_maint.c:1197 src/cache_maint.c:1217 src/cache_maint.c:1245
+#: ../src/cache_maint.c:1075 ../src/cache_maint.c:1092
+#: ../src/cache_maint.c:1117
 msgid "Clean up"
 msgstr "Wyczyść"
 
-#: src/cache_maint.c:1200 src/cache_maint.c:1220
+#: ../src/cache_maint.c:1078 ../src/cache_maint.c:1095
 msgid "Remove orphaned or outdated thumbnails."
 msgstr "Usuń porzucone lub przestarzałe miniaturki."
 
-#: src/cache_maint.c:1205 src/cache_maint.c:1225
+#: ../src/cache_maint.c:1083 ../src/cache_maint.c:1100
 msgid "Delete all cached thumbnails."
 msgstr "Skasuj wszystkie miniaturki z cache"
 
-#: src/cache_maint.c:1208
+#: ../src/cache_maint.c:1086
 msgid "Shared thumbnail cache"
 msgstr "Wspołdzielone cache miniaturek"
 
-#: src/cache_maint.c:1231
+#: ../src/cache_maint.c:1106
 msgid "Render"
 msgstr "Utwórz"
 
-#: src/cache_maint.c:1234
+#: ../src/cache_maint.c:1109
 msgid "Render thumbnails for a specific folder."
 msgstr "Utwórz miniaturki dla wybranego katalogu."
 
-#: src/cache_maint.c:1236
-msgid "Metadata"
-msgstr "Metadane"
-
-#: src/cache_maint.c:1248
+#: ../src/cache_maint.c:1120
 msgid "Remove orphaned keywords and comments."
 msgstr "Usuń porzucone/przestarzałe słowa kluczowe i komentarze."
 
-#: src/cellrenderericon.c:127
-msgid "Pixbuf Object"
-msgstr ""
-
-#: src/cellrenderericon.c:128
-msgid "The pixbuf to render"
-msgstr ""
-
-#: src/cellrenderericon.c:135 src/print.c:3439
-msgid "Text"
-msgstr "Tekst"
-
-#: src/cellrenderericon.c:136
-msgid "Text to render"
-msgstr ""
-
-#: src/cellrenderericon.c:143
-#, fuzzy
-msgid "Background color"
-msgstr "Czarne tło"
-
-#: src/cellrenderericon.c:144
-#, fuzzy
-msgid "Background color as a GdkColor"
-msgstr "Czarne tło"
-
-#: src/cellrenderericon.c:151
-#, fuzzy
-msgid "Foreground color"
-msgstr "Czarne tło"
-
-#: src/cellrenderericon.c:152
-msgid "Foreground color as a GdkColor"
-msgstr ""
-
-#: src/cellrenderericon.c:159
-msgid "Focus"
-msgstr ""
-
-#: src/cellrenderericon.c:160
-msgid "Draw focus indicator"
-msgstr ""
-
-#: src/cellrenderericon.c:167
-msgid "Fixed width"
-msgstr ""
-
-#: src/cellrenderericon.c:168
-msgid "Width of cell"
-msgstr ""
-
-#: src/cellrenderericon.c:176
-msgid "Fixed height"
-msgstr ""
-
-#: src/cellrenderericon.c:177
-msgid "Height of icon excluding text"
-msgstr ""
-
-#: src/cellrenderericon.c:185
-#, fuzzy
-msgid "Background set"
-msgstr "Czarne tło"
-
-#: src/cellrenderericon.c:186
-msgid "Whether this tag affects the background color"
-msgstr ""
-
-#: src/cellrenderericon.c:193
-msgid "Foreground set"
-msgstr ""
-
-#: src/cellrenderericon.c:194
-msgid "Whether this tag affects the foreground color"
-msgstr ""
-
-#: src/cellrenderericon.c:201
-#, fuzzy
-msgid "Show text"
-msgstr "Pokaż nazwę pliku"
-
-#: src/cellrenderericon.c:202
-msgid "Whether the text is displayed"
-msgstr ""
-
-#: src/collect.c:353 src/image.c:178 src/image-overlay.c:437
-#: src/image-overlay.c:512
-#, c-format
+#. When does this occur ??
+#: ../src/collect.c:326 ../src/image.c:160 ../src/image-overlay.c:511
+#: ../src/image-overlay.c:588
 msgid "Untitled"
 msgstr "BezNazwy"
 
-#: src/collect.c:357
+#: ../src/collect.c:330
 #, c-format
 msgid "Untitled (%d)"
 msgstr "BezNazwy (%d)"
 
-#: src/collect.c:1002
-#, fuzzy, c-format
+#: ../src/collect.c:959
+#, c-format
 msgid "%s - Collection - %s"
-msgstr "%s - Kolekcja Geeqie"
+msgstr "%s - Kolekcja - %s"
 
-#: src/collect.c:1120 src/collect.c:1124
+#: ../src/collect.c:1071 ../src/collect.c:1075
 msgid "Close collection"
 msgstr "Zamknij kolekcję"
 
-#: src/collect.c:1125
+#: ../src/collect.c:1076
 msgid ""
 "Collection has been modified.\n"
 "Save first?"
@@ -480,11 +590,11 @@ msgstr ""
 "Kolekcja została zmodyfikowana.\n"
 "Czy najpierw zapisać?"
 
-#: src/collect.c:1128
+#: ../src/collect.c:1079
 msgid "_Discard"
 msgstr "Pomiń"
 
-#: src/collect-dlg.c:59
+#: ../src/collect-dlg.c:59
 #, c-format
 msgid ""
 "Specified path:\n"
@@ -492,387 +602,445 @@ msgid ""
 "is a folder, collections are files"
 msgstr ""
 
-#: src/collect-dlg.c:60
+#: ../src/collect-dlg.c:60
 msgid "Invalid filename"
 msgstr "Niepoprawna nazwa pliku"
 
-#: src/collect-dlg.c:69
+#: ../src/collect-dlg.c:69
 msgid "Overwrite File"
 msgstr "Nadpisanie Pliku"
 
-#: src/collect-dlg.c:74
+#: ../src/collect-dlg.c:74
 msgid "Overwrite existing file?"
 msgstr "Nadpisać instniejący plik?"
 
-#: src/collect-dlg.c:76 src/utilops.c:660 src/utilops.c:990 src/utilops.c:1902
-#: src/utilops.c:2622
+#: ../src/collect-dlg.c:76
 msgid "_Overwrite"
 msgstr "Nadpisz"
 
-#: src/collect-dlg.c:171
+#: ../src/collect-dlg.c:127
+#, c-format
+msgid "No such file '%s'."
+msgstr "Plik '%s' nie istnieje."
+
+#: ../src/collect-dlg.c:132
+#, c-format
+msgid "'%s' is a directory, not a collection file."
+msgstr ""
+
+#: ../src/collect-dlg.c:137
+#, c-format
+msgid "You do not have read permissions on the file '%s'."
+msgstr "Nie masz uprawnień by zapisywać do pliku '%s'."
+
+#: ../src/collect-dlg.c:143
+msgid "Can not open collection file"
+msgstr "Nie mogę utworzyć kolekcji"
+
+#: ../src/collect-dlg.c:195
 msgid "Save collection"
 msgstr "Zapisz kolekcję"
 
-#: src/collect-dlg.c:178
+#: ../src/collect-dlg.c:202
 msgid "Open collection"
 msgstr "Otwarcie kolekcji"
 
-#: src/collect-dlg.c:186
+#: ../src/collect-dlg.c:210
 msgid "Append collection"
 msgstr "Dołącz kolekcji"
 
-#: src/collect-dlg.c:187
+#: ../src/collect-dlg.c:211
 msgid "_Append"
 msgstr "Dołącz"
 
-#: src/collect-dlg.c:205
+#: ../src/collect-dlg.c:228
 msgid "Collection Files"
 msgstr "Pliki kolekcji"
 
-#: src/collect-dlg.c:223
-msgid "Collection empty"
-msgstr "Pusta kolekcja"
-
-#: src/collect-dlg.c:224
-msgid "The current collection is empty, save aborted."
-msgstr "Bieżąca kolekcja jest pusta, zrezygnowano z zapisu."
-
-#: src/collect-io.c:343
-#, fuzzy, c-format
+#: ../src/collect-io.c:346
+#, c-format
 msgid "failed to open collection (write) \"%s\"\n"
-msgstr ""
-"Zapisanie kolekcji nie powiodło się:\n"
-"%s"
+msgstr "Otworzenie (zapisanie) kolekcji nie powiodło się \"%s\"\n"
 
-#: src/collect-io.c:368
-#, fuzzy, c-format
+#: ../src/collect-io.c:371
+#, c-format
 msgid ""
 "error saving collection file: %s\n"
 "error: %s\n"
-msgstr "błąd przy zapisie pliku konfiguracyjnego: %s\n"
-
-#: src/collect-table.c:167 src/layout.c:377 src/layout_util.c:965
-msgid "Empty"
-msgstr "Pusta"
+msgstr ""
+"błąd przy zapisie pliku kolekcji: %s\n"
+"błąd: %s\n"
 
-#: src/collect-table.c:171
+#: ../src/collect-table.c:211
 #, c-format
-msgid "%d images (%d)"
-msgstr "%d obrazów (%d)"
+msgid "%s, %d images (%s, %d)"
+msgstr "%s, %d plików (%s, %d)"
 
-#: src/collect-table.c:175
+#: ../src/collect-table.c:218
 #, c-format
-msgid "%d images"
-msgstr "%d obrazów"
+msgid "%s, %d images"
+msgstr "%s, %d obrazów"
+
+#: ../src/collect-table.c:223 ../src/layout_util.c:1211
+#: ../src/layout_util.c:2264
+msgid "Empty"
+msgstr "Pusta"
 
-#: src/collect-table.c:189 src/dupe.c:1328 src/search.c:304
-#: src/view_file_icon.c:1779 src/view_file_icon.c:1895
-#: src/view_file_list.c:915 src/view_file_list.c:1031
+#: ../src/collect-table.c:237 ../src/dupe.c:1319 ../src/search.c:320
+#: ../src/view_file.c:835 ../src/view_file.c:938
 msgid "Loading thumbs..."
 msgstr "Wczytywanie miniatur..."
 
-#: src/collect-table.c:776 src/dupe.c:2239 src/dupe.c:2554
-#: src/layout_util.c:1042 src/search.c:983
+#: ../src/collect-table.c:868 ../src/dupe.c:2242 ../src/dupe.c:2555
+#: ../src/layout_util.c:1258 ../src/search.c:996
 msgid "_View"
 msgstr "_Podgląd"
 
-#: src/collect-table.c:778 src/dupe.c:2241 src/dupe.c:2556 src/img-view.c:1282
-#: src/layout_image.c:759 src/pan-view.c:2814 src/search.c:985
-#: src/view_file.c:564
+#: ../src/collect-table.c:870 ../src/dupe.c:2244 ../src/dupe.c:2557
+#: ../src/img-view.c:1268 ../src/layout_image.c:499 ../src/pan-view.c:2617
+#: ../src/search.c:998 ../src/view_file.c:588
 msgid "View in _new window"
 msgstr "Podgląd w _nowym oknie"
 
-#: src/collect-table.c:781 src/dupe.c:2274 src/dupe.c:2564 src/search.c:1014
+#: ../src/collect-table.c:873 ../src/dupe.c:2278 ../src/dupe.c:2565
+#: ../src/search.c:1028
 msgid "Rem_ove"
 msgstr "_Usuń"
 
-#: src/collect-table.c:784
+#: ../src/collect-table.c:876
 msgid "Append from file list"
 msgstr "Dołącz z listy plików"
 
-#: src/collect-table.c:786
+#: ../src/collect-table.c:878
 msgid "Append from collection..."
 msgstr "Dołącz z kolekcji..."
 
-#: src/collect-table.c:789 src/dupe.c:2244 src/dupe.c:2559 src/search.c:988
+#: ../src/collect-table.c:882
+msgid "_Selection"
+msgstr "Zaznaczenie"
+
+#: ../src/collect-table.c:884 ../src/dupe.c:2247 ../src/dupe.c:2560
+#: ../src/layout_util.c:1305 ../src/search.c:1001
 msgid "Select all"
 msgstr "Zaznacz wszystko"
 
-#: src/collect-table.c:791 src/dupe.c:2246 src/dupe.c:2561 src/search.c:990
+#: ../src/collect-table.c:886 ../src/dupe.c:2249 ../src/dupe.c:2562
+#: ../src/layout_util.c:1306 ../src/search.c:1003
 msgid "Select none"
 msgstr "Wyczyść zaznaczenie"
 
-#: src/collect-table.c:799 src/dupe.c:2255 src/img-view.c:1280
-#: src/layout_image.c:756 src/layout_util.c:1096 src/pan-view.c:2811
-#: src/search.c:995 src/view_file.c:562
-msgid "_Properties"
-msgstr "Wł_aściwości"
+#: ../src/collect-table.c:888
+msgid "Invert selection"
+msgstr "Odwróć zaznaczenie"
 
-#: src/collect-table.c:802 src/dupe.c:2262 src/img-view.c:1286
-#: src/layout_image.c:767 src/layout_util.c:1067 src/pan-view.c:2818
-#: src/search.c:1002 src/view_file.c:568
+#: ../src/collect-table.c:900 ../src/dupe.c:2267 ../src/img-view.c:1272
+#: ../src/layout_image.c:507 ../src/layout_util.c:1288 ../src/pan-view.c:2621
+#: ../src/search.c:1017 ../src/view_file.c:592
 msgid "_Copy..."
 msgstr "_Kopiuj..."
 
-#: src/collect-table.c:804 src/dupe.c:2264 src/img-view.c:1287
-#: src/layout_image.c:769 src/layout_util.c:1068 src/pan-view.c:2820
-#: src/search.c:1004 src/view_file.c:570
+#: ../src/collect-table.c:902 ../src/dupe.c:2269 ../src/img-view.c:1273
+#: ../src/layout_image.c:509 ../src/layout_util.c:1289 ../src/pan-view.c:2623
+#: ../src/search.c:1019 ../src/view_file.c:594
 msgid "_Move..."
 msgstr "P_rzenieś..."
 
-#: src/collect-table.c:806 src/dupe.c:2266 src/img-view.c:1288
-#: src/layout_image.c:771 src/layout_util.c:1069 src/pan-view.c:2822
-#: src/search.c:1006 src/view_dir.c:608 src/view_file.c:572
+#: ../src/collect-table.c:904 ../src/dupe.c:2271 ../src/img-view.c:1274
+#: ../src/layout_image.c:511 ../src/layout_util.c:1290 ../src/pan-view.c:2625
+#: ../src/search.c:1021 ../src/view_dir.c:665 ../src/view_file.c:596
 msgid "_Rename..."
 msgstr "Zm_ień nazwę..."
 
-#: src/collect-table.c:808 src/dupe.c:2268 src/img-view.c:1289
-#: src/layout_image.c:773 src/layout_util.c:1070 src/layout_util.c:1071
-#: src/layout_util.c:1072 src/pan-view.c:2824 src/search.c:1008
-#: src/view_dir.c:610 src/view_file.c:574
+#: ../src/collect-table.c:906 ../src/dupe.c:2273 ../src/img-view.c:1275
+#: ../src/layout_image.c:513 ../src/layout_util.c:1291
+#: ../src/layout_util.c:1292 ../src/layout_util.c:1293 ../src/pan-view.c:2627
+#: ../src/search.c:1023 ../src/view_dir.c:667 ../src/view_file.c:598
 msgid "_Delete..."
 msgstr "_Usuń..."
 
-#: src/collect-table.c:811 src/dupe.c:2271 src/img-view.c:1291
-#: src/layout_image.c:778 src/layout_util.c:1073 src/pan-view.c:2827
-#: src/search.c:1011 src/view_dir.c:614 src/view_file.c:577
-#, fuzzy
+#: ../src/collect-table.c:908 ../src/dupe.c:2275 ../src/img-view.c:1276
+#: ../src/layout_image.c:516 ../src/pan-view.c:2629 ../src/search.c:1025
+#: ../src/view_dir.c:670 ../src/view_file.c:600
 msgid "_Copy path"
-msgstr "S_kopiuj"
+msgstr "S_kopiuj ścieżkę"
+
+#: ../src/collect-table.c:914
+msgid "Randomize"
+msgstr "Losowo"
 
-#: src/collect-table.c:816 src/view_file.c:601
+#: ../src/collect-table.c:916 ../src/view_file.c:616
+msgid "_Sort"
+msgstr "_Uporządkuj"
+
+#: ../src/collect-table.c:919 ../src/view_file.c:632
 msgid "Show filename _text"
 msgstr "Pokaż nazwę pliku"
 
-#: src/collect-table.c:819
+#: ../src/collect-table.c:922
 msgid "_Save collection"
 msgstr "_Zapisz kolekcję"
 
-#: src/collect-table.c:821
+#: ../src/collect-table.c:924
 msgid "Save collection _as..."
 msgstr "Zapisz kolekcję jako..."
 
-#: src/collect-table.c:824 src/layout_util.c:1063
+#: ../src/collect-table.c:927 ../src/layout_util.c:1284
 msgid "_Find duplicates..."
 msgstr "Wyszukaj duplikaty..."
 
-#: src/collect-table.c:826 src/dupe.c:2259 src/search.c:999
+#: ../src/collect-table.c:929 ../src/dupe.c:2264 ../src/layout_util.c:1286
+#: ../src/search.c:1014
 msgid "Print..."
 msgstr "Drukuj..."
 
-#: src/collect-table.c:1978 src/dupe.c:3355 src/img-view.c:1445
+#: ../src/collect-table.c:2094 ../src/dupe.c:3324 ../src/img-view.c:1430
 msgid "Dropped list includes folders."
 msgstr ""
 
-#: src/collect-table.c:1980 src/dupe.c:3357 src/img-view.c:1447
+#: ../src/collect-table.c:2096 ../src/dupe.c:3326 ../src/img-view.c:1432
 msgid "_Add contents"
 msgstr "_Dodaj zawartość"
 
-#: src/collect-table.c:1982 src/dupe.c:3358 src/img-view.c:1448
+#: ../src/collect-table.c:2098 ../src/dupe.c:3327 ../src/img-view.c:1433
 msgid "Add contents _recursive"
 msgstr "Dodaj zawartość _rekurencyjnie"
 
-#: src/collect-table.c:1984 src/dupe.c:3359 src/img-view.c:1449
+#: ../src/collect-table.c:2100 ../src/dupe.c:3328 ../src/img-view.c:1434
 msgid "_Skip folders"
 msgstr "Pomiń katalogi"
 
-#: src/collect-table.c:1987 src/dupe.c:3361 src/img-view.c:1451
-#: src/view_dir.c:343
+#: ../src/collect-table.c:2103 ../src/dupe.c:3330 ../src/img-view.c:1436
+#: ../src/view_dir.c:417
 msgid "Cancel"
 msgstr "Anuluj"
 
-#: src/dupe.c:99
-msgid "Drop files to compare them."
-msgstr "Upuść pliki, aby je porównać."
+#: ../src/color-man.c:426 ../src/exif.c:233 ../src/exif-common.c:436
+msgid "sRGB"
+msgstr ""
 
-#: src/dupe.c:103
-#, c-format
-msgid "%d files"
-msgstr "%d plików"
+#: ../src/color-man.c:428
+msgid "Adobe RGB compatible"
+msgstr ""
 
-#: src/dupe.c:107
-#, c-format
-msgid "%d matches found in %d files"
-msgstr "%d wystąpień w %d plikach"
+#: ../src/color-man.c:443
+msgid "Custom profile"
+msgstr "Własne profile"
 
-#: src/dupe.c:112
-msgid "[set 1]"
-msgstr "[zbiór 1]"
+#: ../src/desktop_file.c:74 ../src/desktop_file.c:86 ../src/desktop_file.c:92
+msgid "Can't save"
+msgstr "Nie można zapisać"
 
-#: src/dupe.c:1454
-msgid "Reading checksums..."
-msgstr "Odczytywanie sum kontrolnych..."
+#: ../src/desktop_file.c:74
+msgid "Please specify file name."
+msgstr "Proszę określić nazwę pliku."
 
-#: src/dupe.c:1487
-msgid "Reading dimensions..."
-msgstr "Odczytywanie wymiarów"
+#: ../src/desktop_file.c:86
+msgid "Could not create directory"
+msgstr "Nie można utworzyć katalogu"
+
+#: ../src/desktop_file.c:182 ../src/desktop_file.c:534
+#, fuzzy
+msgid "Desktop file"
+msgstr "Pulpit"
+
+#: ../src/desktop_file.c:291 ../src/ui_pathsel.c:485
+#, c-format
+msgid ""
+"Unable to delete file:\n"
+"%s"
+msgstr ""
+"Nie można usunąć pliku:\n"
+"%s"
+
+#: ../src/desktop_file.c:292 ../src/ui_pathsel.c:486 ../src/utilops.c:1960
+#: ../src/utilops.c:1987 ../src/utilops.c:2507
+msgid "File deletion failed"
+msgstr "Usunięcie pliku nie powiodło się"
+
+#: ../src/desktop_file.c:336 ../src/desktop_file.c:344 ../src/ui_pathsel.c:528
+#: ../src/ui_pathsel.c:536
+msgid "Delete file"
+msgstr "Usuń plik"
+
+#: ../src/desktop_file.c:342 ../src/ui_pathsel.c:534
+#, c-format
+msgid ""
+"About to delete the file:\n"
+" %s"
+msgstr ""
+"Usunięcie pliku:\n"
+" %s"
+
+#: ../src/desktop_file.c:374
+#, fuzzy
+msgid "new.desktop"
+msgstr "Pulpit"
+
+#: ../src/desktop_file.c:453
+msgid "Editors"
+msgstr "Edytory"
 
-#: src/dupe.c:1521
+#: ../src/desktop_file.c:524
+msgid "Hidden"
+msgstr "Ukryty"
+
+#: ../src/desktop_file.c:543 ../src/dupe.c:2653 ../src/dupe.c:3138
+#: ../src/print.c:3201 ../src/search.c:2794 ../src/ui_pathsel.c:1109
+#: ../src/utilops.c:458
+msgid "Path"
+msgstr "Ścieżka"
+
+#: ../src/dupe.c:100
+msgid "Drop files to compare them."
+msgstr "Upuść pliki, aby je porównać."
+
+#: ../src/dupe.c:104
+#, c-format
+msgid "%d files"
+msgstr "%d plików"
+
+#: ../src/dupe.c:108
+#, c-format
+msgid "%d matches found in %d files"
+msgstr "%d wystąpień w %d plikach"
+
+#: ../src/dupe.c:113
+msgid "[set 1]"
+msgstr "[zbiór 1]"
+
+#: ../src/dupe.c:1445
+msgid "Reading checksums..."
+msgstr "Odczytywanie sum kontrolnych..."
+
+#: ../src/dupe.c:1478
+msgid "Reading dimensions..."
+msgstr "Odczytywanie wymiarów"
+
+#: ../src/dupe.c:1512
 msgid "Reading similarity data..."
 msgstr "Wczytywanie danych opisujących podobieństwo..."
 
-#: src/dupe.c:1556 src/dupe.c:1587
+#: ../src/dupe.c:1548 ../src/dupe.c:1579
 msgid "Comparing..."
 msgstr "Porównywanie..."
 
-#: src/dupe.c:1567 src/pan-view.c:1093
+#: ../src/dupe.c:1559 ../src/pan-view.c:996
 msgid "Sorting..."
 msgstr "Sortowanie..."
 
-#: src/dupe.c:2248
+#: ../src/dupe.c:2251
 msgid "Select group _1 duplicates"
 msgstr "Wybierz _pierwszą grupę duplikatów"
 
-#: src/dupe.c:2250
+#: ../src/dupe.c:2253
 msgid "Select group _2 duplicates"
 msgstr "Wybierz _drugą grupę duplikatów"
 
-#: src/dupe.c:2257 src/search.c:997
+#: ../src/dupe.c:2262 ../src/search.c:1012
 msgid "Add to new collection"
 msgstr "Dodaj do nowej kolekcji"
 
-#: src/dupe.c:2276 src/dupe.c:2566 src/search.c:1016
+#: ../src/dupe.c:2280 ../src/dupe.c:2567 ../src/search.c:1030
 msgid "C_lear"
 msgstr "Wyczyść"
 
-#: src/dupe.c:2279 src/dupe.c:2569
+#: ../src/dupe.c:2283 ../src/dupe.c:2570
 msgid "Close _window"
 msgstr "Zamknij okno"
 
-#: src/dupe.c:2439
+#: ../src/dupe.c:2443
 #, c-format
 msgid "%d files (set 2)"
 msgstr "%d plików (zbiór 2)"
 
-#: src/dupe.c:2647
-#, fuzzy
+#: ../src/dupe.c:2648
 msgid "Name case-insensitive"
-msgstr "Rozróżnianie wielkość liter podczas sortowania"
+msgstr "Nazwy z uwzględnianiem wielkości liter"
 
-#: src/dupe.c:2648 src/dupe.c:3168 src/preferences.c:1026 src/print.c:3238
-#: src/search.c:2761 src/view_file_list.c:1823
+#: ../src/dupe.c:2649 ../src/dupe.c:3135 ../src/preferences.c:1361
+#: ../src/print.c:3205 ../src/search.c:2791 ../src/view_file_list.c:1952
 msgid "Size"
 msgstr "Rozmiar"
 
-#: src/dupe.c:2649 src/dupe.c:3169 src/exif.c:339 src/exif-common.c:442
-#: src/print.c:3236 src/search.c:2762 src/view_file_list.c:1824
+#: ../src/dupe.c:2650 ../src/dupe.c:3136 ../src/exif.c:342
+#: ../src/exif-common.c:553 ../src/print.c:3203 ../src/search.c:2792
+#: ../src/view_file_list.c:1956
 msgid "Date"
 msgstr "Data"
 
-#: src/dupe.c:2650 src/dupe.c:3170 src/print.c:3240 src/search.c:2763
+#: ../src/dupe.c:2651 ../src/dupe.c:3137 ../src/print.c:3207
+#: ../src/search.c:2793
 msgid "Dimensions"
 msgstr "Wymiary"
 
-#: src/dupe.c:2651
+#: ../src/dupe.c:2652
 msgid "Checksum"
 msgstr "Suma kontrolna"
 
-#: src/dupe.c:2652 src/dupe.c:3171 src/print.c:3234 src/search.c:2764
-#: src/ui_pathsel.c:1115
-msgid "Path"
-msgstr "Ścieżka"
-
-#: src/dupe.c:2653
+#: ../src/dupe.c:2654
 msgid "Similarity (high)"
 msgstr "Podobieństwo (wysokie)"
 
-#: src/dupe.c:2654
+#: ../src/dupe.c:2655
 msgid "Similarity"
 msgstr "Podobieństwo"
 
-#: src/dupe.c:2655
+#: ../src/dupe.c:2656
 msgid "Similarity (low)"
 msgstr "Podobieństwo (niskie)"
 
-#: src/dupe.c:2656
+#: ../src/dupe.c:2657
 msgid "Similarity (custom)"
 msgstr "Podobieństwo (dowolne)"
 
-#: src/dupe.c:3121
-#, fuzzy
+#: ../src/dupe.c:3088
 msgid "Find duplicates"
 msgstr "Wyszukaj duplikaty..."
 
-#: src/dupe.c:3203
+#: ../src/dupe.c:3170
 msgid "Compare to:"
 msgstr "Porównaj z:"
 
-#: src/dupe.c:3216
+#: ../src/dupe.c:3183
 msgid "Compare by:"
 msgstr "Kryterium porównywania:"
 
-#: src/dupe.c:3224 src/preferences.c:884 src/search.c:2777
+#: ../src/dupe.c:3191 ../src/preferences.c:1201 ../src/search.c:2807
 msgid "Thumbnails"
 msgstr "Miniaturki"
 
-#: src/dupe.c:3231
+#: ../src/dupe.c:3198
 msgid "Compare two file sets"
 msgstr "Porównanie dwóch zbiorów plików"
 
-#: src/editors.c:61
-msgid "The Gimp"
-msgstr ""
-
-#: src/editors.c:62
-msgid "XV"
-msgstr ""
-
-#: src/editors.c:63
-msgid "Xpaint"
-msgstr "Xpaint"
-
-#: src/editors.c:64
-msgid "UFraw"
-msgstr ""
-
-#: src/editors.c:65
-msgid "Add XMP sidecar"
-msgstr ""
-
-#: src/editors.c:69
-msgid "Rotate jpeg clockwise"
-msgstr "Obróć jpeg zgodnie z zegarem"
-
-#: src/editors.c:70
-msgid "Rotate jpeg counterclockwise"
-msgstr "Obróć jpeg przeciwnie do zegara"
-
-#. for testing
-#: src/editors.c:74 src/editors.c:80
-msgid "External Copy command"
-msgstr ""
-
-#: src/editors.c:75 src/editors.c:81
-msgid "External Move command"
-msgstr ""
-
-#: src/editors.c:76 src/editors.c:82
-msgid "External Rename command"
+#: ../src/editors.c:281
+#, c-format
+msgid "Desktop file '%s' should not include extension in Icon key: '%s'\n"
 msgstr ""
 
-#: src/editors.c:77 src/editors.c:83
-#, fuzzy
-msgid "External Delete command"
-msgstr "Aktywny klawisz Delete"
+#. flash fired (bit 0)
+#: ../src/editors.c:335 ../src/exif.c:226 ../src/exif-common.c:362
+msgid "yes"
+msgstr "tak"
 
-#: src/editors.c:78 src/editors.c:84
-msgid "External New Folder command"
-msgstr ""
+#: ../src/editors.c:335 ../src/exif.c:225 ../src/exif-common.c:362
+msgid "no"
+msgstr "nie"
 
-#: src/editors.c:140
+#: ../src/editors.c:507
 msgid "stopping..."
 msgstr "zatrzymywanie..."
 
-#: src/editors.c:161
+#: ../src/editors.c:528
 msgid "Edit command results"
 msgstr "Edycja wyniku działania polecenia"
 
-#: src/editors.c:164
+#: ../src/editors.c:531
 #, c-format
 msgid "Output of %s"
 msgstr "Wyjście %s"
 
-#: src/editors.c:603
+#: ../src/editors.c:1054
 #, c-format
 msgid ""
 "Failed to run command:\n"
@@ -881,1478 +1049,2117 @@ msgstr ""
 "Nie można uruchomić:\n"
 "%s\n"
 
-#: src/editors.c:721
+#: ../src/editors.c:1181
 msgid "stopped by user"
 msgstr "zatrzymane przez użytkownika"
 
-#: src/editors.c:836
+#: ../src/editors.c:1266
+#, c-format
+msgid ""
+"%s\n"
+"\"%s\""
+msgstr ""
+
+#: ../src/editors.c:1268
+#, fuzzy
+msgid "Invalid editor command"
+msgstr "Niepoprawny cel"
+
+#: ../src/editors.c:1355
 msgid "Editor template is empty."
 msgstr ""
 
-#: src/editors.c:837
+#: ../src/editors.c:1356
 msgid "Editor template has incorrect syntax."
 msgstr ""
 
-#: src/editors.c:838
+#: ../src/editors.c:1357
 msgid "Editor template uses incompatible macros."
 msgstr ""
 
-#: src/editors.c:839
+#: ../src/editors.c:1358
 msgid "Can't find matching file type."
-msgstr ""
+msgstr "Nie mogę znaleźć pasujących typów plików"
 
-#: src/editors.c:840
+#: ../src/editors.c:1359
 msgid "Can't execute external editor."
-msgstr ""
+msgstr "Nie mogę uruchomić zewnętrznego edytora"
 
-#: src/editors.c:841
+#: ../src/editors.c:1360
 msgid "External editor returned error status."
-msgstr ""
+msgstr "Zewnętrzny edytor zwrócił błąd."
 
-#: src/editors.c:842
+#: ../src/editors.c:1361
 msgid "File was skipped."
-msgstr ""
+msgstr "Plik został pominięty."
 
-#: src/editors.c:843
+#: ../src/editors.c:1362
 msgid "Unknown error."
-msgstr ""
+msgstr "Nieznany błąd."
 
-#: src/exif.c:145 src/exif.c:158 src/exif.c:172 src/exif.c:197 src/exif.c:314
-#: src/exif.c:625 src/exif-common.c:308 src/exif-common.c:311
-#: src/exif-common.c:378
+#: ../src/exif.c:148 ../src/exif.c:161 ../src/exif.c:175 ../src/exif.c:200
+#: ../src/exif.c:317 ../src/exif.c:664 ../src/exif-common.c:338
+#: ../src/exif-common.c:341 ../src/exif-common.c:408
 msgid "unknown"
 msgstr "nieznany"
 
-#: src/exif.c:146
+#: ../src/exif.c:149
 msgid "top left"
 msgstr "górny lewy"
 
-#: src/exif.c:147
+#: ../src/exif.c:150
 msgid "top right"
 msgstr "górny prawy"
 
-#: src/exif.c:148
+#: ../src/exif.c:151
 msgid "bottom right"
 msgstr "dolny lewy"
 
-#: src/exif.c:149
+#: ../src/exif.c:152
 msgid "bottom left"
 msgstr "dolny lewy"
 
-#: src/exif.c:150
+#: ../src/exif.c:153
 msgid "left top"
 msgstr "lewy górny"
 
-#: src/exif.c:151
+#: ../src/exif.c:154
 msgid "right top"
 msgstr "prawy górny"
 
-#: src/exif.c:152
+#: ../src/exif.c:155
 msgid "right bottom"
 msgstr "prawy dolny"
 
-#: src/exif.c:153
+#: ../src/exif.c:156
 msgid "left bottom"
 msgstr "lewy dolny"
 
-#: src/exif.c:160
+#: ../src/exif.c:163
 msgid "inch"
 msgstr "cal"
 
-#: src/exif.c:161
+#: ../src/exif.c:164
 msgid "centimeter"
 msgstr "centymetr"
 
-#: src/exif.c:173
+#: ../src/exif.c:176
 msgid "average"
 msgstr "średnie"
 
-#: src/exif.c:174
+#: ../src/exif.c:177
 msgid "center weighted"
 msgstr ""
 
-#: src/exif.c:175
+#: ../src/exif.c:178
 msgid "spot"
 msgstr ""
 
-#: src/exif.c:176
+#: ../src/exif.c:179
 msgid "multi-spot"
 msgstr ""
 
-#: src/exif.c:177
+#: ../src/exif.c:180
 msgid "multi-segment"
 msgstr ""
 
-#: src/exif.c:178
+#: ../src/exif.c:181
 msgid "partial"
 msgstr "częściowe"
 
-#: src/exif.c:179 src/exif.c:217
+#: ../src/exif.c:182 ../src/exif.c:220
 msgid "other"
 msgstr "inne"
 
-#: src/exif.c:184 src/exif.c:236
+#: ../src/exif.c:187 ../src/exif.c:239
 msgid "not defined"
 msgstr "niezdefiniowany"
 
-#: src/exif.c:185 src/exif.c:264 src/exif.c:271
+#: ../src/exif.c:188 ../src/exif.c:267 ../src/exif.c:274
 msgid "manual"
 msgstr "ręczny"
 
-#: src/exif.c:186 src/exif.c:257 src/exif.c:293 src/exif.c:300 src/exif.c:307
+#: ../src/exif.c:189 ../src/exif.c:260 ../src/exif.c:296 ../src/exif.c:303
+#: ../src/exif.c:310
 msgid "normal"
 msgstr "zwykły"
 
-#: src/exif.c:187
+#: ../src/exif.c:190
 msgid "aperture"
 msgstr ""
 
-#: src/exif.c:188
+#: ../src/exif.c:191
 msgid "shutter"
 msgstr "migawka"
 
-#: src/exif.c:189
+#: ../src/exif.c:192
 msgid "creative"
 msgstr ""
 
-#: src/exif.c:190
+#: ../src/exif.c:193
 msgid "action"
 msgstr "akcja"
 
-#: src/exif.c:191 src/exif.c:278
+#: ../src/exif.c:194 ../src/exif.c:281
 msgid "portrait"
 msgstr "pionowe"
 
-#: src/exif.c:192 src/exif.c:277
+#: ../src/exif.c:195 ../src/exif.c:280
 msgid "landscape"
 msgstr "poziome"
 
-#: src/exif.c:198
+#: ../src/exif.c:201
 msgid "daylight"
 msgstr "światło dzienne"
 
-#: src/exif.c:199
+#: ../src/exif.c:202
 msgid "fluorescent"
 msgstr "fluorescencyjne"
 
-#: src/exif.c:200
+#: ../src/exif.c:203
 msgid "tungsten (incandescent)"
 msgstr ""
 
-#: src/exif.c:201
+#: ../src/exif.c:204
 msgid "flash"
 msgstr "flesz"
 
-#: src/exif.c:202
+#: ../src/exif.c:205
 msgid "fine weather"
-msgstr ""
+msgstr "dobra pogoda"
 
-#: src/exif.c:203
+#: ../src/exif.c:206
 msgid "cloudy weather"
-msgstr ""
+msgstr "pochmurna pogoda"
 
-#: src/exif.c:204
+#: ../src/exif.c:207
 msgid "shade"
 msgstr ""
 
-#: src/exif.c:205
+#: ../src/exif.c:208
 #, fuzzy
 msgid "daylight fluorescent"
 msgstr "fluorescencyjne"
 
-#: src/exif.c:206
+#: ../src/exif.c:209
 #, fuzzy
 msgid "day white fluorescent"
 msgstr "fluorescencyjne"
 
-#: src/exif.c:207
+#: ../src/exif.c:210
 #, fuzzy
 msgid "cool white fluorescent"
 msgstr "fluorescencyjne"
 
-#: src/exif.c:208
+#: ../src/exif.c:211
 #, fuzzy
 msgid "white fluorescent"
 msgstr "fluorescencyjne"
 
-#: src/exif.c:209
+#: ../src/exif.c:212
 msgid "standard light A"
 msgstr ""
 
-#: src/exif.c:210
+#: ../src/exif.c:213
 msgid "standard light B"
 msgstr ""
 
-#: src/exif.c:211
+#: ../src/exif.c:214
 msgid "standard light C"
 msgstr ""
 
-#: src/exif.c:212
+#: ../src/exif.c:215
 msgid "D55"
-msgstr ""
+msgstr "D55"
 
-#: src/exif.c:213
+#: ../src/exif.c:216
 msgid "D65"
-msgstr ""
+msgstr "D65"
 
-#: src/exif.c:214
+#: ../src/exif.c:217
 msgid "D75"
-msgstr ""
+msgstr "D75"
 
-#: src/exif.c:215
+#: ../src/exif.c:218
 msgid "D50"
-msgstr ""
+msgstr "D50"
 
-#: src/exif.c:216
+#: ../src/exif.c:219
 msgid "ISO studio tungsten"
 msgstr ""
 
-#: src/exif.c:222 src/exif-common.c:332 src/info.c:257
-msgid "no"
-msgstr "nie"
-
-#. flash fired (bit 0)
-#: src/exif.c:223 src/exif-common.c:332 src/info.c:257
-msgid "yes"
-msgstr "tak"
-
-#: src/exif.c:224
+#: ../src/exif.c:227
 msgid "yes, not detected by strobe"
 msgstr ""
 
-#: src/exif.c:225
+#: ../src/exif.c:228
 msgid "yes, detected by strobe"
 msgstr ""
 
-#: src/exif.c:230 src/exif-common.c:403 src/layout.c:422
-msgid "sRGB"
-msgstr ""
-
-#: src/exif.c:231
+#: ../src/exif.c:234
 msgid "uncalibrated"
-msgstr ""
+msgstr "nieskalibrowaniy"
 
-#: src/exif.c:237
+#: ../src/exif.c:240
 msgid "1 chip color area"
 msgstr ""
 
-#: src/exif.c:238
+#: ../src/exif.c:241
 msgid "2 chip color area"
 msgstr ""
 
-#: src/exif.c:239
+#: ../src/exif.c:242
 msgid "3 chip color area"
 msgstr ""
 
-#: src/exif.c:240
+#: ../src/exif.c:243
 msgid "color sequential area"
 msgstr ""
 
-#: src/exif.c:241
-#, fuzzy
+#: ../src/exif.c:244
 msgid "trilinear"
-msgstr "Dwuliniowe"
+msgstr "trzyliniowe"
 
-#: src/exif.c:242
+#: ../src/exif.c:245
 msgid "color sequential linear"
 msgstr ""
 
-#: src/exif.c:247
+#: ../src/exif.c:250
 msgid "digital still camera"
 msgstr ""
 
-#: src/exif.c:252
+#: ../src/exif.c:255
 msgid "direct photo"
 msgstr ""
 
-#: src/exif.c:258
-#, fuzzy
+#: ../src/exif.c:261
 msgid "custom"
-msgstr "Własne"
+msgstr "własne"
 
-#: src/exif.c:263 src/exif.c:270 src/exif-common.c:346
+#: ../src/exif.c:266 ../src/exif.c:273 ../src/exif-common.c:376
 msgid "auto"
 msgstr "automatyczne"
 
-#: src/exif.c:265
+#: ../src/exif.c:268
 #, fuzzy
 msgid "auto bracket"
 msgstr "Automatyczna zmiana nazwy"
 
-#: src/exif.c:276
-#, fuzzy
+#: ../src/exif.c:279
 msgid "standard"
-msgstr "Kalendarz"
+msgstr "standard"
 
-#: src/exif.c:279
-#, fuzzy
+#: ../src/exif.c:282
 msgid "night scene"
-msgstr "Źródło światła"
+msgstr "nocna scena"
 
-#: src/exif.c:284
-#, fuzzy
+#: ../src/exif.c:287
 msgid "none"
-msgstr "ukończono"
+msgstr "brak"
 
-#: src/exif.c:285
+#: ../src/exif.c:288
 #, fuzzy
 msgid "low gain up"
 msgstr "Wyczyść"
 
-#: src/exif.c:286
+#: ../src/exif.c:289
 msgid "high gain up"
 msgstr ""
 
-#: src/exif.c:287
+#: ../src/exif.c:290
 #, fuzzy
 msgid "low gain down"
 msgstr "Zamknij okno"
 
-#: src/exif.c:288
+#: ../src/exif.c:291
 msgid "high gain down"
 msgstr ""
 
-#: src/exif.c:294 src/exif.c:308
+#: ../src/exif.c:297 ../src/exif.c:311
 msgid "soft"
 msgstr ""
 
-#: src/exif.c:295 src/exif.c:309
+#: ../src/exif.c:298 ../src/exif.c:312
 msgid "hard"
 msgstr ""
 
-#: src/exif.c:301
+#: ../src/exif.c:304
 msgid "low"
 msgstr ""
 
-#: src/exif.c:302
-#, fuzzy
+#: ../src/exif.c:305
 msgid "high"
-msgstr "Wysokość"
+msgstr "Wysokie"
 
-#: src/exif.c:315
+#: ../src/exif.c:318
 msgid "macro"
 msgstr ""
 
-#: src/exif.c:316
+#: ../src/exif.c:319
 msgid "close"
 msgstr ""
 
-#: src/exif.c:317
+#: ../src/exif.c:320
 msgid "distant"
 msgstr ""
 
-#: src/exif.c:327
-#, fuzzy
+#: ../src/exif.c:330
 msgid "Image Width"
-msgstr "Plik obrazu"
+msgstr "Szerokość obrazu"
 
-#: src/exif.c:328
-#, fuzzy
+#: ../src/exif.c:331
 msgid "Image Height"
-msgstr "Wysokość"
+msgstr "Wysokość obrazu"
 
-#: src/exif.c:329
+#: ../src/exif.c:332
 msgid "Bits per Sample/Pixel"
 msgstr ""
 
-#: src/exif.c:330
-#, fuzzy
+#: ../src/exif.c:333
 msgid "Compression"
 msgstr "Poziom kompresji:"
 
-#: src/exif.c:331
+#: ../src/exif.c:334
 msgid "Image description"
 msgstr "Opis obrazu"
 
-#: src/exif.c:332
+#: ../src/exif.c:335
 #, fuzzy
 msgid "Camera make"
 msgstr "Aparat fotograficzny"
 
-#: src/exif.c:333
-#, fuzzy
+#: ../src/exif.c:336
 msgid "Camera model"
-msgstr "Aparat fotograficzny"
+msgstr "Model aparatu fotograficznego"
 
-#: src/exif.c:334
+#: ../src/exif.c:337
 msgid "Orientation"
-msgstr "Ułożenie"
+msgstr "Orientacja"
 
-#: src/exif.c:335
-#, fuzzy
+#: ../src/exif.c:338
 msgid "X resolution"
-msgstr "Rozdzielczość"
+msgstr "Rozdzielczość X"
 
-#: src/exif.c:336
-#, fuzzy
+#: ../src/exif.c:339
 msgid "Y Resolution"
-msgstr "Rozdzielczość"
+msgstr "Rozdzielczość Y"
 
-#: src/exif.c:337
+#: ../src/exif.c:340
 #, fuzzy
 msgid "Resolution units"
 msgstr "Rozdzielczość"
 
-#: src/exif.c:338
+#: ../src/exif.c:341
 msgid "Firmware"
-msgstr ""
+msgstr "Firmware"
 
-#: src/exif.c:340
+#: ../src/exif.c:343
 msgid "White point"
 msgstr ""
 
-#: src/exif.c:341
+#: ../src/exif.c:344
 msgid "Primary chromaticities"
 msgstr ""
 
-#: src/exif.c:342
+#: ../src/exif.c:345
 msgid "YCbCy coefficients"
 msgstr ""
 
-#: src/exif.c:343
+#: ../src/exif.c:346
 msgid "YCbCr positioning"
 msgstr ""
 
-#: src/exif.c:344
+#: ../src/exif.c:347
 #, fuzzy
 msgid "Black white reference"
 msgstr "Konfiguracja Geeqie"
 
-#: src/exif.c:345
-msgid "Copyright"
-msgstr "Prawa autorskie"
-
-#: src/exif.c:346
+#: ../src/exif.c:349
 msgid "SubIFD Exif offset"
 msgstr ""
 
 #. subIFD follows
-#: src/exif.c:348
+#: ../src/exif.c:351
 #, fuzzy
 msgid "Exposure time (seconds)"
 msgstr "Poprawka naświetlania"
 
-#: src/exif.c:349
+#: ../src/exif.c:352
 msgid "FNumber"
 msgstr ""
 
-#: src/exif.c:350
+#: ../src/exif.c:353
 msgid "Exposure program"
 msgstr "Program naświetlania"
 
-#: src/exif.c:351
+#: ../src/exif.c:354
 #, fuzzy
 msgid "Spectral Sensitivity"
 msgstr "czułość ISO"
 
-#: src/exif.c:352 src/exif.c:388 src/exif-common.c:446
+#: ../src/exif.c:355 ../src/exif.c:391 ../src/exif-common.c:557
 msgid "ISO sensitivity"
 msgstr "czułość ISO"
 
-#: src/exif.c:353
+#: ../src/exif.c:356
 msgid "Optoelectric conversion factor"
 msgstr ""
 
-#: src/exif.c:354
+#: ../src/exif.c:357
 msgid "Exif version"
-msgstr ""
+msgstr "Wersja Exif"
 
-#: src/exif.c:355
+#: ../src/exif.c:358
 msgid "Date original"
 msgstr "Data oryginału"
 
-#: src/exif.c:356
+#: ../src/exif.c:359
 msgid "Date digitized"
 msgstr "Data digitalizacji"
 
-#: src/exif.c:357
+#: ../src/exif.c:360
 #, fuzzy
 msgid "Pixel format"
 msgstr "Format pliku:"
 
-#: src/exif.c:358
-#, fuzzy
+#: ../src/exif.c:361
 msgid "Compression ratio"
 msgstr "Poziom kompresji:"
 
-#: src/exif.c:359 src/exif-common.c:443
+#: ../src/exif.c:362 ../src/exif-common.c:554
 msgid "Shutter speed"
 msgstr "Szybkość migawki"
 
-#: src/exif.c:360 src/exif-common.c:444
+#: ../src/exif.c:363 ../src/exif-common.c:555
 msgid "Aperture"
 msgstr "Przysłona"
 
-#: src/exif.c:361
+#: ../src/exif.c:364
 msgid "Brightness"
-msgstr ""
+msgstr "Jasność"
 
-#: src/exif.c:362 src/exif-common.c:445
+#: ../src/exif.c:365 ../src/exif-common.c:556
 msgid "Exposure bias"
 msgstr "Poprawka naświetlania"
 
-#: src/exif.c:363
+#: ../src/exif.c:366
 #, fuzzy
 msgid "Maximum aperture"
 msgstr "Maksymalny rozmiar:"
 
-#: src/exif.c:364 src/exif-common.c:449
+#: ../src/exif.c:367 ../src/exif-common.c:560
 msgid "Subject distance"
 msgstr "Odległość przedmiotu"
 
-#: src/exif.c:365
+#: ../src/exif.c:368
 msgid "Metering mode"
 msgstr "Metoda pomiaru odległości"
 
-#: src/exif.c:366
+#: ../src/exif.c:369
 msgid "Light source"
 msgstr "Źródło światła"
 
-#: src/exif.c:367 src/exif-common.c:450
+#: ../src/exif.c:370 ../src/exif-common.c:561
 msgid "Flash"
 msgstr "Flesz"
 
-#: src/exif.c:368 src/exif-common.c:447
+#: ../src/exif.c:371 ../src/exif-common.c:558
 msgid "Focal length"
 msgstr "Ogniskowa"
 
-#: src/exif.c:369
+#: ../src/exif.c:372
 #, fuzzy
 msgid "Subject area"
 msgstr "Odległość przedmiotu"
 
-#: src/exif.c:370
+#: ../src/exif.c:373
 msgid "MakerNote"
 msgstr ""
 
-#: src/exif.c:371
-#, fuzzy
+#: ../src/exif.c:374
 msgid "UserComment"
-msgstr "Komentarz:"
+msgstr "Komentarz użytkownika:"
 
-#: src/exif.c:372
+#: ../src/exif.c:375
 msgid "Subsecond time"
 msgstr ""
 
-#: src/exif.c:373
+#: ../src/exif.c:376
 #, fuzzy
 msgid "Subsecond time original"
 msgstr "Data oryginału"
 
-#: src/exif.c:374
+#: ../src/exif.c:377
 #, fuzzy
 msgid "Subsecond time digitized"
 msgstr "Data digitalizacji"
 
-#: src/exif.c:375
+#: ../src/exif.c:378
 msgid "FlashPix version"
 msgstr ""
 
-#: src/exif.c:376
+#: ../src/exif.c:379
 msgid "Colorspace"
 msgstr ""
 
 #. ExifImageWidth, ExifImageHeight can also be unsigned short
-#: src/exif.c:378
+#: ../src/exif.c:381 ../src/preferences.c:2033
 msgid "Width"
 msgstr "Szerokość"
 
-#: src/exif.c:379
+#: ../src/exif.c:382 ../src/preferences.c:2035
 msgid "Height"
 msgstr "Wysokość"
 
-#: src/exif.c:380
-#, fuzzy
+#: ../src/exif.c:383
 msgid "Audio data"
-msgstr "Dane E_xif"
+msgstr "Dane audio"
 
-#: src/exif.c:381
+#: ../src/exif.c:384
 msgid "ExifR98 extension"
 msgstr ""
 
-#: src/exif.c:382
+#: ../src/exif.c:385
 #, fuzzy
 msgid "Flash strength"
 msgstr "Ogniskowa"
 
-#: src/exif.c:383
+#: ../src/exif.c:386
 msgid "Spatial frequency response"
 msgstr ""
 
-#: src/exif.c:384
+#: ../src/exif.c:387
 msgid "X Pixel density"
 msgstr ""
 
-#: src/exif.c:385
+#: ../src/exif.c:388
 msgid "Y Pixel density"
 msgstr ""
 
-#: src/exif.c:386
+#: ../src/exif.c:389
 msgid "Pixel density units"
 msgstr ""
 
-#: src/exif.c:387
+#: ../src/exif.c:390
 #, fuzzy
 msgid "Subject location"
 msgstr "Zaznaczenie"
 
-#: src/exif.c:389
+#: ../src/exif.c:392
 #, fuzzy
 msgid "Sensor type"
 msgstr "Nieuporządkowane"
 
-#: src/exif.c:390
-#, fuzzy
+#: ../src/exif.c:393
 msgid "Source type"
 msgstr "Źródło"
 
-#: src/exif.c:391
-#, fuzzy
+#: ../src/exif.c:394
 msgid "Scene type"
-msgstr "centymetr"
+msgstr "Typ sceny"
 
-#: src/exif.c:392
+#: ../src/exif.c:395
 msgid "Color filter array pattern"
 msgstr ""
 
 #. tags a4xx were added for Exif 2.2 (not just these - some above, as well)
-#: src/exif.c:394
+#: ../src/exif.c:397
 #, fuzzy
 msgid "Render process"
 msgstr "Utwórz"
 
-#: src/exif.c:395
+#: ../src/exif.c:398
 #, fuzzy
 msgid "Exposure mode"
 msgstr "Poprawka naświetlania"
 
-#: src/exif.c:396
+#: ../src/exif.c:399
 msgid "White balance"
-msgstr ""
+msgstr "Balans bieli"
 
-#: src/exif.c:397
+#: ../src/exif.c:400
 msgid "Digital zoom ratio"
 msgstr ""
 
-#: src/exif.c:398
+#: ../src/exif.c:401
 #, fuzzy
 msgid "Focal length (35mm)"
 msgstr "Ogniskowa"
 
-#: src/exif.c:399
+#: ../src/exif.c:402
 msgid "Scene capture type"
 msgstr ""
 
-#: src/exif.c:400
+#: ../src/exif.c:403
 #, fuzzy
 msgid "Gain control"
 msgstr "Odłącza panel sterujący"
 
-#: src/exif.c:401
-#, fuzzy
+#: ../src/exif.c:404
 msgid "Contrast"
-msgstr "pionowe"
+msgstr "Kontrast"
 
-#: src/exif.c:402
-#, fuzzy
+#: ../src/exif.c:405
 msgid "Saturation"
-msgstr "akcja"
+msgstr "Saturacja"
 
-#: src/exif.c:403
+#: ../src/exif.c:406
 msgid "Sharpness"
-msgstr ""
+msgstr "Ostrość"
 
-#: src/exif.c:404
+#: ../src/exif.c:407
 msgid "Device setting"
-msgstr ""
+msgstr "Ustawienia urządzenia"
 
-#: src/exif.c:405
+#: ../src/exif.c:408
 #, fuzzy
 msgid "Subject range"
 msgstr "Odległość przedmiotu"
 
-#: src/exif.c:406
-#, fuzzy
+#: ../src/exif.c:409
 msgid "Image serial number"
-msgstr "Plik obrazu"
+msgstr "Numer seryjny obrazu"
 
-#: src/exif-common.c:307
+#: ../src/exif-common.c:337
 msgid "infinity"
 msgstr "nieskończoność"
 
-#: src/exif-common.c:336
+#: ../src/exif-common.c:366
 msgid "mode:"
 msgstr "tryb:"
 
-#: src/exif-common.c:340 src/trash.c:193
+#: ../src/exif-common.c:370 ../src/trash.c:205
 msgid "on"
 msgstr "włączony"
 
-#: src/exif-common.c:343 src/trash.c:198
+#: ../src/exif-common.c:373 ../src/trash.c:210
 msgid "off"
 msgstr "wyłączony"
 
-#: src/exif-common.c:352
+#: ../src/exif-common.c:382
 msgid "not detected by strobe"
 msgstr ""
 
-#: src/exif-common.c:353
+#: ../src/exif-common.c:383
 msgid "detected by strobe"
 msgstr ""
 
 #. we ignore flash function (bit 5)
 #. red-eye (bit 6)
-#: src/exif-common.c:358
+#: ../src/exif-common.c:388
 msgid "red-eye reduction"
 msgstr "redukcja efektu czerwonych oczu"
 
-#: src/exif-common.c:378
+#: ../src/exif-common.c:408
 msgid "dot"
 msgstr "punktów"
 
-#: src/exif-common.c:408
+#: ../src/exif-common.c:441
 msgid "AdobeRGB"
 msgstr ""
 
-#: src/exif-common.c:416
+#: ../src/exif-common.c:449
 msgid "embedded"
-msgstr ""
+msgstr "osadzony"
 
-#: src/exif-common.c:441
-#, fuzzy
+#: ../src/exif-common.c:544
+msgid "Above Sea Level"
+msgstr "Powyżej poziomu morza"
+
+#: ../src/exif-common.c:544
+msgid "Below Sea Level"
+msgstr "Poniżej poziomu morza"
+
+#: ../src/exif-common.c:552
 msgid "Camera"
 msgstr "Aparat fotograficzny"
 
-#: src/exif-common.c:448
+#: ../src/exif-common.c:559
 #, fuzzy
 msgid "Focal length 35mm"
 msgstr "Ogniskowa"
 
-#: src/exif-common.c:451
-#, fuzzy
+#: ../src/exif-common.c:562
 msgid "Resolution"
 msgstr "Rozdzielczość"
 
-#: src/exif-common.c:452
-#, fuzzy
+#: ../src/exif-common.c:563
 msgid "Color profile"
-msgstr "Wszystkie pliki"
+msgstr "Profil koloru"
+
+#: ../src/exif-common.c:564
+msgid "GPS position"
+msgstr "Pozycja wg GPS"
+
+#: ../src/exif-common.c:565
+msgid "GPS altitude"
+msgstr "Wysokość wg GPS"
+
+#: ../src/exif-common.c:566
+msgid "File size"
+msgstr "Rozmiar pliku"
+
+#: ../src/exif-common.c:567
+msgid "File date"
+msgstr "Czas utworzenia pliku"
+
+#: ../src/exif-common.c:568
+#, fuzzy
+msgid "File mode"
+msgstr "Nazwa pliku"
 
-#: src/filedata.c:86
+#: ../src/filedata.c:97
 #, c-format
 msgid "%d bytes"
 msgstr "%d bajtów"
 
-#: src/filedata.c:90
+#: ../src/filedata.c:101
 #, c-format
 msgid "%.1f K"
 msgstr "%.1f K"
 
-#: src/filedata.c:94
+#: ../src/filedata.c:105
 #, c-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: src/filedata.c:99
+#: ../src/filedata.c:110
 #, c-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: src/fullscreen.c:243 src/preferences.c:1329
+#: ../src/filedata.c:2291
+msgid "file or directory does not exist"
+msgstr "plik lub katalog nie istnieją"
+
+#: ../src/filedata.c:2297
+msgid "destination already exists"
+msgstr "cel już istnieje"
+
+#: ../src/filedata.c:2303
+msgid "destination can't be overwritten"
+msgstr "cel nie może być nadpisany"
+
+#: ../src/filedata.c:2309
+msgid "destination directory is not writable"
+msgstr "docelowy katalog nie jest zapisywalny"
+
+#: ../src/filedata.c:2315
+msgid "destination directory does not exist"
+msgstr "docelowy katalog nie istnieje"
+
+#: ../src/filedata.c:2321
+msgid "source directory is not writable"
+msgstr "katalog źródłowy nie istnieje"
+
+#: ../src/filedata.c:2327
+msgid "no read permission"
+msgstr "brak uprawnień do odczytu"
+
+#: ../src/filedata.c:2333
+msgid "file is readonly"
+msgstr "plik jest tylko do odczytu"
+
+#: ../src/filedata.c:2339
+msgid "destination already exists and will be overwritten"
+msgstr "cel już istnieje i zostanie nadpisany"
+
+#: ../src/filedata.c:2345
+#, fuzzy
+msgid "source and destination are the same"
+msgstr "Źródło i cel są takie same, operacja anulowana."
+
+#: ../src/filedata.c:2351
+#, fuzzy
+msgid "source and destination have different extension"
+msgstr "Źródło i cel są takie same, operacja anulowana."
+
+#: ../src/filedata.c:2357
+msgid "there are unsaved metadata changes for the file"
+msgstr "istnieją nie zapisane metadane dla tego pliku"
+
+#: ../src/fullscreen.c:235 ../src/layout_util.c:1347 ../src/layout_util.c:1348
+#: ../src/layout_util.c:1349 ../src/preferences.c:1374
 msgid "Full screen"
 msgstr "Pełny ekran"
 
-#: src/fullscreen.c:395
+#: ../src/fullscreen.c:412
 msgid "Full size"
 msgstr "Pełny rozmiar"
 
-#: src/fullscreen.c:400
+#: ../src/fullscreen.c:420
 msgid "Monitor"
 msgstr "Monitor"
 
-#: src/fullscreen.c:405 src/layout.c:455
+#: ../src/fullscreen.c:426
 msgid "Screen"
 msgstr "Ekran"
 
-#: src/fullscreen.c:642
+#: ../src/fullscreen.c:663
 msgid "Stay above other windows"
 msgstr "Trzymaj ponad innymi oknami"
 
-#: src/fullscreen.c:649
+#: ../src/fullscreen.c:670
 msgid "Determined by Window Manager"
 msgstr "Ustalone przez menedżer okien"
 
-#: src/fullscreen.c:650
+#: ../src/fullscreen.c:671
 msgid "Active screen"
 msgstr "Aktywny ekran"
 
-#: src/fullscreen.c:652
+#: ../src/fullscreen.c:673
 msgid "Active monitor"
 msgstr "Aktywny monitor"
 
-#: src/histogram.c:86
-msgid "logarithmical histogram on red"
+#: ../src/histogram.c:113
+msgid "Log Histogram on Red"
 msgstr ""
 
-#: src/histogram.c:87
-msgid "logarithmical histogram on green"
+#: ../src/histogram.c:114
+msgid "Log Histogram on Green"
 msgstr ""
 
-#: src/histogram.c:88
-msgid "logarithmical histogram on blue"
+#: ../src/histogram.c:115
+msgid "Log Histogram on Blue"
 msgstr ""
 
-#: src/histogram.c:89
-msgid "logarithmical histogram on value"
+#: ../src/histogram.c:116
+msgid "Log Histogram on RGB"
 msgstr ""
 
-#: src/histogram.c:90
-msgid "logarithmical histogram on RGB"
+#: ../src/histogram.c:117
+msgid "Log Histogram on value"
 msgstr ""
 
-#: src/histogram.c:91
-msgid "logarithmical histogram on max value"
+#: ../src/histogram.c:122
+msgid "Linear Histogram on Red"
 msgstr ""
 
-#: src/histogram.c:96
-msgid "linear histogram on red"
+#: ../src/histogram.c:123
+msgid "Linear Histogram on Green"
 msgstr ""
 
-#: src/histogram.c:97
-msgid "linear histogram on green"
+#: ../src/histogram.c:124
+msgid "Linear Histogram on Blue"
 msgstr ""
 
-#: src/histogram.c:98
-msgid "linear histogram on blue"
+#: ../src/histogram.c:125
+msgid "Linear Histogram on RGB"
 msgstr ""
 
-#: src/histogram.c:99
-msgid "linear histogram on value"
+#: ../src/histogram.c:126
+msgid "Linear Histogram on value"
 msgstr ""
 
-#: src/histogram.c:100
-msgid "linear histogram on RGB"
-msgstr ""
+#: ../src/history_list.c:131
+#, c-format
+msgid "Unable to write history lists to: %s\n"
+msgstr "Nie można zapisać list historii w: %s\n"
+
+#: ../src/image.c:161
+#, fuzzy, c-format
+msgid " (Collection %s)"
+msgstr "Kolekcje"
 
-#: src/histogram.c:101
-msgid "linear histogram on max value"
+#: ../src/image_load_jpeg.c:177
+#, c-format
+msgid "Error interpreting JPEG image file (%s)"
 msgstr ""
 
-#: src/img-view.c:1268 src/layout_image.c:743 src/layout_util.c:1105
-#: src/layout_util.c:1106 src/layout_util.c:1107 src/pan-view.c:2800
+#: ../src/img-view.c:1253 ../src/layout_image.c:483 ../src/layout_util.c:1314
+#: ../src/layout_util.c:1315 ../src/layout_util.c:1330
+#: ../src/layout_util.c:1331 ../src/pan-view.c:2602
 msgid "Zoom _in"
 msgstr "Pow_iększ"
 
-#: src/img-view.c:1269 src/layout_image.c:744 src/layout_util.c:1108
-#: src/layout_util.c:1109 src/pan-view.c:2802
+#: ../src/img-view.c:1254 ../src/layout_image.c:484 ../src/layout_util.c:1316
+#: ../src/layout_util.c:1317 ../src/layout_util.c:1332
+#: ../src/layout_util.c:1333 ../src/pan-view.c:2604
 msgid "Zoom _out"
 msgstr "Po_mniejsz"
 
-#: src/img-view.c:1270 src/layout_image.c:745 src/layout_util.c:1110
-#: src/layout_util.c:1111 src/pan-view.c:2804
+#: ../src/img-view.c:1255 ../src/layout_image.c:485 ../src/layout_util.c:1318
+#: ../src/layout_util.c:1319 ../src/layout_util.c:1334
+#: ../src/layout_util.c:1335 ../src/pan-view.c:2606
 msgid "Zoom _1:1"
 msgstr "Skala _1:1"
 
-#: src/img-view.c:1271 src/layout_image.c:746
+#: ../src/img-view.c:1256 ../src/layout_image.c:486
 msgid "Fit image to _window"
 msgstr "Dopasowanie obrazu do _okna"
 
-#: src/img-view.c:1276 src/layout_image.c:752 src/layout_util.c:1103
+#: ../src/img-view.c:1264 ../src/layout_image.c:495 ../src/layout_util.c:1312
 msgid "Set as _wallpaper"
 msgstr "Usta_w jako tapetę"
 
-#: src/img-view.c:1283 src/layout_image.c:762
+#: ../src/img-view.c:1269 ../src/layout_image.c:502
 msgid "_Go to directory view"
 msgstr ""
 
-#: src/img-view.c:1297 src/layout_image.c:786
+#: ../src/img-view.c:1282 ../src/layout_image.c:523
 msgid "_Stop slideshow"
 msgstr "_Zatrzymaj pokaz slajdów"
 
-#: src/img-view.c:1300 src/layout_image.c:789
+#: ../src/img-view.c:1285 ../src/layout_image.c:526
 msgid "Continue slides_how"
 msgstr "Kontyn_uuj pokaz slajdów"
 
-#: src/img-view.c:1305 src/img-view.c:1313 src/layout_image.c:794
-#: src/layout_image.c:801
+#: ../src/img-view.c:1290 ../src/img-view.c:1298 ../src/layout_image.c:531
+#: ../src/layout_image.c:538
 msgid "Pause slides_how"
 msgstr "W_strzymaj pokaz slajdów"
 
-#: src/img-view.c:1311 src/layout_image.c:800
+#: ../src/img-view.c:1296 ../src/layout_image.c:537
 msgid "_Start slideshow"
 msgstr "Rozpo_cznij pokaz slajdów"
 
-#: src/img-view.c:1319 src/layout_image.c:811 src/pan-view.c:2873
+#: ../src/img-view.c:1304 ../src/layout_image.c:548 ../src/pan-view.c:2675
 msgid "Exit _full screen"
 msgstr "Opuść tryb pełnoekranowy"
 
-#: src/img-view.c:1323 src/layout_image.c:807 src/pan-view.c:2877
+#: ../src/img-view.c:1308 ../src/layout_image.c:544 ../src/pan-view.c:2679
 msgid "_Full screen"
 msgstr "Pełny ekran"
 
-#: src/img-view.c:1327 src/layout_util.c:1074 src/pan-view.c:2881
+#: ../src/img-view.c:1312 ../src/layout_util.c:1297 ../src/pan-view.c:2683
 msgid "C_lose window"
 msgstr "Zamknij okno"
 
-#: src/info.c:392
-msgid "File size:"
-msgstr "Rozmiar pliku:"
-
-#: src/info.c:394
-msgid "Dimensions:"
-msgstr "Wymiary:"
-
-#: src/info.c:395
-msgid "Transparent:"
-msgstr "Przezroczystość:"
-
-#: src/info.c:396 src/print.c:3419
-msgid "Image size:"
-msgstr "Rozmiar obrazu:"
-
-#: src/info.c:398
-msgid "Compress ratio:"
-msgstr "Poziom kompresji:"
-
-#: src/info.c:399
-msgid "File type:"
-msgstr "Typ pliku:"
-
-#: src/info.c:401
-msgid "Owner:"
-msgstr "Właściciel:"
-
-#: src/info.c:402
-msgid "Group:"
-msgstr "Grupa:"
-
-#: src/info.c:405 src/preferences.c:858
-msgid "General"
-msgstr "Ogólne"
-
-#: src/info.c:531
-#, c-format
-msgid "Image %d of %d"
-msgstr "Obraz %d z %d"
-
-#: src/info.c:778
-#, fuzzy
-msgid "Image properties"
-msgstr "Właściwości obrazu - Geeqie"
-
-#: src/layout.c:282 src/view_file.c:585
+#: ../src/layout.c:359 ../src/view_file.c:613
 msgid "Ascending"
 msgstr "Rosnąco"
 
-#: src/layout.c:384
-#, c-format
-msgid "This installation of %s was not built with support for color profiles."
-msgstr ""
-
-#: src/layout.c:385
-msgid "Color profiles not supported"
-msgstr ""
-
-#: src/layout.c:410
-msgid "Use _color profiles"
-msgstr ""
-
-#: src/layout.c:415
-msgid "Use profile from _image"
-msgstr ""
-
-#: src/layout.c:421 src/layout.c:439
-#, c-format
-msgid "Input _%d:"
-msgstr ""
-
-#: src/layout.c:422
-msgid "AdobeRGB compatible"
-msgstr ""
-
-#: src/layout.c:464
-msgid "_Screen profile"
-msgstr ""
-
-#: src/layout.c:531
+#: ../src/layout.c:429
 msgid " Slideshow"
 msgstr " Slajdy"
 
-#: src/layout.c:535
+#: ../src/layout.c:433
 msgid " Paused"
 msgstr " Zatrzymane"
 
-#: src/layout.c:552
+#: ../src/layout.c:449
 #, c-format
 msgid "%s, %d files (%s, %d)%s"
 msgstr "%s, %d plików (%s, %d)%s"
 
-#: src/layout.c:559
+#: ../src/layout.c:456
 #, c-format
 msgid "%s, %d files%s"
 msgstr "%s, %d plików%s"
 
-#: src/layout.c:564
+#: ../src/layout.c:461
 #, c-format
 msgid "%d files%s"
 msgstr "%d plików%s"
 
-#: src/layout.c:593
+#: ../src/layout.c:507
 #, c-format
 msgid "(no read permission) %s bytes"
 msgstr "(brak uprawnień do odczytu) %s bajtów"
 
-#: src/layout.c:597
+#: ../src/layout.c:511
 #, c-format
 msgid "( ? x ? ) %s bytes"
 msgstr "( ? x ? ) %s bajtów"
 
-#: src/layout.c:605
+#: ../src/layout.c:519
 #, c-format
 msgid "( %d x %d ) %s bytes"
 msgstr "( %d x %d ) %s bajtów"
 
-#: src/layout.c:1301 src/layout_config.c:58
+#: ../src/layout.c:1244 ../src/layout_config.c:58
 msgid "Tools"
 msgstr "Narzędzia"
 
-#: src/layout.c:1983
-#, fuzzy
+#: ../src/layout.c:1866
+msgid "Window options and layout"
+msgstr "Ustawienia okna i jego ułożenia"
+
+#: ../src/layout.c:1925
+msgid "General options"
+msgstr "Ogólne"
+
+#: ../src/layout.c:1927
+msgid "Home path (empty to use your home directory)"
+msgstr "Katalog startowy (zostaw puste by ustawić twój katalog domowy)"
+
+#: ../src/layout.c:1935
+msgid "Use current"
+msgstr "Wykorzystaj bieżący"
+
+#: ../src/layout.c:1938
+msgid "Show date in directories list view"
+msgstr "Pokaż datę przy widoku katalogu jako listy "
+
+#: ../src/layout.c:1941
+msgid "Exit program when this window is closed"
+msgstr "Zamknij program po zamknięciu tego okna"
+
+#: ../src/layout.c:1944
+msgid "Start-up directory:"
+msgstr "Katalog startowy:"
+
+#: ../src/layout.c:1946
+msgid "No change"
+msgstr "Bez zmian"
+
+#: ../src/layout.c:1949
+msgid "Restore last path"
+msgstr "Użyj ostatniej ścieżki"
+
+#: ../src/layout.c:1952
+msgid "Home path"
+msgstr "Katalog domowy"
+
+#: ../src/layout.c:1956 ../src/print.c:3365 ../src/print.c:3372
+msgid "Layout"
+msgstr "Ułożenie"
+
+#: ../src/layout.c:2200
 msgid "Invalid geometry\n"
-msgstr "Nieprawidłowy folder"
+msgstr "Nieprawidłowa geometria\n"
 
-#: src/layout_config.c:58 src/ui_pathsel.c:1183
+#: ../src/layout_config.c:58 ../src/preferences.c:1469
+#: ../src/ui_pathsel.c:1173
 msgid "Files"
 msgstr "Pliki"
 
-#: src/layout_config.c:58 src/preferences.c:941 src/print.c:116
+#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1260
+#: ../src/print.c:123
 msgid "Image"
 msgstr "Obraz"
 
-#: src/layout_config.c:364
+#: ../src/layout_config.c:349
 msgid "(drag to change order)"
 msgstr "(przeciągnij aby zmienić kolejność)"
 
-#: src/layout_image.c:816
+#: ../src/layout_image.c:553
 msgid "Hide file _list"
 msgstr "Ukrycie _listy plików"
 
-#: src/layout_util.c:879 src/menu.c:76
-#, fuzzy, c-format
-msgid "_%d %s..."
-msgstr "za pomocą %s..."
-
-#: src/layout_util.c:883 src/menu.c:78
-#, fuzzy, c-format
-msgid "_%d (unknown)..."
-msgstr "za pomocą (nieznany)..."
+#: ../src/layout_image.c:1616
+#, c-format
+msgid "[%*d,%*d]: RGB(%3d,%3d,%3d)"
+msgstr ""
 
-#: src/layout_util.c:893
-#, fuzzy, c-format
-msgid "_%d empty"
-msgstr "puste"
+#: ../src/layout_image.c:1624
+#, c-format
+msgid "[%*s,%*s]: RGB(---,---,---)"
+msgstr ""
 
-#: src/layout_util.c:1037
+#: ../src/layout_util.c:1251
 msgid "_File"
 msgstr "_Plik"
 
-#: src/layout_util.c:1038
+#: ../src/layout_util.c:1252
 msgid "_Go"
-msgstr ""
+msgstr "Idź do"
 
-#: src/layout_util.c:1039 src/menu.c:93
+#: ../src/layout_util.c:1253 ../src/menu.c:109
 msgid "_Edit"
 msgstr "_Edycja"
 
-#: src/layout_util.c:1040
-#, fuzzy
+#: ../src/layout_util.c:1254
 msgid "_Select"
 msgstr "Zaznaczenie"
 
-#: src/layout_util.c:1041 src/menu.c:265
-msgid "_Adjust"
-msgstr "Modyfikacja"
+#: ../src/layout_util.c:1255 ../src/menu.c:280
+msgid "_Orientation"
+msgstr "Orientacja"
 
-#: src/layout_util.c:1043
-msgid "_View Directory as"
-msgstr ""
+#: ../src/layout_util.c:1256
+msgid "E_xternal Editors"
+msgstr "Zewnętrzne edytory"
 
-#: src/layout_util.c:1044
-#, fuzzy
+#: ../src/layout_util.c:1257
+msgid "P_references"
+msgstr "P_referencje..."
+
+#: ../src/layout_util.c:1259
+msgid "_Files and Folders"
+msgstr "Pliki i katalogi"
+
+#: ../src/layout_util.c:1260
 msgid "_Zoom"
-msgstr "Skala"
+msgstr "Skalowanie"
 
-#: src/layout_util.c:1045
-msgid "_Split"
+#: ../src/layout_util.c:1261
+msgid "_Color Management"
+msgstr "Zarządzanie kolorami"
+
+#: ../src/layout_util.c:1262
+msgid "_Connected Zoom"
+msgstr ""
+
+#: ../src/layout_util.c:1263
+msgid "Spli_t"
+msgstr "Podziel"
+
+#: ../src/layout_util.c:1264
+msgid "Stere_o"
 msgstr ""
 
-#: src/layout_util.c:1046
+#: ../src/layout_util.c:1265 ../src/layout_util.c:1380
+#, fuzzy
+msgid "Image _Overlay"
+msgstr "Wyszukiwanie obrazu"
+
+#: ../src/layout_util.c:1266
 msgid "_Help"
 msgstr "Pomo_c"
 
-#: src/layout_util.c:1048
-#, fuzzy
+#: ../src/layout_util.c:1268
 msgid "_First Image"
-msgstr "pierwszy obraz"
+msgstr "Pierwszy obraz"
 
-#: src/layout_util.c:1049 src/layout_util.c:1050 src/layout_util.c:1051
-#, fuzzy
+#: ../src/layout_util.c:1268
+msgid "First Image"
+msgstr "Pierwszy obraz"
+
+#: ../src/layout_util.c:1269 ../src/layout_util.c:1270
+#: ../src/layout_util.c:1271
 msgid "_Previous Image"
-msgstr "poprzedni obraz"
+msgstr "_Poprzedni obraz"
 
-#: src/layout_util.c:1052 src/layout_util.c:1053 src/layout_util.c:1054
-#, fuzzy
+#: ../src/layout_util.c:1269 ../src/layout_util.c:1270
+#: ../src/layout_util.c:1271
+msgid "Previous Image"
+msgstr "_Poprzedni obraz"
+
+#: ../src/layout_util.c:1272 ../src/layout_util.c:1273
+#: ../src/layout_util.c:1274
 msgid "_Next Image"
-msgstr "następny obraz"
+msgstr "_Następny obraz"
 
-#: src/layout_util.c:1055
-#, fuzzy
+#: ../src/layout_util.c:1272 ../src/layout_util.c:1273
+#: ../src/layout_util.c:1274
+msgid "Next Image"
+msgstr "_Następny obraz"
+
+#: ../src/layout_util.c:1275
 msgid "_Last Image"
-msgstr "ostatni obraz"
+msgstr "_Ostatni obraz"
+
+#: ../src/layout_util.c:1275
+msgid "Last Image"
+msgstr "_Ostatni obraz"
+
+#: ../src/layout_util.c:1276
+msgid "_Back"
+msgstr "_Powrót"
+
+#: ../src/layout_util.c:1276
+msgid "Back"
+msgstr "Powrót"
+
+#: ../src/layout_util.c:1277
+msgid "_Home"
+msgstr "Położenie początkowe"
+
+#: ../src/layout_util.c:1277 ../src/options.c:143 ../src/ui_bookmark.c:549
+#: ../src/ui_pathsel.c:1045
+msgid "Home"
+msgstr "Położenie początkowe"
 
-#: src/layout_util.c:1058
+#: ../src/layout_util.c:1279
 msgid "New _window"
 msgstr "No_we okno"
 
-#: src/layout_util.c:1059
+#: ../src/layout_util.c:1279
+msgid "New window"
+msgstr "No_we okno"
+
+#: ../src/layout_util.c:1280
 msgid "_New collection"
 msgstr "_Nowa kolekcja"
 
-#: src/layout_util.c:1060
+#: ../src/layout_util.c:1280
+msgid "New collection"
+msgstr "_Nowa kolekcja"
+
+#: ../src/layout_util.c:1281
 msgid "_Open collection..."
 msgstr "Otwórz kolekcję..."
 
-#: src/layout_util.c:1061
-msgid "Open _recent"
+#: ../src/layout_util.c:1281
+msgid "Open collection..."
+msgstr "Otwórz kolekcję..."
+
+#: ../src/layout_util.c:1282
+msgid "Open recen_t"
+msgstr "Otwó_rz ostatni"
+
+#: ../src/layout_util.c:1282
+msgid "Open recent"
 msgstr "Otwó_rz ostatni"
 
-#: src/layout_util.c:1062
+#: ../src/layout_util.c:1283
 msgid "_Search..."
 msgstr "Szukaj..."
 
-#: src/layout_util.c:1064
-msgid "Pan _view"
-msgstr ""
+#: ../src/layout_util.c:1283
+msgid "Search..."
+msgstr "Szukaj..."
+
+#: ../src/layout_util.c:1284
+msgid "Find duplicates..."
+msgstr "Wyszukaj duplikaty..."
+
+#: ../src/layout_util.c:1285
+#, fuzzy
+msgid "Pa_n view"
+msgstr "Widok"
 
-#: src/layout_util.c:1065
+#: ../src/layout_util.c:1285
+#, fuzzy
+msgid "Pan view"
+msgstr "Widok"
+
+#: ../src/layout_util.c:1286
 msgid "_Print..."
 msgstr "Drukuj..."
 
-#: src/layout_util.c:1066
+#: ../src/layout_util.c:1287
 msgid "N_ew folder..."
 msgstr "Nowy katalog..."
 
-#: src/layout_util.c:1075
+#: ../src/layout_util.c:1287
+msgid "New folder..."
+msgstr "Nowy katalog..."
+
+#: ../src/layout_util.c:1288
+msgid "Copy..."
+msgstr "_Kopiuj..."
+
+#: ../src/layout_util.c:1289
+msgid "Move..."
+msgstr "P_rzenieś..."
+
+#: ../src/layout_util.c:1290
+msgid "Rename..."
+msgstr "Zm_ień nazwę..."
+
+#: ../src/layout_util.c:1291 ../src/layout_util.c:1292
+#: ../src/layout_util.c:1293
+msgid "Delete..."
+msgstr "_Usuń..."
+
+#: ../src/layout_util.c:1294 ../src/view_file.c:603
+#, fuzzy
+msgid "Enable file _grouping"
+msgstr "Bez filtrowania plików"
+
+#: ../src/layout_util.c:1294
+#, fuzzy
+msgid "Enable file grouping"
+msgstr "Bez filtrowania plików"
+
+#: ../src/layout_util.c:1295 ../src/view_file.c:605
+#, fuzzy
+msgid "Disable file groupi_ng"
+msgstr "Bez filtrowania plików"
+
+#: ../src/layout_util.c:1295
+#, fuzzy
+msgid "Disable file grouping"
+msgstr "Bez filtrowania plików"
+
+#: ../src/layout_util.c:1296
+msgid "_Copy path to clipboard"
+msgstr "S_kopiuj ścieżkę do schowka"
+
+#: ../src/layout_util.c:1296
+msgid "Copy path to clipboard"
+msgstr "Kopiuj ścieżkę do schowka"
+
+#: ../src/layout_util.c:1297
+msgid "Close window"
+msgstr "Zamknij okno"
+
+#: ../src/layout_util.c:1298
 msgid "_Quit"
 msgstr "Zakończ"
 
-#: src/layout_util.c:1088 src/menu.c:203
+#: ../src/layout_util.c:1298
+msgid "Quit"
+msgstr "Zakończ"
+
+#: ../src/layout_util.c:1299 ../src/menu.c:222
 msgid "_Rotate clockwise"
 msgstr "Obróć _zgodnie z zegarem"
 
-#: src/layout_util.c:1089 src/menu.c:206
+#: ../src/layout_util.c:1299
+msgid "Rotate clockwise"
+msgstr "Obróć zgodnie ze wskazówkami zegara"
+
+#: ../src/layout_util.c:1300 ../src/menu.c:225
 msgid "Rotate _counterclockwise"
 msgstr "Obróć _przeciwnie do zegara"
 
-#: src/layout_util.c:1090
+#: ../src/layout_util.c:1300
+msgid "Rotate counterclockwise"
+msgstr "Obróć przeciwnie do wskazówek zegara"
+
+#: ../src/layout_util.c:1301
 msgid "Rotate 1_80"
 msgstr "Obróć o 1_80"
 
-#: src/layout_util.c:1091 src/menu.c:212
+#: ../src/layout_util.c:1301
+msgid "Rotate 180"
+msgstr "Obróć o 180"
+
+#: ../src/layout_util.c:1302 ../src/menu.c:231
 msgid "_Mirror"
 msgstr "_Lustro"
 
-#: src/layout_util.c:1092 src/menu.c:215
+#: ../src/layout_util.c:1302
+msgid "Mirror"
+msgstr "Lustro"
+
+#: ../src/layout_util.c:1303 ../src/menu.c:234
 msgid "_Flip"
 msgstr "O_dbij"
 
-#: src/layout_util.c:1093 src/menu.c:218
-#, fuzzy
-msgid "Toggle _grayscale"
-msgstr "Przełącz pokaz _slajdów"
+#: ../src/layout_util.c:1303
+msgid "Flip"
+msgstr "Odbij"
 
-#: src/layout_util.c:1094 src/menu.c:221
-#, fuzzy
+#: ../src/layout_util.c:1304 ../src/menu.c:237
 msgid "_Original state"
-msgstr "Nazwa oryginału"
+msgstr "_Oryginalny rozmiar"
+
+#: ../src/layout_util.c:1304
+msgid "Original state"
+msgstr "Oryginalny rozmiar"
 
-#: src/layout_util.c:1097
+#: ../src/layout_util.c:1305
 msgid "Select _all"
 msgstr "Zazn_acz wszystko"
 
-#: src/layout_util.c:1098
+#: ../src/layout_util.c:1306
 msgid "Select _none"
 msgstr "Odz_nacz"
 
-#: src/layout_util.c:1099
-#, fuzzy
+#: ../src/layout_util.c:1307
 msgid "_Invert Selection"
-msgstr "Zaznaczenie"
+msgstr "Odwróć zaznaczenie"
 
-#: src/layout_util.c:1101
+#: ../src/layout_util.c:1307
+msgid "Invert Selection"
+msgstr "Odwróć zaznaczenie"
+
+#: ../src/layout_util.c:1308
 msgid "P_references..."
 msgstr "P_referencje..."
 
-#: src/layout_util.c:1102
+#: ../src/layout_util.c:1308
+msgid "Preferences..."
+msgstr "Preferencje..."
+
+#: ../src/layout_util.c:1309
+msgid "Configure _Editors..."
+msgstr "Konfiguruj _Edytory"
+
+#: ../src/layout_util.c:1309
+msgid "Configure Editors..."
+msgstr "Konfiguruj Edytory..."
+
+#: ../src/layout_util.c:1310
+msgid "_Configure this window..."
+msgstr "Konfiguruj okno przeglądarki..."
+
+#: ../src/layout_util.c:1310
+msgid "Configure this window..."
+msgstr "Konfiguruj to okno..."
+
+#: ../src/layout_util.c:1311
 msgid "_Thumbnail maintenance..."
 msgstr "Zarządzanie minia_turkami..."
 
-#: src/layout_util.c:1112 src/layout_util.c:1113
+#: ../src/layout_util.c:1311
+msgid "Thumbnail maintenance..."
+msgstr "Zarządzanie miniaturkami..."
+
+#: ../src/layout_util.c:1312
+msgid "Set as wallpaper"
+msgstr "Ustaw jako tapetę"
+
+#: ../src/layout_util.c:1313
+msgid "_Save metadata"
+msgstr "Zapi_sz metadane"
+
+#: ../src/layout_util.c:1313
+msgid "Save metadata"
+msgstr "Zapisz metadane"
+
+#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+msgid "Zoom in"
+msgstr "Powiększ"
+
+#: ../src/layout_util.c:1316 ../src/layout_util.c:1317
+msgid "Zoom out"
+msgstr "Pomniejsz"
+
+#: ../src/layout_util.c:1318 ../src/layout_util.c:1319
+msgid "Zoom 1:1"
+msgstr "Skala 1:1"
+
+#: ../src/layout_util.c:1320 ../src/layout_util.c:1321
+#: ../src/layout_util.c:1336 ../src/layout_util.c:1337
 msgid "_Zoom to fit"
 msgstr "Dopasuj do okna"
 
-#: src/layout_util.c:1114
+#: ../src/layout_util.c:1320 ../src/layout_util.c:1321
+msgid "Zoom to fit"
+msgstr "Dopasuj do okna"
+
+#: ../src/layout_util.c:1322 ../src/layout_util.c:1338
 msgid "Fit _Horizontally"
-msgstr ""
+msgstr "Dopasuj w poziomie"
+
+#: ../src/layout_util.c:1322
+msgid "Fit Horizontally"
+msgstr "Dopasuj w poziomie"
+
+#: ../src/layout_util.c:1323 ../src/layout_util.c:1339
+msgid "Fit _Vertically"
+msgstr "Dopasuj w pionie"
+
+#: ../src/layout_util.c:1323
+msgid "Fit Vertically"
+msgstr "Dopasuj w pionie"
+
+#: ../src/layout_util.c:1324 ../src/layout_util.c:1340
+msgid "Zoom _2:1"
+msgstr "Skala _2:1"
+
+#: ../src/layout_util.c:1324
+msgid "Zoom 2:1"
+msgstr "Skala 2:1"
+
+#: ../src/layout_util.c:1325 ../src/layout_util.c:1341
+msgid "Zoom _3:1"
+msgstr "Skala _3:1"
+
+#: ../src/layout_util.c:1325
+msgid "Zoom 3:1"
+msgstr "Skala 3:1"
+
+#: ../src/layout_util.c:1326 ../src/layout_util.c:1342
+msgid "Zoom _4:1"
+msgstr "Skala _4:1"
+
+#: ../src/layout_util.c:1326
+msgid "Zoom 4:1"
+msgstr "Skala 4:1"
+
+#: ../src/layout_util.c:1327 ../src/layout_util.c:1343
+msgid "Zoom 1:2"
+msgstr "Skala _1:2"
+
+#: ../src/layout_util.c:1328 ../src/layout_util.c:1344
+msgid "Zoom 1:3"
+msgstr "Skala _1:3"
+
+#: ../src/layout_util.c:1329 ../src/layout_util.c:1345
+msgid "Zoom 1:4"
+msgstr "Skala _1:4"
 
-#: src/layout_util.c:1115
-msgid "Fit _Vorizontally"
+#: ../src/layout_util.c:1330 ../src/layout_util.c:1331
+msgid "Connected Zoom in"
 msgstr ""
 
-#: src/layout_util.c:1116
+#: ../src/layout_util.c:1332 ../src/layout_util.c:1333
 #, fuzzy
-msgid "Zoom _2:1"
-msgstr "Skala _1:1"
+msgid "Connected Zoom out"
+msgstr "Pomniejsz"
 
-#: src/layout_util.c:1117
+#: ../src/layout_util.c:1334 ../src/layout_util.c:1335
 #, fuzzy
-msgid "Zoom _3:1"
-msgstr "Skala _1:1"
+msgid "Connected Zoom 1:1"
+msgstr "Ustawia powiększenie 1:1"
 
-#: src/layout_util.c:1118
+#: ../src/layout_util.c:1336 ../src/layout_util.c:1337
 #, fuzzy
-msgid "Zoom _4:1"
-msgstr "Skala _1:1"
+msgid "Connected Zoom to fit"
+msgstr "Dopasuj do okna"
+
+#: ../src/layout_util.c:1338
+msgid "Connected Fit Horizontally"
+msgstr ""
+
+#: ../src/layout_util.c:1339
+msgid "Connected Fit Vertically"
+msgstr ""
 
-#: src/layout_util.c:1119
+#: ../src/layout_util.c:1340
 #, fuzzy
-msgid "Zoom 1:2"
-msgstr "Skala _1:1"
+msgid "Connected Zoom 2:1"
+msgstr "Ustawia powiększenie 1:1"
 
-#: src/layout_util.c:1120
+#: ../src/layout_util.c:1341
 #, fuzzy
-msgid "Zoom 1:3"
-msgstr "Skala _1:1"
+msgid "Connected Zoom 3:1"
+msgstr "Ustawia powiększenie 1:1"
 
-#: src/layout_util.c:1121
+#: ../src/layout_util.c:1342
 #, fuzzy
-msgid "Zoom 1:4"
-msgstr "Skala _1:1"
+msgid "Connected Zoom 4:1"
+msgstr "Ustawia powiększenie 1:1"
+
+#: ../src/layout_util.c:1343
+#, fuzzy
+msgid "Connected Zoom 1:2"
+msgstr "Skala _1:2"
 
-#: src/layout_util.c:1124
+#: ../src/layout_util.c:1344
 #, fuzzy
+msgid "Connected Zoom 1:3"
+msgstr "Skala _1:3"
+
+#: ../src/layout_util.c:1345
+#, fuzzy
+msgid "Connected Zoom 1:4"
+msgstr "Skala _1:4"
+
+#: ../src/layout_util.c:1346
 msgid "_View in new window"
 msgstr "Podgląd w _nowym oknie"
 
-#: src/layout_util.c:1126 src/layout_util.c:1127 src/layout_util.c:1128
+#: ../src/layout_util.c:1346
+msgid "View in new window"
+msgstr "Podgląd w nowym oknie"
+
+#: ../src/layout_util.c:1347 ../src/layout_util.c:1348
+#: ../src/layout_util.c:1349
 msgid "F_ull screen"
 msgstr "P_ełny ekran"
 
-#: src/layout_util.c:1129 src/layout_util.c:1130
-#, fuzzy
-msgid "Escape"
-msgstr "poziome"
+#: ../src/layout_util.c:1350 ../src/layout_util.c:1351
+msgid "_Leave full screen"
+msgstr "Wyłącz pełny ekran"
+
+#: ../src/layout_util.c:1350 ../src/layout_util.c:1351
+msgid "Leave full screen"
+msgstr "Wyłącz pełny ekran"
+
+#: ../src/layout_util.c:1352
+msgid "_Cycle through overlay modes"
+msgstr ""
+
+#: ../src/layout_util.c:1352
+msgid "Cycle through Overlay modes"
+msgstr ""
+
+#: ../src/layout_util.c:1353
+msgid "Cycle through histogram ch_annels"
+msgstr ""
 
-#: src/layout_util.c:1131
-msgid "_Image Overlay"
+#: ../src/layout_util.c:1353
+msgid "Cycle through histogram channels"
 msgstr ""
 
-#: src/layout_util.c:1132
-msgid "Histogram _channels"
+#: ../src/layout_util.c:1354
+msgid "Cycle through histogram mo_des"
 msgstr ""
 
-#: src/layout_util.c:1133
-msgid "Histogram _log mode"
+#: ../src/layout_util.c:1354
+msgid "Cycle through histogram modes"
 msgstr ""
 
-#: src/layout_util.c:1134
+#: ../src/layout_util.c:1355
 msgid "_Hide file list"
 msgstr "Ukrycie _listy plików"
 
-#: src/layout_util.c:1135
+#: ../src/layout_util.c:1355
 #, fuzzy
+msgid "Hide file list"
+msgstr "Ukrycie _listy plików"
+
+#: ../src/layout_util.c:1356
 msgid "_Pause slideshow"
 msgstr "W_strzymaj pokaz slajdów"
 
-#: src/layout_util.c:1136
+#: ../src/layout_util.c:1356
+msgid "Pause slideshow"
+msgstr "Wstrzymaj pokaz slajdów"
+
+#: ../src/layout_util.c:1357
 msgid "_Refresh"
 msgstr "_Odśwież"
 
-#: src/layout_util.c:1138
+#: ../src/layout_util.c:1357
+msgid "Refresh"
+msgstr "Odśwież"
+
+#: ../src/layout_util.c:1358
 msgid "_Contents"
 msgstr "Indeks"
 
-#: src/layout_util.c:1139
+#: ../src/layout_util.c:1358
+#, fuzzy
+msgid "Contents"
+msgstr "Indeks"
+
+#: ../src/layout_util.c:1359
 msgid "_Keyboard shortcuts"
 msgstr "Skróty _klawiszowe"
 
-#: src/layout_util.c:1140
+#: ../src/layout_util.c:1359
+msgid "Keyboard shortcuts"
+msgstr "Skróty klawiszowe"
+
+#: ../src/layout_util.c:1360
 msgid "_Release notes"
 msgstr "Wydanie"
 
-#: src/layout_util.c:1141
+#: ../src/layout_util.c:1360
+msgid "Release notes"
+msgstr "O wydaniu"
+
+#: ../src/layout_util.c:1361
 msgid "_About"
 msgstr "O progr_amie"
 
-#: src/layout_util.c:1145 src/layout_util.c:1546
-msgid "_Thumbnails"
-msgstr "Minia_turki"
+#: ../src/layout_util.c:1361 ../src/preferences.c:2190
+msgid "About"
+msgstr "O progr_amie"
+
+#: ../src/layout_util.c:1362
+msgid "_Log Window"
+msgstr "Okno _logów"
+
+#: ../src/layout_util.c:1362
+msgid "Log Window"
+msgstr "Okno logów"
+
+#: ../src/layout_util.c:1363
+msgid "_Exif window"
+msgstr "Okno danych Exif"
+
+#: ../src/layout_util.c:1363
+msgid "Exif window"
+msgstr "Okno danych Exif"
+
+#: ../src/layout_util.c:1364
+msgid "_Cycle through stereo modes"
+msgstr ""
+
+#: ../src/layout_util.c:1364
+msgid "Cycle through stereo modes"
+msgstr ""
+
+#: ../src/layout_util.c:1369
+msgid "Show _Thumbnails"
+msgstr "Pokaż _miniaturki"
+
+#: ../src/layout_util.c:1369
+msgid "Show Thumbnails"
+msgstr "Pokaż miniaturki"
 
-#: src/layout_util.c:1146
+#: ../src/layout_util.c:1370
 #, fuzzy
 msgid "Show _Marks"
 msgstr "Wyświetlanie ukrytych"
 
-#: src/layout_util.c:1147
+#: ../src/layout_util.c:1370
+#, fuzzy
+msgid "Show Marks"
+msgstr "Wyświetlanie ukrytych"
+
+#: ../src/layout_util.c:1371
+msgid "Pi_xel Info"
+msgstr "Wyświetlanie informacji o pikselach"
+
+#: ../src/layout_util.c:1371
+msgid "Show Pixel Info"
+msgstr "Wyświetlaj informacje o pikselach"
+
+#: ../src/layout_util.c:1372
 msgid "_Float file list"
 msgstr "Oderwana lista plików"
 
-#: src/layout_util.c:1148
+#: ../src/layout_util.c:1372
+msgid "Float file list"
+msgstr "Oderwana lista plików"
+
+#: ../src/layout_util.c:1373
 msgid "Hide tool_bar"
 msgstr "Ukryj pasek narzędzi"
 
-#: src/layout_util.c:1149
-msgid "_Keywords"
-msgstr "Słowa _kluczowe"
+#: ../src/layout_util.c:1373
+msgid "Hide toolbar"
+msgstr "Ukryj pasek narzędzi"
+
+#: ../src/layout_util.c:1374
+msgid "_Info sidebar"
+msgstr "Panel _Informacyjny"
 
-#: src/layout_util.c:1150
-msgid "E_xif data"
-msgstr "Dane E_xif"
+#: ../src/layout_util.c:1374
+msgid "Info sidebar"
+msgstr "Panel informacyjny"
 
-#: src/layout_util.c:1151
+#: ../src/layout_util.c:1375
 msgid "Sort _manager"
 msgstr "_Menedżer sortowania"
 
-#: src/layout_util.c:1152
-msgid "Co_nnected scroll"
-msgstr ""
-
-#: src/layout_util.c:1153
-msgid "C_onnected zoom"
-msgstr ""
+#: ../src/layout_util.c:1375
+msgid "Sort manager"
+msgstr "_Menedżer sortowania"
 
-#: src/layout_util.c:1154
+#: ../src/layout_util.c:1376
 msgid "Toggle _slideshow"
 msgstr "Przełącz pokaz _slajdów"
 
-#: src/layout_util.c:1158 src/view_dir.c:29
-msgid "_List"
-msgstr "_Lista"
+#: ../src/layout_util.c:1376
+msgid "Toggle slideshow"
+msgstr "Przełącz pokaz _slajdów"
 
-#: src/layout_util.c:1159
-msgid "I_cons"
-msgstr "Ikony"
+#: ../src/layout_util.c:1377
+msgid "Use _color profiles"
+msgstr "Użyj profili kolorów"
 
-#: src/layout_util.c:1163
-msgid "Horizontal"
-msgstr ""
+#: ../src/layout_util.c:1377
+msgid "Use color profiles"
+msgstr "Użyj profili kolorów"
 
-#: src/layout_util.c:1164
-#, fuzzy
-msgid "Vertical"
-msgstr "częściowe"
+#: ../src/layout_util.c:1378
+msgid "Use profile from _image"
+msgstr "Użyj prof_ili z obrazu"
 
-#: src/layout_util.c:1165
-msgid "Quad"
-msgstr ""
+#: ../src/layout_util.c:1378
+msgid "Use profile from image"
+msgstr "Użyj profili z obrazu"
+
+#: ../src/layout_util.c:1379
+msgid "Toggle _grayscale"
+msgstr "Przełącz na odcienie szarości"
 
-#: src/layout_util.c:1166
+#: ../src/layout_util.c:1379
 #, fuzzy
-msgid "Single"
-msgstr "Rozmiar"
+msgid "Toggle grayscale"
+msgstr "Przełącz pokaz _slajdów"
 
-#: src/layout_util.c:1354
-#, c-format
-msgid "Mark _%d"
-msgstr ""
+#: ../src/layout_util.c:1380
+#, fuzzy
+msgid "Image Overlay"
+msgstr "Wyszukiwanie obrazu"
 
-#: src/layout_util.c:1355 src/view_file.c:515
-#, c-format
-msgid "_Set mark %d"
-msgstr ""
+#: ../src/layout_util.c:1381
+msgid "_Show Histogram"
+msgstr "Pokaż _Histogram"
 
-#: src/layout_util.c:1356 src/view_file.c:516
-#, c-format
-msgid "_Reset mark %d"
-msgstr ""
+#: ../src/layout_util.c:1381
+msgid "Show Histogram"
+msgstr "Pokaż Histogram"
 
-#: src/layout_util.c:1357 src/layout_util.c:1358 src/view_file.c:517
-#, c-format
-msgid "_Toggle mark %d"
-msgstr ""
+#: ../src/layout_util.c:1385
+msgid "Image _List"
+msgstr "W postaci listy"
 
-#: src/layout_util.c:1359 src/layout_util.c:1360 src/view_file.c:518
-#, fuzzy, c-format
-msgid "_Select mark %d"
-msgstr "Zaznacz wszystko"
+#: ../src/layout_util.c:1385
+msgid "View Images as List"
+msgstr "Wyświetlanie jako listę"
 
-#: src/layout_util.c:1361 src/view_file.c:519
-#, fuzzy, c-format
-msgid "_Add mark %d"
-msgstr "Dodanie zakładki"
+#: ../src/layout_util.c:1386
+msgid "I_cons"
+msgstr "Ikony"
 
-#: src/layout_util.c:1362 src/view_file.c:520
-#, c-format
-msgid "_Intersection with mark %d"
-msgstr ""
+#: ../src/layout_util.c:1386
+msgid "View Images as Icons"
+msgstr "Wyświetlanie jako ikony"
 
-#: src/layout_util.c:1363 src/view_file.c:521
-#, c-format
-msgid "_Unselect mark %d"
-msgstr ""
+#: ../src/layout_util.c:1390
+msgid "Folder Li_st"
+msgstr "Katalogi jako lista"
 
-#: src/layout_util.c:1547
-msgid "Show thumbnails"
-msgstr "Pokaż miniaturki"
+#: ../src/layout_util.c:1390
+msgid "View Folders as List"
+msgstr "Pokaż katalogi jako listę"
 
-#: src/layout_util.c:1552
-msgid "Change to home folder"
-msgstr "Przejdź do katalogu domowego"
+#: ../src/layout_util.c:1391
+msgid "Folder T_ree"
+msgstr "Widok drzewiasty"
 
-#: src/layout_util.c:1554
-msgid "Refresh file list"
-msgstr "Odświeża listę plików"
+#: ../src/layout_util.c:1391
+msgid "View Folders as Tree"
+msgstr "Widok drzewiasty"
 
-#: src/layout_util.c:1556
-msgid "Zoom in"
-msgstr "Powiększ"
+#: ../src/layout_util.c:1395
+msgid "_Horizontal"
+msgstr "W poziomie"
 
-#: src/layout_util.c:1558
-msgid "Zoom out"
-msgstr "Pomniejsz"
+#: ../src/layout_util.c:1395
+msgid "Split Horizontal"
+msgstr "Podziel w poziomie"
 
-#: src/layout_util.c:1560 src/preferences.c:978
-msgid "Fit image to window"
-msgstr "Dopasuj do okna"
+#: ../src/layout_util.c:1396
+msgid "_Vertical"
+msgstr "W pionie"
 
-#: src/layout_util.c:1562
-msgid "Set zoom 1:1"
-msgstr "Ustawia powiększenie 1:1"
+#: ../src/layout_util.c:1396
+msgid "Split Vertical"
+msgstr "Podziel w pionie"
 
-#: src/layout_util.c:1564
-msgid "Configure options"
-msgstr "Opcje konfiguracji"
+#: ../src/layout_util.c:1397
+msgid "_Quad"
+msgstr "Na cztery"
 
-#: src/layout_util.c:1565
-msgid "_Float"
-msgstr "Format"
+#: ../src/layout_util.c:1397
+msgid "Split Quad"
+msgstr "Podziel na cztery"
 
-#: src/layout_util.c:1566
-msgid "Float Controls"
-msgstr "Odłącza panel sterujący"
+#: ../src/layout_util.c:1398
+msgid "_Single"
+msgstr "Pojedynczy"
+
+#: ../src/layout_util.c:1398
+msgid "Split Single"
+msgstr "Bez dzielenia"
+
+#: ../src/layout_util.c:1402
+msgid "Input _0: sRGB"
+msgstr ""
+
+#: ../src/layout_util.c:1402
+msgid "Input 0: sRGB"
+msgstr ""
+
+#: ../src/layout_util.c:1403
+msgid "Input _1: AdobeRGB compatible"
+msgstr ""
+
+#: ../src/layout_util.c:1403
+msgid "Input 1: AdobeRGB compatible"
+msgstr ""
+
+#: ../src/layout_util.c:1404
+msgid "Input _2"
+msgstr ""
+
+#: ../src/layout_util.c:1404
+msgid "Input 2"
+msgstr ""
+
+#: ../src/layout_util.c:1405
+msgid "Input _3"
+msgstr ""
+
+#: ../src/layout_util.c:1405
+msgid "Input 3"
+msgstr ""
+
+#: ../src/layout_util.c:1406
+msgid "Input _4"
+msgstr ""
+
+#: ../src/layout_util.c:1406
+msgid "Input 4"
+msgstr ""
+
+#: ../src/layout_util.c:1407
+msgid "Input _5"
+msgstr ""
+
+#: ../src/layout_util.c:1407
+msgid "Input 5"
+msgstr ""
+
+#: ../src/layout_util.c:1411
+msgid "Histogram on Red"
+msgstr ""
+
+#: ../src/layout_util.c:1412
+msgid "Histogram on Green"
+msgstr ""
+
+#: ../src/layout_util.c:1413
+msgid "Histogram on Blue"
+msgstr ""
+
+#: ../src/layout_util.c:1414
+msgid "Histogram on RGB"
+msgstr ""
+
+#: ../src/layout_util.c:1415
+msgid "Histogram on Value"
+msgstr ""
+
+#: ../src/layout_util.c:1419
+msgid "Linear Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:1420
+msgid "_Log Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:1420
+msgid "Log Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:1424
+msgid "_Auto"
+msgstr ""
+
+#: ../src/layout_util.c:1424
+msgid "Stereo Auto"
+msgstr ""
+
+#: ../src/layout_util.c:1425
+msgid "_Side by Side"
+msgstr ""
+
+#: ../src/layout_util.c:1425
+msgid "Stereo Side by Side"
+msgstr ""
+
+#: ../src/layout_util.c:1426
+msgid "_Cross"
+msgstr ""
+
+#: ../src/layout_util.c:1426
+msgid "Stereo Cross"
+msgstr ""
+
+#: ../src/layout_util.c:1427
+msgid "_Off"
+msgstr ""
+
+#: ../src/layout_util.c:1427
+msgid "Stereo Off"
+msgstr ""
+
+#: ../src/layout_util.c:1701
+#, c-format
+msgid "Mark _%d"
+msgstr ""
+
+#: ../src/layout_util.c:1702 ../src/view_file.c:540
+#, c-format
+msgid "_Set mark %d"
+msgstr ""
+
+#: ../src/layout_util.c:1702
+#, fuzzy, c-format
+msgid "Set mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1703 ../src/view_file.c:541
+#, c-format
+msgid "_Reset mark %d"
+msgstr ""
+
+#: ../src/layout_util.c:1703
+#, fuzzy, c-format
+msgid "Reset mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1704 ../src/layout_util.c:1705 ../src/view_file.c:542
+#, c-format
+msgid "_Toggle mark %d"
+msgstr ""
+
+#: ../src/layout_util.c:1704 ../src/layout_util.c:1705
+#, fuzzy, c-format
+msgid "Toggle mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1706
+#, fuzzy, c-format
+msgid "Se_lect mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1706 ../src/layout_util.c:1707
+#, fuzzy, c-format
+msgid "Select mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1707 ../src/view_file.c:543
+#, fuzzy, c-format
+msgid "_Select mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1708 ../src/view_file.c:544
+#, fuzzy, c-format
+msgid "_Add mark %d"
+msgstr "Dodanie zakładki"
+
+#: ../src/layout_util.c:1708
+#, fuzzy, c-format
+msgid "Add mark %d"
+msgstr "Dodanie zakładki"
+
+#: ../src/layout_util.c:1709 ../src/view_file.c:545
+#, c-format
+msgid "_Intersection with mark %d"
+msgstr ""
+
+#: ../src/layout_util.c:1709
+#, fuzzy, c-format
+msgid "Intersection with mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1710 ../src/view_file.c:546
+#, c-format
+msgid "_Unselect mark %d"
+msgstr ""
+
+#: ../src/layout_util.c:1710
+#, fuzzy, c-format
+msgid "Unselect mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1711
+#, fuzzy, c-format
+msgid "_Filter mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:1711
+#, fuzzy, c-format
+msgid "Filter mark %d"
+msgstr "Zaznacz wszystko"
+
+#: ../src/layout_util.c:2238
+#, c-format
+msgid "Number of files with unsaved metadata: %d"
+msgstr "Liczba plików z niezapisanymi metadanymi: %d"
+
+#: ../src/layout_util.c:2244
+msgid "No unsaved metadata"
+msgstr "Brak niezapisanych metadanych"
+
+#: ../src/layout_util.c:2291
+#, c-format
+msgid ""
+"Image profile: %s\n"
+"Screen profile: %s"
+msgstr ""
+
+#: ../src/layout_util.c:2299
+msgid "Click to enable color management"
+msgstr ""
+
+#: ../src/layout_util.c:2304
+msgid "Color profiles not supported"
+msgstr ""
+
+#: ../src/layout_util.c:2326
+#, c-format
+msgid "Input _%d: %s"
+msgstr ""
 
 #. something went badly wrong
-#: src/lirc.c:184
+#: ../src/lirc.c:197
 #, c-format
 msgid "disconnected from LIRC\n"
 msgstr ""
 
-#: src/lirc.c:199
+#: ../src/lirc.c:212
 #, c-format
 msgid "Could not init LIRC support\n"
 msgstr ""
 
-#: src/lirc.c:206
+#: ../src/lirc.c:219
 #, c-format
 msgid ""
 "could not read LIRC config file\n"
@@ -2360,7 +3167,11 @@ msgid ""
 "know how to create a proper config file\n"
 msgstr ""
 
-#: src/main.c:391
+#: ../src/logwindow.c:76
+msgid "Log"
+msgstr ""
+
+#: ../src/main.c:320
 #, fuzzy, c-format
 msgid ""
 "Usage: %s [options] [path]\n"
@@ -2369,56 +3180,56 @@ msgstr ""
 "Użycie: gqview [opcje] [ścieżka]\n"
 "\n"
 
-#: src/main.c:392
+#: ../src/main.c:321
 msgid "valid options are:\n"
 msgstr "poprawnymi opcjami są:\n"
 
-#: src/main.c:393
+#: ../src/main.c:322
 msgid "  +t, --with-tools           force show of tools\n"
 msgstr "  +t, --with-tools           wymusza wyświetlenie narzędzi\n"
 
-#: src/main.c:394
+#: ../src/main.c:323
 msgid "  -t, --without-tools        force hide of tools\n"
 msgstr "  -t, --without-tools        wymusza ukrycie narzędzi\n"
 
-#: src/main.c:395
+#: ../src/main.c:324
 msgid "  -f, --fullscreen           start in full screen mode\n"
 msgstr "  -f, --fullscreen           uruchamia w trybie pełnoekranowym\n"
 
-#: src/main.c:396
+#: ../src/main.c:325
 msgid "  -s, --slideshow            start in slideshow mode\n"
 msgstr "  -s, --slideshow            uruchamia w trybie slajdowym\n"
 
-#: src/main.c:397
+#: ../src/main.c:326
 msgid "  -l, --list                 open collection window for command line\n"
 msgstr ""
 "  -l, --list                 otwiera okno kolekcji z plikami z wiersza "
 "poleceń\n"
 
-#: src/main.c:398
+#: ../src/main.c:327
 msgid "      --geometry=GEOMETRY    set main window location\n"
 msgstr ""
 
-#: src/main.c:399
+#: ../src/main.c:328
 msgid "  -r, --remote               send following commands to open window\n"
 msgstr "  -r, --remote               wyślij polecenia do otwartego okna\n"
 
-#: src/main.c:400
+#: ../src/main.c:329
 msgid "  -rh,--remote-help          print remote command list\n"
 msgstr ""
 
-#: src/main.c:402
+#: ../src/main.c:331
 #, fuzzy
 msgid "  --debug[=level]            turn on debug output\n"
 msgstr ""
 "  --debug                    uaktywnia wyświetlanie komunikatów\n"
 "                                    diagnostycznych\n"
 
-#: src/main.c:404
+#: ../src/main.c:333
 msgid "  -v, --version              print version info\n"
 msgstr "  -v, --version              wypisuje informację na temat wersji\n"
 
-#: src/main.c:405
+#: ../src/main.c:334
 msgid ""
 "  -h, --help                 show this message\n"
 "\n"
@@ -2426,7 +3237,7 @@ msgstr ""
 "  -h, --help                 wypisuje ten komunikat\n"
 "\n"
 
-#: src/main.c:417
+#: ../src/main.c:346
 #, c-format
 msgid ""
 "invalid or ignored: %s\n"
@@ -2435,315 +3246,584 @@ msgstr ""
 "niepoprawna lub zignorowana: %s\n"
 "Użyj --help aby uzyskać informacje o opcjach\n"
 
-#: src/main.c:445
+#: ../src/main.c:375
 #, fuzzy
 msgid "Invalid or ignored remote options: "
 msgstr ""
 "niepoprawna lub zignorowana: %s\n"
 "Użyj --help aby uzyskać informacje o opcjach\n"
 
-#: src/main.c:454
+#: ../src/main.c:384
 msgid ""
 "\n"
 "Use --remote-help for valid remote options.\n"
 msgstr ""
 
-#: src/main.c:539
-#, fuzzy, c-format
+#: ../src/main.c:486
+#, c-format
 msgid "Creating %s dir:%s\n"
-msgstr "Tworzenie katalogu Geeqie:%s\n"
+msgstr "Tworzenie  katalogu %s:%s\n"
 
-#: src/main.c:543
+#: ../src/main.c:490
 #, c-format
 msgid "Could not create dir:%s\n"
 msgstr "Nie można utworzyć katalogu: %s\n"
 
-#: src/main.c:562 src/ui_bookmark.c:856 src/ui_pathsel.c:1051
-msgid "Home"
-msgstr "Położenie początkowe"
+#: ../src/main.c:542
+#, c-format
+msgid "error saving file: %s\n"
+msgstr "błąd przy zapisie pliku: %s\n"
 
-#: src/main.c:564 src/ui_bookmark.c:863
-msgid "Desktop"
-msgstr "Pulpit"
+#: ../src/main.c:561
+#, c-format
+msgid ""
+"error saving file: %s\n"
+"error: %s\n"
+msgstr ""
+"błąd przy zapisie pliku: %s\n"
+"błąd: %s\n"
 
-#: src/main.c:680
-#, fuzzy
+#: ../src/main.c:669
 msgid "exit"
-msgstr "Tekst"
+msgstr "wyjście"
 
-#: src/main.c:685
-#, fuzzy, c-format
+#: ../src/main.c:674
+#, c-format
 msgid "Quit %s"
-msgstr "Zakończ"
+msgstr "Zakończ %s"
 
-#: src/main.c:687
+#: ../src/main.c:676
 msgid "Collections have been modified. Quit anyway?"
 msgstr "Kolekcje zostały zmienione. Mimo to zakończyć?"
 
-#: src/main.c:836 src/remote.c:536
+#: ../src/main.c:876 ../src/remote.c:601
 msgid "Command line"
 msgstr "Wiersz poleceń"
 
-#: src/menu.c:117
+#: ../src/menu.c:133
 msgid "Sort by size"
 msgstr "Uporządkuj według rozmiaru"
 
-#: src/menu.c:120
+#: ../src/menu.c:136
 msgid "Sort by date"
 msgstr "Uporządkuj według daty"
 
-#: src/menu.c:123
+#: ../src/menu.c:139
+#, fuzzy
+msgid "Sort by Exif-date"
+msgstr "Sortuj według daty E_xif"
+
+#: ../src/menu.c:142
 msgid "Unsorted"
 msgstr "Nieuporządkowane"
 
-#: src/menu.c:126
+#: ../src/menu.c:145
 msgid "Sort by path"
 msgstr "Uporządkuj według ścieżki"
 
-#: src/menu.c:129
+#: ../src/menu.c:148
 msgid "Sort by number"
 msgstr "Uporządkuj według numeru"
 
-#: src/menu.c:133
+#: ../src/menu.c:152
 msgid "Sort by name"
 msgstr "Uporządkuj według nazwy"
 
-#: src/menu.c:184
+#: ../src/menu.c:203
 msgid "Sort"
 msgstr "Uporządkuj"
 
-#: src/menu.c:209
+#: ../src/menu.c:228
 msgid "Rotate _180"
 msgstr "Obróć o _180"
 
-#: src/pan-view.c:470
+#: ../src/metadata.c:1599
+msgid "People"
+msgstr "Ludzie"
+
+#: ../src/metadata.c:1600
+msgid "Family"
+msgstr "Rodzina"
+
+#: ../src/metadata.c:1601
+msgid "Free time"
+msgstr "Wolny czas"
+
+#: ../src/metadata.c:1602
+msgid "Children"
+msgstr "Dzieci"
+
+#: ../src/metadata.c:1603
+msgid "Sport"
+msgstr "Sport"
+
+#: ../src/metadata.c:1604
+msgid "Culture"
+msgstr "Kultura"
+
+#: ../src/metadata.c:1605
+msgid "Festival"
+msgstr "Festiwal"
+
+#: ../src/metadata.c:1606
+msgid "Nature"
+msgstr "Natura"
+
+#: ../src/metadata.c:1607
+msgid "Animal"
+msgstr "Zwierzę"
+
+#: ../src/metadata.c:1608
+msgid "Bird"
+msgstr "Ptak"
+
+#: ../src/metadata.c:1609
+msgid "Insect"
+msgstr "Owady"
+
+#: ../src/metadata.c:1610
+msgid "Pets"
+msgstr "Zwierzaki"
+
+#: ../src/metadata.c:1611
+msgid "Wildlife"
+msgstr "Fauna i flora"
+
+#: ../src/metadata.c:1612
+msgid "Zoo"
+msgstr "Zoo"
+
+#: ../src/metadata.c:1613
+msgid "Plant"
+msgstr "Roślina"
+
+#: ../src/metadata.c:1614
+msgid "Tree"
+msgstr "Drzewo"
+
+#: ../src/metadata.c:1615
+msgid "Flower"
+msgstr "Kwiat"
+
+#: ../src/metadata.c:1616
+msgid "Water"
+msgstr "Woda"
+
+#: ../src/metadata.c:1617
+msgid "River"
+msgstr "Rzeka"
+
+#: ../src/metadata.c:1618
+msgid "Lake"
+msgstr "Jezioro"
+
+#: ../src/metadata.c:1619
+msgid "Sea"
+msgstr "Morze"
+
+#: ../src/metadata.c:1620 ../src/print.c:375
+msgid "Landscape"
+msgstr "Pejzaż"
+
+#: ../src/metadata.c:1621
+msgid "Art"
+msgstr "Sztuka"
+
+#: ../src/metadata.c:1622
+msgid "Statue"
+msgstr "Statua"
+
+#: ../src/metadata.c:1623
+msgid "Painting"
+msgstr "Malowidło"
+
+#: ../src/metadata.c:1624 ../src/metadata.c:1638
+msgid "Historic"
+msgstr "Historyczne"
+
+#: ../src/metadata.c:1625 ../src/metadata.c:1639
+msgid "Modern"
+msgstr "Nowoczesne"
+
+#: ../src/metadata.c:1626
+msgid "City"
+msgstr "Miasto"
+
+#: ../src/metadata.c:1627
+msgid "Park"
+msgstr "Park"
+
+#: ../src/metadata.c:1628
+msgid "Street"
+msgstr "Ulica"
+
+#: ../src/metadata.c:1629
+msgid "Square"
+msgstr "Plac"
+
+#: ../src/metadata.c:1630
+msgid "Architecture"
+msgstr "Architektura"
+
+#: ../src/metadata.c:1631
+msgid "Buildings"
+msgstr "Budynki"
+
+#: ../src/metadata.c:1632
+msgid "House"
+msgstr "Dom"
+
+#: ../src/metadata.c:1633
+msgid "Cathedral"
+msgstr "Katedra"
+
+#: ../src/metadata.c:1634
+msgid "Palace"
+msgstr "Pałac"
+
+#: ../src/metadata.c:1635
+msgid "Castle"
+msgstr "Zamek"
+
+#: ../src/metadata.c:1636
+msgid "Bridge"
+msgstr "Most"
+
+#: ../src/metadata.c:1637
+msgid "Interior"
+msgstr "Wnętrze"
+
+#: ../src/metadata.c:1640
+msgid "Places"
+msgstr "Miejsca"
+
+#: ../src/metadata.c:1641
+msgid "Conditions"
+msgstr "Warunki"
+
+#: ../src/metadata.c:1642
+msgid "Night"
+msgstr "Noc"
+
+#: ../src/metadata.c:1643
+msgid "Lights"
+msgstr "Światła"
+
+#: ../src/metadata.c:1644
+msgid "Reflections"
+msgstr "Odbicia"
+
+#: ../src/metadata.c:1645
+msgid "Sun"
+msgstr "Słońce"
+
+#: ../src/metadata.c:1646
+msgid "Weather"
+msgstr "Pogoda"
+
+#: ../src/metadata.c:1647
+msgid "Fog"
+msgstr "Mgła"
+
+#: ../src/metadata.c:1648
+msgid "Rain"
+msgstr "Deszcz"
+
+#: ../src/metadata.c:1649
+msgid "Clouds"
+msgstr "Chmury"
+
+#: ../src/metadata.c:1650
+msgid "Snow"
+msgstr "Śnieg"
+
+#: ../src/metadata.c:1651
+msgid "Sunny weather"
+msgstr "Słoneczna pogoda"
+
+#: ../src/metadata.c:1652
+msgid "Photo"
+msgstr "Fotografia"
+
+#: ../src/metadata.c:1653
+msgid "Edited"
+msgstr "Edytowany"
+
+#: ../src/metadata.c:1654
+msgid "Detail"
+msgstr "Szczegóły"
+
+#: ../src/metadata.c:1655
+msgid "Macro"
+msgstr "Makro"
+
+#: ../src/metadata.c:1656 ../src/print.c:374
+msgid "Portrait"
+msgstr "Portret"
+
+#: ../src/metadata.c:1657
+msgid "Black and White"
+msgstr "Biało-czarny"
+
+#: ../src/metadata.c:1658
+msgid "Perspective"
+msgstr "Perspektywa"
+
+#: ../src/options.c:145 ../src/ui_bookmark.c:556
+msgid "Desktop"
+msgstr "Pulpit"
+
+#: ../src/pan-view.c:423
 #, c-format
 msgid "%d images, %s"
 msgstr "%d obrazów, %s"
 
-#: src/pan-view.c:480
+#: ../src/pan-view.c:433
 #, c-format
 msgid "The pan view does not support the folder \"%s\"."
 msgstr ""
 
-#: src/pan-view.c:481
+#: ../src/pan-view.c:434
 msgid "Folder not supported"
 msgstr ""
 
-#: src/pan-view.c:1083 src/pan-view.c:1099
+#: ../src/pan-view.c:986 ../src/pan-view.c:1002
 msgid "Reading image data..."
 msgstr "Wczytywanie danych obrazu..."
 
-#: src/pan-view.c:1158
+#: ../src/pan-view.c:1061
 msgid "Sorting images..."
 msgstr "Sortowanie obrazów..."
 
-#: src/pan-view.c:1546 src/pan-view.c:1912
+#: ../src/pan-view.c:1365 ../src/print.c:2599
+msgid "Filename:"
+msgstr "Nazwa pliku:"
+
+#: ../src/pan-view.c:1367 ../src/pan-view.c:2183 ../src/preferences.c:1378
+msgid "Location:"
+msgstr "Położenie:"
+
+#: ../src/pan-view.c:1369 ../src/pan-view.c:1735
 msgid "Date:"
 msgstr "Data:"
 
-#: src/pan-view.c:1548 src/preferences.c:887 src/print.c:3245 src/print.c:3456
+#: ../src/pan-view.c:1371 ../src/preferences.c:1204 ../src/print.c:3212
+#: ../src/print.c:3417
 msgid "Size:"
 msgstr "Rozmiar:"
 
-#: src/pan-view.c:1650
+#: ../src/pan-view.c:1473
 msgid "path found"
-msgstr ""
+msgstr "znaleziono ścieżkę"
 
-#: src/pan-view.c:1650
+#: ../src/pan-view.c:1473
 msgid "filename found"
-msgstr ""
+msgstr "plik znaleziony"
 
-#: src/pan-view.c:1698
+#: ../src/pan-view.c:1521
 msgid "partial match"
 msgstr "częściowe dopasowanie"
 
-#: src/pan-view.c:1909 src/pan-view.c:1942
+#: ../src/pan-view.c:1732 ../src/pan-view.c:1765
 msgid "no match"
 msgstr "brak dopasowania"
 
-#: src/pan-view.c:2268 src/search.c:2150
+#: ../src/pan-view.c:2071 ../src/search.c:2169
 msgid "Folder not found"
-msgstr ""
+msgstr "Katalog nie został znaleziony"
 
-#: src/pan-view.c:2269
+#: ../src/pan-view.c:2072
 msgid "The entered path is not a folder"
 msgstr ""
 
-#: src/pan-view.c:2368
+#: ../src/pan-view.c:2167
 #, fuzzy
 msgid "Pan View"
 msgstr "Widok"
 
-#: src/pan-view.c:2393
+#: ../src/pan-view.c:2192
 msgid "Timeline"
 msgstr "Linia czasu"
 
-#: src/pan-view.c:2394
+#: ../src/pan-view.c:2193
 msgid "Calendar"
 msgstr "Kalendarz"
 
-#: src/pan-view.c:2396
+#: ../src/pan-view.c:2195
 msgid "Folders (flower)"
 msgstr "Katalogi (kwiat)"
 
-#: src/pan-view.c:2397
+#: ../src/pan-view.c:2196
 msgid "Grid"
-msgstr ""
+msgstr "Siatka"
 
-#: src/pan-view.c:2406
+#: ../src/pan-view.c:2205
 msgid "Dots"
 msgstr "punkty"
 
-#: src/pan-view.c:2407
+#: ../src/pan-view.c:2206
 msgid "No Images"
 msgstr "Brak obrazów"
 
-#: src/pan-view.c:2408
+#: ../src/pan-view.c:2207
 msgid "Small Thumbnails"
 msgstr "Mniejsze miniaturki"
 
-#: src/pan-view.c:2409
+#: ../src/pan-view.c:2208
 msgid "Normal Thumbnails"
 msgstr "Zwykłe miniaturki"
 
-#: src/pan-view.c:2410
+#: ../src/pan-view.c:2209
 msgid "Large Thumbnails"
 msgstr "Duże miniaturki"
 
-#: src/pan-view.c:2411 src/pan-view.c:2863
+#: ../src/pan-view.c:2210 ../src/pan-view.c:2665
 msgid "1:10 (10%)"
 msgstr "1:10 (10%)"
 
-#: src/pan-view.c:2412 src/pan-view.c:2859
+#: ../src/pan-view.c:2211 ../src/pan-view.c:2661
 msgid "1:4 (25%)"
 msgstr "1:4 (25%)"
 
-#: src/pan-view.c:2413 src/pan-view.c:2855
+#: ../src/pan-view.c:2212 ../src/pan-view.c:2657
 msgid "1:3 (33%)"
 msgstr "1:3 (33%)"
 
-#: src/pan-view.c:2414 src/pan-view.c:2851
+#: ../src/pan-view.c:2213 ../src/pan-view.c:2653
 msgid "1:2 (50%)"
 msgstr "1:2 (50%)"
 
-#: src/pan-view.c:2415
+#: ../src/pan-view.c:2214
 msgid "1:1 (100%)"
 msgstr "1:1 (100%)"
 
-#: src/pan-view.c:2463
+#: ../src/pan-view.c:2262
 msgid "Find:"
 msgstr "Znajdź:"
 
-#: src/pan-view.c:2506
-msgid "Use Exif date"
-msgstr "Użyj daty Exif"
-
-#: src/pan-view.c:2519
+#: ../src/pan-view.c:2313
 msgid "Find"
 msgstr "Znajdź"
 
-#: src/pan-view.c:2586
+#: ../src/pan-view.c:2380
 msgid "Pan View Performance"
 msgstr ""
 
-#: src/pan-view.c:2593
+#: ../src/pan-view.c:2387
 msgid "Pan view performance may be poor."
 msgstr ""
 
-#: src/pan-view.c:2594
+#: ../src/pan-view.c:2388
 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.c:2602 src/preferences.c:890
+#: ../src/pan-view.c:2396 ../src/preferences.c:1207
 msgid "Cache thumbnails"
-msgstr ""
+msgstr "Bufor miniaturek"
 
-#: src/pan-view.c:2604 src/preferences.c:896
+#: ../src/pan-view.c:2398
 msgid "Use shared thumbnail cache"
 msgstr "Użyj współdzielonego cache miniaturek"
 
-#: src/pan-view.c:2610
+#: ../src/pan-view.c:2404
 msgid "Do not show this dialog again"
 msgstr "Więcej nie pokazuj tego okna"
 
-#: src/pan-view.c:2831
+#: ../src/pan-view.c:2633
 msgid "Sort by E_xif date"
 msgstr "Sortuj według daty E_xif"
 
-#: src/pan-view.c:2837
+#: ../src/pan-view.c:2639
 msgid "_Show Exif information"
-msgstr ""
+msgstr "Pokaż informacje Exif"
 
-#: src/pan-view.c:2839
-#, fuzzy
+#: ../src/pan-view.c:2641
 msgid "Show im_age"
-msgstr "Wyświetlanie ukrytych"
+msgstr "Pok_aż obraz"
 
-#: src/pan-view.c:2843
-#, fuzzy
+#: ../src/pan-view.c:2645
 msgid "_None"
 msgstr "Brak"
 
-#: src/pan-view.c:2847
-#, fuzzy
+#: ../src/pan-view.c:2649
 msgid "_Full size"
 msgstr "Pełny rozmiar"
 
-#. note: the order is important, it must match the values of
-#. * EXIF_UI_OFF, _IFSET, _ON
-#: src/preferences.c:402
-msgid "Never"
-msgstr ""
-
-#: src/preferences.c:403
-msgid "If set"
-msgstr ""
+#: ../src/preferences.c:90
+msgid "Unknown"
+msgstr "Nieznany"
 
-#: src/preferences.c:404
-msgid "Always"
-msgstr ""
+#: ../src/preferences.c:92
+msgid "RAW Image"
+msgstr "Obraz RAW"
 
-#: src/preferences.c:451
+#: ../src/preferences.c:430
 msgid "Nearest (worst, but fastest)"
 msgstr "Najbliższy sąsiad (najgorsze, lecz najszybsze)"
 
-#: src/preferences.c:453
+#: ../src/preferences.c:432
 msgid "Tiles"
 msgstr "Kafle"
 
-#: src/preferences.c:455
+#: ../src/preferences.c:434
 msgid "Bilinear"
 msgstr "Dwuliniowe"
 
-#: src/preferences.c:457
+#: ../src/preferences.c:436
 msgid "Hyper (best, but slowest)"
 msgstr "Hiper (najlepsze, lecz najwolniejsze)"
 
-#: src/preferences.c:485
-msgid "None"
-msgstr "Brak"
-
-#: src/preferences.c:486
-msgid "Normal"
-msgstr "Zwykła"
-
-#: src/preferences.c:487
-msgid "Best"
-msgstr "Najlepsza"
-
-#: src/preferences.c:548 src/print.c:372
+#: ../src/preferences.c:501 ../src/print.c:380
 msgid "Custom"
 msgstr "Własne"
 
-#: src/preferences.c:712 src/preferences.c:715
+#: ../src/preferences.c:566
+#, fuzzy
+msgid "Single image"
+msgstr "następny obraz"
+
+#: ../src/preferences.c:568
+msgid "Anaglyph Red-Cyan"
+msgstr ""
+
+#: ../src/preferences.c:570
+msgid "Anaglyph Gray Red-Cyan"
+msgstr ""
+
+#: ../src/preferences.c:572
+msgid "Anaglyph Dubois"
+msgstr ""
+
+#: ../src/preferences.c:575
+msgid "Side by Side"
+msgstr ""
+
+#: ../src/preferences.c:576
+msgid "Side by Side Half size"
+msgstr ""
+
+#: ../src/preferences.c:583
+#, fuzzy
+msgid "Top - Bottom"
+msgstr "Dolny:"
+
+#: ../src/preferences.c:584
+msgid "Top - Bottom Half size"
+msgstr ""
+
+#: ../src/preferences.c:593 ../src/preferences.c:2031
+#, fuzzy
+msgid "Fixed position"
+msgstr "Pozycja wg GPS"
+
+#: ../src/preferences.c:890 ../src/preferences.c:893
 msgid "Reset filters"
 msgstr "Wyzeruj filtry"
 
-#: src/preferences.c:716
+#: ../src/preferences.c:894
 msgid ""
 "This will reset the file filters to the defaults.\n"
 "Continue?"
@@ -2751,31 +3831,19 @@ msgstr ""
 "Ustawienia filtrów powrócą do wartości domyślnych.\n"
 "Kontynuować?"
 
-#: src/preferences.c:750 src/preferences.c:753
-msgid "Reset editors"
-msgstr "Przywróć edytory"
-
-#: src/preferences.c:754
-msgid ""
-"This will reset the edit commands to the defaults.\n"
-"Continue?"
-msgstr ""
-"Komendy ecyji powrócą do wartości domyślnych.\n"
-"Kontynuować?"
-
-#: src/preferences.c:778 src/preferences.c:781
+#: ../src/preferences.c:921 ../src/preferences.c:924
 msgid "Clear trash"
 msgstr "Wyczyść kosz"
 
-#: src/preferences.c:782
+#: ../src/preferences.c:925
 msgid "This will remove the trash contents."
 msgstr "Ta operacja spowoduje usunięcie zawartości kosza"
 
-#: src/preferences.c:826 src/preferences.c:829
+#: ../src/preferences.c:969 ../src/preferences.c:972
 msgid "Reset image overlay template string"
 msgstr ""
 
-#: src/preferences.c:830
+#: ../src/preferences.c:973
 #, fuzzy
 msgid ""
 "This will reset the image overlay template string to the default.\n"
@@ -2784,412 +3852,565 @@ msgstr ""
 "Ustawienia filtrów powrócą do wartości domyślnych.\n"
 "Kontynuować?"
 
-#: src/preferences.c:861
-msgid "Startup"
-msgstr "Przy uruchomieniu"
-
-#: src/preferences.c:863
-msgid "Restore folder on startup"
-msgstr ""
-
-#: src/preferences.c:876
-msgid "Use current"
-msgstr "Wykorzystaj bieżący"
-
-#: src/preferences.c:879
-#, fuzzy
-msgid "Use last path"
-msgstr "Zaznacz ścieżkę"
+#: ../src/preferences.c:1199
+msgid "General"
+msgstr "Ogólne"
 
-#: src/preferences.c:888 src/preferences.c:950
+#: ../src/preferences.c:1205 ../src/preferences.c:1265
 msgid "Quality:"
 msgstr "Jakość:"
 
-#: src/preferences.c:902
-msgid "Cache thumbnails into .thumbnails"
-msgstr "Używanie katalogu .thumbnails do przechowywania miniaturek"
+#: ../src/preferences.c:1213
+msgid "Use standard thumbnail cache, shared with other applications"
+msgstr "Użyj standardowego bufora, dzielonego z innymi programami"
 
-#: src/preferences.c:906
-msgid "Use xvpics thumbnails when found (read only)"
-msgstr "Wykorzystywanie odnalezionych miniaturek xvpics (tylko odczyt)"
+#: ../src/preferences.c:1219
+msgid ""
+"Store thumbnails in '.thumbnails' folder, local to image folder (non-"
+"standard)"
+msgstr ""
+"Zapisuj miniaturki w katalogu '.thumbnails', lokalnie do katalogu z "
+"obrazkami (niestandardowy)"
 
-#: src/preferences.c:910
-msgid "Faster jpeg thumbnailing (may reduce quality)"
+#: ../src/preferences.c:1222
+msgid "Use EXIF thumbnails when available (EXIF thumbnails may be outdated)"
 msgstr ""
+"Użyj miniaturek EXIF jeśli są dostępne (miniaturki EXIF mogą być nieaktualne)"
 
-#: src/preferences.c:913
+#: ../src/preferences.c:1225
 msgid "Slide show"
 msgstr "Pokaz slajdów"
 
-#: src/preferences.c:916
+#: ../src/preferences.c:1228
 msgid "Delay between image change:"
 msgstr "Czas między kolejnymi obrazami:"
 
-#: src/preferences.c:916
+#: ../src/preferences.c:1228
 msgid "seconds"
 msgstr "sekund"
 
-#: src/preferences.c:922
+#: ../src/preferences.c:1234
 msgid "Random"
 msgstr "Losowo"
 
-#: src/preferences.c:923
+#: ../src/preferences.c:1235
 msgid "Repeat"
 msgstr "Powtarzanie"
 
-#: src/preferences.c:944
+#: ../src/preferences.c:1237
+msgid "Image loading and caching"
+msgstr "Ładowanie i buforowanie obrazka"
+
+#: ../src/preferences.c:1239
+msgid "Decoded image cache size (Mb):"
+msgstr "Rozmiar bufora (MB na obraz):"
+
+#: ../src/preferences.c:1241
+msgid "Preload next image"
+msgstr "Wstępny odczyt następnego obrazu"
+
+#: ../src/preferences.c:1244
+msgid "Refresh on file change"
+msgstr "Odświeżanie podczas zmian pliku"
+
+#: ../src/preferences.c:1262
 msgid "Zoom"
 msgstr "Skala"
 
-#: src/preferences.c:947
-msgid "Dithering method:"
-msgstr "Metoda rozpraszania:"
+#: ../src/preferences.c:1268
+msgid "Use GPU acceleration via Clutter library"
+msgstr ""
 
-#: src/preferences.c:952
-msgid "Two pass zooming"
-msgstr "Dwuetapowe powiększanie"
+#: ../src/preferences.c:1272
+msgid "Two pass rendering (apply HQ zoom and color correction in second pass)"
+msgstr ""
+"Dwuprzebiegowe renderowanie (stosuje wysokiej jakości skalowanie i korekcję "
+"kolorów w drugim przebiegu)"
 
-#: src/preferences.c:955
+#: ../src/preferences.c:1275
 msgid "Allow enlargement of image for zoom to fit"
 msgstr "Rozciąganie obrazów przy powiększaniu, aby je dopasować"
 
-#: src/preferences.c:959
-#, fuzzy
+#: ../src/preferences.c:1279
 msgid "Limit image size when autofitting (%):"
 msgstr "Ograniczenie rozmiaru przy automatycznym dopasowaniu okna (%):"
 
-#: src/preferences.c:967
+#: ../src/preferences.c:1287
 msgid "Zoom increment:"
 msgstr "Przyrost powiększenia"
 
-#: src/preferences.c:972
+#: ../src/preferences.c:1292
 msgid "When new image is selected:"
 msgstr "Po wybraniu nowego obrazu:"
 
-#: src/preferences.c:975
+#: ../src/preferences.c:1296
 msgid "Zoom to original size"
 msgstr "Powiększenie do rozmiaru oryginalnego"
 
-#: src/preferences.c:981
+#: ../src/preferences.c:1299
+msgid "Fit image to window"
+msgstr "Dopasuj do okna"
+
+#: ../src/preferences.c:1302
 msgid "Leave Zoom at previous setting"
 msgstr "Pozostawienie poprzedniego powiększenia"
 
-#: src/preferences.c:985
+#: ../src/preferences.c:1308
+msgid "Scroll to top left corner"
+msgstr "Przewiń do lewej strony"
+
+#: ../src/preferences.c:1311
+msgid "Scroll to image center"
+msgstr "Ustaw na środku obrazka"
+
+#: ../src/preferences.c:1314
+msgid "Keep the region from previous image"
+msgstr "Zapamiętaj położenie z poprzedniego obrazu"
+
+#: ../src/preferences.c:1319
 msgid "Appearance"
 msgstr "Wygląd"
 
-#: src/preferences.c:987
-#, fuzzy
-msgid "Custom border color"
-msgstr "Własna drukarka"
+#: ../src/preferences.c:1321
+msgid "Use custom border color in window mode"
+msgstr "Użyj własnego koloru obramowania w trybie okienkowym"
 
-#: src/preferences.c:990
-#, fuzzy
+#: ../src/preferences.c:1324
+msgid "Use custom border color in fullscreen mode"
+msgstr "Użyj własnego obramowanie w trybie pełnego ekranu"
+
+#: ../src/preferences.c:1327
 msgid "Border color"
-msgstr "Czarne tło"
+msgstr "Kolor obramowania"
 
-#: src/preferences.c:993
+#: ../src/preferences.c:1330
 msgid "Convenience"
 msgstr "Usprawnienia"
 
-#: src/preferences.c:995
-msgid "Refresh on file change"
-msgstr "Odświeżanie podczas zmian pliku"
-
-#: src/preferences.c:997
-msgid "Preload next image"
-msgstr "Wstępny odczyt następnego obrazu"
-
-#: src/preferences.c:999
+#: ../src/preferences.c:1332
 msgid "Auto rotate image using Exif information"
 msgstr "Automatyczne obracanie obrazów na podstawie Exif"
 
-#: src/preferences.c:1016
+#: ../src/preferences.c:1335
+#, fuzzy
+msgid "Auto rotate proofs using Exif information"
+msgstr "Automatyczne obracanie obrazów na podstawie Exif"
+
+#: ../src/preferences.c:1352
 msgid "Windows"
 msgstr "Okna"
 
-#: src/preferences.c:1019
+#: ../src/preferences.c:1354
 msgid "State"
 msgstr "Stan"
 
-#: src/preferences.c:1021
+#: ../src/preferences.c:1356
 msgid "Remember window positions"
 msgstr "Zapamiętanie pozycji okien"
 
-#: src/preferences.c:1023
+#: ../src/preferences.c:1358
 msgid "Remember tool state (float/hidden)"
 msgstr "Zapamiętanie stanu narzędzi (oderwane/ukryte)"
 
-#: src/preferences.c:1028
+#: ../src/preferences.c:1363
 msgid "Fit window to image when tools are hidden/floating"
 msgstr "Dopasowanie okna do obrazu, jeśli narzędzia są ukryte/oderwane"
 
-#: src/preferences.c:1032
+#: ../src/preferences.c:1367
 msgid "Limit size when auto-sizing window (%):"
 msgstr "Ograniczenie rozmiaru przy automatycznym dopasowaniu okna (%):"
 
-#: src/preferences.c:1039 src/print.c:3404 src/print.c:3411
-msgid "Layout"
-msgstr "Ułożenie"
+#: ../src/preferences.c:1382
+msgid "Smooth image flip"
+msgstr "Płynne odwracanie obrazu"
+
+#: ../src/preferences.c:1384
+msgid "Disable screen saver"
+msgstr "Wyłącz wygaszacz ekranu"
 
-#: src/preferences.c:1066
-msgid "Filtering"
-msgstr "Filtrowanie"
+#: ../src/preferences.c:1388
+msgid "Overlay Screen Display"
+msgstr ""
 
-#: src/preferences.c:1071
-msgid "Show hidden files or folders"
+#: ../src/preferences.c:1390
+msgid "Image overlay template"
 msgstr ""
 
-#: src/preferences.c:1073
-msgid "Show dot directory"
+#: ../src/preferences.c:1403
+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"
+"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:1075
+#: ../src/preferences.c:1419 ../src/preferences.c:1591
+#: ../src/preferences.c:1960
+msgid "Defaults"
+msgstr "Domyślne"
+
+#: ../src/preferences.c:1473
+msgid "Show hidden files or folders"
+msgstr "Pokaż ukryte pliki lub katalogi"
+
+#: ../src/preferences.c:1475
 msgid "Case sensitive sort"
 msgstr "Rozróżnianie wielkość liter podczas sortowania"
 
-#: src/preferences.c:1078
+#: ../src/preferences.c:1478
 msgid "Disable File Filtering"
 msgstr "Bez filtrowania plików"
 
-#: src/preferences.c:1082
+#: ../src/preferences.c:1482
 msgid "Grouping sidecar extensions"
 msgstr ""
 
-#: src/preferences.c:1089
+#: ../src/preferences.c:1489
 msgid "File types"
 msgstr "Typy plików"
 
-#: src/preferences.c:1111
+#: ../src/preferences.c:1511
 msgid "Filter"
 msgstr "Filtr"
 
-#: src/preferences.c:1148 src/preferences.c:1234 src/preferences.c:1378
-msgid "Defaults"
-msgstr "Domyślne"
+#: ../src/preferences.c:1546
+msgid "Class"
+msgstr "Klasa"
 
-#: src/preferences.c:1177
-msgid "Editors"
-msgstr "Edytory"
+#: ../src/preferences.c:1563
+msgid "Writable"
+msgstr "Zapisywalny"
 
-#: src/preferences.c:1183
-msgid "#"
-msgstr "#"
+#: ../src/preferences.c:1574
+msgid "Sidecar is allowed"
+msgstr ""
 
-#: src/preferences.c:1186 src/preferences.c:1497
-msgid "Menu name"
-msgstr "Nazwa menu"
+#: ../src/preferences.c:1620
+msgid "Metadata writing process"
+msgstr ""
 
-#: src/preferences.c:1189
-#, fuzzy
-msgid "Command Line"
-msgstr "Wiersz poleceń"
+#: ../src/preferences.c:1622
+msgid "Warning: Geeqie is built without Exiv2. Some options are disabled."
+msgstr ""
 
-#: src/preferences.c:1261
-#, fuzzy
-msgid "Properties"
-msgstr "Wł_aściwości"
+#: ../src/preferences.c:1624
+msgid ""
+"Metadata are written in the following order. The process ends after first "
+"success."
+msgstr ""
 
-#: src/preferences.c:1279
-msgid "What to show in properties dialog:"
+#: ../src/preferences.c:1627
+msgid ""
+"1) Save metadata in image files, resp. sidecar files, according to the XMP "
+"standard"
 msgstr ""
 
-#: src/preferences.c:1316
-msgid "Advanced"
-msgstr "Zaawansowane"
+#: ../src/preferences.c:1633
+msgid ""
+"2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
+msgstr ""
 
-#: src/preferences.c:1337
-msgid "Smooth image flip"
-msgstr "Płynne odwracanie obrazu"
+#: ../src/preferences.c:1636
+#, c-format
+msgid "3) Save metadata in Geeqie private directory '%s'"
+msgstr ""
 
-#: src/preferences.c:1339
-msgid "Disable screen saver"
-msgstr "Wyłącz wygaszacz ekranu"
+#: ../src/preferences.c:1642
+msgid "Step 1: Write to image files"
+msgstr ""
 
-#: src/preferences.c:1343
-msgid "Overlay Screen Display"
+#: ../src/preferences.c:1650
+msgid ""
+"Store metadata also in legacy IPTC tags (converted according to IPTC4XMP "
+"standard)"
 msgstr ""
 
-#: src/preferences.c:1345
-msgid "Always show image overlay at startup"
+#: ../src/preferences.c:1653
+msgid "Warn if the image files are unwritable"
 msgstr ""
 
-#: src/preferences.c:1347
-msgid "Image overlay template"
+#: ../src/preferences.c:1656
+msgid "Ask before writing to image files"
+msgstr ""
+
+#: ../src/preferences.c:1659
+msgid "Step 2 and 3: write to Geeqie private files"
 msgstr ""
 
-#: src/preferences.c:1361
+#: ../src/preferences.c:1664
 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"
-"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 to add lines that totally "
-"disappear when no data is available.\n"
+"Use GQview legacy metadata format (supports only keywords and comments) "
+"instead of XMP"
+msgstr ""
+
+#: ../src/preferences.c:1668 ../src/preferences.c:1853
+msgid "Miscellaneous"
+msgstr "Różne"
+
+#: ../src/preferences.c:1669
+msgid ""
+"Write the same description tags (keywords, comment, etc.) to all grouped "
+"sidecars"
+msgstr ""
+
+#: ../src/preferences.c:1672
+msgid "Allow keywords to differ only in case"
+msgstr ""
+
+#: ../src/preferences.c:1675
+msgid "Write altered image orientation to the metadata"
+msgstr ""
+
+#: ../src/preferences.c:1681
+msgid "Auto-save options"
+msgstr "Opcje autozapisu"
+
+#: ../src/preferences.c:1683
+msgid "Write metadata after timeout"
+msgstr "Zapisz metadane po upływie danego czasu"
+
+#: ../src/preferences.c:1689
+msgid "Timeout (seconds):"
+msgstr "Limit czasu (sekundy):"
+
+#: ../src/preferences.c:1692
+msgid "Write metadata on image change"
+msgstr "Zapisuj metadane przy zmianie obrazu"
+
+#: ../src/preferences.c:1695
+msgid "Write metadata on directory change"
+msgstr "Zapisz metadane przy zmianie katalogu"
+
+#: ../src/preferences.c:1709
+msgid "Color management"
+msgstr "Zarządzanie kolorami"
+
+#: ../src/preferences.c:1711
+msgid "Input profiles"
+msgstr "Profile wejścia"
+
+#: ../src/preferences.c:1719
+msgid "Type"
+msgstr ""
+
+#: ../src/preferences.c:1722
+msgid "Menu name"
+msgstr "Nazwa menu"
+
+#: ../src/preferences.c:1725
+msgid "File"
+msgstr "Plik"
+
+#: ../src/preferences.c:1733
+#, c-format
+msgid "Input %d:"
+msgstr ""
+
+#: ../src/preferences.c:1749 ../src/preferences.c:1769
+msgid "Select color profile"
+msgstr "Wybierz profil koloru"
+
+#: ../src/preferences.c:1757
+msgid "Screen profile"
+msgstr "Profil ekranu"
+
+#: ../src/preferences.c:1761
+msgid "Use system screen profile if available"
 msgstr ""
 
-#: src/preferences.c:1393
+#: ../src/preferences.c:1766
+msgid "Screen:"
+msgstr "Ekran:"
+
+#: ../src/preferences.c:1788 ../src/preferences.c:1829
+msgid "Behavior"
+msgstr "Zachowanie"
+
+#: ../src/preferences.c:1790 ../src/utilops.c:1983
 msgid "Delete"
 msgstr "Usuń"
 
-#: src/preferences.c:1395
+#: ../src/preferences.c:1792
 msgid "Confirm file delete"
 msgstr "Potwierdzanie usunięcia pliku"
 
-#: src/preferences.c:1397
+#: ../src/preferences.c:1794
 msgid "Enable Delete key"
 msgstr "Aktywny klawisz Delete"
 
-#: src/preferences.c:1400
+#: ../src/preferences.c:1797
 msgid "Safe delete"
 msgstr "bezpieczne usuwanie"
 
-#: src/preferences.c:1418
+#: ../src/preferences.c:1815
 msgid "Maximum size:"
 msgstr "Maksymalny rozmiar:"
 
-#: src/preferences.c:1418
+#: ../src/preferences.c:1815
 msgid "MB"
-msgstr ""
+msgstr "MB"
 
-#: src/preferences.c:1421
+#: ../src/preferences.c:1817
 msgid "Set to 0 for unlimited size"
-msgstr ""
+msgstr "Ustaw na 0 dla nieograniczonego rozmiaru"
 
-#: src/preferences.c:1423
+#: ../src/preferences.c:1818
 msgid "View"
 msgstr "Widok"
 
-#: src/preferences.c:1434
-msgid "Behavior"
-msgstr "Zachowanie"
-
-#: src/preferences.c:1436
+#: ../src/preferences.c:1831
 msgid "Rectangular selection in icon view"
 msgstr "Zaznaczanie prostokątne w widoku ikon"
 
-#: src/preferences.c:1439
+#: ../src/preferences.c:1834
 msgid "Descend folders in tree view"
 msgstr "Odwrotna kolejność katalogów w widoku drzewiastym"
 
-#: src/preferences.c:1442
+#: ../src/preferences.c:1837
 msgid "In place renaming"
 msgstr "Zmiana nazwy na miejscu"
 
-#: src/preferences.c:1445
-msgid ""
-"Show \"Copy path\" menu item which write the path of selected files to "
-"clipboard"
-msgstr ""
-
-#: src/preferences.c:1448
+#: ../src/preferences.c:1840
 msgid "Open recent list maximum size"
-msgstr ""
+msgstr "Maksymalna ilość ostatnio otwartych obrazów"
 
-#: src/preferences.c:1451
+#: ../src/preferences.c:1843
 msgid "Drag'n drop icon size"
-msgstr ""
+msgstr "Rozmiar ikon przy drag'n drop"
 
-#: src/preferences.c:1454
+#: ../src/preferences.c:1846
 msgid "Navigation"
 msgstr "Nawigacja"
 
-#: src/preferences.c:1456
+#: ../src/preferences.c:1848
 msgid "Progressive keyboard scrolling"
 msgstr "Przyrostowe przewijanie klawiaturą"
 
-#: src/preferences.c:1458
+#: ../src/preferences.c:1850
 msgid "Mouse wheel scrolls image"
 msgstr "Przewijanie obrazu kółkiem myszy"
 
-#: src/preferences.c:1461
-msgid "Miscellaneous"
-msgstr "Różne"
+#: ../src/preferences.c:1855
+msgid "Custom similarity threshold:"
+msgstr "Dowolny próg podobieństwa:"
 
-#: src/preferences.c:1463
-msgid "Store metadata and cache files in source image's directory"
-msgstr ""
+#: ../src/preferences.c:1860
+msgid "Debugging"
+msgstr "Debugowanie"
 
-#: src/preferences.c:1466
-#, fuzzy
-msgid "Store keywords and comments as XMP tags in image files"
-msgstr "Zapisuj słowa kluczowe i komentarze lokalnie"
+#: ../src/preferences.c:1862
+msgid "Debug level:"
+msgstr "Poziom debugowania:"
 
-#: src/preferences.c:1469
-msgid "Custom similarity threshold:"
-msgstr "Dowolny próg podobieństwa:"
+#: ../src/preferences.c:1880
+msgid "Keyboard"
+msgstr "Klawiatura"
 
-#: src/preferences.c:1472
-msgid "Image loading and caching"
-msgstr ""
+#: ../src/preferences.c:1882
+msgid "Accelerators"
+msgstr "Skróty klawiszowe"
 
-#: src/preferences.c:1474
-msgid "Offscreen cache size (Mb per image):"
-msgstr "Rozmiar cache w piksmapach (MB na obraz):"
+#: ../src/preferences.c:1901
+msgid "Action"
+msgstr "Akcja"
 
-#: src/preferences.c:1477
-msgid "Image read buffer size (bytes):"
+#: ../src/preferences.c:1923
+msgid "KEY"
 msgstr ""
 
-#: src/preferences.c:1481
-msgid "Image idle loop read count:"
-msgstr ""
+#: ../src/preferences.c:1934
+msgid "Tooltip"
+msgstr "Podpowiedź"
 
-#: src/preferences.c:1486
+#: ../src/preferences.c:1965
 #, fuzzy
-msgid "Color profiles"
-msgstr "Wszystkie pliki"
+msgid "Reset selected"
+msgstr "Wyzeruj filtry"
 
-#: src/preferences.c:1494
-msgid "Type"
+#: ../src/preferences.c:1981
+msgid "Stereo"
+msgstr ""
+
+#: ../src/preferences.c:1983 ../src/preferences.c:1986
+msgid "Windowed stereo mode"
 msgstr ""
 
-#: src/preferences.c:1500
+#: ../src/preferences.c:1990 ../src/preferences.c:2015
 #, fuzzy
-msgid "File"
-msgstr "Plik:"
+msgid "Mirror left image"
+msgstr "pierwszy obraz"
 
-#: src/preferences.c:1525 src/preferences.c:1536
+#: ../src/preferences.c:1993 ../src/preferences.c:2018
 #, fuzzy
-msgid "Select color profile"
-msgstr "Wybierz katalog"
+msgid "Flip left image"
+msgstr "następny obraz"
 
-#: src/preferences.c:1533
+#: ../src/preferences.c:1996 ../src/preferences.c:2021
 #, fuzzy
-msgid "Screen:"
-msgstr "Ekran"
+msgid "Mirror right image"
+msgstr "pierwszy obraz"
 
-#: src/preferences.c:1544
-msgid "Debugging"
+#: ../src/preferences.c:1999 ../src/preferences.c:2024
+#, fuzzy
+msgid "Flip right image"
+msgstr "pierwszy obraz"
+
+#: ../src/preferences.c:2001 ../src/preferences.c:2026
+msgid "Swap left and right images"
 msgstr ""
 
-#: src/preferences.c:1546
-msgid "Debug level:"
+#: ../src/preferences.c:2003 ../src/preferences.c:2028
+msgid "Disable stereo mode on single image source"
 msgstr ""
 
-#: src/preferences.c:1562
+#: ../src/preferences.c:2006 ../src/preferences.c:2012
 #, fuzzy
-msgid "Preferences"
-msgstr "P_referencje..."
+msgid "Fullscreen stereo mode"
+msgstr "Pełny ekran"
+
+#: ../src/preferences.c:2007
+msgid "Use different settings for fullscreen"
+msgstr ""
 
-#: src/preferences.c:1685
+#: ../src/preferences.c:2037
 #, fuzzy
-msgid "About"
-msgstr "O progr_amie"
+msgid "Left X"
+msgstr "Lewy:"
+
+#: ../src/preferences.c:2039
+#, fuzzy
+msgid "Left Y"
+msgstr "Lewy:"
+
+#: ../src/preferences.c:2041
+#, fuzzy
+msgid "Right X"
+msgstr "Prawy:"
+
+#: ../src/preferences.c:2043
+#, fuzzy
+msgid "Right Y"
+msgstr "Prawy:"
+
+#: ../src/preferences.c:2059
+msgid "Preferences"
+msgstr "P_referencje..."
 
-#: src/preferences.c:1702
+#: ../src/preferences.c:2207
 #, fuzzy, c-format
 msgid ""
 "%s %s\n"
@@ -3209,93 +4430,85 @@ msgstr ""
 "\n"
 "Wydany na warunkach licencji GNU GPL"
 
-#: src/preferences.c:1721
+#: ../src/preferences.c:2226
 msgid "Credits..."
 msgstr "Zasługi..."
 
-#: src/print.c:117
+#: ../src/print.c:124
 msgid "Selection"
 msgstr "Zaznaczenie"
 
-#: src/print.c:118
+#: ../src/print.c:125
 msgid "All"
 msgstr "Wszystkie"
 
-#: src/print.c:129
+#: ../src/print.c:136
 msgid "One image per page"
 msgstr "Jeden obraz na stronie"
 
-#: src/print.c:130
+#: ../src/print.c:137
 msgid "Proof sheet"
 msgstr "Wydruk próbny"
 
-#: src/print.c:143
+#: ../src/print.c:150
 msgid "Default printer"
 msgstr "Drukarka domyślna"
 
-#: src/print.c:144
+#: ../src/print.c:151
 msgid "Custom printer"
 msgstr "Własna drukarka"
 
-#: src/print.c:145
+#: ../src/print.c:152
 msgid "PostScript file"
 msgstr "Plik PostScript"
 
-#: src/print.c:146
+#: ../src/print.c:153
 msgid "Image file"
 msgstr "Plik obrazu"
 
-#: src/print.c:160
+#: ../src/print.c:167
 msgid "jpeg, low quality"
 msgstr "jpeg, niska jakość"
 
-#: src/print.c:161
+#: ../src/print.c:168
 msgid "jpeg, normal quality"
 msgstr "jpeg, zwykła jakość"
 
-#: src/print.c:162
+#: ../src/print.c:169
 msgid "jpeg, high quality"
 msgstr "jpeg, wysoka jakość"
 
-#: src/print.c:357 src/print.c:3245
+#: ../src/print.c:365 ../src/print.c:3212
 msgid "points"
 msgstr "punkty"
 
-#: src/print.c:358
+#: ../src/print.c:366
 msgid "millimeters"
 msgstr "milimetry"
 
-#: src/print.c:359
+#: ../src/print.c:367
 msgid "centimeters"
 msgstr "centymetry"
 
-#: src/print.c:360
+#: ../src/print.c:368
 msgid "inches"
 msgstr "cale"
 
-#: src/print.c:361
+#: ../src/print.c:369
 msgid "picas"
 msgstr "pica"
 
-#: src/print.c:366
-msgid "Portrait"
-msgstr "Portret"
-
-#: src/print.c:367
-msgid "Landscape"
-msgstr "Pejzaż"
-
-#: src/print.c:373
+#: ../src/print.c:381
 msgid "Letter"
 msgstr ""
 
 #. in 8.5 x 11
-#: src/print.c:374
+#: ../src/print.c:382
 msgid "Legal"
 msgstr ""
 
 #. in 8.5 x 14
-#: src/print.c:375
+#: ../src/print.c:383
 msgid "Executive"
 msgstr ""
 
@@ -3311,487 +4524,519 @@ msgstr ""
 #. mm 250 x 353
 #. mm 176 x 250
 #. mm 125 x 176
-#: src/print.c:387
+#: ../src/print.c:395
 msgid "Envelope #10"
 msgstr ""
 
 #. in 4.125 x 9.5
-#: src/print.c:388
+#: ../src/print.c:396
 msgid "Envelope #9"
 msgstr ""
 
 #. in 3.875 x 8.875
-#: src/print.c:389
+#: ../src/print.c:397
 msgid "Envelope C4"
 msgstr ""
 
 #. mm 229 x 324
-#: src/print.c:390
+#: ../src/print.c:398
 msgid "Envelope C5"
 msgstr ""
 
 #. mm 162 x 229
-#: src/print.c:391
+#: ../src/print.c:399
 msgid "Envelope C6"
 msgstr ""
 
 #. mm 114 x 162
-#: src/print.c:392
+#: ../src/print.c:400
 msgid "Photo 6x4"
 msgstr ""
 
 #. in 6   x 4
-#: src/print.c:393
+#: ../src/print.c:401
 msgid "Photo 8x10"
 msgstr ""
 
 #. in 8   x 10
-#: src/print.c:394
+#: ../src/print.c:402
 msgid "Postcard"
 msgstr "Kartka pocztowa"
 
 #. mm 100 x 148
-#: src/print.c:395
+#: ../src/print.c:403
 msgid "Tabloid"
 msgstr ""
 
-#: src/print.c:551
+#: ../src/print.c:559
 #, c-format
 msgid "page %d of %d"
 msgstr "strona %d z %d"
 
-#: src/print.c:743 src/utilops.c:2462
+#: ../src/print.c:751
 msgid "Preview"
 msgstr "Podgląd"
 
-#: src/print.c:1051
+#: ../src/print.c:1059
 #, c-format
 msgid ""
 "Unable to open pipe for writing.\n"
 "\"%s\""
 msgstr ""
 
-#: src/print.c:1066 src/print.c:1506 src/ui_pathsel.c:432
-#: src/view_file_list.c:396
+#: ../src/print.c:1074 ../src/print.c:1466 ../src/ui_pathsel.c:423
 #, c-format
 msgid "A file with name %s already exists."
 msgstr "Plik o nazwie %s już istnieje."
 
-#: src/print.c:1081 src/print.c:1561
+#: ../src/print.c:1089 ../src/print.c:1521
 #, c-format
 msgid "Failure writing to file %s"
 msgstr ""
 
-#: src/print.c:1135 src/print.c:1172 src/print.c:1208 src/print.c:1325
-#: src/print.c:1416 src/print.c:1447
+#: ../src/print.c:1144 ../src/print.c:1181 ../src/print.c:1217
+#: ../src/print.c:1334 ../src/print.c:1407
 msgid "SIGPIPE error writing to printer."
 msgstr ""
 
-#: src/print.c:1982
+#: ../src/print.c:1942
 #, c-format
 msgid "Page %d"
 msgstr "Strona %d"
 
-#: src/print.c:2004 src/print.c:2009
+#: ../src/print.c:1964 ../src/print.c:1969
 msgid "Printing error"
 msgstr "Błąd wydruku"
 
-#: src/print.c:2008
+#: ../src/print.c:1968
 #, c-format
 msgid "An error occured printing to %s."
 msgstr ""
 
-#: src/print.c:2012
+#: ../src/print.c:1972
 msgid "Details"
 msgstr "Szczegóły"
 
-#: src/print.c:2617 src/print.c:3377
-#, fuzzy
+#: ../src/print.c:2587 ../src/print.c:3341
 msgid "Print"
-msgstr "Drukarka"
+msgstr "Drukuj"
 
-#: src/print.c:2624
+#: ../src/print.c:2591
 #, c-format
 msgid "Printing %d pages to %s."
 msgstr ""
 
-#: src/print.c:2724
+#: ../src/print.c:2691
 msgid "Format:"
 msgstr "Format:"
 
-#: src/print.c:2799
+#: ../src/print.c:2766
 msgid "Units:"
 msgstr "Jednostki:"
 
-#: src/print.c:2843
+#: ../src/print.c:2810
 msgid "Orientation:"
 msgstr "Ułożenie:"
 
-#: src/print.c:2975
+#: ../src/print.c:2942
 msgid "Destination:"
-msgstr ""
+msgstr "Cel:"
 
-#: src/print.c:3023
+#: ../src/print.c:2990
 msgid "<printer name>"
 msgstr "<nazwa drukarki>"
 
-#: src/print.c:3112
+#: ../src/print.c:3079
 msgid "Unlimited"
 msgstr "Nieograniczone"
 
-#: src/print.c:3230
+#: ../src/print.c:3197
 msgid "Show"
 msgstr "Pokaż"
 
-#: src/print.c:3243
+#: ../src/print.c:3210
 msgid "Font"
 msgstr "Czcionka"
 
-#: src/print.c:3407
+#: ../src/print.c:3368
 msgid "Source"
 msgstr "Źródło"
 
-#: src/print.c:3423
+#: ../src/print.c:3380
+msgid "Image size:"
+msgstr "Rozmiar obrazu:"
+
+#: ../src/print.c:3384
 msgid "Proof size:"
 msgstr "Rozmiar próbki:"
 
-#: src/print.c:3449
-msgid "Paper"
-msgstr "Papier"
+#: ../src/print.c:3400
+msgid "Text"
+msgstr "Tekst"
+
+#: ../src/print.c:3410
+msgid "Paper"
+msgstr "Papier"
 
-#: src/print.c:3472
+#: ../src/print.c:3433
 msgid "Margins"
 msgstr "Merginesy"
 
-#: src/print.c:3474
+#: ../src/print.c:3435
 msgid "Left:"
 msgstr "Lewy:"
 
-#: src/print.c:3477
+#: ../src/print.c:3438
 msgid "Right:"
 msgstr "Prawy:"
 
-#: src/print.c:3480
+#: ../src/print.c:3441
 msgid "Top:"
 msgstr "Górny:"
 
-#: src/print.c:3483
+#: ../src/print.c:3444
 msgid "Bottom:"
 msgstr "Dolny:"
 
-#: src/print.c:3492
+#: ../src/print.c:3453
 msgid "Printer"
 msgstr "Drukarka"
 
-#: src/print.c:3498
+#: ../src/print.c:3459
 msgid "Custom printer:"
 msgstr "Własna drukarka:"
 
-#: src/print.c:3507
+#: ../src/print.c:3468
 msgid "File:"
 msgstr "Plik:"
 
-#: src/print.c:3516
+#: ../src/print.c:3477
 msgid "File format:"
 msgstr "Format pliku:"
 
-#: src/print.c:3521
+#: ../src/print.c:3482
 msgid "DPI:"
 msgstr ""
 
-#: src/print.c:3529
+#: ../src/print.c:3490
 msgid "Remember print settings"
 msgstr "Zapamiętanie opcji druku"
 
-#: src/rcfile.c:309
+#: ../src/rcfile.c:81
+#, fuzzy, c-format
+msgid "Option %s ignored: %s\n"
+msgstr "Tworzenie  katalogu %s:%s\n"
+
+#: ../src/rcfile.c:456
 #, c-format
 msgid "error saving config file: %s\n"
 msgstr "błąd przy zapisie pliku konfiguracyjnego: %s\n"
 
-#: src/rcfile.c:583
-#, fuzzy, c-format
+#: ../src/rcfile.c:514
+#, c-format
 msgid ""
 "error saving config file: %s\n"
 "error: %s\n"
-msgstr "błąd przy zapisie pliku konfiguracyjnego: %s\n"
+msgstr ""
+"błąd przy zapisie pliku konfiguracyjnego: %s\n"
+"błąd: %s\n"
 
 #. short, long                  callback,               extra, prefer,description
-#: src/remote.c:574
+#: ../src/remote.c:639
 msgid "next image"
 msgstr "następny obraz"
 
-#: src/remote.c:575
+#: ../src/remote.c:640
 msgid "previous image"
 msgstr "poprzedni obraz"
 
-#: src/remote.c:576
+#: ../src/remote.c:641
 msgid "first image"
 msgstr "pierwszy obraz"
 
-#: src/remote.c:577
+#: ../src/remote.c:642
 msgid "last image"
 msgstr "ostatni obraz"
 
-#: src/remote.c:578
+#: ../src/remote.c:643
 msgid "toggle full screen"
 msgstr "przełącz pełny ekran"
 
-#: src/remote.c:579
+#: ../src/remote.c:644
 msgid "start full screen"
 msgstr "włącz pełny ekran"
 
-#: src/remote.c:580
+#: ../src/remote.c:645
 msgid "stop full screen"
 msgstr "wyłącz pełny ekran"
 
-#: src/remote.c:581
+#: ../src/remote.c:646
 msgid "toggle slide show"
 msgstr "przełącz pokaz slajdów"
 
-#: src/remote.c:582
+#: ../src/remote.c:647
 msgid "start slide show"
 msgstr "rozpocznij pokaz slajdów"
 
-#: src/remote.c:583
+#: ../src/remote.c:648
 msgid "stop slide show"
 msgstr "zatrzymaj pokaz slajdów"
 
-#: src/remote.c:584
+#: ../src/remote.c:649
 msgid "start recursive slide show"
 msgstr "rozpocznij rekursywny pokaz slajdów"
 
-#: src/remote.c:585
+#: ../src/remote.c:650
 msgid "set slide show delay in seconds"
 msgstr ""
 
-#: src/remote.c:586
+#: ../src/remote.c:651
 msgid "show tools"
-msgstr ""
+msgstr "pokaż narzędzia"
 
-#: src/remote.c:587
+#: ../src/remote.c:652
 msgid "hide tools"
 msgstr "Ukryj pasek narzędzi"
 
-#: src/remote.c:588
+#: ../src/remote.c:653
 msgid "quit"
 msgstr "zakończ"
 
-#: src/remote.c:589
+#: ../src/remote.c:654
+#, fuzzy
+msgid "load config file"
+msgstr "Błąd przy kopiowaniu pliku"
+
+#: ../src/remote.c:655
+msgid "get list of sidecars of the given file"
+msgstr ""
+
+#: ../src/remote.c:656
+msgid "get destination path for the given file"
+msgstr ""
+
+#: ../src/remote.c:657
 msgid "open file"
 msgstr "otwórz plik"
 
-#: src/remote.c:590
+#: ../src/remote.c:658
 msgid "open file in new window"
 msgstr "otwórz plik w nowym oknie"
 
-#: src/remote.c:656
+#: ../src/remote.c:724
 msgid "Remote command list:\n"
 msgstr ""
 
-#: src/remote.c:713
+#: ../src/remote.c:739
+msgid ""
+"\n"
+"  All other command line parameters are used as plain files if they exists.\n"
+msgstr ""
+
+#: ../src/remote.c:789
 #, c-format
 msgid "Remote %s not running, starting..."
 msgstr ""
 
-#: src/remote.c:849
+#: ../src/remote.c:925
 msgid "Remote not available\n"
 msgstr ""
 
-#: src/search.c:202
+#: ../src/search.c:212
 msgid "folder"
 msgstr "katalog"
 
-#: src/search.c:203
+#: ../src/search.c:213
 msgid "comments"
 msgstr "komentarze"
 
-#: src/search.c:204
+#: ../src/search.c:214
 msgid "results"
 msgstr "wyniki"
 
-#: src/search.c:208
+#: ../src/search.c:218 ../src/search.c:243
 msgid "contains"
 msgstr "zawiera"
 
-#: src/search.c:209
+#: ../src/search.c:219
 msgid "is"
 msgstr "równa"
 
-#: src/search.c:213 src/search.c:220
+#: ../src/search.c:223 ../src/search.c:230
 msgid "equal to"
 msgstr "równy"
 
-#: src/search.c:214
+#: ../src/search.c:224
 msgid "less than"
 msgstr "mniejszy niż"
 
-#: src/search.c:215
+#: ../src/search.c:225
 msgid "greater than"
 msgstr "większy niż"
 
-#: src/search.c:216 src/search.c:223
+#: ../src/search.c:226 ../src/search.c:233
 msgid "between"
 msgstr "pomiędzy"
 
-#: src/search.c:221
+#: ../src/search.c:231
 msgid "before"
 msgstr "przed"
 
-#: src/search.c:222
+#: ../src/search.c:232
 msgid "after"
 msgstr "po"
 
-#: src/search.c:227
+#: ../src/search.c:237
 msgid "match all"
 msgstr "pasują wszystkie"
 
-#: src/search.c:228
+#: ../src/search.c:238
 msgid "match any"
 msgstr "pasuje dowolne"
 
-#: src/search.c:229
+#: ../src/search.c:239
 msgid "exclude"
 msgstr "z wyjątkiem"
 
-#: src/search.c:279
+#: ../src/search.c:244
+#, fuzzy
+msgid "miss"
+msgstr "równa"
+
+#: ../src/search.c:295
 #, c-format
 msgid "%s, %d files (%s, %d)"
 msgstr "%s, %d plików (%s, %d)"
 
-#: src/search.c:284
+#: ../src/search.c:300
 #, c-format
 msgid "%s, %d files"
 msgstr "%s, %d plików"
 
-#: src/search.c:302
+#: ../src/search.c:318
 msgid "Searching..."
 msgstr "Szukanie..."
 
-#: src/search.c:2100
+#: ../src/search.c:2120
 msgid "File not found"
-msgstr ""
+msgstr "Plik nie został znaleziony"
 
-#: src/search.c:2101
+#: ../src/search.c:2121
 msgid "Please enter an existing file for image content."
 msgstr ""
 
-#: src/search.c:2151
+#: ../src/search.c:2170
 msgid "Please enter an existing folder to search."
 msgstr ""
 
-#: src/search.c:2576
-#, fuzzy
+#: ../src/search.c:2588
 msgid "Image search"
-msgstr "Wyszukiwanie obrazu - Geeqie"
+msgstr "Wyszukiwanie obrazu"
 
-#: src/search.c:2606
+#: ../src/search.c:2618
 msgid "Search:"
 msgstr "Szukaj:"
 
-#: src/search.c:2620
+#: ../src/search.c:2632
 msgid "Recurse"
 msgstr ""
 
-#: src/search.c:2624
+#: ../src/search.c:2637
 msgid "File name"
 msgstr "Nazwa pliku"
 
-#: src/search.c:2630
+#: ../src/search.c:2643 ../src/search.c:2738
 msgid "Match case"
 msgstr ""
 
-#: src/search.c:2634
+#: ../src/search.c:2648
 msgid "File size is"
 msgstr "Rozmiar pliku"
 
-#: src/search.c:2641 src/search.c:2656 src/search.c:2674
+#: ../src/search.c:2655 ../src/search.c:2671 ../src/search.c:2690
 msgid "and"
 msgstr "i"
 
-#: src/search.c:2646
+#: ../src/search.c:2661
 msgid "File date is"
 msgstr "Data pliku"
 
-#: src/search.c:2663
+#: ../src/search.c:2679
 msgid "Image dimensions are"
 msgstr "Wymiary obrazu"
 
-#: src/search.c:2683
+#: ../src/search.c:2700
 msgid "Image content is"
 msgstr "Zawartość obrazu"
 
-#: src/search.c:2689
+#: ../src/search.c:2706
 #, no-c-format
 msgid "% similar to"
 msgstr "% podobna do"
 
-#: src/search.c:2758
+#: ../src/search.c:2788
 msgid "Rank"
 msgstr ""
 
-#: src/secure_save.c:398
-#, fuzzy
+#: ../src/secure_save.c:397
 msgid "Cannot read the file"
-msgstr "Nie można utworzyć katalogu"
+msgstr "Nie można odczytać pliku"
 
-#: src/secure_save.c:400
+#: ../src/secure_save.c:399
 #, fuzzy
 msgid "Cannot get file status"
 msgstr "Porównanie dwóch zbiorów plików"
 
-#: src/secure_save.c:402
+#: ../src/secure_save.c:401
 msgid "Cannot access the file"
-msgstr ""
+msgstr "Brak dostępu do pliku"
 
-#: src/secure_save.c:404
-#, fuzzy
+#: ../src/secure_save.c:403
 msgid "Cannot create temp file"
-msgstr "Nie można utworzyć katalogu"
+msgstr "Nie można utworzyć tymczasowego pliku"
 
-#: src/secure_save.c:406
-#, fuzzy
+#: ../src/secure_save.c:405
 msgid "Cannot rename the file"
-msgstr "Nie można utworzyć katalogu"
+msgstr "Nie można zmienić nazwy pliku"
 
-#: src/secure_save.c:408
+#: ../src/secure_save.c:407
 msgid "File saving disabled by option"
-msgstr ""
+msgstr "Zapisywanie pliku zostało wyłączone w opcjach"
 
-#: src/secure_save.c:410
+#: ../src/secure_save.c:409
 msgid "Out of memory"
-msgstr ""
+msgstr "Brak pamięci"
 
-#: src/secure_save.c:412
+#: ../src/secure_save.c:411
 msgid "Cannot write the file"
-msgstr ""
+msgstr "Nie mogę zapisać do pliku"
 
-#: src/secure_save.c:416
+#: ../src/secure_save.c:415
 msgid "Secure file saving error"
 msgstr ""
 
-#: src/thumb.c:382
+#: ../src/thumb.c:392
 msgid "Thumbnail image in cache failed to load, trying to recreate.\n"
 msgstr "Odczyt miniaturki z cache nie powiódł się, próba odtworzenia.\n"
 
-#: src/trash.c:74 src/utilops.c:1402 src/utilops.c:1415 src/utilops.c:1494
-#: src/utilops.c:1511 src/utilops.c:3095 src/utilops.c:3146 src/utilops.c:3232
-#: src/utilops.c:3243
+#: ../src/trash.c:80 ../src/utilops.c:2446 ../src/utilops.c:2457
+#: ../src/utilops.c:2514
 msgid "Delete failed"
 msgstr "Usunięcie nie powiodło się"
 
-#: src/trash.c:75
+#: ../src/trash.c:81
 msgid "Unable to remove old file from trash folder"
 msgstr "Nie można usunąć starego pliku z kosza"
 
-#: src/trash.c:126 src/utilops.c:2755
+#: ../src/trash.c:138
 msgid "Could not create folder"
 msgstr "Nie można utworzyć katalogu"
 
-#: src/trash.c:148
+#: ../src/trash.c:160
 msgid "Permission denied"
 msgstr "Brak dostępu"
 
-#: src/trash.c:158
+#: ../src/trash.c:170
 #, c-format
 msgid ""
 "Unable to access or create the trash folder.\n"
@@ -3800,131 +5045,154 @@ msgstr ""
 "Błąd podczas dostępu lub podczas tworzenia katalogu:\n"
 "\"%s\""
 
-#: src/trash.c:162
+#: ../src/trash.c:174
 msgid "Turn off safe delete"
 msgstr "Wyłącz bezpieczne usuwanie"
 
-#: src/trash.c:181
+#: ../src/trash.c:193
 msgid "Deletion by external command"
-msgstr ""
+msgstr "Usuwanie zewnętrznym poleceniem"
 
-#: src/trash.c:189
+#: ../src/trash.c:201
 #, c-format
 msgid " (max. %d MB)"
-msgstr ""
+msgstr " (maks. %d MB)"
 
-#: src/trash.c:193
-#, fuzzy, c-format
+#: ../src/trash.c:205
+#, c-format
 msgid ""
 "Safe delete: %s%s\n"
 "Trash: %s"
-msgstr "Bezpieczne usuwanie: %s"
+msgstr ""
+"Bezpieczne usuwanie: %s%s\n"
+"Kosz: %s"
 
-#: src/trash.c:198
+#: ../src/trash.c:210
 #, c-format
 msgid "Safe delete: %s"
 msgstr "Bezpieczne usuwanie: %s"
 
-#: src/ui_bookmark.c:151
-#, c-format
-msgid "Unable to write history lists to: %s\n"
-msgstr "Nie można zapisać list historii w: %s\n"
-
-#: src/ui_bookmark.c:443 src/ui_bookmark.c:506
+#: ../src/ui_bookmark.c:130 ../src/ui_bookmark.c:193
 msgid "New Bookmark"
 msgstr "Nowa zakładka"
 
-#: src/ui_bookmark.c:589 src/ui_bookmark.c:595
+#: ../src/ui_bookmark.c:276 ../src/ui_bookmark.c:282
 msgid "Edit Bookmark"
 msgstr "Edycja zakładki"
 
-#: src/ui_bookmark.c:610
+#: ../src/ui_bookmark.c:297
 msgid "Path:"
 msgstr "Ścieżka:"
 
-#: src/ui_bookmark.c:619
+#: ../src/ui_bookmark.c:306
 msgid "Icon:"
 msgstr "Ikona:"
 
-#: src/ui_bookmark.c:625
+#: ../src/ui_bookmark.c:312
 msgid "Select icon"
 msgstr "Zaznacz ikonę"
 
-#: src/ui_bookmark.c:716
+#: ../src/ui_bookmark.c:405
 msgid "_Properties..."
 msgstr "_Właściwości..."
 
-#: src/ui_bookmark.c:718
-msgid "Move _up"
-msgstr "Przesuń w _górę"
-
-#: src/ui_bookmark.c:720
-msgid "Move _down"
-msgstr "Przesuń w _dół"
-
-#: src/ui_bookmark.c:722
+#: ../src/ui_bookmark.c:411
 msgid "_Remove"
 msgstr "Usuń"
 
-#: src/ui_help.c:114
+#: ../src/ui_fileops.c:67
+msgid ""
+"One or more filenames are not encoded with the preferred locale character "
+"set.\n"
+msgstr ""
+
+#: ../src/ui_fileops.c:68
 #, c-format
+msgid "Operations on, and display of these files with %s may not succeed.\n"
+msgstr ""
+
+#: ../src/ui_fileops.c:70
 msgid ""
-"Unable to load:\n"
-"%s"
+"If your filenames are not encoded in utf-8, try setting the environment "
+"variable G_BROKEN_FILENAMES=1\n"
 msgstr ""
-"Nie można wczytać:\n"
-"%s"
 
-#: src/ui_pathsel.c:438 src/utilops.c:2859
+#: ../src/ui_fileops.c:72
 #, c-format
-msgid "Failed to rename %s to %s."
-msgstr "Zmiana nazwy %s na %s nie powiodła się."
+msgid "It appears G_BROKEN_FILENAMES is set to %s\n"
+msgstr ""
+
+#: ../src/ui_fileops.c:74
+msgid "It appears G_BROKEN_FILENAMES is not set\n"
+msgstr ""
 
-#: src/ui_pathsel.c:494 src/utilops.c:1510 src/utilops.c:1703
+#: ../src/ui_fileops.c:76
 #, c-format
 msgid ""
-"Unable to delete file:\n"
-"%s"
+"The locale appears to be set to \"%s\"\n"
+"(set by the LANG environment variable)\n"
 msgstr ""
-"Nie można usunąć pliku:\n"
-"%s"
 
-#: src/ui_pathsel.c:495 src/utilops.c:1452 src/utilops.c:1472
-#: src/utilops.c:1684 src/utilops.c:1696 src/utilops.c:1704
-msgid "File deletion failed"
-msgstr "Usunięcie pliku nie powiodło się"
+#: ../src/ui_fileops.c:81
+msgid ""
+"\n"
+"Preferred encoding appears to be UTF-8, however the file:\n"
+msgstr ""
 
-#: src/ui_pathsel.c:537 src/ui_pathsel.c:545 src/utilops.c:1734
-msgid "Delete file"
-msgstr "Usuń plik"
+#: ../src/ui_fileops.c:82 ../src/ui_fileops.c:85 ../src/ui_fileops.c:87
+msgid "[name not displayable]"
+msgstr ""
 
-#: src/ui_pathsel.c:543
+#: ../src/ui_fileops.c:85
+#, c-format
+msgid "\"%s\" is encoded in valid UTF-8."
+msgstr ""
+
+#: ../src/ui_fileops.c:87
+#, c-format
+msgid "\"%s\" is not encoded in valid UTF-8."
+msgstr ""
+
+#: ../src/ui_fileops.c:92 ../src/ui_fileops.c:97
+msgid "Filename encoding locale mismatch"
+msgstr ""
+
+#: ../src/ui_help.c:110
 #, c-format
 msgid ""
-"About to delete the file:\n"
-" %s"
+"Unable to load:\n"
+"%s"
 msgstr ""
-"Usunięcie pliku:\n"
-" %s"
+"Nie można wczytać:\n"
+"%s"
 
-#: src/ui_pathsel.c:634 src/ui_pathsel.c:642 src/utilops.c:2428
-#: src/utilops.c:2690
+#: ../src/ui_pathsel.c:424 ../src/ui_pathsel.c:430 ../src/utilops.c:2145
+#: ../src/utilops.c:2172 ../src/utilops.c:2638
+msgid "Rename failed"
+msgstr "Błąd zmiany nazwy"
+
+#: ../src/ui_pathsel.c:429
+#, c-format
+msgid "Failed to rename %s to %s."
+msgstr "Zmiana nazwy %s na %s nie powiodła się."
+
+#: ../src/ui_pathsel.c:625 ../src/ui_pathsel.c:633
 msgid "_Rename"
 msgstr "Zmień nazwę"
 
-#: src/ui_pathsel.c:636 src/ui_pathsel.c:646
+#: ../src/ui_pathsel.c:627 ../src/ui_pathsel.c:637
 msgid "Add _Bookmark"
 msgstr "Dodanie zakładki"
 
-#: src/ui_pathsel.c:644
+#: ../src/ui_pathsel.c:635
 msgid "_Delete"
 msgstr "Usuń"
 
-#: src/ui_pathsel.c:748 src/ui_pathsel.c:1053 src/utilops.c:2807
+#: ../src/ui_pathsel.c:742 ../src/ui_pathsel.c:1047 ../src/utilops.c:2672
 msgid "New folder"
 msgstr "Nowy katalog"
 
-#: src/ui_pathsel.c:758 src/utilops.c:2762 src/view_dir.c:511
+#: ../src/ui_pathsel.c:752
 #, c-format
 msgid ""
 "Unable to create folder:\n"
@@ -3933,664 +5201,931 @@ msgstr ""
 "Błąd tworzenia katalogu:\n"
 "%s"
 
-#: src/ui_pathsel.c:759 src/utilops.c:2763 src/view_dir.c:512
+#: ../src/ui_pathsel.c:753
 msgid "Error creating folder"
 msgstr "Błąd podczas tworzenia katalogu"
 
-#: src/ui_pathsel.c:980
+#: ../src/ui_pathsel.c:978
 msgid "All Files"
 msgstr "Wszystkie pliki"
 
-#: src/ui_pathsel.c:1056
+#: ../src/ui_pathsel.c:1050
 msgid "Show hidden"
 msgstr "Wyświetlanie ukrytych"
 
-#: src/ui_pathsel.c:1140
+#: ../src/ui_pathsel.c:1134
 msgid "Filter:"
 msgstr "Filtr:"
 
-#: src/ui_tabcomp.c:858
+#: ../src/ui_tabcomp.c:924
 msgid "Select path"
-msgstr "Zaznacz ścieżkę"
+msgstr "Ustaw ścieżki"
 
-#: src/ui_tabcomp.c:874
+#: ../src/ui_tabcomp.c:940
 msgid "All files"
 msgstr "Wszystkie pliki"
 
-#: src/utilops.c:346 src/utilops.c:811 src/utilops.c:1048
-msgid "Error copying file"
-msgstr "Błąd przy kopiowaniu pliku"
-
-#: src/utilops.c:347
-#, fuzzy, c-format
+#: ../src/utilops.c:547
 msgid ""
-"%s\n"
-"Unable to copy file:\n"
-"%s\n"
-"to:\n"
-"%s"
+"\n"
+" Continue multiple file operation?"
 msgstr ""
-"Nie można skopiować pliku:\n"
-"%s\n"
-"do:\n"
-"%s"
+"\n"
+"Kontynuować operację na wielu plikach?"
 
-#: src/utilops.c:390 src/utilops.c:816 src/utilops.c:1053
-msgid "Error moving file"
-msgstr "Błąd przy przenoszeniu pliku"
+#: ../src/utilops.c:554 ../src/utilops.c:987
+msgid "Co_ntinue"
+msgstr "Ko_ntynuuj"
 
-#: src/utilops.c:391
-#, fuzzy, c-format
+#: ../src/utilops.c:731
+#, c-format
 msgid ""
-"%s\n"
-"Unable to move file:\n"
-"%s\n"
-"to:\n"
+"Removal of folder contents failed at this file:\n"
+"\n"
 "%s"
 msgstr ""
-"Nie można przenieść pliku:\n"
-"%s\n"
-"do:\n"
-"%s"
-
-#: src/utilops.c:439 src/utilops.c:1920 src/utilops.c:2642
-#: src/view_file_list.c:391 src/view_file_list.c:397 src/view_file_list.c:411
-msgid "Error renaming file"
-msgstr "Błąd podczas zmiany nazwy pliku"
 
-#: src/utilops.c:440
-#, fuzzy, c-format
+#: ../src/utilops.c:875
+#, c-format
 msgid ""
 "%s\n"
-"Unable to rename file:\n"
-"%s\n"
-"to:\n"
-"%s"
+"Unable to start external command.\n"
 msgstr ""
-"Nie można zmienić nazwy pliku:\n"
 "%s\n"
-"na:\n"
-"%s"
+"Nie można uruchomić zewnętrznego polecenia.\n"
 
-#: src/utilops.c:651 src/utilops.c:981 src/utilops.c:1893 src/utilops.c:2613
-msgid "Overwrite file"
-msgstr "Nadpisz plik"
+#: ../src/utilops.c:955
+#, c-format
+msgid "%s is not a directory"
+msgstr "%s nie jest katalogiem"
 
-#: src/utilops.c:656 src/utilops.c:986 src/utilops.c:1898 src/utilops.c:2618
-msgid "Overwrite file?"
-msgstr "Nadpisać plik?"
+#: ../src/utilops.c:985
+msgid "Really continue?"
+msgstr "Na pewno kontynuować?"
 
-#: src/utilops.c:657 src/utilops.c:987
-msgid "Replace existing file with new file."
-msgstr ""
+#: ../src/utilops.c:999
+msgid "This operation can't continue:"
+msgstr "Ta operacja nie może być kontynuowana:"
 
-#: src/utilops.c:661
-msgid "Overwrite _all"
-msgstr "N_adpisz wszystkie"
+#: ../src/utilops.c:1362 ../src/utilops.c:1475 ../src/utilops.c:1859
+msgid "Discard changes"
+msgstr "Cofnij zmiany"
 
-#: src/utilops.c:663
-msgid "S_kip all"
-msgstr "Pomiń wszyst_kie"
+#: ../src/utilops.c:1363 ../src/utilops.c:1476 ../src/utilops.c:1809
+#: ../src/utilops.c:1825
+msgid "File details"
+msgstr "Szczegóły pliku"
 
-#: src/utilops.c:664
-msgid "_Skip"
-msgstr "Pomiń"
+#: ../src/utilops.c:1385 ../src/utilops.c:1483
+#, fuzzy
+msgid "Sidecars"
+msgstr "pica"
 
-#: src/utilops.c:665 src/utilops.c:991 src/utilops.c:1904 src/utilops.c:2624
-msgid "Existing file"
-msgstr "Istniejący plik"
+#: ../src/utilops.c:1387
+msgid "Write to file"
+msgstr "Zapisz do pliku"
+
+#: ../src/utilops.c:1427
+msgid "Choose the destination folder."
+msgstr "Wybierz katalog docelowy."
+
+#: ../src/utilops.c:1485
+msgid "New name"
+msgstr "Nowa nazwa"
+
+#: ../src/utilops.c:1515
+msgid "Manual rename"
+msgstr "Ręczna zmiana nazwy"
+
+#: ../src/utilops.c:1520
+msgid "Original name:"
+msgstr "Pierwotna nazwa:"
 
-#: src/utilops.c:665 src/utilops.c:991 src/utilops.c:1905 src/utilops.c:2625
-msgid "New file"
-msgstr "Nowy plik"
+#: ../src/utilops.c:1523
+msgid "New name:"
+msgstr "Nowa nazwa:"
 
-#: src/utilops.c:675 src/utilops.c:1000 src/utilops.c:2038 src/utilops.c:2094
-#: src/utilops.c:2167 src/utilops.c:2501
+#: ../src/utilops.c:1536
 msgid "Auto rename"
 msgstr "Automatyczna zmiana nazwy"
 
-#: src/utilops.c:683 src/utilops.c:1008 src/utilops.c:2423 src/utilops.c:2682
-msgid "Rename"
-msgstr "Zmień nazwę"
+#: ../src/utilops.c:1542
+msgid "Begin text"
+msgstr "Początek tekstu"
+
+#: ../src/utilops.c:1550 ../src/utilops.c:1582
+msgid "Start #"
+msgstr "Start #"
 
-#: src/utilops.c:724
-msgid "Source to copy matches destination"
-msgstr "Kopiowany plik źródłowy odpowiada docelowemu"
+#: ../src/utilops.c:1556
+msgid "End text"
+msgstr "Koniec tekstu"
 
-#: src/utilops.c:725
-#, c-format
-msgid ""
-"Unable to copy file:\n"
-"%s\n"
-"to itself."
+#: ../src/utilops.c:1564
+msgid "Padding:"
 msgstr ""
-"Nie można skopiować pliku:\n"
-"%s\n"
-"na niego samego."
 
-#: src/utilops.c:729
-msgid "Source to move matches destination"
-msgstr "Przenoszony plik źródłowy odpowiada docelowemu"
+#: ../src/utilops.c:1569
+msgid "Formatted rename"
+msgstr ""
 
-#: src/utilops.c:730
-#, c-format
-msgid ""
-"Unable to move file:\n"
-"%s\n"
-"to itself."
+#: ../src/utilops.c:1574
+msgid "Format (* = original name, ## = numbers)"
 msgstr ""
-"Nie można przenieść pliku:\n"
-"%s\n"
-"na niego samego."
 
-#: src/utilops.c:738 src/utilops.c:825 src/utilops.c:1408 src/utilops.c:1502
-msgid "Co_ntinue"
-msgstr "Ko_ntynuuj"
+#: ../src/utilops.c:1712
+msgid "Another operation in progress.\n"
+msgstr "Inna operacja jest właśnie w toku.\n"
 
-#: src/utilops.c:812
+#: ../src/utilops.c:1768
 #, c-format
-msgid ""
-"Unable to copy file:\n"
-"%s\n"
-"to:\n"
-"%s\n"
-"during multiple file copy."
+msgid "File: '%s'\n"
+msgstr "Plik: '%s'\n"
+
+#: ../src/utilops.c:1773
+msgid "with sidecar files:\n"
 msgstr ""
-"Nie można skopiować pliku:\n"
-"%s\n"
-"do:\n"
-"%s\n"
-" podczas kopiowania wielu plików."
 
-#: src/utilops.c:817
+#: ../src/utilops.c:1779
 #, c-format
+msgid " '%s'\n"
+msgstr " '%s'\n"
+
+#: ../src/utilops.c:1783
 msgid ""
-"Unable to move file:\n"
-"%s\n"
-"to:\n"
-"%s\n"
-"during multiple file move."
+"\n"
+"Status: "
 msgstr ""
-"Nie można przenieść pliku:\n"
-"%s\n"
-"do:\n"
-"%s\n"
-" podczas przenoszenia wielu plików."
+"\n"
+"Status: "
 
-#: src/utilops.c:972
-msgid "Source matches destination"
-msgstr "Źródło odpowiada celowi"
+#: ../src/utilops.c:1795
+msgid "no problem detected"
+msgstr "nie wykryto problemów"
 
-#: src/utilops.c:973
-msgid "Source and destination are the same, operation cancelled."
-msgstr "Źródło i cel są takie same, operacja anulowana."
+#: ../src/utilops.c:1811 ../src/utilops.c:1858
+msgid "Exclude file"
+msgstr "Pomiń plik"
+
+#: ../src/utilops.c:1856 ../src/utilops.c:1881
+msgid "Overview of changed metadata"
+msgstr "Opis zmienionych metadanych"
 
-#: src/utilops.c:1049
+#: ../src/utilops.c:1874
 #, c-format
 msgid ""
-"Unable to copy file:\n"
-"%s\n"
-"to:\n"
-"%s"
+"The following metadata tags will be written to\n"
+"'%s'."
 msgstr ""
-"Nie można skopiować pliku:\n"
-"%s\n"
-"do:\n"
-"%s"
+"Następujące metadane zostaną zapisane do\n"
+"'%s'."
 
-#: src/utilops.c:1054
+#: ../src/utilops.c:1878
 #, c-format
-msgid ""
-"Unable to move file:\n"
-"%s\n"
-"to:\n"
-"%s"
-msgstr ""
-"Nie można przenieść pliku:\n"
-"%s\n"
-"do:\n"
-"%s"
+msgid "The following metadata tags will be written to the image file itself."
+msgstr "Następujące metadane zostaną zapisane do obrazu bezpośrednio."
 
-#: src/utilops.c:1102
-msgid "Invalid destination"
-msgstr "Niepoprawny cel"
+#: ../src/utilops.c:1984
+msgid "Delete files?"
+msgstr "Usunąć pliki?"
 
-#: src/utilops.c:1103
-msgid ""
-"When operating with multiple files, please select\n"
-"a folder, not a file."
-msgstr ""
+#: ../src/utilops.c:1985
+msgid "This will delete the following files"
+msgstr "Ta operacja spowoduje usunięcie następujących plików"
 
-#: src/utilops.c:1108
-msgid "Please select an existing folder."
-msgstr ""
+#: ../src/utilops.c:2004
+msgid "Can't write metadata"
+msgstr "Nie mogę zapisać metadanych"
 
-#: src/utilops.c:1178 src/view_dir.c:338
-msgid "_Copy"
-msgstr "S_kopiuj"
+#: ../src/utilops.c:2027
+msgid "Write metadata"
+msgstr "Zapisz metadane"
 
-#: src/utilops.c:1181
-msgid "Copy file"
-msgstr "Kopiuj plik"
+#: ../src/utilops.c:2028
+msgid "Write metadata?"
+msgstr "Zapisać metadane?"
 
-#: src/utilops.c:1185
-msgid "Copy multiple files"
-msgstr "Kopiuj wiele plików"
+#: ../src/utilops.c:2029
+msgid "This will write the changed metadata into the following files"
+msgstr "Ta operacja zapisze zmienione metadane do następujących plików"
 
-#: src/utilops.c:1192 src/view_dir.c:340
-msgid "_Move"
-msgstr "_Przenieś"
+#: ../src/utilops.c:2031
+#, fuzzy
+msgid "Metadata writing failed"
+msgstr "Zapisywanie metadanych nie powiodło się"
 
-#: src/utilops.c:1195
-msgid "Move file"
-msgstr "Przenieś plik"
+#: ../src/utilops.c:2050 ../src/utilops.c:2077
+msgid "Move failed"
+msgstr "Przenoszenie nie powiodło się"
 
-#: src/utilops.c:1199
-msgid "Move multiple files"
-msgstr "Przenieś wiele plików"
+#: ../src/utilops.c:2074
+msgid "Move files?"
+msgstr "Przenieś pliki?"
 
-#: src/utilops.c:1214 src/utilops.c:1744
-msgid "File name:"
-msgstr "Nazwa pliku:"
+#: ../src/utilops.c:2075
+msgid "This will move the following files"
+msgstr "Ta operacja spowoduje przeniesienie następujących plików"
 
-#: src/utilops.c:1218
-msgid "Choose the destination folder."
-msgstr "Wybierz katalog docelowy."
+#: ../src/utilops.c:2099 ../src/utilops.c:2126
+msgid "Copy failed"
+msgstr "Kopiowanie nie powiodło się"
 
-#: src/utilops.c:1389
-#, fuzzy
-msgid ""
-"\n"
-"Unable to delete file by external command:\n"
-msgstr ""
-"Nie można usunąć pliku:\n"
-"%s"
+#: ../src/utilops.c:2123
+msgid "Copy files?"
+msgstr "Kopiować pliki?"
 
-#: src/utilops.c:1401
-#, fuzzy
-msgid ""
-"\n"
-" Continue multiple delete operation?"
-msgstr ""
-"Nie można usunąć pliku:\n"
-" %s\n"
-" Kontynuować operację usuwania plików?"
+#: ../src/utilops.c:2124 ../src/utilops.c:2258
+msgid "This will copy the following files"
+msgstr "Skopiowane zostaną następujące pliki"
 
-#: src/utilops.c:1452 src/utilops.c:1684
-msgid "Another operation in progress.\n"
-msgstr ""
+#: ../src/utilops.c:2168 ../src/utilops.c:2634
+msgid "Rename"
+msgstr "Zmień nazwę"
 
-#: src/utilops.c:1471
-#, fuzzy, c-format
-msgid ""
-"%s\n"
-"Unable to delete files by external command.\n"
-msgstr ""
-"Nie można usunąć pliku:\n"
-"%s"
+#: ../src/utilops.c:2169
+msgid "Rename files?"
+msgstr "Zmienić nazwę plików?"
 
-#: src/utilops.c:1498
-#, c-format
-msgid ""
-"Unable to delete file:\n"
-" %s\n"
-" Continue multiple delete operation?"
-msgstr ""
-"Nie można usunąć pliku:\n"
-" %s\n"
-" Kontynuować operację usuwania plików?"
+#: ../src/utilops.c:2170
+msgid "This will rename the following files"
+msgstr "Ta operacja spowoduje zmianę nazwy następujących plików"
 
-#: src/utilops.c:1569
-#, c-format
-msgid "File %d of %d"
-msgstr "Plik %d z %d"
+#: ../src/utilops.c:2222
+msgid "Can't run external editor"
+msgstr "Nie mogę uruchomić zewnętrznego edytora"
 
-#: src/utilops.c:1637
-#, fuzzy
-msgid "Delete files"
-msgstr "Usuń plik"
+#: ../src/utilops.c:2256
+msgid "Editor"
+msgstr "Edytor"
 
-#: src/utilops.c:1643
-msgid "Delete multiple files"
-msgstr "Usuń wiele plików"
+#: ../src/utilops.c:2257
+msgid "Run editor?"
+msgstr "Uruchomić edytor?"
 
-#: src/utilops.c:1661
-#, c-format
-msgid "Review %d files"
-msgstr "Przegląd %d plików"
+#: ../src/utilops.c:2260
+msgid "External command failed"
+msgstr "Zewnętrzne polecenie nie powiodło się"
 
-#: src/utilops.c:1695
-#, fuzzy, c-format
-msgid ""
-"%s\n"
-"Unable to delete file by external command:\n"
-"%s"
-msgstr ""
-"Nie można usunąć pliku:\n"
-"%s"
+#: ../src/utilops.c:2429 ../src/utilops.c:2502
+msgid "Delete folder"
+msgstr "Usuń katalog"
 
-#: src/utilops.c:1740
-msgid "Delete file?"
-msgstr "Usunąć plik?"
+#: ../src/utilops.c:2430
+msgid "Delete symbolic link?"
+msgstr "Usunąć dowiązanie symboliczne?"
 
-#: src/utilops.c:1899 src/utilops.c:2619
-msgid "Replace existing file by renaming new file."
+#: ../src/utilops.c:2432
+msgid ""
+"This will delete the symbolic link.\n"
+"The folder this link points to will not be deleted."
 msgstr ""
+"Zaraz usuniesz dowiązanie symboliczne.\n"
+"Katalog na który wskazuje to dowiązanie NIE zostanie usunięty."
 
-#: src/utilops.c:1917
+#: ../src/utilops.c:2434
+msgid "Link deletion failed"
+msgstr "Usunięcie linku nie powiodło się"
+
+#: ../src/utilops.c:2444
 #, c-format
 msgid ""
-"Unable to rename file:\n"
-"%s\n"
-" to:\n"
-"%s"
+"Unable to remove folder %s\n"
+"Permissions do not allow writing to the folder."
 msgstr ""
-"Nie można zmienić nazwy pliku:\n"
-"%s\n"
-" na:\n"
-"%s"
+"Nie można usunąć katalogu %s\n"
+"Brak uprawnień by zapisywać w tym katalogu."
 
-#: src/utilops.c:2039
-msgid "Format must include at least one of the symbol characters '*' or '#'.\n"
-msgstr ""
+#: ../src/utilops.c:2456 ../src/utilops.c:2513
+#, c-format
+msgid "Unable to list contents of folder %s"
+msgstr "Nie mogę wyświetlić zawartości katalogu %s"
 
-#: src/utilops.c:2095
-msgid ""
-"Can not auto rename with the selected\n"
-"number set, one or more files exist that\n"
-"match the resulting name list.\n"
-msgstr ""
-"Nie można przeprowadzić automatycznej\n"
-"zmiany nazw plików, jeden lub więcej\n"
-"plików posiada nazwę podobną do\n"
-"tych z wynikowej listy nazw.\n"
+#: ../src/utilops.c:2470 ../src/utilops.c:2478
+msgid "Folder contains subfolders"
+msgstr "Katalog zawiera podkatalogi"
 
-#: src/utilops.c:2166
+#: ../src/utilops.c:2474
 #, c-format
 msgid ""
-"Failed to rename\n"
+"Unable to delete the folder:\n"
+"\n"
 "%s\n"
-"The number was %d."
+"\n"
+"This folder contains subfolders which must be moved before it can be deleted."
 msgstr ""
-"Nie powiodła się zmiana nazwy\n"
+"Nie można usunąć katalogu:\n"
+"\n"
 "%s\n"
-"Liczba %d."
+"\n"
+"Ten katalog zawiera podkatalogi, które musza zostać przeniesione zanim "
+"katalog może zostać usunięty."
 
-#: src/utilops.c:2427
-msgid "Rename multiple files"
-msgstr ""
+#: ../src/utilops.c:2482
+msgid "Subfolders:"
+msgstr "Podkatalogi:"
 
-#: src/utilops.c:2461
-msgid "Original Name"
-msgstr "Nazwa oryginału"
+#: ../src/utilops.c:2503
+msgid "Delete folder?"
+msgstr "Usunąć katalog?"
 
-#: src/utilops.c:2499
-#, fuzzy
-msgid "Manual rename"
-msgstr "Nazwa menu"
+#: ../src/utilops.c:2504
+msgid "The folder contains these files:"
+msgstr "Ten katalog zawiera następujące pliki:"
 
-#: src/utilops.c:2500
-msgid "Formatted rename"
+#: ../src/utilops.c:2505
+msgid ""
+"This will delete the folder.\n"
+"The contents of this folder will also be deleted."
 msgstr ""
+"Zaraz usuniesz katalog.\n"
+"Zawartość tego katalogu TAKŻE zostanie usunięta."
 
-#: src/utilops.c:2513 src/utilops.c:2697
-msgid "Original name:"
-msgstr "Pierwotna nazwa:"
+#: ../src/utilops.c:2635
+msgid "Rename folder?"
+msgstr "Zmienić nazwę katalogu?"
 
-#: src/utilops.c:2516 src/utilops.c:2700
-msgid "New name:"
-msgstr "Nowa nazwa:"
+#: ../src/utilops.c:2636
+msgid "The folder contains the following files"
+msgstr "Katalog zawiera następujące pliki"
 
-#: src/utilops.c:2534
-msgid "Begin text"
-msgstr "Początek tekstu"
+#: ../src/utilops.c:2682
+msgid "Create Folder"
+msgstr "Utwórz katalog"
 
-#: src/utilops.c:2542 src/utilops.c:2574
-msgid "Start #"
-msgstr "Start #"
+#: ../src/utilops.c:2683
+msgid "Create folder?"
+msgstr "Utworzyć katalog?"
 
-#: src/utilops.c:2548
-msgid "End text"
-msgstr "Koniec tekstu"
+#: ../src/utilops.c:2686
+msgid "Can't create folder"
+msgstr "Nie można utworzyć katalogu"
 
-#: src/utilops.c:2556
-msgid "Padding:"
-msgstr ""
+#: ../src/view_dir.c:397
+msgid "_Copy"
+msgstr "S_kopiuj"
 
-#: src/utilops.c:2566
-msgid "Format (* = original name, ## = numbers)"
+#: ../src/view_dir.c:399
+msgid "_Move"
+msgstr "_Przenieś"
+
+#: ../src/view_dir.c:644
+msgid "_Up to parent"
+msgstr "W _górę do nadrzędnego"
+
+#: ../src/view_dir.c:649
+msgid "_Slideshow"
+msgstr "Przeglądanie _slajdowe"
+
+#: ../src/view_dir.c:651
+msgid "Slideshow recursive"
+msgstr "Rekurencyjne przeglądanie slajdowe"
+
+#: ../src/view_dir.c:655
+msgid "Find _duplicates..."
+msgstr "Wyszukaj _duplikaty..."
+
+#: ../src/view_dir.c:657
+msgid "Find duplicates recursive..."
+msgstr "Rekurencyjnie wyszukaj duplikaty..."
+
+#: ../src/view_dir.c:662
+msgid "_New folder..."
+msgstr "Nowy _folder..."
+
+#: ../src/view_dir.c:676 ../src/view_file.c:619
+msgid "View as _List"
+msgstr "Wyświetlanie jako _lista"
+
+#: ../src/view_dir.c:679
+msgid "View as _Tree"
+msgstr "Widok _drzewiasty"
+
+#: ../src/view_dir.c:684
+msgid "Show _hidden files"
+msgstr "Wyświetlanie ukrytych plików"
+
+#: ../src/view_dir.c:687 ../src/view_file.c:637
+msgid "Re_fresh"
+msgstr "_Odśwież"
+
+#: ../src/view_file.c:622
+msgid "View as _Icons"
+msgstr "Wyświetlanie jako _ikony"
+
+#: ../src/view_file.c:628
+msgid "Show _thumbnails"
+msgstr "Pokaż _miniaturki"
+
+#: ../src/view_file_icon.c:2098 ../src/view_file_list.c:809
+msgid " [NO GROUPING]"
 msgstr ""
 
-#: src/utilops.c:2641 src/view_file_list.c:410
+#: ../src/view_file_list.c:435
 #, c-format
 msgid ""
-"Unable to rename file:\n"
-"%s\n"
-"to:\n"
+"Invalid file name:\n"
 "%s"
 msgstr ""
-"Nie można zmienić nazwy pliku:\n"
-"%s\n"
-"na:\n"
+"Niepoprawna nazwa pliku:\n"
 "%s"
 
-#: src/utilops.c:2687
-msgid "Rename file"
-msgstr "Zmień nazwę"
+#: ../src/view_file_list.c:436
+msgid "Error renaming file"
+msgstr "Błąd podczas zmiany nazwy pliku"
 
-#: src/utilops.c:2748 src/utilops.c:2841
-#, c-format
-msgid ""
-"The folder:\n"
-"%s\n"
-"already exists."
-msgstr ""
-"Katalog:\n"
-"%s\n"
-"już istnieje."
+#: ../src/window.c:252
+msgid "Help"
+msgstr "Pomo_c"
 
-#: src/utilops.c:2749 src/utilops.c:2842
-msgid "Folder exists"
-msgstr "Katalog istnieje"
+#~ msgid "Collection empty"
+#~ msgstr "Pusta kolekcja"
 
-#: src/utilops.c:2754 src/utilops.c:2850
-#, c-format
-msgid ""
-"The path:\n"
-"%s\n"
-"already exists as a file."
-msgstr ""
-"Ścieżka:\n"
-"%s\n"
-"już istnieje i reprezentuje plik."
+#~ msgid "The current collection is empty, save aborted."
+#~ msgstr "Bieżąca kolekcja jest pusta, zrezygnowano z zapisu."
 
-#: src/utilops.c:2812
-#, c-format
-msgid ""
-"Create folder in:\n"
-"%s\n"
-"named:"
-msgstr ""
-"Utwórz katalog w:\n"
-"%s\n"
-"o nazwie:"
+#~ msgid "Use Exif date"
+#~ msgstr "Użyj daty Exif"
 
-#: src/utilops.c:2851 src/utilops.c:2860
-msgid "Rename failed"
-msgstr "Błąd zmiany nazwy"
+#~ msgid "None"
+#~ msgstr "Brak"
 
-#: src/utilops.c:2967
-#, fuzzy
-msgid "Location"
-msgstr "Położenie:"
+#~ msgid "Normal"
+#~ msgstr "Zwykła"
 
-#: src/utilops.c:3145
-#, fuzzy, c-format
-msgid ""
-"Unable to delete folder:\n"
-"\n"
-"%s"
-msgstr ""
-"Nie można usunąć pliku:\n"
-"%s"
+#~ msgid "Best"
+#~ msgstr "Najlepsza"
 
-#: src/utilops.c:3152
-#, c-format
-msgid ""
-"Removal of folder contents failed at this file:\n"
-"\n"
-"%s"
-msgstr ""
+#~ msgid "Use xvpics thumbnails when found (read only)"
+#~ msgstr "Wykorzystywanie odnalezionych miniaturek xvpics (tylko odczyt)"
+
+#~ msgid "Offscreen cache size (Mb per image):"
+#~ msgstr "Rozmiar cache w piksmapach (MB na obraz):"
+
+#~ msgid "Dithering method:"
+#~ msgstr "Metoda rozpraszania:"
+
+#~ msgid "Show dot directory"
+#~ msgstr "Pokaż katalogi z kropką (zwykle ukryte lub systemowe)"
+
+#~ msgid "Add Alt"
+#~ msgstr "Dodaj Alt"
+
+#~ msgid "Advanced view"
+#~ msgstr "Widok zaawansowany"
+
+#~ msgid "Favorite"
+#~ msgstr "Ulubione"
+
+#~ msgid "Todo"
+#~ msgstr "Do zrobienia"
+
+#~ msgid "Possessions"
+#~ msgstr "Własności"
+
+#~ msgid "Keyword Presets"
+#~ msgstr "Słowa kluczowe"
+
+#~ msgid "Favorite keywords list"
+#~ msgstr "Ulubione słowa kluczowe"
+
+#~ msgid "Edit favorite keywords list."
+#~ msgstr "Zmień listę słów kluczowych."
+
+#~ msgid "Add keywords to selected files, replacing existing ones"
+#~ msgstr ""
+#~ "Dodaj słowo kluczowe do zaznaczonych plików, nadpisując już istniejące"
+
+#~ msgid "Add comment to selected files, replacing existing one"
+#~ msgstr "Dodaj komentarz do zaznaczonych plików, nadpisując już istniejący"
+
+#~ msgid "Save comment now"
+#~ msgstr "Zapisz komentarz"
+
+#~ msgid ""
+#~ "Unable to create symbolic link:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można stworzyć dowiązania symbolicznego:\n"
+#~ "%s"
+
+#~ msgid "Pixbuf Object"
+#~ msgstr "Obiekt Pixbuf"
+
+#~ msgid "Background color"
+#~ msgstr "Kolor tła"
+
+#~ msgid "Background color as a GdkColor"
+#~ msgstr "Kolor tła jako GdkColor"
+
+#~ msgid "Foreground color"
+#~ msgstr "Kolor pierwszoplanowy"
+
+#~ msgid "Background set"
+#~ msgstr "Ustaw tło"
+
+#~ msgid "Show text"
+#~ msgstr "Pokaż tekst"
+
+#~ msgid "%d images (%d)"
+#~ msgstr "%d obrazów (%d)"
+
+#~ msgid "_Properties"
+#~ msgstr "Wł_aściwości"
+
+#~ msgid "The Gimp"
+#~ msgstr "Gimp"
+
+#~ msgid "XV"
+#~ msgstr "XV"
+
+#~ msgid "UFraw"
+#~ msgstr "UFraw"
+
+#~ msgid "Rotate jpeg clockwise"
+#~ msgstr "Obróć jpeg zgodnie z zegarem"
+
+#~ msgid "Rotate jpeg counterclockwise"
+#~ msgstr "Obróć jpeg przeciwnie do zegara"
+
+#~ msgid "External Move command"
+#~ msgstr "Zewnętrzne polecenie Przenieś"
+
+#~ msgid "External Rename command"
+#~ msgstr "Zewnętrzne polecenie Zmień nazwę"
 
-#: src/utilops.c:3207 src/utilops.c:3291
 #, fuzzy
-msgid "Delete folder"
-msgstr "Wybierz katalog"
+#~ msgid "External Delete command"
+#~ msgstr "Aktywny klawisz Delete"
 
-#: src/utilops.c:3211
-#, c-format
-msgid ""
-"This will delete the symbolic link:\n"
-"\n"
-"%s\n"
-"\n"
-"The folder this link points to will not be deleted."
-msgstr ""
+#~ msgid "External New Folder command"
+#~ msgstr "Zewnętrzne polecenie Nowy katalog"
 
-#: src/utilops.c:3215
-msgid "Delete symbolic link to folder?"
-msgstr ""
+#~ msgid "Dimensions:"
+#~ msgstr "Wymiary:"
 
-#: src/utilops.c:3230
-#, fuzzy, c-format
-msgid ""
-"Unable to remove folder %s\n"
-"Permissions do not allow writing to the folder."
-msgstr "Nie można usunąć starego pliku z kosza"
+#~ msgid "Transparent:"
+#~ msgstr "Przezroczystość:"
 
-#: src/utilops.c:3242
-#, fuzzy, c-format
-msgid "Unable to list contents of folder %s"
-msgstr ""
-"Błąd tworzenia katalogu:\n"
-"%s"
+#~ msgid "Compress ratio:"
+#~ msgstr "Poziom kompresji:"
+
+#~ msgid "File type:"
+#~ msgstr "Typ pliku:"
+
+#~ msgid "Owner:"
+#~ msgstr "Właściciel:"
+
+#~ msgid "Group:"
+#~ msgstr "Grupa:"
+
+#~ msgid "Image %d of %d"
+#~ msgstr "Obraz %d z %d"
+
+#~ msgid "Image properties"
+#~ msgstr "Właściwości obrazu"
 
-#: src/utilops.c:3256 src/utilops.c:3264
 #, fuzzy
-msgid "Folder contains subfolders"
-msgstr "Dołącz podkatalogi"
+#~ msgid "_%d %s..."
+#~ msgstr "za pomocą %s..."
 
-#: src/utilops.c:3260
-#, c-format
-msgid ""
-"Unable to delete the folder:\n"
-"\n"
-"%s\n"
-"\n"
-"This folder contains subfolders which must be moved before it can be deleted."
-msgstr ""
+#, fuzzy
+#~ msgid "_%d (unknown)..."
+#~ msgstr "za pomocą (nieznany)..."
 
-#: src/utilops.c:3268
 #, fuzzy
-msgid "Subfolders:"
-msgstr "katalog"
+#~ msgid "_%d empty"
+#~ msgstr "puste"
 
-#: src/utilops.c:3295
-#, c-format
-msgid ""
-"This will delete the folder:\n"
-"\n"
-"%s\n"
-"\n"
-"The contents of this folder will also be deleted."
-msgstr ""
+#~ msgid "_Adjust"
+#~ msgstr "Modyfikacja"
+
+#~ msgid "_View Directory as"
+#~ msgstr "Pokaż katalog jako"
 
-#: src/utilops.c:3299
 #, fuzzy
-msgid "Delete folder?"
-msgstr "Usunąć plik?"
+#~ msgid "Escape"
+#~ msgstr "poziome"
+
+#~ msgid "_Thumbnails"
+#~ msgstr "Minia_turki"
+
+#~ msgid "_Keywords"
+#~ msgstr "Słowa _kluczowe"
+
+#~ msgid "E_xif data"
+#~ msgstr "Dane E_xif"
+
+#~ msgid "_List"
+#~ msgstr "_Lista"
+
+#~ msgid "Change to home folder"
+#~ msgstr "Przejdź do katalogu domowego"
+
+#~ msgid "Refresh file list"
+#~ msgstr "Odświeża listę plików"
+
+#~ msgid "_Float"
+#~ msgstr "Format"
+
+#~ msgid "Float Controls"
+#~ msgstr "Odłącza panel sterujący"
+
+#~ msgid "Always"
+#~ msgstr "Zawsze"
+
+#~ msgid "Cache thumbnails into .thumbnails"
+#~ msgstr "Używanie katalogu .thumbnails do przechowywania miniaturek"
+
+#~ msgid "Two pass zooming"
+#~ msgstr "Dwuetapowe powiększanie"
+
+#~ msgid "#"
+#~ msgstr "#"
+
+#~ msgid "Command Line"
+#~ msgstr "Wiersz poleceń"
+
+#~ msgid "Advanced"
+#~ msgstr "Zaawansowane"
+
+#~ msgid "Store keywords and comments as XMP tags in image files"
+#~ msgstr ""
+#~ "Zapisuj słowa kluczowe i komentarze jako tagi XMP do pliku (lokalnie)"
 
-#: src/utilops.c:3303
 #, fuzzy
-msgid "Contents:"
-msgstr "Indeks"
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można skopiować pliku:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
+
+#~ msgid "Error moving file"
+#~ msgstr "Błąd przy przenoszeniu pliku"
 
-#: src/view_dir.c:30
 #, fuzzy
-msgid "_Tree"
-msgstr "D_rzewo"
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można przenieść pliku:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
 
-#: src/view_dir.c:502
-msgid "new_folder"
-msgstr "nowy_folder"
+#, fuzzy
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to rename file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można zmienić nazwy pliku:\n"
+#~ "%s\n"
+#~ "na:\n"
+#~ "%s"
 
-#: src/view_dir.c:587
-msgid "_Up to parent"
-msgstr "W _górę do nadrzędnego"
+#~ msgid "Overwrite file?"
+#~ msgstr "Nadpisać plik?"
 
-#: src/view_dir.c:592
-msgid "_Slideshow"
-msgstr "Przeglądanie _slajdowe"
+#~ msgid "Overwrite _all"
+#~ msgstr "N_adpisz wszystkie"
 
-#: src/view_dir.c:594
-msgid "Slideshow recursive"
-msgstr "Rekurencyjne przeglądanie slajdowe"
+#~ msgid "S_kip all"
+#~ msgstr "Pomiń wszyst_kie"
 
-#: src/view_dir.c:598
-msgid "Find _duplicates..."
-msgstr "Wyszukaj _duplikaty..."
+#~ msgid "_Skip"
+#~ msgstr "Pomiń"
 
-#: src/view_dir.c:600
-msgid "Find duplicates recursive..."
-msgstr "Rekurencyjnie wyszukaj duplikaty..."
+#~ msgid "Existing file"
+#~ msgstr "Istniejący plik"
 
-#: src/view_dir.c:605
-msgid "_New folder..."
-msgstr "Nowy _folder..."
+#~ msgid "New file"
+#~ msgstr "Nowy plik"
+
+#~ msgid "Source to copy matches destination"
+#~ msgstr "Kopiowany plik źródłowy odpowiada docelowemu"
+
+#~ msgid ""
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to itself."
+#~ msgstr ""
+#~ "Nie można skopiować pliku:\n"
+#~ "%s\n"
+#~ "na niego samego."
+
+#~ msgid "Source to move matches destination"
+#~ msgstr "Przenoszony plik źródłowy odpowiada docelowemu"
+
+#~ msgid ""
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to itself."
+#~ msgstr ""
+#~ "Nie można przenieść pliku:\n"
+#~ "%s\n"
+#~ "na niego samego."
+
+#~ msgid ""
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s\n"
+#~ "during multiple file copy."
+#~ msgstr ""
+#~ "Nie można skopiować pliku:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s\n"
+#~ " podczas kopiowania wielu plików."
+
+#~ msgid ""
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s\n"
+#~ "during multiple file move."
+#~ msgstr ""
+#~ "Nie można przenieść pliku:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s\n"
+#~ " podczas przenoszenia wielu plików."
+
+#~ msgid "Source matches destination"
+#~ msgstr "Źródło odpowiada celowi"
+
+#~ msgid ""
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można skopiować pliku:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można przenieść pliku:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
+
+#~ msgid "Please select an existing folder."
+#~ msgstr "Proszę wybrać istniejący katalog."
+
+#~ msgid "Copy multiple files"
+#~ msgstr "Kopiuj wiele plików"
+
+#~ msgid "Move multiple files"
+#~ msgstr "Przenieś wiele plików"
+
+#~ msgid "File name:"
+#~ msgstr "Nazwa pliku:"
 
-#: src/view_dir.c:619
 #, fuzzy
-msgid "_View as"
-msgstr "_Podgląd"
+#~ msgid ""
+#~ "\n"
+#~ "Unable to delete file by external command:\n"
+#~ msgstr ""
+#~ "Nie można usunąć pliku:\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "Unable to delete file:\n"
+#~ " %s\n"
+#~ " Continue multiple delete operation?"
+#~ msgstr ""
+#~ "Nie można usunąć pliku:\n"
+#~ " %s\n"
+#~ " Kontynuować operację usuwania plików?"
+
+#~ msgid "File %d of %d"
+#~ msgstr "Plik %d z %d"
+
+#~ msgid "Delete multiple files"
+#~ msgstr "Usuń wiele plików"
+
+#~ msgid "Review %d files"
+#~ msgstr "Przegląd %d plików"
 
-#: src/view_dir.c:631
 #, fuzzy
-msgid "Show _hidden files"
-msgstr "Wyświetlanie ukrytych"
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to delete file by external command:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można usunąć pliku:\n"
+#~ "%s"
 
-#: src/view_dir.c:634 src/view_file.c:606
-msgid "Re_fresh"
-msgstr "_Odśwież"
+#~ msgid "Delete file?"
+#~ msgstr "Usunąć plik?"
 
-#: src/view_file.c:588
-msgid "_Sort"
-msgstr "_Uporządkuj"
+#~ msgid ""
+#~ "Unable to rename file:\n"
+#~ "%s\n"
+#~ " to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można zmienić nazwy pliku:\n"
+#~ "%s\n"
+#~ " na:\n"
+#~ "%s"
 
-#: src/view_file.c:591
-msgid "View as _icons"
-msgstr "Wyświetlanie jako _ikony"
+#~ msgid ""
+#~ "Can not auto rename with the selected\n"
+#~ "number set, one or more files exist that\n"
+#~ "match the resulting name list.\n"
+#~ msgstr ""
+#~ "Nie można przeprowadzić automatycznej\n"
+#~ "zmiany nazw plików, jeden lub więcej\n"
+#~ "plików posiada nazwę podobną do\n"
+#~ "tych z wynikowej listy nazw.\n"
 
-#: src/view_file.c:597
-msgid "Show _thumbnails"
-msgstr "Pokaż _miniaturki"
+#~ msgid ""
+#~ "Failed to rename\n"
+#~ "%s\n"
+#~ "The number was %d."
+#~ msgstr ""
+#~ "Nie powiodła się zmiana nazwy\n"
+#~ "%s\n"
+#~ "Liczba %d."
 
-#: src/view_file_list.c:390
-#, c-format
-msgid ""
-"Invalid file name:\n"
-"%s"
-msgstr ""
-"Niepoprawna nazwa pliku:\n"
-"%s"
+#~ msgid "Original Name"
+#~ msgstr "Nazwa oryginału"
 
-#: src/view_file_list.c:1821
-msgid "SC"
-msgstr ""
+#~ msgid ""
+#~ "Unable to rename file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można zmienić nazwy pliku:\n"
+#~ "%s\n"
+#~ "na:\n"
+#~ "%s"
+
+#~ msgid ""
+#~ "The folder:\n"
+#~ "%s\n"
+#~ "already exists."
+#~ msgstr ""
+#~ "Katalog:\n"
+#~ "%s\n"
+#~ "już istnieje."
+
+#~ msgid ""
+#~ "The path:\n"
+#~ "%s\n"
+#~ "already exists as a file."
+#~ msgstr ""
+#~ "Ścieżka:\n"
+#~ "%s\n"
+#~ "już istnieje i reprezentuje plik."
+
+#~ msgid ""
+#~ "Create folder in:\n"
+#~ "%s\n"
+#~ "named:"
+#~ msgstr ""
+#~ "Utwórz katalog w:\n"
+#~ "%s\n"
+#~ "o nazwie:"
+
+#~ msgid ""
+#~ "Unable to delete folder:\n"
+#~ "\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nie można usunąć katalogu:\n"
+#~ "\n"
+#~ "%s"
+
+#~ msgid "Contents:"
+#~ msgstr "Zawartość:"
+
+#~ msgid "new_folder"
+#~ msgstr "nowy_folder"
 
-#: src/window.c:226
 #, fuzzy
-msgid "Help"
-msgstr "Pomo_c"
+#~ msgid "_View as"
+#~ msgstr "_Podgląd"
 
 #~ msgid "Change to folder:"
 #~ msgstr "Przejdź do katalogu:"
@@ -4611,26 +6146,16 @@ msgstr "Pomo_c"
 #~ msgid "Always show fullscreen info"
 #~ msgstr "wyłącz pełny ekran"
 
-#, fuzzy
-#~ msgid "Fullscreen info string"
-#~ msgstr "Pełny ekran"
-
 #, fuzzy
 #~ msgid "List"
 #~ msgstr "_Lista"
 
-#~ msgid "View as _tree"
-#~ msgstr "Widok _drzewiasty"
-
 #~ msgid "Show entries that begin with a dot"
 #~ msgstr "Wyświetlanie wpisów rozpoczynających się kropką"
 
 #~ msgid "Find duplicates - Geeqie"
 #~ msgstr "Wyszukiwanie duplikatów - Geeqie"
 
-#~ msgid "Geeqie full screen"
-#~ msgstr "pełny ekran Geeqie"
-
 #~ msgid "Geeqie Tools"
 #~ msgstr "Narzędzia Geeqie"
 
@@ -4640,9 +6165,6 @@ msgstr "Pomo_c"
 #~ msgid "Geeqie - exit"
 #~ msgstr "Geeqie - zakończenie"
 
-#~ msgid "Quit Geeqie"
-#~ msgstr "Zakończ Geeqie"
-
 #, fuzzy
 #~ msgid "Pan View - Geeqie"
 #~ msgstr "Drukowanie - Geeqie"
index 85bba3f..4550693 100644 (file)
@@ -7,10 +7,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Geeqie 2.1.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-16 21:05+0100\n"
-"PO-Revision-Date: 2010-01-31 12:15-0300\n"
-"Last-Translator: Sérgio Cipolla <secipolla@gmail.com>\n"
+"POT-Creation-Date: 2012-08-30 20:30+0200\n"
+"PO-Revision-Date: 2010-05-14 10:28-0300\n"
+"Last-Translator: Sérgio Brandão Cipolla <secipolla@gmail.com>\n"
 "Language-Team: Brazilian Portuguese\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -57,12 +58,12 @@ msgstr "Editar arquivo UFRaw ID"
 msgid "UFRaw Batch recursive"
 msgstr "Lote UFRaw recursivo"
 
-#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1284
-#: ../src/preferences.c:93 ../src/preferences.c:1595
+#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1111
+#: ../src/preferences.c:93 ../src/preferences.c:1617
 msgid "Metadata"
 msgstr "Metadados"
 
-#: ../src/advanced_exif.c:376 ../src/preferences.c:1512
+#: ../src/advanced_exif.c:376 ../src/preferences.c:1531
 msgid "Description"
 msgstr "Descrição"
 
@@ -71,8 +72,8 @@ msgid "Value"
 msgstr "Valor"
 
 #: ../src/advanced_exif.c:378 ../src/desktop_file.c:515 ../src/dupe.c:2647
-#: ../src/dupe.c:3165 ../src/print.c:3201 ../src/search.c:2844
-#: ../src/utilops.c:462 ../src/view_file_list.c:2046
+#: ../src/dupe.c:3134 ../src/print.c:3199 ../src/search.c:2790
+#: ../src/utilops.c:462 ../src/view_file_list.c:1948
 msgid "Name"
 msgstr "Nome"
 
@@ -97,11 +98,11 @@ msgstr "Histograma"
 msgid "Title"
 msgstr "Título"
 
-#: ../src/bar.c:169 ../src/search.c:2767
+#: ../src/bar.c:169 ../src/search.c:2717
 msgid "Keywords"
 msgstr "Palavras-chave"
 
-#: ../src/bar.c:170 ../src/search.c:2779
+#: ../src/bar.c:170 ../src/search.c:2729
 msgid "Comment"
 msgstr "Comentário"
 
@@ -118,11 +119,11 @@ msgstr "Informações do arquivo"
 msgid "Location and GPS"
 msgstr "Localização e GPS"
 
-#: ../src/bar.c:175 ../src/exif.c:347
+#: ../src/bar.c:175 ../src/exif.c:348
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/bar.c:178 ../src/bar_gps.c:768
+#: ../src/bar.c:178 ../src/bar_gps.c:763
 msgid "GPS Map"
 msgstr "Mapa GPS"
 
@@ -130,11 +131,11 @@ msgstr "Mapa GPS"
 msgid "Move to _top"
 msgstr "Mover para o _topo"
 
-#: ../src/bar.c:298 ../src/ui_bookmark.c:405
+#: ../src/bar.c:298 ../src/ui_bookmark.c:407
 msgid "Move _up"
 msgstr "Mover para _cima"
 
-#: ../src/bar.c:299 ../src/ui_bookmark.c:407
+#: ../src/bar.c:299 ../src/ui_bookmark.c:409
 msgid "Move _down"
 msgstr "Mover para _baixo"
 
@@ -146,11 +147,11 @@ msgstr "Mover para _embaixo"
 msgid "Remove"
 msgstr "Remover"
 
-#: ../src/bar_comment.c:191
+#: ../src/bar_comment.c:195
 msgid "Add text to selected files"
 msgstr "Adicionar texto aos arquivos selecionados"
 
-#: ../src/bar_comment.c:192
+#: ../src/bar_comment.c:196
 msgid "Replace existing text in selected files"
 msgstr "Substituir o texto existente nos arquivos selecionados"
 
@@ -158,69 +159,69 @@ msgstr "Substituir o texto existente nos arquivos selecionados"
 msgid "<empty label, fixme>"
 msgstr "<rótulo vazio, corrigir>"
 
-#: ../src/bar_exif.c:538 ../src/bar_exif.c:548
+#: ../src/bar_exif.c:541 ../src/bar_exif.c:551
 msgid "Configure entry"
 msgstr "Configurar a entrada"
 
 #. for the pane
-#: ../src/bar_exif.c:538 ../src/bar_exif.c:548 ../src/bar_exif.c:621
+#: ../src/bar_exif.c:541 ../src/bar_exif.c:551 ../src/bar_exif.c:624
 msgid "Add entry"
 msgstr "Adicionar uma entrada"
 
-#: ../src/bar_exif.c:554
+#: ../src/bar_exif.c:557
 msgid "Key:"
 msgstr "Tecla:"
 
-#: ../src/bar_exif.c:563
+#: ../src/bar_exif.c:566
 msgid "Title:"
 msgstr "Título:"
 
-#: ../src/bar_exif.c:572
+#: ../src/bar_exif.c:575
 msgid "Show only if set"
 msgstr "Exibir apenas se definido"
 
-#: ../src/bar_exif.c:573
+#: ../src/bar_exif.c:576
 msgid "Editable (supported only for XMP)"
 msgstr "Editável (suportado apenas para XMP)"
 
 #. for the entry
-#: ../src/bar_exif.c:609
+#: ../src/bar_exif.c:612
 #, c-format
 msgid "Configure \"%s\""
 msgstr "Configurar \"%s\""
 
-#: ../src/bar_exif.c:610 ../src/bar_keywords.c:1143
+#: ../src/bar_exif.c:613 ../src/bar_keywords.c:1187
 #, c-format
 msgid "Remove \"%s\""
 msgstr "Remover \"%s\""
 
-#: ../src/bar_exif.c:622
+#: ../src/bar_exif.c:625
 msgid "Show hidden entries"
 msgstr "Exibir entradas ocultas"
 
-#: ../src/bar_gps.c:499
+#: ../src/bar_gps.c:485
 #, c-format
 msgid "Zoom %i"
 msgstr "Zoom %i"
 
-#: ../src/bar_gps.c:517
+#: ../src/bar_gps.c:503
 #, c-format
 msgid "Zoom level %i"
 msgstr "Nível de zoom %i"
 
-#: ../src/bar_gps.c:522
+#: ../src/bar_gps.c:508
 msgid "Loading map"
 msgstr "Carregando o mapa"
 
-#: ../src/bar_gps.c:584
+#: ../src/bar_gps.c:575
 msgid "Enable markers"
 msgstr "Habilitar marcadores"
 
-#: ../src/bar_gps.c:586
+#: ../src/bar_gps.c:577
 msgid "Centre map on marker"
 msgstr "Centralizar o mapa sobre o marcador"
 
-#: ../src/bar_gps.c:609
+#: ../src/bar_gps.c:600
 msgid ""
 "Move map centre to marker\n"
 " is disabled"
@@ -228,7 +229,7 @@ msgstr ""
 "Mover o centro do mapa para\n"
 " o marcador está desabilitado"
 
-#: ../src/bar_gps.c:614
+#: ../src/bar_gps.c:605
 msgid ""
 "Move map centre to marker\n"
 " is enabled"
@@ -236,122 +237,127 @@ msgstr ""
 "Mover o centro do mapa para\n"
 " o marcador está habilitado"
 
-#: ../src/bar_gps.c:623
+#: ../src/bar_gps.c:614
 msgid "Map Centreing"
 msgstr "Centralização do mapa"
 
 #. use the same strings as in layout_util.c
-#: ../src/bar_histogram.c:242 ../src/layout_util.c:1392
+#: ../src/bar_histogram.c:249 ../src/layout_util.c:1411
 msgid "Histogram on _Red"
 msgstr "Histograma no _vermelho"
 
-#: ../src/bar_histogram.c:243 ../src/layout_util.c:1393
+#: ../src/bar_histogram.c:250 ../src/layout_util.c:1412
 msgid "Histogram on _Green"
 msgstr "Histograma no v_erde"
 
-#: ../src/bar_histogram.c:244 ../src/layout_util.c:1394
+#: ../src/bar_histogram.c:251 ../src/layout_util.c:1413
 msgid "Histogram on _Blue"
 msgstr "Histograma no _azul"
 
-#: ../src/bar_histogram.c:245 ../src/layout_util.c:1395
+#: ../src/bar_histogram.c:252 ../src/layout_util.c:1414
 msgid "_Histogram on RGB"
 msgstr "_Histograma no RGB"
 
-#: ../src/bar_histogram.c:246 ../src/layout_util.c:1396
+#: ../src/bar_histogram.c:253 ../src/layout_util.c:1415
 msgid "Histogram on _Value"
 msgstr "Histograma no valo_r"
 
-#: ../src/bar_histogram.c:250 ../src/layout_util.c:1400
+#: ../src/bar_histogram.c:257 ../src/layout_util.c:1419
 msgid "Li_near Histogram"
 msgstr "Histograma li_near"
 
-#: ../src/bar_histogram.c:251
+#: ../src/bar_histogram.c:258
 msgid "L_og Histogram"
 msgstr "L_ogar o histograma"
 
-#: ../src/bar_keywords.c:410
+#: ../src/bar_keywords.c:401
 msgid "Add keywords to selected files"
 msgstr "Adicionar palavras-chave aos arquivos selecionados"
 
-#: ../src/bar_keywords.c:411
+#: ../src/bar_keywords.c:402
 msgid "Replace existing keywords in selected files"
 msgstr "Substituir as palavras-chave existentes nos arquivos selecionados"
 
-#: ../src/bar_keywords.c:884
+#: ../src/bar_keywords.c:873
 msgid "Edit keyword"
 msgstr "Editar a palavra-chave"
 
-#: ../src/bar_keywords.c:884
+#: ../src/bar_keywords.c:873
 msgid "Add keywords"
 msgstr "Adicionar palavras-chave"
 
-#: ../src/bar_keywords.c:891
+#: ../src/bar_keywords.c:880
 msgid "Configure keyword"
 msgstr "Configurar a palavra-chave"
 
-#: ../src/bar_keywords.c:891 ../src/bar_keywords.c:1101
+#: ../src/bar_keywords.c:880 ../src/bar_keywords.c:1141
 msgid "Add keyword"
 msgstr "Adicionar palavra-chave"
 
-#: ../src/bar_keywords.c:897
+#: ../src/bar_keywords.c:886
 msgid "Keyword:"
 msgstr "Palavra-chave:"
 
-#: ../src/bar_keywords.c:906
+#: ../src/bar_keywords.c:895
 msgid "Keyword type:"
 msgstr "Tipo de palavra-chave:"
 
-#: ../src/bar_keywords.c:908
+#: ../src/bar_keywords.c:897
 msgid "Active keyword"
 msgstr "Palavra-chave ativa"
 
-#: ../src/bar_keywords.c:911
+#: ../src/bar_keywords.c:900
 msgid "Helper"
 msgstr "Ajudante"
 
-#: ../src/bar_keywords.c:1121
+#: ../src/bar_keywords.c:1145
+#, fuzzy
+msgid "Add keyword to all selected images"
+msgstr "Adicionar palavras-chave aos arquivos selecionados"
+
+#: ../src/bar_keywords.c:1165
 #, c-format
 msgid "Hide \"%s\""
 msgstr "Ocultar \"%s\""
 
-#: ../src/bar_keywords.c:1128
+#: ../src/bar_keywords.c:1172
 #, c-format
 msgid "Mark %d"
 msgstr "Marcação %d"
 
-#: ../src/bar_keywords.c:1133
+#: ../src/bar_keywords.c:1177
 #, c-format
 msgid "Connect \"%s\" to mark"
 msgstr "Conectar \"%s\" à marcação"
 
-#: ../src/bar_keywords.c:1140
+#: ../src/bar_keywords.c:1184
 #, c-format
 msgid "Edit \"%s\""
 msgstr "Editar \"%s\""
 
-#: ../src/bar_keywords.c:1150
+#: ../src/bar_keywords.c:1194
 #, c-format
 msgid "Disconnect \"%s\" from mark %s"
 msgstr "Desconectar \"%s\" da marcação %s"
 
 #. for the pane
-#: ../src/bar_keywords.c:1162 ../src/bar_keywords.c:1171
+#: ../src/bar_keywords.c:1206 ../src/bar_keywords.c:1215
 msgid "Expand checked"
 msgstr "Expandir os selecionados"
 
-#: ../src/bar_keywords.c:1163 ../src/bar_keywords.c:1172
+#: ../src/bar_keywords.c:1207 ../src/bar_keywords.c:1216
 msgid "Collapse unchecked"
 msgstr "Recolher os não selecionados"
 
-#: ../src/bar_keywords.c:1164 ../src/bar_keywords.c:1173
+#: ../src/bar_keywords.c:1208 ../src/bar_keywords.c:1217
 msgid "Hide unchecked"
 msgstr "Ocultar os não selecionados"
 
-#: ../src/bar_keywords.c:1165
+#: ../src/bar_keywords.c:1209
 msgid "Show all"
 msgstr "Exibir tudo"
 
-#: ../src/bar_keywords.c:1168
+#: ../src/bar_keywords.c:1212
 msgid "On any change"
 msgstr "Em toda modificação"
 
@@ -370,7 +376,7 @@ msgstr ""
 msgid "Collection exists"
 msgstr "A coleção existe"
 
-#: ../src/bar_sort.c:464 ../src/collect.c:1098 ../src/collect-dlg.c:85
+#: ../src/bar_sort.c:464 ../src/collect.c:1034 ../src/collect-dlg.c:85
 #, c-format
 msgid ""
 "Failed to save the collection:\n"
@@ -379,7 +385,7 @@ msgstr ""
 "Falha ao salvar a coleção:\n"
 "%s"
 
-#: ../src/bar_sort.c:465 ../src/collect.c:1099 ../src/collect-dlg.c:86
+#: ../src/bar_sort.c:465 ../src/collect.c:1035 ../src/collect-dlg.c:86
 msgid "Save Failed"
 msgstr "Falha ao salvar"
 
@@ -399,19 +405,19 @@ msgstr "Nome:"
 msgid "Sort Manager"
 msgstr "Classificador"
 
-#: ../src/bar_sort.c:606 ../src/pan-view.c:2395 ../src/ui_pathsel.c:1099
+#: ../src/bar_sort.c:606 ../src/pan-view.c:2194 ../src/ui_pathsel.c:1097
 msgid "Folders"
 msgstr "Diretórios"
 
-#: ../src/bar_sort.c:607 ../src/options.c:140
+#: ../src/bar_sort.c:607 ../src/options.c:147
 msgid "Collections"
 msgstr "Coleções"
 
-#: ../src/bar_sort.c:615 ../src/utilops.c:2124
+#: ../src/bar_sort.c:615 ../src/utilops.c:2122
 msgid "Copy"
 msgstr "Copiar"
 
-#: ../src/bar_sort.c:618 ../src/utilops.c:2075
+#: ../src/bar_sort.c:618 ../src/utilops.c:2073
 msgid "Move"
 msgstr "Mover"
 
@@ -436,77 +442,77 @@ msgstr ""
 "erro ao salvar os dados do cache de similaridades: %s\n"
 "erro: %s\n"
 
-#: ../src/cache_maint.c:129 ../src/cache_maint.c:722 ../src/cache_maint.c:938
-#: ../src/editors.c:1176
+#: ../src/cache_maint.c:110 ../src/cache_maint.c:549 ../src/cache_maint.c:765
+#: ../src/editors.c:1177
 msgid "done"
 msgstr "concluído"
 
-#: ../src/cache_maint.c:307
+#: ../src/cache_maint.c:288
 msgid "Removing old metadata..."
 msgstr "Removendo metadados antigos..."
 
-#: ../src/cache_maint.c:311
+#: ../src/cache_maint.c:292
 msgid "Clearing cached thumbnails..."
 msgstr "Limpando miniaturas em cache..."
 
-#: ../src/cache_maint.c:315 ../src/cache_maint.c:1096
+#: ../src/cache_maint.c:296 ../src/cache_maint.c:923
 msgid "Removing old thumbnails..."
 msgstr "Removendo miniaturas antigas..."
 
-#: ../src/cache_maint.c:318 ../src/cache_maint.c:1099
+#: ../src/cache_maint.c:299 ../src/cache_maint.c:926
 msgid "Maintenance"
 msgstr "Manutenção"
 
-#: ../src/cache_maint.c:833
+#: ../src/cache_maint.c:660
 msgid "Invalid folder"
 msgstr "Diretório inválido"
 
-#: ../src/cache_maint.c:834
+#: ../src/cache_maint.c:661
 msgid "The specified folder can not be found."
 msgstr "O diretório especificado não pode ser encontrado."
 
-#: ../src/cache_maint.c:865 ../src/cache_maint.c:879 ../src/cache_maint.c:1275
+#: ../src/cache_maint.c:692 ../src/cache_maint.c:706 ../src/cache_maint.c:1102
 msgid "Create thumbnails"
 msgstr "Criar miniaturas"
 
-#: ../src/cache_maint.c:873 ../src/cache_maint.c:1106
+#: ../src/cache_maint.c:700 ../src/cache_maint.c:933
 msgid "S_tart"
 msgstr "_Iniciar"
 
-#: ../src/cache_maint.c:886 ../src/preferences.c:1782
+#: ../src/cache_maint.c:713 ../src/preferences.c:1804
 msgid "Folder:"
 msgstr "Diretório:"
 
-#: ../src/cache_maint.c:889
+#: ../src/cache_maint.c:716
 msgid "Select folder"
 msgstr "Selecionar diretório"
 
-#: ../src/cache_maint.c:893
+#: ../src/cache_maint.c:720
 msgid "Include subfolders"
 msgstr "Incluir subdiretórios"
 
-#: ../src/cache_maint.c:894
+#: ../src/cache_maint.c:721
 msgid "Store thumbnails local to source images"
 msgstr "Armazenar as miniaturas no local das imagens de origem"
 
-#: ../src/cache_maint.c:903 ../src/cache_maint.c:1115
+#: ../src/cache_maint.c:730 ../src/cache_maint.c:942
 msgid "click start to begin"
 msgstr "clique em iniciar para começar"
 
-#: ../src/cache_maint.c:1042 ../src/editors.c:1102
+#: ../src/cache_maint.c:869 ../src/editors.c:1103
 msgid "running..."
 msgstr "executando..."
 
-#: ../src/cache_maint.c:1091
+#: ../src/cache_maint.c:918
 msgid "Clearing thumbnails..."
 msgstr "Limpando as miniaturas..."
 
-#: ../src/cache_maint.c:1157 ../src/cache_maint.c:1160
-#: ../src/cache_maint.c:1253 ../src/cache_maint.c:1270
+#: ../src/cache_maint.c:984 ../src/cache_maint.c:987 ../src/cache_maint.c:1080
+#: ../src/cache_maint.c:1097
 msgid "Clear cache"
 msgstr "Limpar o cache"
 
-#: ../src/cache_maint.c:1161
+#: ../src/cache_maint.c:988
 msgid ""
 "This will remove all thumbnails that have\n"
 "been saved to disk, continue?"
@@ -514,73 +520,73 @@ msgstr ""
 "Isto irá remover todas as miniaturas\n"
 "salvas no disco, continuar?"
 
-#: ../src/cache_maint.c:1203
+#: ../src/cache_maint.c:1030
 #, c-format
 msgid "Location: %s"
 msgstr "Localização: %s"
 
-#: ../src/cache_maint.c:1228
+#: ../src/cache_maint.c:1055
 msgid "Cache Maintenance"
 msgstr "Manutenção do cache"
 
-#: ../src/cache_maint.c:1238
+#: ../src/cache_maint.c:1065
 msgid "Cache and Data Maintenance"
 msgstr "Manutenção do cache e de dados"
 
-#: ../src/cache_maint.c:1242
+#: ../src/cache_maint.c:1069
 msgid "Thumbnail cache"
 msgstr "Cache de miniaturas"
 
-#: ../src/cache_maint.c:1248 ../src/cache_maint.c:1265
-#: ../src/cache_maint.c:1290
+#: ../src/cache_maint.c:1075 ../src/cache_maint.c:1092
+#: ../src/cache_maint.c:1117
 msgid "Clean up"
 msgstr "Limpar"
 
-#: ../src/cache_maint.c:1251 ../src/cache_maint.c:1268
+#: ../src/cache_maint.c:1078 ../src/cache_maint.c:1095
 msgid "Remove orphaned or outdated thumbnails."
 msgstr "Remover miniaturas órfãs ou desatualizadas."
 
-#: ../src/cache_maint.c:1256 ../src/cache_maint.c:1273
+#: ../src/cache_maint.c:1083 ../src/cache_maint.c:1100
 msgid "Delete all cached thumbnails."
 msgstr "Apagar todas as miniaturas em cache."
 
-#: ../src/cache_maint.c:1259
+#: ../src/cache_maint.c:1086
 msgid "Shared thumbnail cache"
 msgstr "Cache de miniaturas compartilhado"
 
-#: ../src/cache_maint.c:1279
+#: ../src/cache_maint.c:1106
 msgid "Render"
 msgstr "Gerar"
 
-#: ../src/cache_maint.c:1282
+#: ../src/cache_maint.c:1109
 msgid "Render thumbnails for a specific folder."
 msgstr "Gerar miniaturas para um diretório específico."
 
-#: ../src/cache_maint.c:1293
+#: ../src/cache_maint.c:1120
 msgid "Remove orphaned keywords and comments."
 msgstr "Remover palavras-chave e comentários órfãos."
 
 #. When does this occur ??
-#: ../src/collect.c:366 ../src/image.c:160 ../src/image-overlay.c:512
-#: ../src/image-overlay.c:591
+#: ../src/collect.c:326 ../src/image.c:160 ../src/image-overlay.c:525
+#: ../src/image-overlay.c:602
 msgid "Untitled"
 msgstr "Sem nome"
 
-#: ../src/collect.c:370
+#: ../src/collect.c:330
 #, c-format
 msgid "Untitled (%d)"
 msgstr "Sem nome (%d)"
 
-#: ../src/collect.c:1016
+#: ../src/collect.c:959
 #, c-format
 msgid "%s - Collection - %s"
 msgstr "%s - Coleção - %s"
 
-#: ../src/collect.c:1135 ../src/collect.c:1139
+#: ../src/collect.c:1071 ../src/collect.c:1075
 msgid "Close collection"
 msgstr "Fechar a coleção"
 
-#: ../src/collect.c:1140
+#: ../src/collect.c:1076
 msgid ""
 "Collection has been modified.\n"
 "Save first?"
@@ -588,7 +594,7 @@ msgstr ""
 "A coleção foi modificada.\n"
 "Salvar primeiro?"
 
-#: ../src/collect.c:1143
+#: ../src/collect.c:1079
 msgid "_Discard"
 msgstr "_Descartar"
 
@@ -658,14 +664,6 @@ msgstr "_Adicionar"
 msgid "Collection Files"
 msgstr "Arquivos de coleção"
 
-#: ../src/collect-dlg.c:245
-msgid "Collection empty"
-msgstr "Coleção vazia"
-
-#: ../src/collect-dlg.c:246
-msgid "The current collection is empty, save aborted."
-msgstr "A coleção atual está vazia, salvamento abortado."
-
 #: ../src/collect-io.c:346
 #, c-format
 msgid "failed to open collection (write) \"%s\"\n"
@@ -690,8 +688,8 @@ msgstr "imagens %s, %d (%s, %d)"
 msgid "%s, %d images"
 msgstr "imagens %s, %d"
 
-#: ../src/collect-table.c:223 ../src/layout_util.c:1194
-#: ../src/layout_util.c:2231
+#: ../src/collect-table.c:223 ../src/layout_util.c:1211
+#: ../src/layout_util.c:2264
 msgid "Empty"
 msgstr "Vazio"
 
@@ -700,138 +698,138 @@ msgstr "Vazio"
 msgid "Loading thumbs..."
 msgstr "Carregando miniaturas..."
 
-#: ../src/collect-table.c:866 ../src/dupe.c:2242 ../src/dupe.c:2555
-#: ../src/layout_util.c:1241 ../src/search.c:1000
+#: ../src/collect-table.c:868 ../src/dupe.c:2242 ../src/dupe.c:2555
+#: ../src/layout_util.c:1258 ../src/search.c:996
 msgid "_View"
 msgstr "_Visualizar"
 
-#: ../src/collect-table.c:868 ../src/dupe.c:2244 ../src/dupe.c:2557
-#: ../src/img-view.c:1281 ../src/layout_image.c:505 ../src/pan-view.c:2823
-#: ../src/search.c:1002 ../src/view_file.c:588
+#: ../src/collect-table.c:870 ../src/dupe.c:2244 ../src/dupe.c:2557
+#: ../src/img-view.c:1268 ../src/layout_image.c:499 ../src/pan-view.c:2617
+#: ../src/search.c:998 ../src/view_file.c:588
 msgid "View in _new window"
 msgstr "Visualizar em uma _nova janela"
 
-#: ../src/collect-table.c:871 ../src/dupe.c:2278 ../src/dupe.c:2565
-#: ../src/search.c:1032
+#: ../src/collect-table.c:873 ../src/dupe.c:2278 ../src/dupe.c:2565
+#: ../src/search.c:1028
 msgid "Rem_ove"
 msgstr "Rem_over"
 
-#: ../src/collect-table.c:874
+#: ../src/collect-table.c:876
 msgid "Append from file list"
 msgstr "Adicionar da lista de arquivos"
 
-#: ../src/collect-table.c:876
+#: ../src/collect-table.c:878
 msgid "Append from collection..."
 msgstr "Adicionar da coleção..."
 
-#: ../src/collect-table.c:880
+#: ../src/collect-table.c:882
 msgid "_Selection"
 msgstr "_Seleção"
 
-#: ../src/collect-table.c:882 ../src/dupe.c:2247 ../src/dupe.c:2560
-#: ../src/layout_util.c:1287 ../src/search.c:1005
+#: ../src/collect-table.c:884 ../src/dupe.c:2247 ../src/dupe.c:2560
+#: ../src/layout_util.c:1305 ../src/search.c:1001
 msgid "Select all"
 msgstr "Selecionar tudo"
 
-#: ../src/collect-table.c:884 ../src/dupe.c:2249 ../src/dupe.c:2562
-#: ../src/layout_util.c:1288 ../src/search.c:1007
+#: ../src/collect-table.c:886 ../src/dupe.c:2249 ../src/dupe.c:2562
+#: ../src/layout_util.c:1306 ../src/search.c:1003
 msgid "Select none"
-msgstr "Não selecionar nenhum"
+msgstr "Desselecionar tudo"
 
-#: ../src/collect-table.c:886
+#: ../src/collect-table.c:888
 msgid "Invert selection"
 msgstr "Inverter a seleção"
 
-#: ../src/collect-table.c:898 ../src/dupe.c:2267 ../src/img-view.c:1285
-#: ../src/layout_image.c:513 ../src/layout_util.c:1270 ../src/pan-view.c:2827
-#: ../src/search.c:1021 ../src/view_file.c:592
+#: ../src/collect-table.c:900 ../src/dupe.c:2267 ../src/img-view.c:1272
+#: ../src/layout_image.c:507 ../src/layout_util.c:1288 ../src/pan-view.c:2621
+#: ../src/search.c:1017 ../src/view_file.c:592
 msgid "_Copy..."
 msgstr "Co_piar..."
 
-#: ../src/collect-table.c:900 ../src/dupe.c:2269 ../src/img-view.c:1286
-#: ../src/layout_image.c:515 ../src/layout_util.c:1271 ../src/pan-view.c:2829
-#: ../src/search.c:1023 ../src/view_file.c:594
+#: ../src/collect-table.c:902 ../src/dupe.c:2269 ../src/img-view.c:1273
+#: ../src/layout_image.c:509 ../src/layout_util.c:1289 ../src/pan-view.c:2623
+#: ../src/search.c:1019 ../src/view_file.c:594
 msgid "_Move..."
 msgstr "_Mover..."
 
-#: ../src/collect-table.c:902 ../src/dupe.c:2271 ../src/img-view.c:1287
-#: ../src/layout_image.c:517 ../src/layout_util.c:1272 ../src/pan-view.c:2831
-#: ../src/search.c:1025 ../src/view_dir.c:666 ../src/view_file.c:596
+#: ../src/collect-table.c:904 ../src/dupe.c:2271 ../src/img-view.c:1274
+#: ../src/layout_image.c:511 ../src/layout_util.c:1290 ../src/pan-view.c:2625
+#: ../src/search.c:1021 ../src/view_dir.c:665 ../src/view_file.c:596
 msgid "_Rename..."
 msgstr "_Renomear..."
 
-#: ../src/collect-table.c:904 ../src/dupe.c:2273 ../src/img-view.c:1288
-#: ../src/layout_image.c:519 ../src/layout_util.c:1273
-#: ../src/layout_util.c:1274 ../src/layout_util.c:1275 ../src/pan-view.c:2833
-#: ../src/search.c:1027 ../src/view_dir.c:668 ../src/view_file.c:598
+#: ../src/collect-table.c:906 ../src/dupe.c:2273 ../src/img-view.c:1275
+#: ../src/layout_image.c:513 ../src/layout_util.c:1291
+#: ../src/layout_util.c:1292 ../src/layout_util.c:1293 ../src/pan-view.c:2627
+#: ../src/search.c:1023 ../src/view_dir.c:667 ../src/view_file.c:598
 msgid "_Delete..."
 msgstr "_Apagar..."
 
-#: ../src/collect-table.c:906 ../src/dupe.c:2275 ../src/img-view.c:1289
-#: ../src/layout_image.c:522 ../src/pan-view.c:2835 ../src/search.c:1029
-#: ../src/view_dir.c:671 ../src/view_file.c:600
+#: ../src/collect-table.c:908 ../src/dupe.c:2275 ../src/img-view.c:1276
+#: ../src/layout_image.c:516 ../src/pan-view.c:2629 ../src/search.c:1025
+#: ../src/view_dir.c:670 ../src/view_file.c:600
 msgid "_Copy path"
 msgstr "_Copiar o caminho"
 
-#: ../src/collect-table.c:912
+#: ../src/collect-table.c:914
 msgid "Randomize"
 msgstr "Aleatorizar"
 
-#: ../src/collect-table.c:914 ../src/view_file.c:616
+#: ../src/collect-table.c:916 ../src/view_file.c:616
 msgid "_Sort"
 msgstr "_Ordenar"
 
-#: ../src/collect-table.c:917 ../src/view_file.c:632
+#: ../src/collect-table.c:919 ../src/view_file.c:632
 msgid "Show filename _text"
 msgstr "Exibir o _nome do arquivo"
 
-#: ../src/collect-table.c:920
+#: ../src/collect-table.c:922
 msgid "_Save collection"
 msgstr "_Salvar a coleção"
 
-#: ../src/collect-table.c:922
+#: ../src/collect-table.c:924
 msgid "Save collection _as..."
 msgstr "Salvar a coleção _como..."
 
-#: ../src/collect-table.c:925 ../src/layout_util.c:1266
+#: ../src/collect-table.c:927 ../src/layout_util.c:1284
 msgid "_Find duplicates..."
 msgstr "Procurar por _duplicatas..."
 
-#: ../src/collect-table.c:927 ../src/dupe.c:2264 ../src/layout_util.c:1268
-#: ../src/search.c:1018
+#: ../src/collect-table.c:929 ../src/dupe.c:2264 ../src/layout_util.c:1286
+#: ../src/search.c:1014
 msgid "Print..."
 msgstr "Imprimir..."
 
-#: ../src/collect-table.c:2085 ../src/dupe.c:3355 ../src/img-view.c:1443
+#: ../src/collect-table.c:2094 ../src/dupe.c:3324 ../src/img-view.c:1430
 msgid "Dropped list includes folders."
 msgstr "A lista inclui diretórios."
 
-#: ../src/collect-table.c:2087 ../src/dupe.c:3357 ../src/img-view.c:1445
+#: ../src/collect-table.c:2096 ../src/dupe.c:3326 ../src/img-view.c:1432
 msgid "_Add contents"
 msgstr "_Adicionar o conteúdo"
 
-#: ../src/collect-table.c:2089 ../src/dupe.c:3358 ../src/img-view.c:1446
+#: ../src/collect-table.c:2098 ../src/dupe.c:3327 ../src/img-view.c:1433
 msgid "Add contents _recursive"
 msgstr "Adicionar o conteúdo _recursivamente"
 
-#: ../src/collect-table.c:2091 ../src/dupe.c:3359 ../src/img-view.c:1447
+#: ../src/collect-table.c:2100 ../src/dupe.c:3328 ../src/img-view.c:1434
 msgid "_Skip folders"
 msgstr "_Ignorar os diretórios"
 
-#: ../src/collect-table.c:2094 ../src/dupe.c:3361 ../src/img-view.c:1449
+#: ../src/collect-table.c:2103 ../src/dupe.c:3330 ../src/img-view.c:1436
 #: ../src/view_dir.c:417
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: ../src/color-man.c:420 ../src/exif.c:232 ../src/exif-common.c:403
+#: ../src/color-man.c:426 ../src/exif.c:233 ../src/exif-common.c:436
 msgid "sRGB"
 msgstr "sRGB"
 
-#: ../src/color-man.c:422
+#: ../src/color-man.c:428
 msgid "Adobe RGB compatible"
 msgstr "Compatível com AdobeRGB"
 
-#: ../src/color-man.c:430
+#: ../src/color-man.c:443
 msgid "Custom profile"
 msgstr "Perfil personalizado"
 
@@ -851,7 +849,7 @@ msgstr "Não pude criar o diretório"
 msgid "Desktop file"
 msgstr "Arquivo .desktop"
 
-#: ../src/desktop_file.c:291 ../src/ui_pathsel.c:494
+#: ../src/desktop_file.c:291 ../src/ui_pathsel.c:485
 #, c-format
 msgid ""
 "Unable to delete file:\n"
@@ -860,17 +858,17 @@ msgstr ""
 "Incapaz de apagar o arquivo:\n"
 "%s"
 
-#: ../src/desktop_file.c:292 ../src/ui_pathsel.c:495 ../src/utilops.c:1962
-#: ../src/utilops.c:1989 ../src/utilops.c:2509
+#: ../src/desktop_file.c:292 ../src/ui_pathsel.c:486 ../src/utilops.c:1960
+#: ../src/utilops.c:1987 ../src/utilops.c:2507
 msgid "File deletion failed"
 msgstr "O apagamento do arquivo falhou"
 
-#: ../src/desktop_file.c:336 ../src/desktop_file.c:344 ../src/ui_pathsel.c:537
-#: ../src/ui_pathsel.c:545
+#: ../src/desktop_file.c:336 ../src/desktop_file.c:344 ../src/ui_pathsel.c:528
+#: ../src/ui_pathsel.c:536
 msgid "Delete file"
 msgstr "Apagar o arquivo"
 
-#: ../src/desktop_file.c:342 ../src/ui_pathsel.c:543
+#: ../src/desktop_file.c:342 ../src/ui_pathsel.c:534
 #, c-format
 msgid ""
 "About to delete the file:\n"
@@ -891,8 +889,8 @@ msgstr "Editores"
 msgid "Hidden"
 msgstr "Oculto"
 
-#: ../src/desktop_file.c:543 ../src/dupe.c:2653 ../src/dupe.c:3169
-#: ../src/print.c:3203 ../src/search.c:2848 ../src/ui_pathsel.c:1111
+#: ../src/desktop_file.c:543 ../src/dupe.c:2653 ../src/dupe.c:3138
+#: ../src/print.c:3201 ../src/search.c:2794 ../src/ui_pathsel.c:1109
 #: ../src/utilops.c:458
 msgid "Path"
 msgstr "Caminho"
@@ -931,7 +929,7 @@ msgstr "Lendo os dados de similaridade..."
 msgid "Comparing..."
 msgstr "Comparando..."
 
-#: ../src/dupe.c:1559 ../src/pan-view.c:1094
+#: ../src/dupe.c:1559 ../src/pan-view.c:996
 msgid "Sorting..."
 msgstr "Ordenando..."
 
@@ -943,11 +941,11 @@ msgstr "Selecionar duplicatas do grupo _1"
 msgid "Select group _2 duplicates"
 msgstr "Selecionar duplicatas do grupo _2"
 
-#: ../src/dupe.c:2262 ../src/search.c:1016
+#: ../src/dupe.c:2262 ../src/search.c:1012
 msgid "Add to new collection"
 msgstr "Adicionar a uma nova coleção"
 
-#: ../src/dupe.c:2280 ../src/dupe.c:2567 ../src/search.c:1034
+#: ../src/dupe.c:2280 ../src/dupe.c:2567 ../src/search.c:1030
 msgid "C_lear"
 msgstr "_Limpar"
 
@@ -964,19 +962,19 @@ msgstr "%d arquivos (conjunto 2)"
 msgid "Name case-insensitive"
 msgstr "Nome insensível ao caso"
 
-#: ../src/dupe.c:2649 ../src/dupe.c:3166 ../src/preferences.c:1336
-#: ../src/print.c:3207 ../src/search.c:2845 ../src/view_file_list.c:2050
+#: ../src/dupe.c:2649 ../src/dupe.c:3135 ../src/preferences.c:1361
+#: ../src/print.c:3205 ../src/search.c:2791 ../src/view_file_list.c:1952
 msgid "Size"
 msgstr "Tamanho"
 
-#: ../src/dupe.c:2650 ../src/dupe.c:3167 ../src/exif.c:341
-#: ../src/exif-common.c:514 ../src/print.c:3205 ../src/search.c:2846
-#: ../src/view_file_list.c:2054
+#: ../src/dupe.c:2650 ../src/dupe.c:3136 ../src/exif.c:342
+#: ../src/exif-common.c:553 ../src/print.c:3203 ../src/search.c:2792
+#: ../src/view_file_list.c:1956
 msgid "Date"
 msgstr "Data"
 
-#: ../src/dupe.c:2651 ../src/dupe.c:3168 ../src/print.c:3209
-#: ../src/search.c:2847
+#: ../src/dupe.c:2651 ../src/dupe.c:3137 ../src/print.c:3207
+#: ../src/search.c:2793
 msgid "Dimensions"
 msgstr "Dimensões"
 
@@ -1000,55 +998,55 @@ msgstr "Similaridade (baixa)"
 msgid "Similarity (custom)"
 msgstr "Similaridade (personalizada)"
 
-#: ../src/dupe.c:3119
+#: ../src/dupe.c:3088
 msgid "Find duplicates"
 msgstr "Procurar por duplicatas"
 
-#: ../src/dupe.c:3201
+#: ../src/dupe.c:3170
 msgid "Compare to:"
 msgstr "Comparar com:"
 
-#: ../src/dupe.c:3214
+#: ../src/dupe.c:3183
 msgid "Compare by:"
 msgstr "Comparar por:"
 
-#: ../src/dupe.c:3222 ../src/preferences.c:1171 ../src/search.c:2861
+#: ../src/dupe.c:3191 ../src/preferences.c:1201 ../src/search.c:2807
 msgid "Thumbnails"
 msgstr "Miniaturas"
 
-#: ../src/dupe.c:3229
+#: ../src/dupe.c:3198
 msgid "Compare two file sets"
 msgstr "Comparar dois conjuntos de arquivos"
 
-#: ../src/editors.c:280
+#: ../src/editors.c:281
 #, c-format
 msgid "Desktop file '%s' should not include extension in Icon key: '%s'\n"
 msgstr ""
 "O arquivo .desktop '%s' não deveria incluir a extensão na chave Icon: '%s'\n"
 
 #. flash fired (bit 0)
-#: ../src/editors.c:334 ../src/exif.c:225 ../src/exif-common.c:332
+#: ../src/editors.c:335 ../src/exif.c:226 ../src/exif-common.c:362
 msgid "yes"
 msgstr "sim"
 
-#: ../src/editors.c:334 ../src/exif.c:224 ../src/exif-common.c:332
+#: ../src/editors.c:335 ../src/exif.c:225 ../src/exif-common.c:362
 msgid "no"
 msgstr "não"
 
-#: ../src/editors.c:506
+#: ../src/editors.c:507
 msgid "stopping..."
 msgstr "interrompendo..."
 
-#: ../src/editors.c:527
+#: ../src/editors.c:528
 msgid "Edit command results"
 msgstr "Resultados do comando de edição"
 
-#: ../src/editors.c:530
+#: ../src/editors.c:531
 #, c-format
 msgid "Output of %s"
 msgstr "Saída de %s"
 
-#: ../src/editors.c:1053
+#: ../src/editors.c:1054
 #, c-format
 msgid ""
 "Failed to run command:\n"
@@ -1057,11 +1055,11 @@ msgstr ""
 "Falha ao executar o comando:\n"
 "%s\n"
 
-#: ../src/editors.c:1180
+#: ../src/editors.c:1181
 msgid "stopped by user"
 msgstr "interrompido pelo usuário"
 
-#: ../src/editors.c:1265
+#: ../src/editors.c:1266
 #, c-format
 msgid ""
 "%s\n"
@@ -1070,864 +1068,864 @@ msgstr ""
 "%s\n"
 "\"%s\""
 
-#: ../src/editors.c:1267
+#: ../src/editors.c:1268
 msgid "Invalid editor command"
 msgstr "Comando do editor inválido"
 
-#: ../src/editors.c:1354
+#: ../src/editors.c:1355
 msgid "Editor template is empty."
 msgstr "O gabarito do editor está vazio."
 
-#: ../src/editors.c:1355
+#: ../src/editors.c:1356
 msgid "Editor template has incorrect syntax."
 msgstr "O gabarito do editor tem uma sintaxe incorreta."
 
-#: ../src/editors.c:1356
+#: ../src/editors.c:1357
 msgid "Editor template uses incompatible macros."
 msgstr "O gabarito do editor usa macros incompatíveis."
 
-#: ../src/editors.c:1357
+#: ../src/editors.c:1358
 msgid "Can't find matching file type."
 msgstr "Não posso encontrar um tipo de arquivo correspondente."
 
-#: ../src/editors.c:1358
+#: ../src/editors.c:1359
 msgid "Can't execute external editor."
 msgstr "Não posso executar o editor externo."
 
-#: ../src/editors.c:1359
+#: ../src/editors.c:1360
 msgid "External editor returned error status."
 msgstr "O editor externo retornou um status de erro."
 
-#: ../src/editors.c:1360
+#: ../src/editors.c:1361
 msgid "File was skipped."
 msgstr "O arquivo foi omitido."
 
-#: ../src/editors.c:1361
+#: ../src/editors.c:1362
 msgid "Unknown error."
 msgstr "Erro desconhecido."
 
-#: ../src/exif.c:147 ../src/exif.c:160 ../src/exif.c:174 ../src/exif.c:199
-#: ../src/exif.c:316 ../src/exif.c:663 ../src/exif-common.c:308
-#: ../src/exif-common.c:311 ../src/exif-common.c:378
+#: ../src/exif.c:148 ../src/exif.c:161 ../src/exif.c:175 ../src/exif.c:200
+#: ../src/exif.c:317 ../src/exif.c:664 ../src/exif-common.c:338
+#: ../src/exif-common.c:341 ../src/exif-common.c:408
 msgid "unknown"
 msgstr "desconhecido"
 
-#: ../src/exif.c:148
+#: ../src/exif.c:149
 msgid "top left"
 msgstr "no alto à esquerda"
 
-#: ../src/exif.c:149
+#: ../src/exif.c:150
 msgid "top right"
 msgstr "no alto à direita"
 
-#: ../src/exif.c:150
+#: ../src/exif.c:151
 msgid "bottom right"
 msgstr "embaixo à direita"
 
-#: ../src/exif.c:151
+#: ../src/exif.c:152
 msgid "bottom left"
 msgstr "embaixo à esquerda"
 
-#: ../src/exif.c:152
+#: ../src/exif.c:153
 msgid "left top"
 msgstr "à esquerda no alto"
 
-#: ../src/exif.c:153
+#: ../src/exif.c:154
 msgid "right top"
 msgstr "à direita no alto"
 
-#: ../src/exif.c:154
+#: ../src/exif.c:155
 msgid "right bottom"
 msgstr "à direita embaixo"
 
-#: ../src/exif.c:155
+#: ../src/exif.c:156
 msgid "left bottom"
 msgstr "à esquerda embaixo"
 
-#: ../src/exif.c:162
+#: ../src/exif.c:163
 msgid "inch"
 msgstr "polegada"
 
-#: ../src/exif.c:163
+#: ../src/exif.c:164
 msgid "centimeter"
 msgstr "centímetro"
 
-#: ../src/exif.c:175
+#: ../src/exif.c:176
 msgid "average"
 msgstr "média"
 
-#: ../src/exif.c:176
+#: ../src/exif.c:177
 msgid "center weighted"
 msgstr "alinhado ao centro"
 
-#: ../src/exif.c:177
+#: ../src/exif.c:178
 msgid "spot"
 msgstr "luz direcional"
 
-#: ../src/exif.c:178
+#: ../src/exif.c:179
 msgid "multi-spot"
 msgstr "luz multidirecional"
 
-#: ../src/exif.c:179
+#: ../src/exif.c:180
 msgid "multi-segment"
 msgstr "multisegmento"
 
-#: ../src/exif.c:180
+#: ../src/exif.c:181
 msgid "partial"
 msgstr "parcial"
 
-#: ../src/exif.c:181 ../src/exif.c:219
+#: ../src/exif.c:182 ../src/exif.c:220
 msgid "other"
 msgstr "outro"
 
-#: ../src/exif.c:186 ../src/exif.c:238
+#: ../src/exif.c:187 ../src/exif.c:239
 msgid "not defined"
 msgstr "não definido"
 
-#: ../src/exif.c:187 ../src/exif.c:266 ../src/exif.c:273
+#: ../src/exif.c:188 ../src/exif.c:267 ../src/exif.c:274
 msgid "manual"
 msgstr "manual"
 
-#: ../src/exif.c:188 ../src/exif.c:259 ../src/exif.c:295 ../src/exif.c:302
-#: ../src/exif.c:309
+#: ../src/exif.c:189 ../src/exif.c:260 ../src/exif.c:296 ../src/exif.c:303
+#: ../src/exif.c:310
 msgid "normal"
 msgstr "normal"
 
-#: ../src/exif.c:189
+#: ../src/exif.c:190
 msgid "aperture"
 msgstr "abertura"
 
-#: ../src/exif.c:190
+#: ../src/exif.c:191
 msgid "shutter"
 msgstr "exposição"
 
-#: ../src/exif.c:191
+#: ../src/exif.c:192
 msgid "creative"
 msgstr "criativo"
 
-#: ../src/exif.c:192
+#: ../src/exif.c:193
 msgid "action"
 msgstr "ação"
 
-#: ../src/exif.c:193 ../src/exif.c:280
+#: ../src/exif.c:194 ../src/exif.c:281
 msgid "portrait"
 msgstr "retrato"
 
-#: ../src/exif.c:194 ../src/exif.c:279
+#: ../src/exif.c:195 ../src/exif.c:280
 msgid "landscape"
 msgstr "paisagem"
 
-#: ../src/exif.c:200
+#: ../src/exif.c:201
 msgid "daylight"
 msgstr "luz do dia"
 
-#: ../src/exif.c:201
+#: ../src/exif.c:202
 msgid "fluorescent"
 msgstr "fluorescente"
 
-#: ../src/exif.c:202
+#: ../src/exif.c:203
 msgid "tungsten (incandescent)"
 msgstr "tungstênio (incandescente)"
 
-#: ../src/exif.c:203
+#: ../src/exif.c:204
 msgid "flash"
 msgstr "flash"
 
-#: ../src/exif.c:204
+#: ../src/exif.c:205
 msgid "fine weather"
 msgstr "tempo bom"
 
-#: ../src/exif.c:205
+#: ../src/exif.c:206
 msgid "cloudy weather"
 msgstr "tempo nublado"
 
-#: ../src/exif.c:206
+#: ../src/exif.c:207
 msgid "shade"
 msgstr "sombra"
 
-#: ../src/exif.c:207
+#: ../src/exif.c:208
 msgid "daylight fluorescent"
 msgstr "fluorescente luz do dia"
 
-#: ../src/exif.c:208
+#: ../src/exif.c:209
 msgid "day white fluorescent"
 msgstr "fluorescente branco dia"
 
-#: ../src/exif.c:209
+#: ../src/exif.c:210
 msgid "cool white fluorescent"
 msgstr "fluorescente branco frio"
 
-#: ../src/exif.c:210
+#: ../src/exif.c:211
 msgid "white fluorescent"
 msgstr "fluorescente branco"
 
-#: ../src/exif.c:211
+#: ../src/exif.c:212
 msgid "standard light A"
 msgstr "luz standard A"
 
-#: ../src/exif.c:212
+#: ../src/exif.c:213
 msgid "standard light B"
 msgstr "luz standard B"
 
-#: ../src/exif.c:213
+#: ../src/exif.c:214
 msgid "standard light C"
 msgstr "luz standard C"
 
-#: ../src/exif.c:214
+#: ../src/exif.c:215
 msgid "D55"
 msgstr "D55"
 
-#: ../src/exif.c:215
+#: ../src/exif.c:216
 msgid "D65"
 msgstr "D65"
 
-#: ../src/exif.c:216
+#: ../src/exif.c:217
 msgid "D75"
 msgstr "D75"
 
-#: ../src/exif.c:217
+#: ../src/exif.c:218
 msgid "D50"
 msgstr "D50"
 
-#: ../src/exif.c:218
+#: ../src/exif.c:219
 msgid "ISO studio tungsten"
 msgstr "tungstênio studio ISO"
 
-#: ../src/exif.c:226
+#: ../src/exif.c:227
 msgid "yes, not detected by strobe"
 msgstr "sim, não detectado pelo strobe"
 
-#: ../src/exif.c:227
+#: ../src/exif.c:228
 msgid "yes, detected by strobe"
 msgstr "sim, detectado pelo strobe"
 
-#: ../src/exif.c:233
+#: ../src/exif.c:234
 msgid "uncalibrated"
 msgstr "não calibrado"
 
-#: ../src/exif.c:239
+#: ../src/exif.c:240
 msgid "1 chip color area"
 msgstr "mono-CCD"
 
-#: ../src/exif.c:240
+#: ../src/exif.c:241
 msgid "2 chip color area"
 msgstr "bi-CCD"
 
-#: ../src/exif.c:241
+#: ../src/exif.c:242
 msgid "3 chip color area"
 msgstr "tri-CCD"
 
-#: ../src/exif.c:242
+#: ../src/exif.c:243
 msgid "color sequential area"
 msgstr "CCD de área"
 
-#: ../src/exif.c:243
+#: ../src/exif.c:244
 msgid "trilinear"
 msgstr "trilinear"
 
-#: ../src/exif.c:244
+#: ../src/exif.c:245
 msgid "color sequential linear"
 msgstr "CCD linear"
 
-#: ../src/exif.c:249
+#: ../src/exif.c:250
 msgid "digital still camera"
 msgstr "câmera digital"
 
-#: ../src/exif.c:254
+#: ../src/exif.c:255
 msgid "direct photo"
 msgstr "foto direta"
 
-#: ../src/exif.c:260
+#: ../src/exif.c:261
 msgid "custom"
 msgstr "personalizado"
 
-#: ../src/exif.c:265 ../src/exif.c:272 ../src/exif-common.c:346
+#: ../src/exif.c:266 ../src/exif.c:273 ../src/exif-common.c:376
 msgid "auto"
 msgstr "auto"
 
-#: ../src/exif.c:267
+#: ../src/exif.c:268
 msgid "auto bracket"
 msgstr "autobracketing"
 
-#: ../src/exif.c:278
+#: ../src/exif.c:279
 msgid "standard"
 msgstr "standard"
 
-#: ../src/exif.c:281
+#: ../src/exif.c:282
 msgid "night scene"
 msgstr "cena noturna"
 
-#: ../src/exif.c:286
+#: ../src/exif.c:287
 msgid "none"
 msgstr "nenhum"
 
-#: ../src/exif.c:287
+#: ../src/exif.c:288
 msgid "low gain up"
 msgstr "suave aumento de ganho"
 
-#: ../src/exif.c:288
+#: ../src/exif.c:289
 msgid "high gain up"
 msgstr "forte aumento de ganho"
 
-#: ../src/exif.c:289
+#: ../src/exif.c:290
 msgid "low gain down"
 msgstr "suave redução de ganho"
 
-#: ../src/exif.c:290
+#: ../src/exif.c:291
 msgid "high gain down"
 msgstr "forte redução de ganho"
 
-#: ../src/exif.c:296 ../src/exif.c:310
+#: ../src/exif.c:297 ../src/exif.c:311
 msgid "soft"
 msgstr "doce"
 
-#: ../src/exif.c:297 ../src/exif.c:311
+#: ../src/exif.c:298 ../src/exif.c:312
 msgid "hard"
 msgstr "duro"
 
-#: ../src/exif.c:303
+#: ../src/exif.c:304
 msgid "low"
 msgstr "suave"
 
-#: ../src/exif.c:304
+#: ../src/exif.c:305
 msgid "high"
 msgstr "elevado"
 
-#: ../src/exif.c:317
+#: ../src/exif.c:318
 msgid "macro"
 msgstr "macro"
 
-#: ../src/exif.c:318
+#: ../src/exif.c:319
 msgid "close"
 msgstr "próximo"
 
-#: ../src/exif.c:319
+#: ../src/exif.c:320
 msgid "distant"
 msgstr "distante"
 
-#: ../src/exif.c:329
+#: ../src/exif.c:330
 msgid "Image Width"
 msgstr "Largura da imagem"
 
-#: ../src/exif.c:330
+#: ../src/exif.c:331
 msgid "Image Height"
 msgstr "Altura da imagem"
 
-#: ../src/exif.c:331
+#: ../src/exif.c:332
 msgid "Bits per Sample/Pixel"
 msgstr "Bits por amostra/pixel"
 
-#: ../src/exif.c:332
+#: ../src/exif.c:333
 msgid "Compression"
 msgstr "Compressão"
 
-#: ../src/exif.c:333
+#: ../src/exif.c:334
 msgid "Image description"
 msgstr "Descrição da imagem"
 
-#: ../src/exif.c:334
+#: ../src/exif.c:335
 msgid "Camera make"
 msgstr "Fabricante da câmera"
 
-#: ../src/exif.c:335
+#: ../src/exif.c:336
 msgid "Camera model"
 msgstr "Modelo da câmera"
 
-#: ../src/exif.c:336
+#: ../src/exif.c:337
 msgid "Orientation"
 msgstr "Orientação"
 
-#: ../src/exif.c:337
+#: ../src/exif.c:338
 msgid "X resolution"
 msgstr "Resolução X"
 
-#: ../src/exif.c:338
+#: ../src/exif.c:339
 msgid "Y Resolution"
 msgstr "Resolução Y"
 
-#: ../src/exif.c:339
+#: ../src/exif.c:340
 msgid "Resolution units"
 msgstr "Unidades de resolução"
 
-#: ../src/exif.c:340
+#: ../src/exif.c:341
 msgid "Firmware"
 msgstr "Firmware"
 
-#: ../src/exif.c:342
+#: ../src/exif.c:343
 msgid "White point"
 msgstr "Ponto branco"
 
-#: ../src/exif.c:343
+#: ../src/exif.c:344
 msgid "Primary chromaticities"
 msgstr "Cromaticidades primárias"
 
-#: ../src/exif.c:344
+#: ../src/exif.c:345
 msgid "YCbCy coefficients"
 msgstr "Coeficientes YCbCr"
 
-#: ../src/exif.c:345
+#: ../src/exif.c:346
 msgid "YCbCr positioning"
 msgstr "Posicionamento YCbCr"
 
-#: ../src/exif.c:346
+#: ../src/exif.c:347
 msgid "Black white reference"
 msgstr "Referência branco preto"
 
-#: ../src/exif.c:348
+#: ../src/exif.c:349
 msgid "SubIFD Exif offset"
 msgstr "Offset Exif SubIFD"
 
 #. subIFD follows
-#: ../src/exif.c:350
+#: ../src/exif.c:351
 msgid "Exposure time (seconds)"
 msgstr "Tempo de exposição (segundos)"
 
-#: ../src/exif.c:351
+#: ../src/exif.c:352
 msgid "FNumber"
 msgstr "Número F"
 
-#: ../src/exif.c:352
+#: ../src/exif.c:353
 msgid "Exposure program"
 msgstr "Programa de exposição"
 
-#: ../src/exif.c:353
+#: ../src/exif.c:354
 msgid "Spectral Sensitivity"
 msgstr "Sensibilidade espectral"
 
-#: ../src/exif.c:354 ../src/exif.c:390 ../src/exif-common.c:518
+#: ../src/exif.c:355 ../src/exif.c:391 ../src/exif-common.c:557
 msgid "ISO sensitivity"
 msgstr "Sensibilidade ISO"
 
-#: ../src/exif.c:355
+#: ../src/exif.c:356
 msgid "Optoelectric conversion factor"
 msgstr "Fator de conversão optoeletrônica"
 
-#: ../src/exif.c:356
+#: ../src/exif.c:357
 msgid "Exif version"
 msgstr "Versão do Exif"
 
-#: ../src/exif.c:357
+#: ../src/exif.c:358
 msgid "Date original"
 msgstr "Data do original"
 
-#: ../src/exif.c:358
+#: ../src/exif.c:359
 msgid "Date digitized"
 msgstr "Data da digitalização"
 
-#: ../src/exif.c:359
+#: ../src/exif.c:360
 msgid "Pixel format"
 msgstr "Formato do pixel"
 
-#: ../src/exif.c:360
+#: ../src/exif.c:361
 msgid "Compression ratio"
 msgstr "Taxa de compressão"
 
-#: ../src/exif.c:361 ../src/exif-common.c:515
+#: ../src/exif.c:362 ../src/exif-common.c:554
 msgid "Shutter speed"
 msgstr "Velocidade de exposição"
 
-#: ../src/exif.c:362 ../src/exif-common.c:516
+#: ../src/exif.c:363 ../src/exif-common.c:555
 msgid "Aperture"
 msgstr "Abertura"
 
-#: ../src/exif.c:363
+#: ../src/exif.c:364
 msgid "Brightness"
 msgstr "Brilho"
 
-#: ../src/exif.c:364 ../src/exif-common.c:517
+#: ../src/exif.c:365 ../src/exif-common.c:556
 msgid "Exposure bias"
 msgstr "Margem de exposição"
 
-#: ../src/exif.c:365
+#: ../src/exif.c:366
 msgid "Maximum aperture"
 msgstr "Abertura máxima"
 
-#: ../src/exif.c:366 ../src/exif-common.c:521
+#: ../src/exif.c:367 ../src/exif-common.c:560
 msgid "Subject distance"
 msgstr "Distância do sujeito"
 
-#: ../src/exif.c:367
+#: ../src/exif.c:368
 msgid "Metering mode"
 msgstr "Método de medição"
 
-#: ../src/exif.c:368
+#: ../src/exif.c:369
 msgid "Light source"
 msgstr "Fonte da luz"
 
-#: ../src/exif.c:369 ../src/exif-common.c:522
+#: ../src/exif.c:370 ../src/exif-common.c:561
 msgid "Flash"
 msgstr "Flash"
 
-#: ../src/exif.c:370 ../src/exif-common.c:519
+#: ../src/exif.c:371 ../src/exif-common.c:558
 msgid "Focal length"
 msgstr "Comprimento do foco"
 
-#: ../src/exif.c:371
+#: ../src/exif.c:372
 msgid "Subject area"
 msgstr "Área do sujeito"
 
-#: ../src/exif.c:372
+#: ../src/exif.c:373
 msgid "MakerNote"
 msgstr "Nota do fabricante"
 
-#: ../src/exif.c:373
+#: ../src/exif.c:374
 msgid "UserComment"
 msgstr "Comentário do usuário"
 
-#: ../src/exif.c:374
+#: ../src/exif.c:375
 msgid "Subsecond time"
 msgstr "Hora em sub-segundo"
 
-#: ../src/exif.c:375
+#: ../src/exif.c:376
 msgid "Subsecond time original"
 msgstr "Hora em sub-segundo original"
 
-#: ../src/exif.c:376
+#: ../src/exif.c:377
 msgid "Subsecond time digitized"
 msgstr "Hora da digitalização em sub-segundo"
 
-#: ../src/exif.c:377
+#: ../src/exif.c:378
 msgid "FlashPix version"
 msgstr "Versão do FlashPix"
 
-#: ../src/exif.c:378
+#: ../src/exif.c:379
 msgid "Colorspace"
 msgstr "Espaço de cores"
 
 #. ExifImageWidth, ExifImageHeight can also be unsigned short
-#: ../src/exif.c:380
+#: ../src/exif.c:381 ../src/preferences.c:2033
 msgid "Width"
 msgstr "Largura"
 
-#: ../src/exif.c:381
+#: ../src/exif.c:382 ../src/preferences.c:2035
 msgid "Height"
 msgstr "Altura"
 
-#: ../src/exif.c:382
+#: ../src/exif.c:383
 msgid "Audio data"
 msgstr "Dados de áudio"
 
-#: ../src/exif.c:383
+#: ../src/exif.c:384
 msgid "ExifR98 extension"
 msgstr "Extensão ExifR98"
 
-#: ../src/exif.c:384
+#: ../src/exif.c:385
 msgid "Flash strength"
 msgstr "Força do flash"
 
-#: ../src/exif.c:385
+#: ../src/exif.c:386
 msgid "Spatial frequency response"
 msgstr "Resposta da frequência espacial"
 
-#: ../src/exif.c:386
+#: ../src/exif.c:387
 msgid "X Pixel density"
 msgstr "Densidade de pixel em X"
 
-#: ../src/exif.c:387
+#: ../src/exif.c:388
 msgid "Y Pixel density"
 msgstr "Densidade de pixel em Y"
 
-#: ../src/exif.c:388
+#: ../src/exif.c:389
 msgid "Pixel density units"
 msgstr "Unidades de densidade de pixel"
 
-#: ../src/exif.c:389
+#: ../src/exif.c:390
 msgid "Subject location"
 msgstr "Localização do sujeito"
 
-#: ../src/exif.c:391
+#: ../src/exif.c:392
 msgid "Sensor type"
 msgstr "Tipo de sensor"
 
-#: ../src/exif.c:392
+#: ../src/exif.c:393
 msgid "Source type"
 msgstr "Tipo de fonte"
 
-#: ../src/exif.c:393
+#: ../src/exif.c:394
 msgid "Scene type"
 msgstr "Tipo de cena"
 
-#: ../src/exif.c:394
+#: ../src/exif.c:395
 msgid "Color filter array pattern"
 msgstr "Padrão de arranjo do filtro de cor"
 
 #. tags a4xx were added for Exif 2.2 (not just these - some above, as well)
-#: ../src/exif.c:396
+#: ../src/exif.c:397
 msgid "Render process"
 msgstr "Processo de renderização"
 
-#: ../src/exif.c:397
+#: ../src/exif.c:398
 msgid "Exposure mode"
 msgstr "Modo de exposição"
 
-#: ../src/exif.c:398
+#: ../src/exif.c:399
 msgid "White balance"
 msgstr "Balanço do branco"
 
-#: ../src/exif.c:399
+#: ../src/exif.c:400
 msgid "Digital zoom ratio"
 msgstr "Taxa do zoom digital"
 
-#: ../src/exif.c:400
+#: ../src/exif.c:401
 msgid "Focal length (35mm)"
 msgstr "Comprimento do foco (35mm)"
 
-#: ../src/exif.c:401
+#: ../src/exif.c:402
 msgid "Scene capture type"
 msgstr "Tipo de captura da cena"
 
-#: ../src/exif.c:402
+#: ../src/exif.c:403
 msgid "Gain control"
 msgstr "Controle de ganho"
 
-#: ../src/exif.c:403
+#: ../src/exif.c:404
 msgid "Contrast"
 msgstr "Contraste"
 
-#: ../src/exif.c:404
+#: ../src/exif.c:405
 msgid "Saturation"
 msgstr "Saturação"
 
-#: ../src/exif.c:405
+#: ../src/exif.c:406
 msgid "Sharpness"
 msgstr "Nitidez"
 
-#: ../src/exif.c:406
+#: ../src/exif.c:407
 msgid "Device setting"
 msgstr "Configuração do dispositivo"
 
-#: ../src/exif.c:407
+#: ../src/exif.c:408
 msgid "Subject range"
 msgstr "Distância do sujeito"
 
-#: ../src/exif.c:408
+#: ../src/exif.c:409
 msgid "Image serial number"
 msgstr "Número de série da imagem"
 
-#: ../src/exif-common.c:307
+#: ../src/exif-common.c:337
 msgid "infinity"
 msgstr "infinito"
 
-#: ../src/exif-common.c:336
+#: ../src/exif-common.c:366
 msgid "mode:"
 msgstr "modo:"
 
-#: ../src/exif-common.c:340 ../src/trash.c:205
+#: ../src/exif-common.c:370 ../src/trash.c:205
 msgid "on"
 msgstr "ativado"
 
-#: ../src/exif-common.c:343 ../src/trash.c:210
+#: ../src/exif-common.c:373 ../src/trash.c:210
 msgid "off"
 msgstr "desativado"
 
-#: ../src/exif-common.c:352
+#: ../src/exif-common.c:382
 msgid "not detected by strobe"
 msgstr "não detectado pelo strobe"
 
-#: ../src/exif-common.c:353
+#: ../src/exif-common.c:383
 msgid "detected by strobe"
 msgstr "detectado pelo strobe"
 
 #. we ignore flash function (bit 5)
 #. red-eye (bit 6)
-#: ../src/exif-common.c:358
+#: ../src/exif-common.c:388
 msgid "red-eye reduction"
 msgstr "redução de olhos vermelhos"
 
-#: ../src/exif-common.c:378
+#: ../src/exif-common.c:408
 msgid "dot"
 msgstr "ponto"
 
-#: ../src/exif-common.c:408
+#: ../src/exif-common.c:441
 msgid "AdobeRGB"
 msgstr "AdobeRGB"
 
-#: ../src/exif-common.c:416
+#: ../src/exif-common.c:449
 msgid "embedded"
 msgstr "embarcado"
 
-#: ../src/exif-common.c:505
+#: ../src/exif-common.c:544
 msgid "Above Sea Level"
 msgstr "Acima do nível do mar"
 
-#: ../src/exif-common.c:505
+#: ../src/exif-common.c:544
 msgid "Below Sea Level"
 msgstr "Abaixo do nível do mar"
 
-#: ../src/exif-common.c:513
+#: ../src/exif-common.c:552
 msgid "Camera"
 msgstr "Câmera"
 
-#: ../src/exif-common.c:520
+#: ../src/exif-common.c:559
 msgid "Focal length 35mm"
 msgstr "Comprimento do foco 35mm"
 
-#: ../src/exif-common.c:523
+#: ../src/exif-common.c:562
 msgid "Resolution"
 msgstr "Resolução"
 
-#: ../src/exif-common.c:524
+#: ../src/exif-common.c:563
 msgid "Color profile"
 msgstr "Perfil de cor"
 
-#: ../src/exif-common.c:525
+#: ../src/exif-common.c:564
 msgid "GPS position"
 msgstr "Posição do GPS"
 
-#: ../src/exif-common.c:526
+#: ../src/exif-common.c:565
 msgid "GPS altitude"
 msgstr "Altitude do GPS"
 
-#: ../src/exif-common.c:527
+#: ../src/exif-common.c:566
 msgid "File size"
 msgstr "Tamanho do arquivo"
 
-#: ../src/exif-common.c:528
+#: ../src/exif-common.c:567
 msgid "File date"
 msgstr "Data do arquivo"
 
-#: ../src/exif-common.c:529
+#: ../src/exif-common.c:568
 msgid "File mode"
 msgstr "Modo do arquivo"
 
-#: ../src/filedata.c:91
+#: ../src/filedata.c:97
 #, c-format
 msgid "%d bytes"
 msgstr "%d bytes"
 
-#: ../src/filedata.c:95
+#: ../src/filedata.c:101
 #, c-format
 msgid "%.1f K"
 msgstr "%.1f KB"
 
-#: ../src/filedata.c:99
+#: ../src/filedata.c:105
 #, c-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: ../src/filedata.c:104
+#: ../src/filedata.c:110
 #, c-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: ../src/filedata.c:2185
+#: ../src/filedata.c:2291
 msgid "file or directory does not exist"
 msgstr "o arquivo ou o diretório não existe"
 
-#: ../src/filedata.c:2191
+#: ../src/filedata.c:2297
 msgid "destination already exists"
 msgstr "o destino já existe"
 
-#: ../src/filedata.c:2197
+#: ../src/filedata.c:2303
 msgid "destination can't be overwritten"
 msgstr "o destino não pode ser sobre-escrito"
 
-#: ../src/filedata.c:2203
+#: ../src/filedata.c:2309
 msgid "destination directory is not writable"
 msgstr "o diretório de destino não é escrevível"
 
-#: ../src/filedata.c:2209
+#: ../src/filedata.c:2315
 msgid "destination directory does not exist"
 msgstr "o diretório de destino não existe"
 
-#: ../src/filedata.c:2215
+#: ../src/filedata.c:2321
 msgid "source directory is not writable"
 msgstr "o diretório de origem não é escrevível"
 
-#: ../src/filedata.c:2221
+#: ../src/filedata.c:2327
 msgid "no read permission"
 msgstr "sem permissão de leitura"
 
-#: ../src/filedata.c:2227
+#: ../src/filedata.c:2333
 msgid "file is readonly"
 msgstr "o arquivo é somente leitura"
 
-#: ../src/filedata.c:2233
+#: ../src/filedata.c:2339
 msgid "destination already exists and will be overwritten"
 msgstr "o destino já existe e será sobre-escrito"
 
-#: ../src/filedata.c:2239
+#: ../src/filedata.c:2345
 msgid "source and destination are the same"
 msgstr "a origem e o destino são o mesmo"
 
-#: ../src/filedata.c:2245
+#: ../src/filedata.c:2351
 msgid "source and destination have different extension"
 msgstr "a origem e o destino têm diferentes extensões"
 
-#: ../src/filedata.c:2251
+#: ../src/filedata.c:2357
 msgid "there are unsaved metadata changes for the file"
 msgstr "há modificações nos metadados não salvas para o arquivo"
 
-#: ../src/fullscreen.c:243 ../src/layout_util.c:1329 ../src/layout_util.c:1330
-#: ../src/layout_util.c:1331 ../src/preferences.c:1349
+#: ../src/fullscreen.c:235 ../src/layout_util.c:1347 ../src/layout_util.c:1348
+#: ../src/layout_util.c:1349 ../src/preferences.c:1374
 msgid "Full screen"
 msgstr "Tela cheia"
 
-#: ../src/fullscreen.c:391
+#: ../src/fullscreen.c:412
 msgid "Full size"
 msgstr "Tamanho natural"
 
-#: ../src/fullscreen.c:396
+#: ../src/fullscreen.c:420
 msgid "Monitor"
 msgstr "Monitor"
 
-#: ../src/fullscreen.c:401
+#: ../src/fullscreen.c:426
 msgid "Screen"
 msgstr "Tela"
 
-#: ../src/fullscreen.c:638
+#: ../src/fullscreen.c:663
 msgid "Stay above other windows"
 msgstr "Manter acima de outras janelas"
 
-#: ../src/fullscreen.c:645
+#: ../src/fullscreen.c:670
 msgid "Determined by Window Manager"
 msgstr "Determinado pelo gerenciador de janelas"
 
-#: ../src/fullscreen.c:646
+#: ../src/fullscreen.c:671
 msgid "Active screen"
 msgstr "Tela ativa"
 
-#: ../src/fullscreen.c:648
+#: ../src/fullscreen.c:673
 msgid "Active monitor"
 msgstr "Monitor ativo"
 
-#: ../src/histogram.c:113
+#: ../src/histogram.c:114
 msgid "Log Histogram on Red"
 msgstr "Logar o histograma no vermelho"
 
-#: ../src/histogram.c:114
+#: ../src/histogram.c:115
 msgid "Log Histogram on Green"
 msgstr "Logar o histograma no verde"
 
-#: ../src/histogram.c:115
+#: ../src/histogram.c:116
 msgid "Log Histogram on Blue"
 msgstr "Logar o histograma no azul"
 
-#: ../src/histogram.c:116
+#: ../src/histogram.c:117
 msgid "Log Histogram on RGB"
 msgstr "Logar o histograma no RGB"
 
-#: ../src/histogram.c:117
+#: ../src/histogram.c:118
 msgid "Log Histogram on value"
 msgstr "Logar o histograma no valor"
 
-#: ../src/histogram.c:122
+#: ../src/histogram.c:123
 msgid "Linear Histogram on Red"
 msgstr "Histograma linear no vermelho"
 
-#: ../src/histogram.c:123
+#: ../src/histogram.c:124
 msgid "Linear Histogram on Green"
 msgstr "Histograma linear no verde"
 
-#: ../src/histogram.c:124
+#: ../src/histogram.c:125
 msgid "Linear Histogram on Blue"
 msgstr "Histograma linear no azul"
 
-#: ../src/histogram.c:125
+#: ../src/histogram.c:126
 msgid "Linear Histogram on RGB"
 msgstr "Histograma linear no RGB"
 
-#: ../src/histogram.c:126
+#: ../src/histogram.c:127
 msgid "Linear Histogram on value"
 msgstr "Histograma linear no valor"
 
@@ -1941,1103 +1939,1154 @@ msgstr "Incapaz de escrever as listas do histórico em: %s\n"
 msgid " (Collection %s)"
 msgstr " (Coleção %s)"
 
-#: ../src/img-view.c:1266 ../src/layout_image.c:489 ../src/layout_util.c:1296
-#: ../src/layout_util.c:1297 ../src/layout_util.c:1312
-#: ../src/layout_util.c:1313 ../src/pan-view.c:2808
+#: ../src/image_load_jpeg.c:177
+#, c-format
+msgid "Error interpreting JPEG image file (%s)"
+msgstr ""
+
+#: ../src/img-view.c:1253 ../src/layout_image.c:483 ../src/layout_util.c:1314
+#: ../src/layout_util.c:1315 ../src/layout_util.c:1330
+#: ../src/layout_util.c:1331 ../src/pan-view.c:2602
 msgid "Zoom _in"
 msgstr "_Mais zoom"
 
-#: ../src/img-view.c:1267 ../src/layout_image.c:490 ../src/layout_util.c:1298
-#: ../src/layout_util.c:1299 ../src/layout_util.c:1314
-#: ../src/layout_util.c:1315 ../src/pan-view.c:2810
+#: ../src/img-view.c:1254 ../src/layout_image.c:484 ../src/layout_util.c:1316
+#: ../src/layout_util.c:1317 ../src/layout_util.c:1332
+#: ../src/layout_util.c:1333 ../src/pan-view.c:2604
 msgid "Zoom _out"
 msgstr "Me_nos zoom"
 
-#: ../src/img-view.c:1268 ../src/layout_image.c:491 ../src/layout_util.c:1300
-#: ../src/layout_util.c:1301 ../src/layout_util.c:1316
-#: ../src/layout_util.c:1317 ../src/pan-view.c:2812
+#: ../src/img-view.c:1255 ../src/layout_image.c:485 ../src/layout_util.c:1318
+#: ../src/layout_util.c:1319 ../src/layout_util.c:1334
+#: ../src/layout_util.c:1335 ../src/pan-view.c:2606
 msgid "Zoom _1:1"
 msgstr "Zoom _1:1"
 
-#: ../src/img-view.c:1269 ../src/layout_image.c:492
+#: ../src/img-view.c:1256 ../src/layout_image.c:486
 msgid "Fit image to _window"
 msgstr "Ajustar a imagem à _janela"
 
-#: ../src/img-view.c:1277 ../src/layout_image.c:501 ../src/layout_util.c:1294
+#: ../src/img-view.c:1264 ../src/layout_image.c:495 ../src/layout_util.c:1312
 msgid "Set as _wallpaper"
 msgstr "Definir como _papel de parede"
 
-#: ../src/img-view.c:1282 ../src/layout_image.c:508
+#: ../src/img-view.c:1269 ../src/layout_image.c:502
 msgid "_Go to directory view"
 msgstr "_Ir para a visualização por diretórios"
 
-#: ../src/img-view.c:1295 ../src/layout_image.c:529
+#: ../src/img-view.c:1282 ../src/layout_image.c:523
 msgid "_Stop slideshow"
 msgstr "_Parar a apresentação de slides"
 
-#: ../src/img-view.c:1298 ../src/layout_image.c:532
+#: ../src/img-view.c:1285 ../src/layout_image.c:526
 msgid "Continue slides_how"
 msgstr "_Continuar com a apresentação de slides"
 
-#: ../src/img-view.c:1303 ../src/img-view.c:1311 ../src/layout_image.c:537
-#: ../src/layout_image.c:544
+#: ../src/img-view.c:1290 ../src/img-view.c:1298 ../src/layout_image.c:531
+#: ../src/layout_image.c:538
 msgid "Pause slides_how"
 msgstr "Pau_sar a apresentação de slides"
 
-#: ../src/img-view.c:1309 ../src/layout_image.c:543
+#: ../src/img-view.c:1296 ../src/layout_image.c:537
 msgid "_Start slideshow"
 msgstr "_Iniciar a apresentação de slides"
 
-#: ../src/img-view.c:1317 ../src/layout_image.c:554 ../src/pan-view.c:2881
+#: ../src/img-view.c:1304 ../src/layout_image.c:548 ../src/pan-view.c:2675
 msgid "Exit _full screen"
 msgstr "_Sair da tela cheia"
 
-#: ../src/img-view.c:1321 ../src/layout_image.c:550 ../src/pan-view.c:2885
+#: ../src/img-view.c:1308 ../src/layout_image.c:544 ../src/pan-view.c:2679
 msgid "_Full screen"
 msgstr "_Tela cheia"
 
-#: ../src/img-view.c:1325 ../src/layout_util.c:1279 ../src/pan-view.c:2889
+#: ../src/img-view.c:1312 ../src/layout_util.c:1297 ../src/pan-view.c:2683
 msgid "C_lose window"
 msgstr "_Fechar a janela"
 
-#: ../src/layout.c:363 ../src/view_file.c:613
+#: ../src/layout.c:359 ../src/view_file.c:613
 msgid "Ascending"
 msgstr "Crescente"
 
-#: ../src/layout.c:433
+#: ../src/layout.c:429
 msgid " Slideshow"
 msgstr " Apresentação de slides"
 
-#: ../src/layout.c:437
+#: ../src/layout.c:433
 msgid " Paused"
 msgstr " Pausada"
 
-#: ../src/layout.c:453
+#: ../src/layout.c:449
 #, c-format
 msgid "%s, %d files (%s, %d)%s"
 msgstr "arquivos %s, %d (%s, %d)%s"
 
-#: ../src/layout.c:460
+#: ../src/layout.c:456
 #, c-format
 msgid "%s, %d files%s"
 msgstr "arquivos %s, %d%s"
 
-#: ../src/layout.c:465
+#: ../src/layout.c:461
 #, c-format
 msgid "%d files%s"
 msgstr "arquivos %d%s"
 
-#: ../src/layout.c:510
+#: ../src/layout.c:507
 #, c-format
 msgid "(no read permission) %s bytes"
 msgstr "(sem permissão de leitura) %s bytes"
 
-#: ../src/layout.c:514
+#: ../src/layout.c:511
 #, c-format
 msgid "( ? x ? ) %s bytes"
 msgstr "( ? x ?) %s bytes"
 
-#: ../src/layout.c:522
+#: ../src/layout.c:519
 #, c-format
 msgid "( %d x %d ) %s bytes"
 msgstr "( %d x %d) %s bytes"
 
-#: ../src/layout.c:1231 ../src/layout_config.c:58
+#: ../src/layout.c:1244 ../src/layout_config.c:58
 msgid "Tools"
 msgstr "Ferramentas"
 
-#: ../src/layout.c:1853
+#: ../src/layout.c:1866
 msgid "Window options and layout"
 msgstr "Opções da janela e da disposição"
 
-#: ../src/layout.c:1912
+#: ../src/layout.c:1925
 msgid "General options"
 msgstr "Opções gerais"
 
-#: ../src/layout.c:1914
+#: ../src/layout.c:1927
 msgid "Home path (empty to use your home directory)"
 msgstr "Caminho do diretório inicial (vazio usa o seu diretório home)"
 
-#: ../src/layout.c:1922
+#: ../src/layout.c:1935
 msgid "Use current"
 msgstr "Usar o atual"
 
-#: ../src/layout.c:1925
+#: ../src/layout.c:1938
 msgid "Show date in directories list view"
 msgstr "Exibir a data na visualização por diretórios em lista"
 
-#: ../src/layout.c:1928
+#: ../src/layout.c:1941
 msgid "Exit program when this window is closed"
 msgstr "Finalizar o programa quando esta janela for fechada"
 
-#: ../src/layout.c:1931
+#: ../src/layout.c:1944
 msgid "Start-up directory:"
 msgstr "Diretório inicial:"
 
-#: ../src/layout.c:1933
+#: ../src/layout.c:1946
 msgid "No change"
 msgstr "Sem modificação"
 
-#: ../src/layout.c:1936
+#: ../src/layout.c:1949
 msgid "Restore last path"
 msgstr "Restaurar o último caminho"
 
-#: ../src/layout.c:1939
+#: ../src/layout.c:1952
 msgid "Home path"
 msgstr "Caminho do diretório inicial"
 
-#: ../src/layout.c:1943 ../src/print.c:3373 ../src/print.c:3380
+#: ../src/layout.c:1956 ../src/print.c:3365 ../src/print.c:3372
 msgid "Layout"
 msgstr "Disposição"
 
-#: ../src/layout.c:2187
+#: ../src/layout.c:2200
 msgid "Invalid geometry\n"
 msgstr "Geometria inválida\n"
 
-#: ../src/layout_config.c:58 ../src/preferences.c:1446
-#: ../src/ui_pathsel.c:1179
+#: ../src/layout_config.c:58 ../src/preferences.c:1469
+#: ../src/ui_pathsel.c:1173
 msgid "Files"
 msgstr "Arquivos"
 
-#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1240
+#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1260
 #: ../src/print.c:123
 msgid "Image"
 msgstr "Imagem"
 
-#: ../src/layout_config.c:364
+#: ../src/layout_config.c:349
 msgid "(drag to change order)"
 msgstr "(arraste para mudar a ordem)"
 
-#: ../src/layout_image.c:559
+#: ../src/layout_image.c:553
 msgid "Hide file _list"
 msgstr "Ocultar a lista de _arquivos"
 
-#: ../src/layout_image.c:1559
+#: ../src/layout_image.c:1616
 #, c-format
 msgid "[%*d,%*d]: RGB(%3d,%3d,%3d)"
 msgstr "[%*d,%*d]: RGB(%3d,%3d,%3d)"
 
-#: ../src/layout_image.c:1567
+#: ../src/layout_image.c:1624
 #, c-format
 msgid "[%*s,%*s]: RGB(---,---,---)"
 msgstr "[%*s,%*s]: RGB(---,---,---)"
 
-#: ../src/layout_util.c:1234
+#: ../src/layout_util.c:1251
 msgid "_File"
 msgstr "_Arquivo"
 
-#: ../src/layout_util.c:1235
+#: ../src/layout_util.c:1252
 msgid "_Go"
 msgstr "_Ir"
 
-#: ../src/layout_util.c:1236 ../src/menu.c:109
+#: ../src/layout_util.c:1253 ../src/menu.c:109
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../src/layout_util.c:1237
+#: ../src/layout_util.c:1254
 msgid "_Select"
 msgstr "_Selecionar"
 
-#: ../src/layout_util.c:1238 ../src/menu.c:276
+#: ../src/layout_util.c:1255 ../src/menu.c:280
 msgid "_Orientation"
 msgstr "_Orientação"
 
-#: ../src/layout_util.c:1239
+#: ../src/layout_util.c:1256
 msgid "E_xternal Editors"
 msgstr "Editores e_xternos"
 
-#: ../src/layout_util.c:1240
+#: ../src/layout_util.c:1257
 msgid "P_references"
 msgstr "P_referências"
 
-#: ../src/layout_util.c:1242
+#: ../src/layout_util.c:1259
 msgid "_Files and Folders"
 msgstr "_Arquivos e diretórios"
 
-#: ../src/layout_util.c:1243
+#: ../src/layout_util.c:1260
 msgid "_Zoom"
 msgstr "_Zoom"
 
-#: ../src/layout_util.c:1244
+#: ../src/layout_util.c:1261
 msgid "_Color Management"
 msgstr "Gestão de _cores"
 
-#: ../src/layout_util.c:1245
+#: ../src/layout_util.c:1262
 msgid "_Connected Zoom"
 msgstr "Zoom _conectado"
 
-#: ../src/layout_util.c:1246
+#: ../src/layout_util.c:1263
 msgid "Spli_t"
 msgstr "_Dividir"
 
-#: ../src/layout_util.c:1247 ../src/layout_util.c:1361
+#: ../src/layout_util.c:1264
+msgid "Stere_o"
+msgstr ""
+
+#: ../src/layout_util.c:1265 ../src/layout_util.c:1380
 msgid "Image _Overlay"
 msgstr "_Overlay da imagem"
 
-#: ../src/layout_util.c:1248
+#: ../src/layout_util.c:1266
 msgid "_Help"
 msgstr "A_juda"
 
-#: ../src/layout_util.c:1250
+#: ../src/layout_util.c:1268
 msgid "_First Image"
 msgstr "_Primeira imagem"
 
-#: ../src/layout_util.c:1250
+#: ../src/layout_util.c:1268
 msgid "First Image"
 msgstr "Primeira imagem"
 
-#: ../src/layout_util.c:1251 ../src/layout_util.c:1252
-#: ../src/layout_util.c:1253
+#: ../src/layout_util.c:1269 ../src/layout_util.c:1270
+#: ../src/layout_util.c:1271
 msgid "_Previous Image"
 msgstr "Imagem _anterior"
 
-#: ../src/layout_util.c:1251 ../src/layout_util.c:1252
-#: ../src/layout_util.c:1253
+#: ../src/layout_util.c:1269 ../src/layout_util.c:1270
+#: ../src/layout_util.c:1271
 msgid "Previous Image"
 msgstr "Imagem anterior"
 
-#: ../src/layout_util.c:1254 ../src/layout_util.c:1255
-#: ../src/layout_util.c:1256
+#: ../src/layout_util.c:1272 ../src/layout_util.c:1273
+#: ../src/layout_util.c:1274
 msgid "_Next Image"
 msgstr "Próxima _imagem"
 
-#: ../src/layout_util.c:1254 ../src/layout_util.c:1255
-#: ../src/layout_util.c:1256
+#: ../src/layout_util.c:1272 ../src/layout_util.c:1273
+#: ../src/layout_util.c:1274
 msgid "Next Image"
 msgstr "Próxima imagem"
 
-#: ../src/layout_util.c:1257
+#: ../src/layout_util.c:1275
 msgid "_Last Image"
 msgstr "_Última imagem"
 
-#: ../src/layout_util.c:1257
+#: ../src/layout_util.c:1275
 msgid "Last Image"
 msgstr "Última imagem"
 
-#: ../src/layout_util.c:1258
+#: ../src/layout_util.c:1276
 msgid "_Back"
 msgstr "_Voltar"
 
-#: ../src/layout_util.c:1258
+#: ../src/layout_util.c:1276
 msgid "Back"
 msgstr "Voltar"
 
-#: ../src/layout_util.c:1259
+#: ../src/layout_util.c:1277
 msgid "_Home"
 msgstr "_Diretório inicial"
 
-#: ../src/layout_util.c:1259 ../src/options.c:136 ../src/ui_bookmark.c:543
-#: ../src/ui_pathsel.c:1047
+#: ../src/layout_util.c:1277 ../src/options.c:143 ../src/ui_bookmark.c:549
+#: ../src/ui_pathsel.c:1045
 msgid "Home"
 msgstr "Diretório inicial"
 
-#: ../src/layout_util.c:1261
+#: ../src/layout_util.c:1279
 msgid "New _window"
 msgstr "Nova _janela"
 
-#: ../src/layout_util.c:1261
+#: ../src/layout_util.c:1279
 msgid "New window"
 msgstr "Nova janela"
 
-#: ../src/layout_util.c:1262
+#: ../src/layout_util.c:1280
 msgid "_New collection"
 msgstr "Nova _coleção"
 
-#: ../src/layout_util.c:1262
+#: ../src/layout_util.c:1280
 msgid "New collection"
 msgstr "Nova coleção"
 
-#: ../src/layout_util.c:1263
+#: ../src/layout_util.c:1281
 msgid "_Open collection..."
 msgstr "Abrir c_oleção..."
 
-#: ../src/layout_util.c:1263
+#: ../src/layout_util.c:1281
 msgid "Open collection..."
 msgstr "Abrir coleção..."
 
-#: ../src/layout_util.c:1264
+#: ../src/layout_util.c:1282
 msgid "Open recen_t"
 msgstr "Abrir recen_tes"
 
-#: ../src/layout_util.c:1264
+#: ../src/layout_util.c:1282
 msgid "Open recent"
 msgstr "Abrir recentes"
 
-#: ../src/layout_util.c:1265
+#: ../src/layout_util.c:1283
 msgid "_Search..."
 msgstr "Proc_urar..."
 
-#: ../src/layout_util.c:1265
+#: ../src/layout_util.c:1283
 msgid "Search..."
 msgstr "Procurar..."
 
-#: ../src/layout_util.c:1266
+#: ../src/layout_util.c:1284
 msgid "Find duplicates..."
 msgstr "Procurar por duplicatas..."
 
-#: ../src/layout_util.c:1267
+#: ../src/layout_util.c:1285
 msgid "Pa_n view"
 msgstr "Visualização pa_norâmica"
 
-#: ../src/layout_util.c:1267
+#: ../src/layout_util.c:1285
 msgid "Pan view"
 msgstr "Visualização panorâmica"
 
-#: ../src/layout_util.c:1268
+#: ../src/layout_util.c:1286
 msgid "_Print..."
 msgstr "_Imprimir..."
 
-#: ../src/layout_util.c:1269
+#: ../src/layout_util.c:1287
 msgid "N_ew folder..."
 msgstr "No_vo diretório..."
 
-#: ../src/layout_util.c:1269
+#: ../src/layout_util.c:1287
 msgid "New folder..."
 msgstr "Novo diretório..."
 
-#: ../src/layout_util.c:1270
+#: ../src/layout_util.c:1288
 msgid "Copy..."
 msgstr "Copiar..."
 
-#: ../src/layout_util.c:1271
+#: ../src/layout_util.c:1289
 msgid "Move..."
 msgstr "Mover..."
 
-#: ../src/layout_util.c:1272
+#: ../src/layout_util.c:1290
 msgid "Rename..."
 msgstr "Renomear..."
 
-#: ../src/layout_util.c:1273 ../src/layout_util.c:1274
-#: ../src/layout_util.c:1275
+#: ../src/layout_util.c:1291 ../src/layout_util.c:1292
+#: ../src/layout_util.c:1293
 msgid "Delete..."
 msgstr "Apagar..."
 
-#: ../src/layout_util.c:1276 ../src/view_file.c:603
+#: ../src/layout_util.c:1294 ../src/view_file.c:603
 msgid "Enable file _grouping"
 msgstr "Habilitar o a_grupamento de arquivos"
 
-#: ../src/layout_util.c:1276
+#: ../src/layout_util.c:1294
 msgid "Enable file grouping"
 msgstr "Habilitar o agrupamento de arquivos"
 
-#: ../src/layout_util.c:1277 ../src/view_file.c:605
+#: ../src/layout_util.c:1295 ../src/view_file.c:605
 msgid "Disable file groupi_ng"
 msgstr "Desabilitar o agrupame_nto de arquivos"
 
-#: ../src/layout_util.c:1277
+#: ../src/layout_util.c:1295
 msgid "Disable file grouping"
 msgstr "Desabilitar o agrupamento de arquivos"
 
-#: ../src/layout_util.c:1278
+#: ../src/layout_util.c:1296
 msgid "_Copy path to clipboard"
 msgstr "_Copiar o caminho para a área de transferência"
 
-#: ../src/layout_util.c:1278
+#: ../src/layout_util.c:1296
 msgid "Copy path to clipboard"
 msgstr "Copiar o caminho para a área de transferência"
 
-#: ../src/layout_util.c:1279
+#: ../src/layout_util.c:1297
 msgid "Close window"
 msgstr "Fechar a janela"
 
-#: ../src/layout_util.c:1280
+#: ../src/layout_util.c:1298
 msgid "_Quit"
 msgstr "_Sair"
 
-#: ../src/layout_util.c:1280
+#: ../src/layout_util.c:1298
 msgid "Quit"
 msgstr "Sair"
 
-#: ../src/layout_util.c:1281 ../src/menu.c:218
+#: ../src/layout_util.c:1299 ../src/menu.c:222
 msgid "_Rotate clockwise"
 msgstr "Girar no sentido _horário"
 
-#: ../src/layout_util.c:1281
+#: ../src/layout_util.c:1299
 msgid "Rotate clockwise"
 msgstr "Girar no sentido horário"
 
-#: ../src/layout_util.c:1282 ../src/menu.c:221
+#: ../src/layout_util.c:1300 ../src/menu.c:225
 msgid "Rotate _counterclockwise"
 msgstr "Girar no sentido _anti-horário"
 
-#: ../src/layout_util.c:1282
+#: ../src/layout_util.c:1300
 msgid "Rotate counterclockwise"
 msgstr "Girar no sentido anti-horário"
 
-#: ../src/layout_util.c:1283
+#: ../src/layout_util.c:1301
 msgid "Rotate 1_80"
 msgstr "Girar 1_80"
 
-#: ../src/layout_util.c:1283
+#: ../src/layout_util.c:1301
 msgid "Rotate 180"
 msgstr "Girar 180"
 
-#: ../src/layout_util.c:1284 ../src/menu.c:227
+#: ../src/layout_util.c:1302 ../src/menu.c:231
 msgid "_Mirror"
 msgstr "_Espelhar horizontalmente"
 
-#: ../src/layout_util.c:1284
+#: ../src/layout_util.c:1302
 msgid "Mirror"
 msgstr "Espelhar horizontalmente"
 
-#: ../src/layout_util.c:1285 ../src/menu.c:230
+#: ../src/layout_util.c:1303 ../src/menu.c:234
 msgid "_Flip"
 msgstr "Espelhar _verticalmente"
 
-#: ../src/layout_util.c:1285
+#: ../src/layout_util.c:1303
 msgid "Flip"
 msgstr "Espelhar verticalmente"
 
-#: ../src/layout_util.c:1286 ../src/menu.c:233
+#: ../src/layout_util.c:1304 ../src/menu.c:237
 msgid "_Original state"
 msgstr "Estado _original"
 
-#: ../src/layout_util.c:1286
+#: ../src/layout_util.c:1304
 msgid "Original state"
 msgstr "Estado original"
 
-#: ../src/layout_util.c:1287
+#: ../src/layout_util.c:1305
 msgid "Select _all"
 msgstr "Selecionar _tudo"
 
-#: ../src/layout_util.c:1288
+#: ../src/layout_util.c:1306
 msgid "Select _none"
-msgstr "Não selecionar _nada"
+msgstr "De_sselecionar tudo"
 
-#: ../src/layout_util.c:1289
+#: ../src/layout_util.c:1307
 msgid "_Invert Selection"
 msgstr "_Inverter a seleção"
 
-#: ../src/layout_util.c:1289
+#: ../src/layout_util.c:1307
 msgid "Invert Selection"
 msgstr "Inverter a seleção"
 
-#: ../src/layout_util.c:1290
+#: ../src/layout_util.c:1308
 msgid "P_references..."
 msgstr "P_referências..."
 
-#: ../src/layout_util.c:1290
+#: ../src/layout_util.c:1308
 msgid "Preferences..."
 msgstr "Preferências..."
 
-#: ../src/layout_util.c:1291
+#: ../src/layout_util.c:1309
 msgid "Configure _Editors..."
 msgstr "Configurar os _editores..."
 
-#: ../src/layout_util.c:1291
+#: ../src/layout_util.c:1309
 msgid "Configure Editors..."
 msgstr "Configurar os editores..."
 
-#: ../src/layout_util.c:1292
+#: ../src/layout_util.c:1310
 msgid "_Configure this window..."
 msgstr "_Configurar esta janela..."
 
-#: ../src/layout_util.c:1292
+#: ../src/layout_util.c:1310
 msgid "Configure this window..."
 msgstr "Configurar esta janela..."
 
-#: ../src/layout_util.c:1293
+#: ../src/layout_util.c:1311
 msgid "_Thumbnail maintenance..."
 msgstr "_Manutenção das miniaturas..."
 
-#: ../src/layout_util.c:1293
+#: ../src/layout_util.c:1311
 msgid "Thumbnail maintenance..."
 msgstr "Manutenção das miniaturas..."
 
-#: ../src/layout_util.c:1294
+#: ../src/layout_util.c:1312
 msgid "Set as wallpaper"
 msgstr "Definir como papel de parede"
 
-#: ../src/layout_util.c:1295
+#: ../src/layout_util.c:1313
 msgid "_Save metadata"
 msgstr "_Salvar os metadados"
 
-#: ../src/layout_util.c:1295
+#: ../src/layout_util.c:1313
 msgid "Save metadata"
 msgstr "Salvar os metadados"
 
-#: ../src/layout_util.c:1296 ../src/layout_util.c:1297
+#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
 msgid "Zoom in"
 msgstr "Mais zoom"
 
-#: ../src/layout_util.c:1298 ../src/layout_util.c:1299
+#: ../src/layout_util.c:1316 ../src/layout_util.c:1317
 msgid "Zoom out"
 msgstr "Menos zoom"
 
-#: ../src/layout_util.c:1300 ../src/layout_util.c:1301
+#: ../src/layout_util.c:1318 ../src/layout_util.c:1319
 msgid "Zoom 1:1"
 msgstr "Zoom 1:1"
 
-#: ../src/layout_util.c:1302 ../src/layout_util.c:1303
-#: ../src/layout_util.c:1318 ../src/layout_util.c:1319
+#: ../src/layout_util.c:1320 ../src/layout_util.c:1321
+#: ../src/layout_util.c:1336 ../src/layout_util.c:1337
 msgid "_Zoom to fit"
 msgstr "_Zoom ajustado"
 
-#: ../src/layout_util.c:1302 ../src/layout_util.c:1303
+#: ../src/layout_util.c:1320 ../src/layout_util.c:1321
 msgid "Zoom to fit"
 msgstr "Zoom ajustado"
 
-#: ../src/layout_util.c:1304 ../src/layout_util.c:1320
+#: ../src/layout_util.c:1322 ../src/layout_util.c:1338
 msgid "Fit _Horizontally"
 msgstr "Ajustar _horizontalmente"
 
-#: ../src/layout_util.c:1304
+#: ../src/layout_util.c:1322
 msgid "Fit Horizontally"
 msgstr "Ajustar horizontalmente"
 
-#: ../src/layout_util.c:1305 ../src/layout_util.c:1321
+#: ../src/layout_util.c:1323 ../src/layout_util.c:1339
 msgid "Fit _Vertically"
 msgstr "Ajustar _verticalmente"
 
-#: ../src/layout_util.c:1305
+#: ../src/layout_util.c:1323
 msgid "Fit Vertically"
 msgstr "Ajustar verticalmente"
 
-#: ../src/layout_util.c:1306 ../src/layout_util.c:1322
+#: ../src/layout_util.c:1324 ../src/layout_util.c:1340
 msgid "Zoom _2:1"
 msgstr "Zoom _2:1"
 
-#: ../src/layout_util.c:1306
+#: ../src/layout_util.c:1324
 msgid "Zoom 2:1"
 msgstr "Zoom 2:1"
 
-#: ../src/layout_util.c:1307 ../src/layout_util.c:1323
+#: ../src/layout_util.c:1325 ../src/layout_util.c:1341
 msgid "Zoom _3:1"
 msgstr "Zoom _3:1"
 
-#: ../src/layout_util.c:1307
+#: ../src/layout_util.c:1325
 msgid "Zoom 3:1"
 msgstr "Zoom 3:1"
 
-#: ../src/layout_util.c:1308 ../src/layout_util.c:1324
+#: ../src/layout_util.c:1326 ../src/layout_util.c:1342
 msgid "Zoom _4:1"
 msgstr "Zoom _4:1"
 
-#: ../src/layout_util.c:1308
+#: ../src/layout_util.c:1326
 msgid "Zoom 4:1"
 msgstr "Zoom 4:1"
 
-#: ../src/layout_util.c:1309 ../src/layout_util.c:1325
+#: ../src/layout_util.c:1327 ../src/layout_util.c:1343
 msgid "Zoom 1:2"
 msgstr "Zoom 1:2"
 
-#: ../src/layout_util.c:1310 ../src/layout_util.c:1326
+#: ../src/layout_util.c:1328 ../src/layout_util.c:1344
 msgid "Zoom 1:3"
 msgstr "Zoom 1:3"
 
-#: ../src/layout_util.c:1311 ../src/layout_util.c:1327
+#: ../src/layout_util.c:1329 ../src/layout_util.c:1345
 msgid "Zoom 1:4"
 msgstr "Zoom 1:4"
 
-#: ../src/layout_util.c:1312 ../src/layout_util.c:1313
+#: ../src/layout_util.c:1330 ../src/layout_util.c:1331
 msgid "Connected Zoom in"
 msgstr "Mais zoom conectado"
 
-#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+#: ../src/layout_util.c:1332 ../src/layout_util.c:1333
 msgid "Connected Zoom out"
 msgstr "Menos zoom conectado"
 
-#: ../src/layout_util.c:1316 ../src/layout_util.c:1317
+#: ../src/layout_util.c:1334 ../src/layout_util.c:1335
 msgid "Connected Zoom 1:1"
 msgstr "Zoom conectado 1:1"
 
-#: ../src/layout_util.c:1318 ../src/layout_util.c:1319
+#: ../src/layout_util.c:1336 ../src/layout_util.c:1337
 msgid "Connected Zoom to fit"
 msgstr "Zoom conectado ajustado"
 
-#: ../src/layout_util.c:1320
+#: ../src/layout_util.c:1338
 msgid "Connected Fit Horizontally"
 msgstr "Ajustar conectado horizontalmente"
 
-#: ../src/layout_util.c:1321
+#: ../src/layout_util.c:1339
 msgid "Connected Fit Vertically"
 msgstr "Ajustar conectado verticalmente"
 
-#: ../src/layout_util.c:1322
+#: ../src/layout_util.c:1340
 msgid "Connected Zoom 2:1"
 msgstr "Zoom conectado 2:1"
 
-#: ../src/layout_util.c:1323
+#: ../src/layout_util.c:1341
 msgid "Connected Zoom 3:1"
 msgstr "Zoom conectado 3:1"
 
-#: ../src/layout_util.c:1324
+#: ../src/layout_util.c:1342
 msgid "Connected Zoom 4:1"
 msgstr "Zoom conectado 4:1"
 
-#: ../src/layout_util.c:1325
+#: ../src/layout_util.c:1343
 msgid "Connected Zoom 1:2"
 msgstr "Zoom conectado 1:2"
 
-#: ../src/layout_util.c:1326
+#: ../src/layout_util.c:1344
 msgid "Connected Zoom 1:3"
 msgstr "Zoom conectado 1:3"
 
-#: ../src/layout_util.c:1327
+#: ../src/layout_util.c:1345
 msgid "Connected Zoom 1:4"
 msgstr "Zoom conectado 1:4"
 
-#: ../src/layout_util.c:1328
+#: ../src/layout_util.c:1346
 msgid "_View in new window"
 msgstr "_Visualizar em uma nova janela"
 
-#: ../src/layout_util.c:1328
+#: ../src/layout_util.c:1346
 msgid "View in new window"
 msgstr "Visualizar em uma nova janela"
 
-#: ../src/layout_util.c:1329 ../src/layout_util.c:1330
-#: ../src/layout_util.c:1331
+#: ../src/layout_util.c:1347 ../src/layout_util.c:1348
+#: ../src/layout_util.c:1349
 msgid "F_ull screen"
 msgstr "_Tela cheia"
 
-#: ../src/layout_util.c:1332 ../src/layout_util.c:1333
+#: ../src/layout_util.c:1350 ../src/layout_util.c:1351
 msgid "_Leave full screen"
 msgstr "_Sair da tela cheia"
 
-#: ../src/layout_util.c:1332 ../src/layout_util.c:1333
+#: ../src/layout_util.c:1350 ../src/layout_util.c:1351
 msgid "Leave full screen"
 msgstr "Sair da tela cheia"
 
-#: ../src/layout_util.c:1334
+#: ../src/layout_util.c:1352
 msgid "_Cycle through overlay modes"
 msgstr "_Circular pelos modos de overlay"
 
-#: ../src/layout_util.c:1334
+#: ../src/layout_util.c:1352
 msgid "Cycle through Overlay modes"
 msgstr "Circular pelos modos de overlay"
 
-#: ../src/layout_util.c:1335
+#: ../src/layout_util.c:1353
 msgid "Cycle through histogram ch_annels"
 msgstr "Circ_ular pelos canais de histograma"
 
-#: ../src/layout_util.c:1335
+#: ../src/layout_util.c:1353
 msgid "Cycle through histogram channels"
 msgstr "Circular pelos canais de histograma"
 
-#: ../src/layout_util.c:1336
+#: ../src/layout_util.c:1354
 msgid "Cycle through histogram mo_des"
 msgstr "Circular pelos mo_dos de histograma"
 
-#: ../src/layout_util.c:1336
+#: ../src/layout_util.c:1354
 msgid "Cycle through histogram modes"
 msgstr "Circular pelos modos de histograma"
 
-#: ../src/layout_util.c:1337
+#: ../src/layout_util.c:1355
 msgid "_Hide file list"
 msgstr "Ocultar a _lista de arquivos"
 
-#: ../src/layout_util.c:1337
+#: ../src/layout_util.c:1355
 msgid "Hide file list"
 msgstr "Ocultar a lista de arquivos"
 
-#: ../src/layout_util.c:1338
+#: ../src/layout_util.c:1356
 msgid "_Pause slideshow"
 msgstr "_Pausar a apresentação de slides"
 
-#: ../src/layout_util.c:1338
+#: ../src/layout_util.c:1356
 msgid "Pause slideshow"
 msgstr "Pausar a apresentação de slides"
 
-#: ../src/layout_util.c:1339
+#: ../src/layout_util.c:1357
 msgid "_Refresh"
 msgstr "Atualiza_r"
 
-#: ../src/layout_util.c:1339
+#: ../src/layout_util.c:1357
 msgid "Refresh"
 msgstr "Atualizar"
 
-#: ../src/layout_util.c:1340
+#: ../src/layout_util.c:1358
 msgid "_Contents"
 msgstr "_Conteúdo"
 
-#: ../src/layout_util.c:1340
+#: ../src/layout_util.c:1358
 msgid "Contents"
 msgstr "Conteúdo"
 
-#: ../src/layout_util.c:1341
+#: ../src/layout_util.c:1359
 msgid "_Keyboard shortcuts"
 msgstr "Atalhos de _teclado"
 
-#: ../src/layout_util.c:1341
+#: ../src/layout_util.c:1359
 msgid "Keyboard shortcuts"
 msgstr "Atalhos de teclado"
 
-#: ../src/layout_util.c:1342
+#: ../src/layout_util.c:1360
 msgid "_Release notes"
 msgstr "_Notas de lançamento"
 
-#: ../src/layout_util.c:1342
+#: ../src/layout_util.c:1360
 msgid "Release notes"
 msgstr "Notas de lançamento"
 
-#: ../src/layout_util.c:1343
+#: ../src/layout_util.c:1361
 msgid "_About"
 msgstr "_Sobre"
 
-#: ../src/layout_util.c:1343 ../src/preferences.c:2108
+#: ../src/layout_util.c:1361 ../src/preferences.c:2190
 msgid "About"
 msgstr "Sobre"
 
-#: ../src/layout_util.c:1344
+#: ../src/layout_util.c:1362
 msgid "_Log Window"
 msgstr "_Logar a janela"
 
-#: ../src/layout_util.c:1344
+#: ../src/layout_util.c:1362
 msgid "Log Window"
 msgstr "Logar a janela"
 
-#: ../src/layout_util.c:1345
+#: ../src/layout_util.c:1363
 msgid "_Exif window"
 msgstr "Janela _Exif"
 
-#: ../src/layout_util.c:1345
+#: ../src/layout_util.c:1363
 msgid "Exif window"
 msgstr "Janela Exif"
 
-#: ../src/layout_util.c:1350
+#: ../src/layout_util.c:1364
+#, fuzzy
+msgid "_Cycle through stereo modes"
+msgstr "_Circular pelos modos de overlay"
+
+#: ../src/layout_util.c:1364
+#, fuzzy
+msgid "Cycle through stereo modes"
+msgstr "Circular pelos modos de histograma"
+
+#: ../src/layout_util.c:1369
 msgid "Show _Thumbnails"
 msgstr "Exibir _miniaturas"
 
-#: ../src/layout_util.c:1350
+#: ../src/layout_util.c:1369
 msgid "Show Thumbnails"
 msgstr "Exibir miniaturas"
 
-#: ../src/layout_util.c:1351
+#: ../src/layout_util.c:1370
 msgid "Show _Marks"
 msgstr "Exibir as _marcações"
 
-#: ../src/layout_util.c:1351
+#: ../src/layout_util.c:1370
 msgid "Show Marks"
 msgstr "Exibir as marcações"
 
-#: ../src/layout_util.c:1352
+#: ../src/layout_util.c:1371
 msgid "Pi_xel Info"
 msgstr "Informação do pi_xel"
 
-#: ../src/layout_util.c:1352
+#: ../src/layout_util.c:1371
 msgid "Show Pixel Info"
 msgstr "Exibir a informação do pixel"
 
-#: ../src/layout_util.c:1353
+#: ../src/layout_util.c:1372
 msgid "_Float file list"
 msgstr "_Flutuar a lista de arquivos"
 
-#: ../src/layout_util.c:1353
+#: ../src/layout_util.c:1372
 msgid "Float file list"
 msgstr "Flutuar a lista de arquivos"
 
-#: ../src/layout_util.c:1354
+#: ../src/layout_util.c:1373
 msgid "Hide tool_bar"
 msgstr "Ocultar a _barra de ferramentas"
 
-#: ../src/layout_util.c:1354
+#: ../src/layout_util.c:1373
 msgid "Hide toolbar"
 msgstr "Ocultar a barra de ferramentas"
 
-#: ../src/layout_util.c:1355
+#: ../src/layout_util.c:1374
 msgid "_Info sidebar"
 msgstr "Barra lateral de _informações"
 
-#: ../src/layout_util.c:1355
+#: ../src/layout_util.c:1374
 msgid "Info sidebar"
 msgstr "Barra lateral de informações"
 
-#: ../src/layout_util.c:1356
+#: ../src/layout_util.c:1375
 msgid "Sort _manager"
 msgstr "C_lassificador"
 
-#: ../src/layout_util.c:1356
+#: ../src/layout_util.c:1375
 msgid "Sort manager"
 msgstr "Classificador"
 
-#: ../src/layout_util.c:1357
+#: ../src/layout_util.c:1376
 msgid "Toggle _slideshow"
-msgstr "Alternar apresentação de _slides"
+msgstr "Iniciar/Parar apresentação de _slides"
 
-#: ../src/layout_util.c:1357
+#: ../src/layout_util.c:1376
 msgid "Toggle slideshow"
-msgstr "Alternar apresentação de slides"
+msgstr "Iniciar/Parar apresentação de slides"
 
-#: ../src/layout_util.c:1358
+#: ../src/layout_util.c:1377
 msgid "Use _color profiles"
 msgstr "Usar perfis de _cor"
 
-#: ../src/layout_util.c:1358
+#: ../src/layout_util.c:1377
 msgid "Use color profiles"
 msgstr "Usar perfis de cor"
 
-#: ../src/layout_util.c:1359
+#: ../src/layout_util.c:1378
 msgid "Use profile from _image"
 msgstr "Usar o perfil da _imagem"
 
-#: ../src/layout_util.c:1359
+#: ../src/layout_util.c:1378
 msgid "Use profile from image"
 msgstr "Usar o perfil da imagem"
 
-#: ../src/layout_util.c:1360
+#: ../src/layout_util.c:1379
 msgid "Toggle _grayscale"
-msgstr "Alternar _escala de cinza"
+msgstr "_Escala de cinzas"
 
-#: ../src/layout_util.c:1360
+#: ../src/layout_util.c:1379
 msgid "Toggle grayscale"
-msgstr "Alternar escala de cinza"
+msgstr "Escala de cinzas"
 
-#: ../src/layout_util.c:1361
+#: ../src/layout_util.c:1380
 msgid "Image Overlay"
 msgstr "Overlay da imagem"
 
-#: ../src/layout_util.c:1362
+#: ../src/layout_util.c:1381
 msgid "_Show Histogram"
 msgstr "Exibir o hi_stograma"
 
-#: ../src/layout_util.c:1362
+#: ../src/layout_util.c:1381
 msgid "Show Histogram"
 msgstr "Exibir o histograma"
 
-#: ../src/layout_util.c:1366
+#: ../src/layout_util.c:1385
 msgid "Image _List"
 msgstr "_Lista de imagens"
 
-#: ../src/layout_util.c:1366
+#: ../src/layout_util.c:1385
 msgid "View Images as List"
 msgstr "Visualizar imagens em lista"
 
-#: ../src/layout_util.c:1367
+#: ../src/layout_util.c:1386
 msgid "I_cons"
 msgstr "Íco_nes"
 
-#: ../src/layout_util.c:1367
+#: ../src/layout_util.c:1386
 msgid "View Images as Icons"
 msgstr "Visualizar imagens em ícones"
 
-#: ../src/layout_util.c:1371
+#: ../src/layout_util.c:1390
 msgid "Folder Li_st"
 msgstr "Li_sta de diretórios"
 
-#: ../src/layout_util.c:1371
+#: ../src/layout_util.c:1390
 msgid "View Folders as List"
 msgstr "Visualizar diretórios em lista"
 
-#: ../src/layout_util.c:1372
+#: ../src/layout_util.c:1391
 msgid "Folder T_ree"
 msgstr "Á_rvore de diretórios"
 
-#: ../src/layout_util.c:1372
+#: ../src/layout_util.c:1391
 msgid "View Folders as Tree"
 msgstr "Visualizar diretórios em árvore"
 
-#: ../src/layout_util.c:1376
+#: ../src/layout_util.c:1395
 msgid "_Horizontal"
 msgstr "_Horizontal"
 
-#: ../src/layout_util.c:1376
+#: ../src/layout_util.c:1395
 msgid "Split Horizontal"
 msgstr "Dividir horizontalmente"
 
-#: ../src/layout_util.c:1377
+#: ../src/layout_util.c:1396
 msgid "_Vertical"
 msgstr "_Vertical"
 
-#: ../src/layout_util.c:1377
+#: ../src/layout_util.c:1396
 msgid "Split Vertical"
 msgstr "Dividir verticalmente"
 
-#: ../src/layout_util.c:1378
+#: ../src/layout_util.c:1397
 msgid "_Quad"
 msgstr "Em _quatro"
 
-#: ../src/layout_util.c:1378
+#: ../src/layout_util.c:1397
 msgid "Split Quad"
 msgstr "Dividir em quatro"
 
-#: ../src/layout_util.c:1379
+#: ../src/layout_util.c:1398
 msgid "_Single"
 msgstr "_Única"
 
-#: ../src/layout_util.c:1379
+#: ../src/layout_util.c:1398
 msgid "Split Single"
 msgstr "Divisão única"
 
-#: ../src/layout_util.c:1383
+#: ../src/layout_util.c:1402
 msgid "Input _0: sRGB"
 msgstr "Entrada _0: sRGB"
 
-#: ../src/layout_util.c:1383
+#: ../src/layout_util.c:1402
 msgid "Input 0: sRGB"
 msgstr "Entrada 0: sRGB"
 
-#: ../src/layout_util.c:1384
+#: ../src/layout_util.c:1403
 msgid "Input _1: AdobeRGB compatible"
 msgstr "Entrada _1: compatível com AdobeRGB"
 
-#: ../src/layout_util.c:1384
+#: ../src/layout_util.c:1403
 msgid "Input 1: AdobeRGB compatible"
 msgstr "Entrada 1: compatível com AdobeRGB"
 
-#: ../src/layout_util.c:1385
+#: ../src/layout_util.c:1404
 msgid "Input _2"
 msgstr "Entrada _2"
 
-#: ../src/layout_util.c:1385
+#: ../src/layout_util.c:1404
 msgid "Input 2"
 msgstr "Entrada 2"
 
-#: ../src/layout_util.c:1386
+#: ../src/layout_util.c:1405
 msgid "Input _3"
 msgstr "Entrada _3"
 
-#: ../src/layout_util.c:1386
+#: ../src/layout_util.c:1405
 msgid "Input 3"
 msgstr "Entrada 3"
 
-#: ../src/layout_util.c:1387
+#: ../src/layout_util.c:1406
 msgid "Input _4"
 msgstr "Entrada _4"
 
-#: ../src/layout_util.c:1387
+#: ../src/layout_util.c:1406
 msgid "Input 4"
 msgstr "Entrada 4"
 
-#: ../src/layout_util.c:1388
+#: ../src/layout_util.c:1407
 msgid "Input _5"
 msgstr "Entrada _5"
 
-#: ../src/layout_util.c:1388
+#: ../src/layout_util.c:1407
 msgid "Input 5"
 msgstr "Entrada 5"
 
-#: ../src/layout_util.c:1392
+#: ../src/layout_util.c:1411
 msgid "Histogram on Red"
 msgstr "Histograma no vermelho"
 
-#: ../src/layout_util.c:1393
+#: ../src/layout_util.c:1412
 msgid "Histogram on Green"
 msgstr "Histograma no verde"
 
-#: ../src/layout_util.c:1394
+#: ../src/layout_util.c:1413
 msgid "Histogram on Blue"
 msgstr "Histograma no azul"
 
-#: ../src/layout_util.c:1395
+#: ../src/layout_util.c:1414
 msgid "Histogram on RGB"
 msgstr "Histograma no RGB"
 
-#: ../src/layout_util.c:1396
+#: ../src/layout_util.c:1415
 msgid "Histogram on Value"
 msgstr "Histograma no valor"
 
-#: ../src/layout_util.c:1400
+#: ../src/layout_util.c:1419
 msgid "Linear Histogram"
 msgstr "Histograma linear"
 
-#: ../src/layout_util.c:1401
+#: ../src/layout_util.c:1420
 msgid "_Log Histogram"
 msgstr "_Logar o histograma"
 
-#: ../src/layout_util.c:1401
+#: ../src/layout_util.c:1420
 msgid "Log Histogram"
 msgstr "Logar o histograma"
 
-#: ../src/layout_util.c:1667
+#: ../src/layout_util.c:1424
+msgid "_Auto"
+msgstr ""
+
+#: ../src/layout_util.c:1424
+msgid "Stereo Auto"
+msgstr ""
+
+#: ../src/layout_util.c:1425
+msgid "_Side by Side"
+msgstr ""
+
+#: ../src/layout_util.c:1425
+msgid "Stereo Side by Side"
+msgstr ""
+
+#: ../src/layout_util.c:1426
+msgid "_Cross"
+msgstr ""
+
+#: ../src/layout_util.c:1426
+msgid "Stereo Cross"
+msgstr ""
+
+#: ../src/layout_util.c:1427
+msgid "_Off"
+msgstr ""
+
+#: ../src/layout_util.c:1427
+msgid "Stereo Off"
+msgstr ""
+
+#: ../src/layout_util.c:1701
 #, c-format
 msgid "Mark _%d"
 msgstr "Marcação _%d"
 
-#: ../src/layout_util.c:1668 ../src/view_file.c:540
+#: ../src/layout_util.c:1702 ../src/view_file.c:540
 #, c-format
 msgid "_Set mark %d"
-msgstr "_Definir a marcação %d"
+msgstr "_Marcar a marcação %d"
 
-#: ../src/layout_util.c:1668
+#: ../src/layout_util.c:1702
 #, c-format
 msgid "Set mark %d"
-msgstr "Definir a marcação %d"
+msgstr "Marcar a marcação %d"
 
-#: ../src/layout_util.c:1669 ../src/view_file.c:541
+#: ../src/layout_util.c:1703 ../src/view_file.c:541
 #, c-format
 msgid "_Reset mark %d"
-msgstr "_Redefinir a marcação %d"
+msgstr "_Desmarcar a marcação %d"
 
-#: ../src/layout_util.c:1669
+#: ../src/layout_util.c:1703
 #, c-format
 msgid "Reset mark %d"
-msgstr "Redefinir a marcação %d"
+msgstr "Desmarcar a marcação %d"
 
-#: ../src/layout_util.c:1670 ../src/layout_util.c:1671 ../src/view_file.c:542
+#: ../src/layout_util.c:1704 ../src/layout_util.c:1705 ../src/view_file.c:542
 #, c-format
 msgid "_Toggle mark %d"
-msgstr "Al_ternar a marcação %d"
+msgstr "Marcar/D_esmarcar a marcação %d"
 
-#: ../src/layout_util.c:1670 ../src/layout_util.c:1671
+#: ../src/layout_util.c:1704 ../src/layout_util.c:1705
 #, c-format
 msgid "Toggle mark %d"
-msgstr "Alternar a marcação %d"
+msgstr "Marcar/Desmarcar a marcação %d"
 
-#: ../src/layout_util.c:1672
+#: ../src/layout_util.c:1706
 #, c-format
 msgid "Se_lect mark %d"
 msgstr "Se_lecionar a marcação %d"
 
-#: ../src/layout_util.c:1672 ../src/layout_util.c:1673
+#: ../src/layout_util.c:1706 ../src/layout_util.c:1707
 #, c-format
 msgid "Select mark %d"
 msgstr "Selecionar a marcação %d"
 
-#: ../src/layout_util.c:1673 ../src/view_file.c:543
+#: ../src/layout_util.c:1707 ../src/view_file.c:543
 #, c-format
 msgid "_Select mark %d"
 msgstr "_Selecionar a marcação %d"
 
-#: ../src/layout_util.c:1674 ../src/view_file.c:544
+#: ../src/layout_util.c:1708 ../src/view_file.c:544
 #, c-format
 msgid "_Add mark %d"
 msgstr "_Adicionar a marcação %d"
 
-#: ../src/layout_util.c:1674
+#: ../src/layout_util.c:1708
 #, c-format
 msgid "Add mark %d"
 msgstr "Adicionar a marcação %d"
 
-#: ../src/layout_util.c:1675 ../src/view_file.c:545
+#: ../src/layout_util.c:1709 ../src/view_file.c:545
 #, c-format
 msgid "_Intersection with mark %d"
 msgstr "_Interseção com a marcação %d"
 
-#: ../src/layout_util.c:1675
+#: ../src/layout_util.c:1709
 #, c-format
 msgid "Intersection with mark %d"
 msgstr "Interseção com a marcação %d"
 
-#: ../src/layout_util.c:1676 ../src/view_file.c:546
+#: ../src/layout_util.c:1710 ../src/view_file.c:546
 #, c-format
 msgid "_Unselect mark %d"
 msgstr "De_sselecionar a marcação %d"
 
-#: ../src/layout_util.c:1676
+#: ../src/layout_util.c:1710
 #, c-format
 msgid "Unselect mark %d"
 msgstr "Desselecionar a marcação %d"
 
-#: ../src/layout_util.c:1677
+#: ../src/layout_util.c:1711
 #, c-format
 msgid "_Filter mark %d"
-msgstr "_Filtrar a marcação %d"
+msgstr "_Habilitar/Desabilitar o filtro da marcação %d"
 
-#: ../src/layout_util.c:1677
+#: ../src/layout_util.c:1711
 #, c-format
 msgid "Filter mark %d"
-msgstr "Filtrar a marcação %d"
+msgstr "Habilitar/Desabilitar o filtro da marcação %d"
 
-#: ../src/layout_util.c:2205
+#: ../src/layout_util.c:2238
 #, c-format
 msgid "Number of files with unsaved metadata: %d"
 msgstr "Número de arquivos com metadados não salvos: %d"
 
-#: ../src/layout_util.c:2211
+#: ../src/layout_util.c:2244
 msgid "No unsaved metadata"
 msgstr "Nenhum metadado não salvo"
 
-#: ../src/layout_util.c:2258
+#: ../src/layout_util.c:2291
 #, c-format
 msgid ""
 "Image profile: %s\n"
@@ -3046,15 +3095,15 @@ msgstr ""
 "Perfil da imagem: %s\n"
 "Perfil da tela: %s"
 
-#: ../src/layout_util.c:2266
+#: ../src/layout_util.c:2299
 msgid "Click to enable color management"
 msgstr "Clicar para habilitar a gestão de cores"
 
-#: ../src/layout_util.c:2271
+#: ../src/layout_util.c:2304
 msgid "Color profiles not supported"
 msgstr "Perfis de cor não suportados"
 
-#: ../src/layout_util.c:2293
+#: ../src/layout_util.c:2326
 #, c-format
 msgid "Input _%d: %s"
 msgstr "Entrada _%d: %s"
@@ -3085,7 +3134,7 @@ msgstr ""
 msgid "Log"
 msgstr "Log"
 
-#: ../src/main.c:321
+#: ../src/main.c:320
 #, c-format
 msgid ""
 "Usage: %s [options] [path]\n"
@@ -3094,57 +3143,57 @@ msgstr ""
 "Uso: %s [opções] [caminho]\n"
 "\n"
 
-#: ../src/main.c:322
+#: ../src/main.c:321
 msgid "valid options are:\n"
 msgstr "opções válidas são:\n"
 
-#: ../src/main.c:323
+#: ../src/main.c:322
 msgid "  +t, --with-tools           force show of tools\n"
 msgstr "  +t, --with-tools          forçar a exibição das ferramentas\n"
 
-#: ../src/main.c:324
+#: ../src/main.c:323
 msgid "  -t, --without-tools        force hide of tools\n"
 msgstr "  -t, --without-tools       forçar o ocultamento das ferramentas\n"
 
-#: ../src/main.c:325
+#: ../src/main.c:324
 msgid "  -f, --fullscreen           start in full screen mode\n"
 msgstr "  -f, --fullscreen          iniciar no modo de tela-cheia\n"
 
-#: ../src/main.c:326
+#: ../src/main.c:325
 msgid "  -s, --slideshow            start in slideshow mode\n"
 msgstr ""
 "  -s, --slideshow           iniciar no modo de apresentação de slides\n"
 
-#: ../src/main.c:327
+#: ../src/main.c:326
 msgid "  -l, --list                 open collection window for command line\n"
 msgstr ""
 "  -l, --list                abrir a janela de coleção para a linha de "
 "comando\n"
 
-#: ../src/main.c:328
+#: ../src/main.c:327
 msgid "      --geometry=GEOMETRY    set main window location\n"
 msgstr ""
 "      --geometry=GEOMETRIA  definir a localização da janela principal\n"
 
-#: ../src/main.c:329
+#: ../src/main.c:328
 msgid "  -r, --remote               send following commands to open window\n"
 msgstr ""
 "  -r, --remote              enviar os seguintes comandos para a janela "
 "aberta\n"
 
-#: ../src/main.c:330
+#: ../src/main.c:329
 msgid "  -rh,--remote-help          print remote command list\n"
 msgstr "  -rh,--remote-help         exibir a lista de comandos remotos\n"
 
-#: ../src/main.c:332
+#: ../src/main.c:331
 msgid "  --debug[=level]            turn on debug output\n"
 msgstr "      --debug[=nível]       ativar a saída de depuração\n"
 
-#: ../src/main.c:334
+#: ../src/main.c:333
 msgid "  -v, --version              print version info\n"
 msgstr "  -v, --version             exibir as informações da versão\n"
 
-#: ../src/main.c:335
+#: ../src/main.c:334
 msgid ""
 "  -h, --help                 show this message\n"
 "\n"
@@ -3152,7 +3201,7 @@ msgstr ""
 "  -h, --help                exibir esta mensagem\n"
 "\n"
 
-#: ../src/main.c:347
+#: ../src/main.c:346
 #, c-format
 msgid ""
 "invalid or ignored: %s\n"
@@ -3161,11 +3210,11 @@ msgstr ""
 "inválido ou ignorado: %s\n"
 "Use --help para as opções\n"
 
-#: ../src/main.c:376
+#: ../src/main.c:375
 msgid "Invalid or ignored remote options: "
 msgstr "Opções remotas inválidas ou ignoradas:"
 
-#: ../src/main.c:385
+#: ../src/main.c:384
 msgid ""
 "\n"
 "Use --remote-help for valid remote options.\n"
@@ -3173,22 +3222,22 @@ msgstr ""
 "\n"
 "Use --remote-help para opções remotas válidas.\n"
 
-#: ../src/main.c:487
+#: ../src/main.c:486
 #, c-format
 msgid "Creating %s dir:%s\n"
 msgstr "Criando o dir %s:%s\n"
 
-#: ../src/main.c:491
+#: ../src/main.c:490
 #, c-format
 msgid "Could not create dir:%s\n"
 msgstr "Não pude criar o diretório:%s\n"
 
-#: ../src/main.c:543
+#: ../src/main.c:542
 #, c-format
 msgid "error saving file: %s\n"
 msgstr "erro ao salvar o arquivo: %s\n"
 
-#: ../src/main.c:562
+#: ../src/main.c:561
 #, c-format
 msgid ""
 "error saving file: %s\n"
@@ -3197,20 +3246,20 @@ msgstr ""
 "erro ao salvar o arquivo: %s\n"
 "erro:%s\n"
 
-#: ../src/main.c:670
+#: ../src/main.c:669
 msgid "exit"
 msgstr "sair"
 
-#: ../src/main.c:675
+#: ../src/main.c:674
 #, c-format
 msgid "Quit %s"
 msgstr "Sair %s"
 
-#: ../src/main.c:677
+#: ../src/main.c:676
 msgid "Collections have been modified. Quit anyway?"
 msgstr "Coleções foram modificadas. Sair mesmo assim?"
 
-#: ../src/main.c:878 ../src/remote.c:601
+#: ../src/main.c:876 ../src/remote.c:601
 msgid "Command line"
 msgstr "Linha de comando"
 
@@ -3223,409 +3272,410 @@ msgid "Sort by date"
 msgstr "Ordenar pela data"
 
 #: ../src/menu.c:139
+#, fuzzy
+msgid "Sort by Exif-date"
+msgstr "Ordenar pela data E_xif"
+
+#: ../src/menu.c:142
 msgid "Unsorted"
 msgstr "Não ordenado"
 
-#: ../src/menu.c:142
+#: ../src/menu.c:145
 msgid "Sort by path"
 msgstr "Ordenar pelo caminho"
 
-#: ../src/menu.c:145
+#: ../src/menu.c:148
 msgid "Sort by number"
 msgstr "Ordenar pelo número"
 
-#: ../src/menu.c:149
+#: ../src/menu.c:152
 msgid "Sort by name"
 msgstr "Ordenar pelo nome"
 
-#: ../src/menu.c:199
+#: ../src/menu.c:203
 msgid "Sort"
 msgstr "Ordenar"
 
-#: ../src/menu.c:224
+#: ../src/menu.c:228
 msgid "Rotate _180"
 msgstr "Girar _180"
 
-#: ../src/metadata.c:1443
+#: ../src/metadata.c:1599
 msgid "People"
 msgstr "Pessoas"
 
-#: ../src/metadata.c:1444
+#: ../src/metadata.c:1600
 msgid "Family"
 msgstr "Família"
 
-#: ../src/metadata.c:1445
+#: ../src/metadata.c:1601
 msgid "Free time"
 msgstr "Tempo livre"
 
-#: ../src/metadata.c:1446
+#: ../src/metadata.c:1602
 msgid "Children"
 msgstr "Crianças"
 
-#: ../src/metadata.c:1447
+#: ../src/metadata.c:1603
 msgid "Sport"
 msgstr "Esporte"
 
-#: ../src/metadata.c:1448
+#: ../src/metadata.c:1604
 msgid "Culture"
 msgstr "Cultura"
 
-#: ../src/metadata.c:1449
+#: ../src/metadata.c:1605
 msgid "Festival"
 msgstr "Festival"
 
-#: ../src/metadata.c:1450
+#: ../src/metadata.c:1606
 msgid "Nature"
 msgstr "Natureza"
 
-#: ../src/metadata.c:1451
+#: ../src/metadata.c:1607
 msgid "Animal"
 msgstr "Animal"
 
-#: ../src/metadata.c:1452
+#: ../src/metadata.c:1608
 msgid "Bird"
 msgstr "Ave"
 
-#: ../src/metadata.c:1453
+#: ../src/metadata.c:1609
 msgid "Insect"
 msgstr "Inseto"
 
-#: ../src/metadata.c:1454
+#: ../src/metadata.c:1610
 msgid "Pets"
 msgstr "Animais de estimação"
 
-#: ../src/metadata.c:1455
+#: ../src/metadata.c:1611
 msgid "Wildlife"
 msgstr "Vida selvagem"
 
-#: ../src/metadata.c:1456
+#: ../src/metadata.c:1612
 msgid "Zoo"
 msgstr "Zoo"
 
-#: ../src/metadata.c:1457
+#: ../src/metadata.c:1613
 msgid "Plant"
 msgstr "Planta"
 
-#: ../src/metadata.c:1458
+#: ../src/metadata.c:1614
 msgid "Tree"
 msgstr "Árvore"
 
-#: ../src/metadata.c:1459
+#: ../src/metadata.c:1615
 msgid "Flower"
 msgstr "Flor"
 
-#: ../src/metadata.c:1460
+#: ../src/metadata.c:1616
 msgid "Water"
 msgstr "Água"
 
-#: ../src/metadata.c:1461
+#: ../src/metadata.c:1617
 msgid "River"
 msgstr "Rio"
 
-#: ../src/metadata.c:1462
+#: ../src/metadata.c:1618
 msgid "Lake"
 msgstr "Lago"
 
-#: ../src/metadata.c:1463
+#: ../src/metadata.c:1619
 msgid "Sea"
 msgstr "Mar"
 
-#: ../src/metadata.c:1464 ../src/print.c:375
+#: ../src/metadata.c:1620 ../src/print.c:375
 msgid "Landscape"
 msgstr "Paisagem"
 
-#: ../src/metadata.c:1465
+#: ../src/metadata.c:1621
 msgid "Art"
 msgstr "Arte"
 
-#: ../src/metadata.c:1466
+#: ../src/metadata.c:1622
 msgid "Statue"
 msgstr "Estátua"
 
-#: ../src/metadata.c:1467
+#: ../src/metadata.c:1623
 msgid "Painting"
 msgstr "Pintura"
 
-#: ../src/metadata.c:1468 ../src/metadata.c:1482
+#: ../src/metadata.c:1624 ../src/metadata.c:1638
 msgid "Historic"
 msgstr "Histórico"
 
-#: ../src/metadata.c:1469 ../src/metadata.c:1483
+#: ../src/metadata.c:1625 ../src/metadata.c:1639
 msgid "Modern"
 msgstr "Moderno"
 
-#: ../src/metadata.c:1470
+#: ../src/metadata.c:1626
 msgid "City"
 msgstr "Cidade"
 
-#: ../src/metadata.c:1471
+#: ../src/metadata.c:1627
 msgid "Park"
 msgstr "Parque"
 
-#: ../src/metadata.c:1472
+#: ../src/metadata.c:1628
 msgid "Street"
 msgstr "Rua"
 
-#: ../src/metadata.c:1473
+#: ../src/metadata.c:1629
 msgid "Square"
 msgstr "Praça"
 
-#: ../src/metadata.c:1474
+#: ../src/metadata.c:1630
 msgid "Architecture"
 msgstr "Arquitetura"
 
-#: ../src/metadata.c:1475
+#: ../src/metadata.c:1631
 msgid "Buildings"
 msgstr "Edificações"
 
-#: ../src/metadata.c:1476
+#: ../src/metadata.c:1632
 msgid "House"
 msgstr "Casa"
 
-#: ../src/metadata.c:1477
+#: ../src/metadata.c:1633
 msgid "Cathedral"
 msgstr "Catedral"
 
-#: ../src/metadata.c:1478
+#: ../src/metadata.c:1634
 msgid "Palace"
 msgstr "Palácio"
 
-#: ../src/metadata.c:1479
+#: ../src/metadata.c:1635
 msgid "Castle"
 msgstr "Castelo"
 
-#: ../src/metadata.c:1480
+#: ../src/metadata.c:1636
 msgid "Bridge"
 msgstr "Ponte"
 
-#: ../src/metadata.c:1481
+#: ../src/metadata.c:1637
 msgid "Interior"
 msgstr "Interior"
 
-#: ../src/metadata.c:1484
+#: ../src/metadata.c:1640
 msgid "Places"
 msgstr "Lugares"
 
-#: ../src/metadata.c:1485
+#: ../src/metadata.c:1641
 msgid "Conditions"
 msgstr "Condições"
 
-#: ../src/metadata.c:1486
+#: ../src/metadata.c:1642
 msgid "Night"
 msgstr "Noite"
 
-#: ../src/metadata.c:1487
+#: ../src/metadata.c:1643
 msgid "Lights"
 msgstr "Luzes"
 
-#: ../src/metadata.c:1488
+#: ../src/metadata.c:1644
 msgid "Reflections"
 msgstr "Reflexos"
 
-#: ../src/metadata.c:1489
+#: ../src/metadata.c:1645
 msgid "Sun"
 msgstr "Sol"
 
-#: ../src/metadata.c:1490
+#: ../src/metadata.c:1646
 msgid "Weather"
 msgstr "Clima"
 
-#: ../src/metadata.c:1491
+#: ../src/metadata.c:1647
 msgid "Fog"
 msgstr "Neblina"
 
-#: ../src/metadata.c:1492
+#: ../src/metadata.c:1648
 msgid "Rain"
 msgstr "Chuva"
 
-#: ../src/metadata.c:1493
+#: ../src/metadata.c:1649
 msgid "Clouds"
 msgstr "Nuvens"
 
-#: ../src/metadata.c:1494
+#: ../src/metadata.c:1650
 msgid "Snow"
 msgstr "Neve"
 
-#: ../src/metadata.c:1495
+#: ../src/metadata.c:1651
 msgid "Sunny weather"
 msgstr "Tempo ensolarado"
 
-#: ../src/metadata.c:1496
+#: ../src/metadata.c:1652
 msgid "Photo"
 msgstr "Foto"
 
-#: ../src/metadata.c:1497
+#: ../src/metadata.c:1653
 msgid "Edited"
 msgstr "Editado"
 
-#: ../src/metadata.c:1498
+#: ../src/metadata.c:1654
 msgid "Detail"
 msgstr "Detalhe"
 
-#: ../src/metadata.c:1499
+#: ../src/metadata.c:1655
 msgid "Macro"
 msgstr "Macro"
 
-#: ../src/metadata.c:1500 ../src/print.c:374
+#: ../src/metadata.c:1656 ../src/print.c:374
 msgid "Portrait"
 msgstr "Retrato"
 
-#: ../src/metadata.c:1501
+#: ../src/metadata.c:1657
 msgid "Black and White"
 msgstr "Branco e preto"
 
-#: ../src/metadata.c:1502
+#: ../src/metadata.c:1658
 msgid "Perspective"
 msgstr "Perspectiva"
 
-#: ../src/options.c:138 ../src/ui_bookmark.c:550
+#: ../src/options.c:145 ../src/ui_bookmark.c:556
 msgid "Desktop"
 msgstr "Área de trabalho"
 
-#: ../src/pan-view.c:472
+#: ../src/pan-view.c:423
 #, c-format
 msgid "%d images, %s"
 msgstr "%d imagens, %s"
 
-#: ../src/pan-view.c:482
+#: ../src/pan-view.c:433
 #, c-format
 msgid "The pan view does not support the folder \"%s\"."
 msgstr "A visualização panorâmica não suporta o diretório \"%s\"."
 
-#: ../src/pan-view.c:483
+#: ../src/pan-view.c:434
 msgid "Folder not supported"
 msgstr "Diretório não suportado"
 
-#: ../src/pan-view.c:1084 ../src/pan-view.c:1100
+#: ../src/pan-view.c:986 ../src/pan-view.c:1002
 msgid "Reading image data..."
 msgstr "Lendo os dados da imagem..."
 
-#: ../src/pan-view.c:1159
+#: ../src/pan-view.c:1061
 msgid "Sorting images..."
 msgstr "Ordenando as imagens..."
 
-#: ../src/pan-view.c:1546 ../src/print.c:2601
+#: ../src/pan-view.c:1365 ../src/print.c:2599
 msgid "Filename:"
 msgstr "Nome do arquivo:"
 
-#: ../src/pan-view.c:1548 ../src/pan-view.c:2384 ../src/preferences.c:1353
+#: ../src/pan-view.c:1367 ../src/pan-view.c:2183 ../src/preferences.c:1378
 msgid "Location:"
 msgstr "Localização:"
 
-#: ../src/pan-view.c:1550 ../src/pan-view.c:1916
+#: ../src/pan-view.c:1369 ../src/pan-view.c:1735
 msgid "Date:"
 msgstr "Data:"
 
-#: ../src/pan-view.c:1552 ../src/preferences.c:1174 ../src/print.c:3214
-#: ../src/print.c:3425
+#: ../src/pan-view.c:1371 ../src/preferences.c:1204 ../src/print.c:3212
+#: ../src/print.c:3417
 msgid "Size:"
 msgstr "Tamanho:"
 
-#: ../src/pan-view.c:1654
+#: ../src/pan-view.c:1473
 msgid "path found"
 msgstr "caminho encontrado"
 
-#: ../src/pan-view.c:1654
+#: ../src/pan-view.c:1473
 msgid "filename found"
 msgstr "nome de arquivo encontrado"
 
-#: ../src/pan-view.c:1702
+#: ../src/pan-view.c:1521
 msgid "partial match"
 msgstr "combinação parcial"
 
-#: ../src/pan-view.c:1913 ../src/pan-view.c:1946
+#: ../src/pan-view.c:1732 ../src/pan-view.c:1765
 msgid "no match"
 msgstr "sem combinação"
 
-#: ../src/pan-view.c:2272 ../src/search.c:2219
+#: ../src/pan-view.c:2071 ../src/search.c:2169
 msgid "Folder not found"
 msgstr "Diretório não encontrado"
 
-#: ../src/pan-view.c:2273
+#: ../src/pan-view.c:2072
 msgid "The entered path is not a folder"
 msgstr "O caminho especificado não é um diretório"
 
-#: ../src/pan-view.c:2368
+#: ../src/pan-view.c:2167
 msgid "Pan View"
 msgstr "Visualização panorâmica"
 
-#: ../src/pan-view.c:2393
+#: ../src/pan-view.c:2192
 msgid "Timeline"
 msgstr "Linha do tempo"
 
-#: ../src/pan-view.c:2394
+#: ../src/pan-view.c:2193
 msgid "Calendar"
 msgstr "Calendário"
 
-#: ../src/pan-view.c:2396
+#: ../src/pan-view.c:2195
 msgid "Folders (flower)"
 msgstr "Diretórios (flor)"
 
-#: ../src/pan-view.c:2397
+#: ../src/pan-view.c:2196
 msgid "Grid"
 msgstr "Grade"
 
-#: ../src/pan-view.c:2406
+#: ../src/pan-view.c:2205
 msgid "Dots"
 msgstr "Pontos"
 
-#: ../src/pan-view.c:2407
+#: ../src/pan-view.c:2206
 msgid "No Images"
 msgstr "Sem imagens"
 
-#: ../src/pan-view.c:2408
+#: ../src/pan-view.c:2207
 msgid "Small Thumbnails"
 msgstr "Miniaturas pequenas"
 
-#: ../src/pan-view.c:2409
+#: ../src/pan-view.c:2208
 msgid "Normal Thumbnails"
 msgstr "Miniaturas normais"
 
-#: ../src/pan-view.c:2410
+#: ../src/pan-view.c:2209
 msgid "Large Thumbnails"
 msgstr "Miniaturas grandes"
 
-#: ../src/pan-view.c:2411 ../src/pan-view.c:2871
+#: ../src/pan-view.c:2210 ../src/pan-view.c:2665
 msgid "1:10 (10%)"
 msgstr "1:10 (10%)"
 
-#: ../src/pan-view.c:2412 ../src/pan-view.c:2867
+#: ../src/pan-view.c:2211 ../src/pan-view.c:2661
 msgid "1:4 (25%)"
 msgstr "1:4 (25%)"
 
-#: ../src/pan-view.c:2413 ../src/pan-view.c:2863
+#: ../src/pan-view.c:2212 ../src/pan-view.c:2657
 msgid "1:3 (33%)"
 msgstr "1:3 (33%)"
 
-#: ../src/pan-view.c:2414 ../src/pan-view.c:2859
+#: ../src/pan-view.c:2213 ../src/pan-view.c:2653
 msgid "1:2 (50%)"
 msgstr "1:2 (50%)"
 
-#: ../src/pan-view.c:2415
+#: ../src/pan-view.c:2214
 msgid "1:1 (100%)"
 msgstr "1:1 (100%)"
 
-#: ../src/pan-view.c:2463
+#: ../src/pan-view.c:2262
 msgid "Find:"
 msgstr "Localizar:"
 
-#: ../src/pan-view.c:2506
-msgid "Use Exif date"
-msgstr "Usar data Exif"
-
-#: ../src/pan-view.c:2519
+#: ../src/pan-view.c:2313
 msgid "Find"
 msgstr "Localizar"
 
-#: ../src/pan-view.c:2586
+#: ../src/pan-view.c:2380
 msgid "Pan View Performance"
 msgstr "Desempenho da visualização panorâmica"
 
-#: ../src/pan-view.c:2593
+#: ../src/pan-view.c:2387
 msgid "Pan view performance may be poor."
 msgstr "O desempenho da visualização panorâmica pode ser fraco."
 
-#: ../src/pan-view.c:2594
+#: ../src/pan-view.c:2388
 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 "
@@ -3635,35 +3685,35 @@ msgstr ""
 "seguintes opções podem ser habilitadas. Note que ambas as opções devem ser "
 "habilitadas para que seja notada uma melhora no desempenho."
 
-#: ../src/pan-view.c:2602 ../src/preferences.c:1177
+#: ../src/pan-view.c:2396 ../src/preferences.c:1207
 msgid "Cache thumbnails"
 msgstr "Pôr as miniaturas em cache"
 
-#: ../src/pan-view.c:2604
+#: ../src/pan-view.c:2398
 msgid "Use shared thumbnail cache"
 msgstr "Usar cache de miniaturas compartilhado"
 
-#: ../src/pan-view.c:2610
+#: ../src/pan-view.c:2404
 msgid "Do not show this dialog again"
 msgstr "Não exibir esta mensagem novamente"
 
-#: ../src/pan-view.c:2839
+#: ../src/pan-view.c:2633
 msgid "Sort by E_xif date"
 msgstr "Ordenar pela data E_xif"
 
-#: ../src/pan-view.c:2845
+#: ../src/pan-view.c:2639
 msgid "_Show Exif information"
 msgstr "_Exibir a informação do Exif"
 
-#: ../src/pan-view.c:2847
+#: ../src/pan-view.c:2641
 msgid "Show im_age"
 msgstr "Exibir a im_agem"
 
-#: ../src/pan-view.c:2851
+#: ../src/pan-view.c:2645
 msgid "_None"
 msgstr "_Nenhum"
 
-#: ../src/pan-view.c:2855
+#: ../src/pan-view.c:2649
 msgid "_Full size"
 msgstr "_Tamanho natural"
 
@@ -3675,43 +3725,70 @@ msgstr "Desconhecido"
 msgid "RAW Image"
 msgstr "Imagem RAW"
 
-#: ../src/preferences.c:417
+#: ../src/preferences.c:430
 msgid "Nearest (worst, but fastest)"
 msgstr "O mais próximo (o pior mas o mais rápido)"
 
-#: ../src/preferences.c:419
+#: ../src/preferences.c:432
 msgid "Tiles"
 msgstr "Azulejos"
 
-#: ../src/preferences.c:421
+#: ../src/preferences.c:434
 msgid "Bilinear"
 msgstr "Bilinear"
 
-#: ../src/preferences.c:423
+#: ../src/preferences.c:436
 msgid "Hyper (best, but slowest)"
 msgstr "Hyper (o melhor mas o mais lento)"
 
-#: ../src/preferences.c:451
-msgid "None"
-msgstr "Nenhum"
+#: ../src/preferences.c:501 ../src/print.c:380
+msgid "Custom"
+msgstr "Personalizado"
 
-#: ../src/preferences.c:452
-msgid "Normal"
-msgstr "Normal"
+#: ../src/preferences.c:566
+#, fuzzy
+msgid "Single image"
+msgstr "próxima imagem"
 
-#: ../src/preferences.c:453
-msgid "Best"
-msgstr "O melhor"
+#: ../src/preferences.c:568
+msgid "Anaglyph Red-Cyan"
+msgstr ""
 
-#: ../src/preferences.c:515 ../src/print.c:380
-msgid "Custom"
-msgstr "Personalizado"
+#: ../src/preferences.c:570
+msgid "Anaglyph Gray Red-Cyan"
+msgstr ""
+
+#: ../src/preferences.c:572
+msgid "Anaglyph Dubois"
+msgstr ""
+
+#: ../src/preferences.c:575
+msgid "Side by Side"
+msgstr ""
+
+#: ../src/preferences.c:576
+msgid "Side by Side Half size"
+msgstr ""
+
+#: ../src/preferences.c:583
+#, fuzzy
+msgid "Top - Bottom"
+msgstr "Inferior:"
+
+#: ../src/preferences.c:584
+msgid "Top - Bottom Half size"
+msgstr ""
+
+#: ../src/preferences.c:593 ../src/preferences.c:2031
+#, fuzzy
+msgid "Fixed position"
+msgstr "Posição do GPS"
 
-#: ../src/preferences.c:757 ../src/preferences.c:760
+#: ../src/preferences.c:890 ../src/preferences.c:893
 msgid "Reset filters"
 msgstr "Redefinir os filtros"
 
-#: ../src/preferences.c:761
+#: ../src/preferences.c:894
 msgid ""
 "This will reset the file filters to the defaults.\n"
 "Continue?"
@@ -3719,19 +3796,19 @@ msgstr ""
 "Isto redefinirá os filtros de arquivo para os valores padrão.\n"
 "Continuar?"
 
-#: ../src/preferences.c:788 ../src/preferences.c:791
+#: ../src/preferences.c:921 ../src/preferences.c:924
 msgid "Clear trash"
 msgstr "Limpar a lixeira"
 
-#: ../src/preferences.c:792
+#: ../src/preferences.c:925
 msgid "This will remove the trash contents."
 msgstr "Isto removerá o conteúdo da lixeira"
 
-#: ../src/preferences.c:836 ../src/preferences.c:839
+#: ../src/preferences.c:969 ../src/preferences.c:972
 msgid "Reset image overlay template string"
 msgstr "Redefinir a cadeia do gabarito do overlay da imagem"
 
-#: ../src/preferences.c:840
+#: ../src/preferences.c:973
 msgid ""
 "This will reset the image overlay template string to the default.\n"
 "Continue?"
@@ -3740,20 +3817,20 @@ msgstr ""
 "padrão.\n"
 "Continuar?"
 
-#: ../src/preferences.c:1169
+#: ../src/preferences.c:1199
 msgid "General"
 msgstr "Geral"
 
-#: ../src/preferences.c:1175 ../src/preferences.c:1248
+#: ../src/preferences.c:1205 ../src/preferences.c:1265
 msgid "Quality:"
 msgstr "Qualidade:"
 
-#: ../src/preferences.c:1183
+#: ../src/preferences.c:1213
 msgid "Use standard thumbnail cache, shared with other applications"
 msgstr ""
 "Usar o cache de miniaturas standard, compartilhado com outras aplicações"
 
-#: ../src/preferences.c:1189
+#: ../src/preferences.c:1219
 msgid ""
 "Store thumbnails in '.thumbnails' folder, local to image folder (non-"
 "standard)"
@@ -3761,180 +3838,178 @@ msgstr ""
 "Guardar as miniaturas no diretório '.thumbnails', local ao diretório de "
 "imagens (não standard)"
 
-#: ../src/preferences.c:1193
-msgid "Use xvpics thumbnails when found (read only)"
-msgstr "Usar miniaturas xvpics quando encontradas (somente leitura)"
-
-#: ../src/preferences.c:1197
+#: ../src/preferences.c:1222
 msgid "Use EXIF thumbnails when available (EXIF thumbnails may be outdated)"
 msgstr ""
 "Usar miniaturas Exif se disponíveis (as miniaturas Exif podem estar "
 "desatualizadas)"
 
-#: ../src/preferences.c:1200
+#: ../src/preferences.c:1225
 msgid "Slide show"
 msgstr "Apresentação de slides"
 
-#: ../src/preferences.c:1203
+#: ../src/preferences.c:1228
 msgid "Delay between image change:"
 msgstr "Atraso entre a mudança de imagens:"
 
-#: ../src/preferences.c:1203
+#: ../src/preferences.c:1228
 msgid "seconds"
 msgstr "segundos"
 
-#: ../src/preferences.c:1209
+#: ../src/preferences.c:1234
 msgid "Random"
 msgstr "Aleatório"
 
-#: ../src/preferences.c:1210
+#: ../src/preferences.c:1235
 msgid "Repeat"
 msgstr "Repetir"
 
-#: ../src/preferences.c:1212
+#: ../src/preferences.c:1237
 msgid "Image loading and caching"
 msgstr "Carregamento e cacheamento das imagens"
 
-#: ../src/preferences.c:1215
-msgid "Offscreen cache size (Mb per image):"
-msgstr "Tamanho do cache não visível (Mb por imagem)"
-
-#: ../src/preferences.c:1219
+#: ../src/preferences.c:1239
 msgid "Decoded image cache size (Mb):"
 msgstr "Tamanho do cache da imagem decodificada (Mb)"
 
-#: ../src/preferences.c:1221
+#: ../src/preferences.c:1241
 msgid "Preload next image"
 msgstr "Precarregar próxima imagem"
 
-#: ../src/preferences.c:1224
+#: ../src/preferences.c:1244
 msgid "Refresh on file change"
 msgstr "Atualizar na mudança de arquivo"
 
-#: ../src/preferences.c:1242
+#: ../src/preferences.c:1262
 msgid "Zoom"
 msgstr "Zoom"
 
-#: ../src/preferences.c:1245
-msgid "Dithering method:"
-msgstr "Método de dithering:"
+#: ../src/preferences.c:1268
+msgid "Use GPU acceleration via Clutter library"
+msgstr ""
 
-#: ../src/preferences.c:1250
+#: ../src/preferences.c:1272
 msgid "Two pass rendering (apply HQ zoom and color correction in second pass)"
 msgstr ""
 "Renderização em duas passagens (aplicar zoom HQ e correção de cor na segunda "
 "passagem)"
 
-#: ../src/preferences.c:1253
+#: ../src/preferences.c:1275
 msgid "Allow enlargement of image for zoom to fit"
 msgstr "Permitir o alargamento da imagem para o zoom ajustado"
 
-#: ../src/preferences.c:1257
+#: ../src/preferences.c:1279
 msgid "Limit image size when autofitting (%):"
 msgstr "Limitar o tamanho da imagem quando autoajustar (%):"
 
-#: ../src/preferences.c:1265
+#: ../src/preferences.c:1287
 msgid "Zoom increment:"
 msgstr "Incremento do zoom:"
 
-#: ../src/preferences.c:1270
+#: ../src/preferences.c:1292
 msgid "When new image is selected:"
 msgstr "Quando uma nova imagem é selecionada:"
 
-#: ../src/preferences.c:1274
+#: ../src/preferences.c:1296
 msgid "Zoom to original size"
 msgstr "Zoom para o tamanho original"
 
-#: ../src/preferences.c:1277
+#: ../src/preferences.c:1299
 msgid "Fit image to window"
 msgstr "Ajustar a imagem à janela"
 
-#: ../src/preferences.c:1280
+#: ../src/preferences.c:1302
 msgid "Leave Zoom at previous setting"
 msgstr "Deixar o zoom na configuração anterior"
 
-#: ../src/preferences.c:1286
+#: ../src/preferences.c:1308
 msgid "Scroll to top left corner"
 msgstr "Deslocar para o canto superior esquerdo"
 
-#: ../src/preferences.c:1289
+#: ../src/preferences.c:1311
 msgid "Scroll to image center"
 msgstr "Deslocar para o centro da imagem"
 
-#: ../src/preferences.c:1292
+#: ../src/preferences.c:1314
 msgid "Keep the region from previous image"
 msgstr "Manter a região da imagem anterior"
 
-#: ../src/preferences.c:1297
+#: ../src/preferences.c:1319
 msgid "Appearance"
 msgstr "Aparência"
 
-#: ../src/preferences.c:1299
+#: ../src/preferences.c:1321
 msgid "Use custom border color in window mode"
 msgstr "Usar cor da borda personalizada no modo de janela"
 
-#: ../src/preferences.c:1302
+#: ../src/preferences.c:1324
 msgid "Use custom border color in fullscreen mode"
 msgstr "Usar cor da borda personalizada no modo de tela cheia"
 
-#: ../src/preferences.c:1305
+#: ../src/preferences.c:1327
 msgid "Border color"
 msgstr "Cor da borda"
 
-#: ../src/preferences.c:1308
+#: ../src/preferences.c:1330
 msgid "Convenience"
 msgstr "Conveniência"
 
-#: ../src/preferences.c:1310
+#: ../src/preferences.c:1332
 msgid "Auto rotate image using Exif information"
 msgstr "Autorotacionar a imagem usando a informação Exif"
 
-#: ../src/preferences.c:1327
+#: ../src/preferences.c:1335
+#, fuzzy
+msgid "Auto rotate proofs using Exif information"
+msgstr "Autorotacionar a imagem usando a informação Exif"
+
+#: ../src/preferences.c:1352
 msgid "Windows"
 msgstr "Janelas"
 
-#: ../src/preferences.c:1329
+#: ../src/preferences.c:1354
 msgid "State"
 msgstr "Estado"
 
-#: ../src/preferences.c:1331
+#: ../src/preferences.c:1356
 msgid "Remember window positions"
 msgstr "Lembrar as posições das janelas"
 
-#: ../src/preferences.c:1333
+#: ../src/preferences.c:1358
 msgid "Remember tool state (float/hidden)"
 msgstr "Lembrar o estado das ferramentas (flutuantes/ocultas)"
 
-#: ../src/preferences.c:1338
+#: ../src/preferences.c:1363
 msgid "Fit window to image when tools are hidden/floating"
 msgstr ""
 "Ajustar a janela à imagem quando as ferramentas estiverem flutuando/ocultas"
 
-#: ../src/preferences.c:1342
+#: ../src/preferences.c:1367
 msgid "Limit size when auto-sizing window (%):"
 msgstr "Limitar o tamanho quando autodimensionar a janela (%):"
 
-#: ../src/preferences.c:1357
+#: ../src/preferences.c:1382
 msgid "Smooth image flip"
 msgstr "Troca de imagem suave "
 
-#: ../src/preferences.c:1359
+#: ../src/preferences.c:1384
 msgid "Disable screen saver"
 msgstr "Desabilitar o protetor de tela"
 
-#: ../src/preferences.c:1363
+#: ../src/preferences.c:1388
 msgid "Overlay Screen Display"
 msgstr "Exibição do overlay da tela"
 
-#: ../src/preferences.c:1365
+#: ../src/preferences.c:1390
 msgid "Image overlay template"
 msgstr "Gabarito do overlay da imagem"
 
-#: ../src/preferences.c:1379
+#: ../src/preferences.c:1403
+#, fuzzy
 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"
+"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"
 "To access exif data use the exif name, e. g. <i>%formatted.Camera%</i> is "
@@ -3944,18 +4019,18 @@ msgid ""
 "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 - "
+"<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 to add lines that totally "
+"If a line is empty, it is removed. This allows one to add lines that totally "
 "disappear when no data is available.\n"
 msgstr ""
 "<i>%name%</i> resulta no nome do arquivo da imagem.\n"
 "Também disponíveis: <i>%collection%</i>, <i>%number%</i>, <i>%total%</i>, <i>"
 "%date%</i>,\n"
-"<i>%size%</i> (tamanho do arquivo), <i>%width%</i>, <i>%height%</i>, <i>%res%"
-"</i> (resolução)\n"
+"<i>%size%</i> (tamanho do arquivo), <i>%width%</i>, <i>%height%</i>, <i>%res"
+"%</i> (resolução)\n"
 "Para acessar dados Exif use o nome Exif, p.ex. <i>%formatted.Camera%</i> é o "
 "nome da câmera formatada,\n"
 "<i>%Exif.Photo.DateTimeOriginal%</i> a data da captura original.\n"
@@ -3963,69 +4038,65 @@ msgstr ""
 "caracteres e adicionará 3 pontos no final para denotar o truncamento.\n"
 "Se duas ou mais variáveis são conectadas pelo sinal | , imprime-se as "
 "variáveis disponíveis com um separador.\n"
-"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>%"
-"formatted.FocalLength%</i> poderia exibir \"1/20s - 400 - 80 mm\" ou \"1/200 "
-"- 80 mm\",\n"
+"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>"
+"%formatted.FocalLength%</i> poderia exibir \"1/20s - 400 - 80 mm\" ou "
+"\"1/200 - 80 mm\",\n"
 "se não houver informação ISO nos dados Exif.\n"
 "Se uma linha está vazia ela é removida. Isso possibilita que sejam "
 "adicionadas linhas que desaparecem totalmente se não houver dados "
 "disponíveis.\n"
 
-#: ../src/preferences.c:1396 ../src/preferences.c:1569
-#: ../src/preferences.c:1941
+#: ../src/preferences.c:1419 ../src/preferences.c:1591
+#: ../src/preferences.c:1960
 msgid "Defaults"
 msgstr "Padrões"
 
-#: ../src/preferences.c:1450
+#: ../src/preferences.c:1473
 msgid "Show hidden files or folders"
 msgstr "Exibir arquivos ou diretórios ocultos"
 
-#: ../src/preferences.c:1453
-msgid "Show dot directory"
-msgstr "Exibir diretório com ponto"
-
-#: ../src/preferences.c:1456
+#: ../src/preferences.c:1475
 msgid "Case sensitive sort"
 msgstr "Ordenação sensível ao caso"
 
-#: ../src/preferences.c:1459
+#: ../src/preferences.c:1478
 msgid "Disable File Filtering"
 msgstr "Desativar a filtragem de arquivos"
 
-#: ../src/preferences.c:1463
+#: ../src/preferences.c:1482
 msgid "Grouping sidecar extensions"
 msgstr "Ao agrupar extensões sidecar"
 
-#: ../src/preferences.c:1470
+#: ../src/preferences.c:1489
 msgid "File types"
 msgstr "Tipos de arquivo"
 
-#: ../src/preferences.c:1492
+#: ../src/preferences.c:1511
 msgid "Filter"
 msgstr "Filtro"
 
-#: ../src/preferences.c:1524
+#: ../src/preferences.c:1546
 msgid "Class"
 msgstr "Classe"
 
-#: ../src/preferences.c:1541
+#: ../src/preferences.c:1563
 msgid "Writable"
 msgstr "Escrevível"
 
-#: ../src/preferences.c:1552
+#: ../src/preferences.c:1574
 msgid "Sidecar is allowed"
 msgstr "Sidecar é permitido"
 
-#: ../src/preferences.c:1598
+#: ../src/preferences.c:1620
 msgid "Metadata writing process"
 msgstr "Processo de escrita dos metadados"
 
-#: ../src/preferences.c:1600
+#: ../src/preferences.c:1622
 msgid "Warning: Geeqie is built without Exiv2. Some options are disabled."
 msgstr ""
 "Atenção: O Geeqie é construído sem Exiv2. Algumas opções estão desabilitadas."
 
-#: ../src/preferences.c:1602
+#: ../src/preferences.c:1624
 msgid ""
 "Metadata are written in the following order. The process ends after first "
 "success."
@@ -4033,7 +4104,7 @@ msgstr ""
 "Os metadados são escritos na seguinte ordem. O processo finaliza após o "
 "primeiro sucesso."
 
-#: ../src/preferences.c:1605
+#: ../src/preferences.c:1627
 msgid ""
 "1) Save metadata in image files, resp. sidecar files, according to the XMP "
 "standard"
@@ -4041,23 +4112,23 @@ msgstr ""
 "1) Salvar metadados nos arquivos de imagem, respeitando arquivos sidecar, "
 "conforme o standard XMP"
 
-#: ../src/preferences.c:1611
+#: ../src/preferences.c:1633
 msgid ""
 "2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
 msgstr ""
 "2) Salvar metadados no diretório '.metadata', local ao diretório de imagens "
 "(não standard)"
 
-#: ../src/preferences.c:1614
+#: ../src/preferences.c:1636
 #, c-format
 msgid "3) Save metadata in Geeqie private directory '%s'"
 msgstr "3) Salvar metadados no diretório privado do Geeqie '%s'"
 
-#: ../src/preferences.c:1619
+#: ../src/preferences.c:1642
 msgid "Step 1: Write to image files"
 msgstr "Passo 1: escrever nos arquivos de imagem"
 
-#: ../src/preferences.c:1627
+#: ../src/preferences.c:1650
 msgid ""
 "Store metadata also in legacy IPTC tags (converted according to IPTC4XMP "
 "standard)"
@@ -4065,19 +4136,19 @@ msgstr ""
 "Guardar metadados também em etiquetas legadas IPTC (convertidas conforme o "
 "standard IPTC4XMP)"
 
-#: ../src/preferences.c:1630
+#: ../src/preferences.c:1653
 msgid "Warn if the image files are unwritable"
 msgstr "Alertar se os arquivos de imagem não forem escrevíveis"
 
-#: ../src/preferences.c:1633
+#: ../src/preferences.c:1656
 msgid "Ask before writing to image files"
 msgstr "Perguntar antes de escrever sobre arquivos de imagem"
 
-#: ../src/preferences.c:1636
+#: ../src/preferences.c:1659
 msgid "Step 2 and 3: write to Geeqie private files"
 msgstr "Passos 2 e 3: escrever nos arquivos privados do Geeqie"
 
-#: ../src/preferences.c:1641
+#: ../src/preferences.c:1664
 msgid ""
 "Use GQview legacy metadata format (supports only keywords and comments) "
 "instead of XMP"
@@ -4085,11 +4156,11 @@ msgstr ""
 "Usar o formato de metadados legado do GQview (suporta apenas palavras-chave "
 "e comentários) em vez do XMP"
 
-#: ../src/preferences.c:1645 ../src/preferences.c:1833
+#: ../src/preferences.c:1668 ../src/preferences.c:1853
 msgid "Miscellaneous"
 msgstr "Miscelânea"
 
-#: ../src/preferences.c:1646
+#: ../src/preferences.c:1669
 msgid ""
 "Write the same description tags (keywords, comment, etc.) to all grouped "
 "sidecars"
@@ -4097,188 +4168,249 @@ msgstr ""
 "Escrever as mesmas etiquetas descritivas (palavras-chave, comentário etc.) "
 "em todos os sidecars agrupados"
 
-#: ../src/preferences.c:1649
+#: ../src/preferences.c:1672
 msgid "Allow keywords to differ only in case"
 msgstr "Permitir que as palavras-chave difiram apenas no caso"
 
-#: ../src/preferences.c:1652
+#: ../src/preferences.c:1675
 msgid "Write altered image orientation to the metadata"
 msgstr "Escrever a orientação alterada da imagem nos metadados"
 
-#: ../src/preferences.c:1658
+#: ../src/preferences.c:1681
 msgid "Auto-save options"
 msgstr "Opções de salvamento automático"
 
-#: ../src/preferences.c:1660
+#: ../src/preferences.c:1683
 msgid "Write metadata after timeout"
 msgstr "Escrever os metadados após o timeout"
 
-#: ../src/preferences.c:1666
+#: ../src/preferences.c:1689
 msgid "Timeout (seconds):"
 msgstr "Timeout (segundos):"
 
-#: ../src/preferences.c:1669
+#: ../src/preferences.c:1692
 msgid "Write metadata on image change"
 msgstr "Escrever os metadados na mudança de imagens"
 
-#: ../src/preferences.c:1672
+#: ../src/preferences.c:1695
 msgid "Write metadata on directory change"
 msgstr "Escrever os metadados na mudança de diretórios"
 
-#: ../src/preferences.c:1686
+#: ../src/preferences.c:1709
 msgid "Color management"
 msgstr "Gestão de cor"
 
-#: ../src/preferences.c:1688
+#: ../src/preferences.c:1711
 msgid "Input profiles"
 msgstr "Fornecer perfis"
 
-#: ../src/preferences.c:1696
+#: ../src/preferences.c:1719
 msgid "Type"
 msgstr "Tipo"
 
-#: ../src/preferences.c:1699
+#: ../src/preferences.c:1722
 msgid "Menu name"
 msgstr "Nome no menu"
 
-#: ../src/preferences.c:1702
+#: ../src/preferences.c:1725
 msgid "File"
 msgstr "Arquivo"
 
-#: ../src/preferences.c:1710
+#: ../src/preferences.c:1733
 #, c-format
 msgid "Input %d:"
 msgstr "Entrada %d:"
 
-#: ../src/preferences.c:1727 ../src/preferences.c:1747
+#: ../src/preferences.c:1749 ../src/preferences.c:1769
 msgid "Select color profile"
 msgstr "Selecionar perfil de cor"
 
-#: ../src/preferences.c:1735
+#: ../src/preferences.c:1757
 msgid "Screen profile"
 msgstr "Perfil da tela"
 
-#: ../src/preferences.c:1739
+#: ../src/preferences.c:1761
 msgid "Use system screen profile if available"
 msgstr "Usar o perfil de tela do sistema se disponível"
 
-#: ../src/preferences.c:1744
+#: ../src/preferences.c:1766
 msgid "Screen:"
 msgstr "Tela:"
 
-#: ../src/preferences.c:1766 ../src/preferences.c:1809
+#: ../src/preferences.c:1788 ../src/preferences.c:1829
 msgid "Behavior"
 msgstr "Comportamento"
 
-#: ../src/preferences.c:1768 ../src/utilops.c:1985
+#: ../src/preferences.c:1790 ../src/utilops.c:1983
 msgid "Delete"
 msgstr "Apagar"
 
-#: ../src/preferences.c:1770
+#: ../src/preferences.c:1792
 msgid "Confirm file delete"
 msgstr "Confirmar o apagamento do arquivo"
 
-#: ../src/preferences.c:1772
+#: ../src/preferences.c:1794
 msgid "Enable Delete key"
 msgstr "Habilitar a tecla Delete"
 
-#: ../src/preferences.c:1775
+#: ../src/preferences.c:1797
 msgid "Safe delete"
 msgstr "Apagamento seguro"
 
-#: ../src/preferences.c:1793
+#: ../src/preferences.c:1815
 msgid "Maximum size:"
 msgstr "Tamanho máximo:"
 
-#: ../src/preferences.c:1793
+#: ../src/preferences.c:1815
 msgid "MB"
 msgstr "MB"
 
-#: ../src/preferences.c:1796
+#: ../src/preferences.c:1817
 msgid "Set to 0 for unlimited size"
 msgstr "Definir em 0 para tamanho ilimitado"
 
-#: ../src/preferences.c:1798
+#: ../src/preferences.c:1818
 msgid "View"
 msgstr "Visualizar"
 
-#: ../src/preferences.c:1811
+#: ../src/preferences.c:1831
 msgid "Rectangular selection in icon view"
 msgstr "Seleção retangular na visualização em ícones"
 
-#: ../src/preferences.c:1814
+#: ../src/preferences.c:1834
 msgid "Descend folders in tree view"
 msgstr "Descer os diretórios na visualização em árvore"
 
-#: ../src/preferences.c:1817
+#: ../src/preferences.c:1837
 msgid "In place renaming"
 msgstr "Renomeação no lugar"
 
-#: ../src/preferences.c:1820
+#: ../src/preferences.c:1840
 msgid "Open recent list maximum size"
 msgstr "Tamanho máximo da lista 'Abrir recentes'"
 
-#: ../src/preferences.c:1823
+#: ../src/preferences.c:1843
 msgid "Drag'n drop icon size"
 msgstr "Tamanho do ícone no arrastar e soltar"
 
-#: ../src/preferences.c:1826
+#: ../src/preferences.c:1846
 msgid "Navigation"
 msgstr "Navegação"
 
-#: ../src/preferences.c:1828
+#: ../src/preferences.c:1848
 msgid "Progressive keyboard scrolling"
 msgstr "Rolagem pelo teclado progressiva"
 
-#: ../src/preferences.c:1830
+#: ../src/preferences.c:1850
 msgid "Mouse wheel scrolls image"
 msgstr "Roda do mouse rola a imagem"
 
-#: ../src/preferences.c:1835
+#: ../src/preferences.c:1855
 msgid "Custom similarity threshold:"
 msgstr "Limiar de similaridade personalizado:"
 
-#: ../src/preferences.c:1840
+#: ../src/preferences.c:1860
 msgid "Debugging"
 msgstr "Depuração"
 
-#: ../src/preferences.c:1842
+#: ../src/preferences.c:1862
 msgid "Debug level:"
 msgstr "Nível de depuração:"
 
-#: ../src/preferences.c:1861
+#: ../src/preferences.c:1880
 msgid "Keyboard"
 msgstr "Teclado"
 
-#: ../src/preferences.c:1863
+#: ../src/preferences.c:1882
 msgid "Accelerators"
 msgstr "Aceleradores"
 
-#: ../src/preferences.c:1882
+#: ../src/preferences.c:1901
 msgid "Action"
 msgstr "Ação"
 
-#: ../src/preferences.c:1904
+#: ../src/preferences.c:1923
 msgid "KEY"
 msgstr "Tecla"
 
-#: ../src/preferences.c:1915
+#: ../src/preferences.c:1934
 msgid "Tooltip"
 msgstr "Dica"
 
-#: ../src/preferences.c:1953
+#: ../src/preferences.c:1965
 msgid "Reset selected"
-msgstr "Redefinir os selecionados"
+msgstr "Restaurar os selecionados"
+
+#: ../src/preferences.c:1981
+msgid "Stereo"
+msgstr ""
+
+#: ../src/preferences.c:1983 ../src/preferences.c:1986
+msgid "Windowed stereo mode"
+msgstr ""
+
+#: ../src/preferences.c:1990 ../src/preferences.c:2015
+#, fuzzy
+msgid "Mirror left image"
+msgstr "primeira imagem"
+
+#: ../src/preferences.c:1993 ../src/preferences.c:2018
+#, fuzzy
+msgid "Flip left image"
+msgstr "próxima imagem"
+
+#: ../src/preferences.c:1996 ../src/preferences.c:2021
+#, fuzzy
+msgid "Mirror right image"
+msgstr "primeira imagem"
+
+#: ../src/preferences.c:1999 ../src/preferences.c:2024
+#, fuzzy
+msgid "Flip right image"
+msgstr "primeira imagem"
+
+#: ../src/preferences.c:2001 ../src/preferences.c:2026
+msgid "Swap left and right images"
+msgstr ""
+
+#: ../src/preferences.c:2003 ../src/preferences.c:2028
+msgid "Disable stereo mode on single image source"
+msgstr ""
+
+#: ../src/preferences.c:2006 ../src/preferences.c:2012
+#, fuzzy
+msgid "Fullscreen stereo mode"
+msgstr "Tela cheia"
+
+#: ../src/preferences.c:2007
+msgid "Use different settings for fullscreen"
+msgstr ""
 
-#: ../src/preferences.c:1959
-msgid "Add Alt"
-msgstr "Adicionar Alt"
+#: ../src/preferences.c:2037
+#, fuzzy
+msgid "Left X"
+msgstr "Esquerda:"
+
+#: ../src/preferences.c:2039
+#, fuzzy
+msgid "Left Y"
+msgstr "Esquerda:"
+
+#: ../src/preferences.c:2041
+#, fuzzy
+msgid "Right X"
+msgstr "Direita:"
 
-#: ../src/preferences.c:1978
+#: ../src/preferences.c:2043
+#, fuzzy
+msgid "Right Y"
+msgstr "Direita:"
+
+#: ../src/preferences.c:2059
 msgid "Preferences"
 msgstr "Preferências"
 
-#: ../src/preferences.c:2125
+#: ../src/preferences.c:2207
 #, c-format
 msgid ""
 "%s %s\n"
@@ -4299,7 +4431,7 @@ msgstr ""
 "\n"
 "Lançado sob a Licença Pública Geral GNU"
 
-#: ../src/preferences.c:2144
+#: ../src/preferences.c:2226
 msgid "Credits..."
 msgstr "Créditos..."
 
@@ -4347,7 +4479,7 @@ msgstr "jpeg, qualidade normal"
 msgid "jpeg, high quality"
 msgstr "jpeg, alta qualidade"
 
-#: ../src/print.c:365 ../src/print.c:3214
+#: ../src/print.c:365 ../src/print.c:3212
 msgid "points"
 msgstr "pontos"
 
@@ -4455,7 +4587,7 @@ msgstr ""
 "Incapaz de abrir o pipe para a escrita.\n"
 "\"%s\""
 
-#: ../src/print.c:1074 ../src/print.c:1466 ../src/ui_pathsel.c:432
+#: ../src/print.c:1074 ../src/print.c:1466 ../src/ui_pathsel.c:423
 #, c-format
 msgid "A file with name %s already exists."
 msgstr "Já existe um arquivo com o nome %s."
@@ -4488,117 +4620,122 @@ msgstr "Ocorreu um erro ao imprimir em %s."
 msgid "Details"
 msgstr "Detalhes"
 
-#: ../src/print.c:2589 ../src/print.c:3349
+#: ../src/print.c:2587 ../src/print.c:3341
 msgid "Print"
 msgstr "Imprimir"
 
-#: ../src/print.c:2593
+#: ../src/print.c:2591
 #, c-format
 msgid "Printing %d pages to %s."
 msgstr "Imprimindo %d páginas em %s."
 
-#: ../src/print.c:2693
+#: ../src/print.c:2691
 msgid "Format:"
 msgstr "Formato:"
 
-#: ../src/print.c:2768
+#: ../src/print.c:2766
 msgid "Units:"
 msgstr "Unidades:"
 
-#: ../src/print.c:2812
+#: ../src/print.c:2810
 msgid "Orientation:"
 msgstr "Orientação:"
 
-#: ../src/print.c:2944
+#: ../src/print.c:2942
 msgid "Destination:"
 msgstr "Destino:"
 
-#: ../src/print.c:2992
+#: ../src/print.c:2990
 msgid "<printer name>"
 msgstr "<nome da impressora>"
 
-#: ../src/print.c:3081
+#: ../src/print.c:3079
 msgid "Unlimited"
 msgstr "Ilimitado"
 
-#: ../src/print.c:3199
+#: ../src/print.c:3197
 msgid "Show"
 msgstr "Exibir"
 
-#: ../src/print.c:3212
+#: ../src/print.c:3210
 msgid "Font"
 msgstr "Fonte"
 
-#: ../src/print.c:3376
+#: ../src/print.c:3368
 msgid "Source"
 msgstr "Origem"
 
-#: ../src/print.c:3388
+#: ../src/print.c:3380
 msgid "Image size:"
 msgstr "Tamanho da imagem:"
 
-#: ../src/print.c:3392
+#: ../src/print.c:3384
 msgid "Proof size:"
 msgstr "Tamanho da prova:"
 
-#: ../src/print.c:3408
+#: ../src/print.c:3400
 msgid "Text"
 msgstr "Texto"
 
-#: ../src/print.c:3418
+#: ../src/print.c:3410
 msgid "Paper"
 msgstr "Papel"
 
-#: ../src/print.c:3441
+#: ../src/print.c:3433
 msgid "Margins"
 msgstr "Margens"
 
-#: ../src/print.c:3443
+#: ../src/print.c:3435
 msgid "Left:"
 msgstr "Esquerda:"
 
-#: ../src/print.c:3446
+#: ../src/print.c:3438
 msgid "Right:"
 msgstr "Direita:"
 
-#: ../src/print.c:3449
+#: ../src/print.c:3441
 msgid "Top:"
 msgstr "Superior:"
 
-#: ../src/print.c:3452
+#: ../src/print.c:3444
 msgid "Bottom:"
 msgstr "Inferior:"
 
-#: ../src/print.c:3461
+#: ../src/print.c:3453
 msgid "Printer"
 msgstr "Impressora"
 
-#: ../src/print.c:3467
+#: ../src/print.c:3459
 msgid "Custom printer:"
 msgstr "Impressora personalizada:"
 
-#: ../src/print.c:3476
+#: ../src/print.c:3468
 msgid "File:"
 msgstr "Arquivo:"
 
-#: ../src/print.c:3485
+#: ../src/print.c:3477
 msgid "File format:"
 msgstr "Formato de arquivo:"
 
-#: ../src/print.c:3490
+#: ../src/print.c:3482
 msgid "DPI:"
 msgstr "PPP:"
 
-#: ../src/print.c:3498
+#: ../src/print.c:3490
 msgid "Remember print settings"
 msgstr "Lembrar as configurações de impressão"
 
-#: ../src/rcfile.c:495
+#: ../src/rcfile.c:81
+#, fuzzy, c-format
+msgid "Option %s ignored: %s\n"
+msgstr "Criando o dir %s:%s\n"
+
+#: ../src/rcfile.c:456
 #, c-format
 msgid "error saving config file: %s\n"
 msgstr "erro ao salvar o arquivo de configuração: %s\n"
 
-#: ../src/rcfile.c:553
+#: ../src/rcfile.c:514
 #, c-format
 msgid ""
 "error saving config file: %s\n"
@@ -4626,11 +4763,11 @@ msgstr "última imagem"
 
 #: ../src/remote.c:643
 msgid "toggle full screen"
-msgstr "alternar a tela cheia"
+msgstr "abrir a/sair da tela cheia"
 
 #: ../src/remote.c:644
 msgid "start full screen"
-msgstr "iniciar a tela cheia"
+msgstr "abrir a tela cheia"
 
 #: ../src/remote.c:645
 msgid "stop full screen"
@@ -4638,7 +4775,7 @@ msgstr "sair da tela cheia"
 
 #: ../src/remote.c:646
 msgid "toggle slide show"
-msgstr "alternar a apresentação de slides"
+msgstr "iniciar/parar a apresentação de slides"
 
 #: ../src/remote.c:647
 msgid "start slide show"
@@ -4692,12 +4829,18 @@ msgstr "abrir arquivo em uma nova janela"
 msgid "Remote command list:\n"
 msgstr "Lista de comandos remotos:\n"
 
-#: ../src/remote.c:781
+#: ../src/remote.c:739
+msgid ""
+"\n"
+"  All other command line parameters are used as plain files if they exists.\n"
+msgstr ""
+
+#: ../src/remote.c:789
 #, c-format
 msgid "Remote %s not running, starting..."
 msgstr "%s remoto não está executando, iniciando..."
 
-#: ../src/remote.c:917
+#: ../src/remote.c:925
 msgid "Remote not available\n"
 msgstr "Remoto não disponível\n"
 
@@ -4775,64 +4918,64 @@ msgstr "%s, %d arquivos"
 msgid "Searching..."
 msgstr "Pesquisando..."
 
-#: ../src/search.c:2170
+#: ../src/search.c:2120
 msgid "File not found"
 msgstr "Arquivo não encontrado"
 
-#: ../src/search.c:2171
+#: ../src/search.c:2121
 msgid "Please enter an existing file for image content."
 msgstr "Por favor informe um arquivo existente para o conteúdo da imagem."
 
-#: ../src/search.c:2220
+#: ../src/search.c:2170
 msgid "Please enter an existing folder to search."
 msgstr "Por favor informe um diretório existente para pesquisar."
 
-#: ../src/search.c:2638
+#: ../src/search.c:2588
 msgid "Image search"
 msgstr "Busca de imagem"
 
-#: ../src/search.c:2668
+#: ../src/search.c:2618
 msgid "Search:"
 msgstr "Pesquisa:"
 
-#: ../src/search.c:2682
+#: ../src/search.c:2632
 msgid "Recurse"
 msgstr "Recursiva"
 
-#: ../src/search.c:2687
+#: ../src/search.c:2637
 msgid "File name"
 msgstr "Nome do arquivo"
 
-#: ../src/search.c:2693 ../src/search.c:2788
+#: ../src/search.c:2643 ../src/search.c:2738
 msgid "Match case"
 msgstr "Diferenciar maiúsculas de minúsculas"
 
-#: ../src/search.c:2698
+#: ../src/search.c:2648
 msgid "File size is"
 msgstr "O tamanho do arquivo é"
 
-#: ../src/search.c:2705 ../src/search.c:2721 ../src/search.c:2740
+#: ../src/search.c:2655 ../src/search.c:2671 ../src/search.c:2690
 msgid "and"
 msgstr "e"
 
-#: ../src/search.c:2711
+#: ../src/search.c:2661
 msgid "File date is"
 msgstr "A data do arquivo é"
 
-#: ../src/search.c:2729
+#: ../src/search.c:2679
 msgid "Image dimensions are"
 msgstr "As dimensões da imagem são"
 
-#: ../src/search.c:2750
+#: ../src/search.c:2700
 msgid "Image content is"
 msgstr "O conteúdo da imagem é"
 
-#: ../src/search.c:2756
+#: ../src/search.c:2706
 #, no-c-format
 msgid "% similar to"
 msgstr "% similar a"
 
-#: ../src/search.c:2842
+#: ../src/search.c:2788
 msgid "Rank"
 msgstr "Classificação"
 
@@ -4872,12 +5015,12 @@ msgstr "Não posso escrever o arquivo"
 msgid "Secure file saving error"
 msgstr "Erro no salvamento seguro do arquivo"
 
-#: ../src/thumb.c:396
+#: ../src/thumb.c:392
 msgid "Thumbnail image in cache failed to load, trying to recreate.\n"
 msgstr "Falhou o carregamento da miniatura no cache, tentando recriar.\n"
 
-#: ../src/trash.c:80 ../src/utilops.c:2448 ../src/utilops.c:2459
-#: ../src/utilops.c:2516
+#: ../src/trash.c:80 ../src/utilops.c:2446 ../src/utilops.c:2457
+#: ../src/utilops.c:2514
 msgid "Delete failed"
 msgstr "O apagamento falhou"
 
@@ -4949,15 +5092,15 @@ msgstr "Ícone:"
 msgid "Select icon"
 msgstr "Selecionar ícone"
 
-#: ../src/ui_bookmark.c:403
+#: ../src/ui_bookmark.c:405
 msgid "_Properties..."
 msgstr "_Propriedades..."
 
-#: ../src/ui_bookmark.c:409
+#: ../src/ui_bookmark.c:411
 msgid "_Remove"
 msgstr "_Remover"
 
-#: ../src/ui_fileops.c:94
+#: ../src/ui_fileops.c:67
 msgid ""
 "One or more filenames are not encoded with the preferred locale character "
 "set.\n"
@@ -4965,14 +5108,14 @@ msgstr ""
 "Um ou mais nomes de arquivo não estão codificados com o conjunto de "
 "caracteres de locale preferido.\n"
 
-#: ../src/ui_fileops.c:95
+#: ../src/ui_fileops.c:68
 #, c-format
 msgid "Operations on, and display of these files with %s may not succeed.\n"
 msgstr ""
 "Operações sobre e a exibição desses arquivos com %s podem não ser bem "
 "sucedidas.\n"
 
-#: ../src/ui_fileops.c:97
+#: ../src/ui_fileops.c:70
 msgid ""
 "If your filenames are not encoded in utf-8, try setting the environment "
 "variable G_BROKEN_FILENAMES=1\n"
@@ -4980,16 +5123,16 @@ msgstr ""
 "Se os seus nomes de arquivo não estão codificados em UTF-8, tente definir a "
 "variável de ambiente G_BROKEN_FILENAMES=1\n"
 
-#: ../src/ui_fileops.c:99
+#: ../src/ui_fileops.c:72
 #, c-format
 msgid "It appears G_BROKEN_FILENAMES is set to %s\n"
 msgstr "Parece que G_BROKEN_FILENAMES  está definida para %s\n"
 
-#: ../src/ui_fileops.c:101
+#: ../src/ui_fileops.c:74
 msgid "It appears G_BROKEN_FILENAMES is not set\n"
 msgstr "Parece que G_BROKEN_FILENAMES não está definida\n"
 
-#: ../src/ui_fileops.c:103
+#: ../src/ui_fileops.c:76
 #, c-format
 msgid ""
 "The locale appears to be set to \"%s\"\n"
@@ -4998,7 +5141,7 @@ msgstr ""
 "Parece que o locale está definido para \"%s\"\n"
 "(definido pela variável de ambiente LANG)\n"
 
-#: ../src/ui_fileops.c:108
+#: ../src/ui_fileops.c:81
 msgid ""
 "\n"
 "Preferred encoding appears to be UTF-8, however the file:\n"
@@ -5006,25 +5149,25 @@ msgstr ""
 "\n"
 "Parece que a codificação preferida é UTF-8, no entanto o arquivo:\n"
 
-#: ../src/ui_fileops.c:109 ../src/ui_fileops.c:112 ../src/ui_fileops.c:114
+#: ../src/ui_fileops.c:82 ../src/ui_fileops.c:85 ../src/ui_fileops.c:87
 msgid "[name not displayable]"
 msgstr "[o nome não é exibível]"
 
-#: ../src/ui_fileops.c:112
+#: ../src/ui_fileops.c:85
 #, c-format
 msgid "\"%s\" is encoded in valid UTF-8."
 msgstr "\"%s\" está codificado em UTF-8 válido."
 
-#: ../src/ui_fileops.c:114
+#: ../src/ui_fileops.c:87
 #, c-format
 msgid "\"%s\" is not encoded in valid UTF-8."
 msgstr "\"%s\" não está codificado em UTF-8 válido."
 
-#: ../src/ui_fileops.c:119 ../src/ui_fileops.c:124
+#: ../src/ui_fileops.c:92 ../src/ui_fileops.c:97
 msgid "Filename encoding locale mismatch"
 msgstr "Descasamento da codificação de locale no nome do arquivo"
 
-#: ../src/ui_help.c:114
+#: ../src/ui_help.c:110
 #, c-format
 msgid ""
 "Unable to load:\n"
@@ -5033,33 +5176,33 @@ msgstr ""
 "Incapaz de carregar:\n"
 "%s"
 
-#: ../src/ui_pathsel.c:433 ../src/ui_pathsel.c:439 ../src/utilops.c:2147
-#: ../src/utilops.c:2174 ../src/utilops.c:2640
+#: ../src/ui_pathsel.c:424 ../src/ui_pathsel.c:430 ../src/utilops.c:2145
+#: ../src/utilops.c:2172 ../src/utilops.c:2638
 msgid "Rename failed"
 msgstr "A renomeação falhou"
 
-#: ../src/ui_pathsel.c:438
+#: ../src/ui_pathsel.c:429
 #, c-format
 msgid "Failed to rename %s to %s."
 msgstr "Falha ao renomear %s para %s."
 
-#: ../src/ui_pathsel.c:634 ../src/ui_pathsel.c:642
+#: ../src/ui_pathsel.c:625 ../src/ui_pathsel.c:633
 msgid "_Rename"
 msgstr "_Renomear"
 
-#: ../src/ui_pathsel.c:636 ../src/ui_pathsel.c:646
+#: ../src/ui_pathsel.c:627 ../src/ui_pathsel.c:637
 msgid "Add _Bookmark"
 msgstr "_Adicionar favorito"
 
-#: ../src/ui_pathsel.c:644
+#: ../src/ui_pathsel.c:635
 msgid "_Delete"
 msgstr "_Apagar"
 
-#: ../src/ui_pathsel.c:748 ../src/ui_pathsel.c:1049 ../src/utilops.c:2674
+#: ../src/ui_pathsel.c:742 ../src/ui_pathsel.c:1047 ../src/utilops.c:2672
 msgid "New folder"
 msgstr "Novo diretório"
 
-#: ../src/ui_pathsel.c:758
+#: ../src/ui_pathsel.c:752
 #, c-format
 msgid ""
 "Unable to create folder:\n"
@@ -5068,27 +5211,27 @@ msgstr ""
 "Incapaz de criar o diretório:\n"
 "%s"
 
-#: ../src/ui_pathsel.c:759
+#: ../src/ui_pathsel.c:753
 msgid "Error creating folder"
 msgstr "Erro ao criar o diretório"
 
-#: ../src/ui_pathsel.c:980
+#: ../src/ui_pathsel.c:978
 msgid "All Files"
 msgstr "Todos os arquivos"
 
-#: ../src/ui_pathsel.c:1052
+#: ../src/ui_pathsel.c:1050
 msgid "Show hidden"
 msgstr "Exibir ocultos"
 
-#: ../src/ui_pathsel.c:1136
+#: ../src/ui_pathsel.c:1134
 msgid "Filter:"
 msgstr "Filtro:"
 
-#: ../src/ui_tabcomp.c:925
+#: ../src/ui_tabcomp.c:924
 msgid "Select path"
 msgstr "Selecionar o caminho"
 
-#: ../src/ui_tabcomp.c:941
+#: ../src/ui_tabcomp.c:940
 msgid "All files"
 msgstr "Todos os arquivos"
 
@@ -5100,7 +5243,7 @@ msgstr ""
 "\n"
 " Continuar a operação com múltiplos arquivos?"
 
-#: ../src/utilops.c:554 ../src/utilops.c:989
+#: ../src/utilops.c:554 ../src/utilops.c:987
 msgid "Co_ntinue"
 msgstr "Co_ntinuar"
 
@@ -5115,7 +5258,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../src/utilops.c:877
+#: ../src/utilops.c:875
 #, c-format
 msgid ""
 "%s\n"
@@ -5124,103 +5267,103 @@ msgstr ""
 "%s\n"
 "Incapaz de iniciar o comando externo.\n"
 
-#: ../src/utilops.c:957
+#: ../src/utilops.c:955
 #, c-format
 msgid "%s is not a directory"
 msgstr "%s não é um diretório"
 
-#: ../src/utilops.c:987
+#: ../src/utilops.c:985
 msgid "Really continue?"
 msgstr "Realmente continuar?"
 
-#: ../src/utilops.c:1001
+#: ../src/utilops.c:999
 msgid "This operation can't continue:"
 msgstr "Esta operação não pode continuar:"
 
-#: ../src/utilops.c:1364 ../src/utilops.c:1477 ../src/utilops.c:1861
+#: ../src/utilops.c:1362 ../src/utilops.c:1475 ../src/utilops.c:1859
 msgid "Discard changes"
 msgstr "Descartar as modificações"
 
-#: ../src/utilops.c:1365 ../src/utilops.c:1478 ../src/utilops.c:1811
-#: ../src/utilops.c:1827
+#: ../src/utilops.c:1363 ../src/utilops.c:1476 ../src/utilops.c:1809
+#: ../src/utilops.c:1825
 msgid "File details"
 msgstr "Detalhes do arquivo"
 
-#: ../src/utilops.c:1387 ../src/utilops.c:1485
+#: ../src/utilops.c:1385 ../src/utilops.c:1483
 msgid "Sidecars"
 msgstr "Sidecars"
 
-#: ../src/utilops.c:1389
+#: ../src/utilops.c:1387
 msgid "Write to file"
 msgstr "Escrever no arquivo"
 
-#: ../src/utilops.c:1429
+#: ../src/utilops.c:1427
 msgid "Choose the destination folder."
 msgstr "Escolha o diretório de destino."
 
-#: ../src/utilops.c:1487
+#: ../src/utilops.c:1485
 msgid "New name"
 msgstr "Novo nome"
 
-#: ../src/utilops.c:1517
+#: ../src/utilops.c:1515
 msgid "Manual rename"
 msgstr "Renomeação manual"
 
-#: ../src/utilops.c:1522
+#: ../src/utilops.c:1520
 msgid "Original name:"
 msgstr "Nome original:"
 
-#: ../src/utilops.c:1525
+#: ../src/utilops.c:1523
 msgid "New name:"
 msgstr "Novo nome:"
 
-#: ../src/utilops.c:1538
+#: ../src/utilops.c:1536
 msgid "Auto rename"
 msgstr "Renomear automaticamente"
 
-#: ../src/utilops.c:1544
+#: ../src/utilops.c:1542
 msgid "Begin text"
 msgstr "Começar o texto"
 
-#: ../src/utilops.c:1552 ../src/utilops.c:1584
+#: ../src/utilops.c:1550 ../src/utilops.c:1582
 msgid "Start #"
 msgstr "Início #"
 
-#: ../src/utilops.c:1558
+#: ../src/utilops.c:1556
 msgid "End text"
 msgstr "Finalizar o texto"
 
-#: ../src/utilops.c:1566
+#: ../src/utilops.c:1564
 msgid "Padding:"
 msgstr "Enchimento:"
 
-#: ../src/utilops.c:1571
+#: ../src/utilops.c:1569
 msgid "Formatted rename"
 msgstr "Renomear formatado"
 
-#: ../src/utilops.c:1576
+#: ../src/utilops.c:1574
 msgid "Format (* = original name, ## = numbers)"
 msgstr "Formato (* = nome original, ## = números)"
 
-#: ../src/utilops.c:1714
+#: ../src/utilops.c:1712
 msgid "Another operation in progress.\n"
 msgstr "Outra operação em progresso.\n"
 
-#: ../src/utilops.c:1770
+#: ../src/utilops.c:1768
 #, c-format
 msgid "File: '%s'\n"
 msgstr "Arquivo: '%s'\n"
 
-#: ../src/utilops.c:1775
+#: ../src/utilops.c:1773
 msgid "with sidecar files:\n"
 msgstr "com arquivos sidecar:\n"
 
-#: ../src/utilops.c:1781
+#: ../src/utilops.c:1779
 #, c-format
 msgid " '%s'\n"
 msgstr " '%s'\n"
 
-#: ../src/utilops.c:1785
+#: ../src/utilops.c:1783
 msgid ""
 "\n"
 "Status: "
@@ -5228,19 +5371,19 @@ msgstr ""
 "\n"
 "Status: "
 
-#: ../src/utilops.c:1797
+#: ../src/utilops.c:1795
 msgid "no problem detected"
 msgstr "nenhum problema detectado"
 
-#: ../src/utilops.c:1813 ../src/utilops.c:1860
+#: ../src/utilops.c:1811 ../src/utilops.c:1858
 msgid "Exclude file"
 msgstr "Excluir arquivo"
 
-#: ../src/utilops.c:1858 ../src/utilops.c:1883
+#: ../src/utilops.c:1856 ../src/utilops.c:1881
 msgid "Overview of changed metadata"
 msgstr "Visão geral dos metadados modificados"
 
-#: ../src/utilops.c:1876
+#: ../src/utilops.c:1874
 #, c-format
 msgid ""
 "The following metadata tags will be written to\n"
@@ -5249,102 +5392,103 @@ msgstr ""
 "As seguintes etiquetas de metadados serão escritas em\n"
 "'%s'."
 
-#: ../src/utilops.c:1880
+#: ../src/utilops.c:1878
 #, c-format
 msgid "The following metadata tags will be written to the image file itself."
 msgstr ""
 "As seguintes etiquetas de metadados serão escritas no próprio arquivo da "
 "imagem."
 
-#: ../src/utilops.c:1986
+#: ../src/utilops.c:1984
 msgid "Delete files?"
 msgstr "Apagar arquivos?"
 
-#: ../src/utilops.c:1987
+#: ../src/utilops.c:1985
 msgid "This will delete the following files"
 msgstr "Isto irá apagar os seguintes arquivos"
 
-#: ../src/utilops.c:2006
+#: ../src/utilops.c:2004
 msgid "Can't write metadata"
 msgstr "Não posso escrever os metadados"
 
-#: ../src/utilops.c:2029
+#: ../src/utilops.c:2027
 msgid "Write metadata"
 msgstr "Escrever os metadados"
 
-#: ../src/utilops.c:2030
+#: ../src/utilops.c:2028
 msgid "Write metadata?"
 msgstr "Escrever os metadados?"
 
-#: ../src/utilops.c:2031
+#: ../src/utilops.c:2029
 msgid "This will write the changed metadata into the following files"
 msgstr "Isto irá escrever os metadados modificados para os seguintes arquivos"
 
-#: ../src/utilops.c:2033
-msgid "Metadata writting failed"
+#: ../src/utilops.c:2031
+#, fuzzy
+msgid "Metadata writing failed"
 msgstr "A escrita dos metadados falhou"
 
-#: ../src/utilops.c:2052 ../src/utilops.c:2079
+#: ../src/utilops.c:2050 ../src/utilops.c:2077
 msgid "Move failed"
 msgstr "A movimentação falhou"
 
-#: ../src/utilops.c:2076
+#: ../src/utilops.c:2074
 msgid "Move files?"
 msgstr "Mover arquivos?"
 
-#: ../src/utilops.c:2077
+#: ../src/utilops.c:2075
 msgid "This will move the following files"
 msgstr "Isto irá mover os seguintes arquivos"
 
-#: ../src/utilops.c:2101 ../src/utilops.c:2128
+#: ../src/utilops.c:2099 ../src/utilops.c:2126
 msgid "Copy failed"
 msgstr "A cópia falhou"
 
-#: ../src/utilops.c:2125
+#: ../src/utilops.c:2123
 msgid "Copy files?"
 msgstr "Copiar arquivos?"
 
-#: ../src/utilops.c:2126 ../src/utilops.c:2260
+#: ../src/utilops.c:2124 ../src/utilops.c:2258
 msgid "This will copy the following files"
 msgstr "Isto copiará os seguintes arquivos"
 
-#: ../src/utilops.c:2170 ../src/utilops.c:2636
+#: ../src/utilops.c:2168 ../src/utilops.c:2634
 msgid "Rename"
 msgstr "Renomear"
 
-#: ../src/utilops.c:2171
+#: ../src/utilops.c:2169
 msgid "Rename files?"
 msgstr "Renomear arquivos?"
 
-#: ../src/utilops.c:2172
+#: ../src/utilops.c:2170
 msgid "This will rename the following files"
 msgstr "Isto irá renomear os seguintes arquivos"
 
-#: ../src/utilops.c:2224
+#: ../src/utilops.c:2222
 msgid "Can't run external editor"
 msgstr "Não posso executar o editor externo"
 
-#: ../src/utilops.c:2258
+#: ../src/utilops.c:2256
 msgid "Editor"
 msgstr "Editor"
 
-#: ../src/utilops.c:2259
+#: ../src/utilops.c:2257
 msgid "Run editor?"
 msgstr "Executar o editor?"
 
-#: ../src/utilops.c:2262
+#: ../src/utilops.c:2260
 msgid "External command failed"
 msgstr "O comando externo falhou"
 
-#: ../src/utilops.c:2431 ../src/utilops.c:2504
+#: ../src/utilops.c:2429 ../src/utilops.c:2502
 msgid "Delete folder"
 msgstr "Apagar o diretório"
 
-#: ../src/utilops.c:2432
+#: ../src/utilops.c:2430
 msgid "Delete symbolic link?"
 msgstr "Apagar a ligação simbólica?"
 
-#: ../src/utilops.c:2434
+#: ../src/utilops.c:2432
 msgid ""
 "This will delete the symbolic link.\n"
 "The folder this link points to will not be deleted."
@@ -5352,11 +5496,11 @@ msgstr ""
 "Isto apagará a ligação simbólica.\n"
 "O diretório para o qual esta ligação aponta não será apagado."
 
-#: ../src/utilops.c:2436
+#: ../src/utilops.c:2434
 msgid "Link deletion failed"
 msgstr "O apagamento da ligação falhou"
 
-#: ../src/utilops.c:2446
+#: ../src/utilops.c:2444
 #, c-format
 msgid ""
 "Unable to remove folder %s\n"
@@ -5365,16 +5509,16 @@ msgstr ""
 "Incapaz de remover o diretório %s\n"
 "As permissões não autorizam a escrita no diretório."
 
-#: ../src/utilops.c:2458 ../src/utilops.c:2515
+#: ../src/utilops.c:2456 ../src/utilops.c:2513
 #, c-format
 msgid "Unable to list contents of folder %s"
 msgstr "Incapaz de listar o conteúdo do diretório %s"
 
-#: ../src/utilops.c:2472 ../src/utilops.c:2480
+#: ../src/utilops.c:2470 ../src/utilops.c:2478
 msgid "Folder contains subfolders"
 msgstr "O diretório contém subdiretórios"
 
-#: ../src/utilops.c:2476
+#: ../src/utilops.c:2474
 #, c-format
 msgid ""
 "Unable to delete the folder:\n"
@@ -5390,19 +5534,19 @@ msgstr ""
 "Este diretório contém subdiretórios que precisam ser movidos antes que ele "
 "possa ser apagado."
 
-#: ../src/utilops.c:2484
+#: ../src/utilops.c:2482
 msgid "Subfolders:"
 msgstr "Subdiretórios:"
 
-#: ../src/utilops.c:2505
+#: ../src/utilops.c:2503
 msgid "Delete folder?"
 msgstr "Apagar o diretório?"
 
-#: ../src/utilops.c:2506
+#: ../src/utilops.c:2504
 msgid "The folder contains these files:"
 msgstr "O diretório contém estes arquivos:"
 
-#: ../src/utilops.c:2507
+#: ../src/utilops.c:2505
 msgid ""
 "This will delete the folder.\n"
 "The contents of this folder will also be deleted."
@@ -5410,23 +5554,23 @@ msgstr ""
 "Isto apagará o diretório.\n"
 "O conteúdo deste diretório também será apagado."
 
-#: ../src/utilops.c:2637
+#: ../src/utilops.c:2635
 msgid "Rename folder?"
 msgstr "Renomear o diretório?"
 
-#: ../src/utilops.c:2638
+#: ../src/utilops.c:2636
 msgid "The folder contains the following files"
 msgstr "O diretório contém os seguintes arquivos"
 
-#: ../src/utilops.c:2684
+#: ../src/utilops.c:2682
 msgid "Create Folder"
 msgstr "Criar Diretório"
 
-#: ../src/utilops.c:2685
+#: ../src/utilops.c:2683
 msgid "Create folder?"
 msgstr "Criar o diretório?"
 
-#: ../src/utilops.c:2688
+#: ../src/utilops.c:2686
 msgid "Can't create folder"
 msgstr "Não posso criar o diretório"
 
@@ -5438,43 +5582,43 @@ msgstr "_Copiar"
 msgid "_Move"
 msgstr "_Mover"
 
-#: ../src/view_dir.c:645
+#: ../src/view_dir.c:644
 msgid "_Up to parent"
 msgstr "S_ubir para o pai"
 
-#: ../src/view_dir.c:650
+#: ../src/view_dir.c:649
 msgid "_Slideshow"
 msgstr "Apresentação de _slides"
 
-#: ../src/view_dir.c:652
+#: ../src/view_dir.c:651
 msgid "Slideshow recursive"
 msgstr "Apresentação de slides recursiva"
 
-#: ../src/view_dir.c:656
+#: ../src/view_dir.c:655
 msgid "Find _duplicates..."
 msgstr "Procurar por _duplicatas..."
 
-#: ../src/view_dir.c:658
+#: ../src/view_dir.c:657
 msgid "Find duplicates recursive..."
 msgstr "Procurar por duplicatas recursivamente..."
 
-#: ../src/view_dir.c:663
+#: ../src/view_dir.c:662
 msgid "_New folder..."
 msgstr "_Novo diretório..."
 
-#: ../src/view_dir.c:677 ../src/view_file.c:619
+#: ../src/view_dir.c:676 ../src/view_file.c:619
 msgid "View as _List"
 msgstr "Visualizar em _Lista"
 
-#: ../src/view_dir.c:680
+#: ../src/view_dir.c:679
 msgid "View as _Tree"
 msgstr "Visualizar em _Árvore"
 
-#: ../src/view_dir.c:685
+#: ../src/view_dir.c:684
 msgid "Show _hidden files"
 msgstr "Exibir arquivos _ocultos"
 
-#: ../src/view_dir.c:688 ../src/view_file.c:637
+#: ../src/view_dir.c:687 ../src/view_file.c:637
 msgid "Re_fresh"
 msgstr "_Atualizar"
 
@@ -5486,11 +5630,11 @@ msgstr "Visualizar em _Ícones"
 msgid "Show _thumbnails"
 msgstr "Exibir _miniaturas"
 
-#: ../src/view_file_icon.c:2179 ../src/view_file_list.c:899
+#: ../src/view_file_icon.c:2098 ../src/view_file_list.c:809
 msgid " [NO GROUPING]"
 msgstr " [SEM AGRUPAMENTO]"
 
-#: ../src/view_file_list.c:512
+#: ../src/view_file_list.c:435
 #, c-format
 msgid ""
 "Invalid file name:\n"
@@ -5499,7 +5643,7 @@ msgstr ""
 "Nome de arquivo inválido:\n"
 "%s"
 
-#: ../src/view_file_list.c:513
+#: ../src/view_file_list.c:436
 msgid "Error renaming file"
 msgstr "Erro ao renomear arquivo"
 
@@ -5507,6 +5651,39 @@ msgstr "Erro ao renomear arquivo"
 msgid "Help"
 msgstr "Ajuda"
 
+#~ msgid "Collection empty"
+#~ msgstr "Coleção vazia"
+
+#~ msgid "The current collection is empty, save aborted."
+#~ msgstr "A coleção atual está vazia, salvamento abortado."
+
+#~ msgid "Use Exif date"
+#~ msgstr "Usar data Exif"
+
+#~ msgid "None"
+#~ msgstr "Nenhum"
+
+#~ msgid "Normal"
+#~ msgstr "Normal"
+
+#~ msgid "Best"
+#~ msgstr "O melhor"
+
+#~ msgid "Use xvpics thumbnails when found (read only)"
+#~ msgstr "Usar miniaturas xvpics quando encontradas (somente leitura)"
+
+#~ msgid "Offscreen cache size (Mb per image):"
+#~ msgstr "Tamanho do cache não visível (Mb por imagem)"
+
+#~ msgid "Dithering method:"
+#~ msgstr "Método de dithering:"
+
+#~ msgid "Show dot directory"
+#~ msgstr "Exibir diretório com ponto"
+
+#~ msgid "Add Alt"
+#~ msgstr "Adicionar Alt"
+
 #~ msgid "Advanced view"
 #~ msgstr "Exibição avançada"
 
@@ -6004,10 +6181,6 @@ msgstr "Ajuda"
 #~ msgid "Always show fullscreen info"
 #~ msgstr "sair da tela cheia"
 
-#, fuzzy
-#~ msgid "Fullscreen info string"
-#~ msgstr "Tela cheia"
-
 #, fuzzy
 #~ msgid "List"
 #~ msgstr "Lis_ta"
index 3cb16cb..a7c20a8 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: sk\n"
+"Project-Id-Version: Geegie 1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-05-13 22:14+0200\n"
-"PO-Revision-Date: 2004-02-11 23:45+0100\n"
-"Last-Translator: \n"
-"Language-Team:  <sk@li.org>\n"
+"POT-Creation-Date: 2011-03-08 20:49+0100\n"
+"PO-Revision-Date: 2010-11-08 17:32+0100\n"
+"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
+"Language-Team: Peter Tuhársky <tuharsky@misbb.sk>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.0.1\n"
+"X-Poedit-Language: Slovak\n"
+"X-Poedit-Country: SLOVAKIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
 
-#: src/bar_exif.c:444
-msgid "Tag"
-msgstr "Znaèka"
+# src/img-view.c:559 src/window.c:533
+#: ../geeqie.desktop.in.h:1
+#, fuzzy
+msgid "Geeqie"
+msgstr "Skončiť Geeqie"
+
+# src/preferences.c:676
+#: ../geeqie.desktop.in.h:2
+#, fuzzy
+msgid "Image Viewer"
+msgstr "Súbor obrázku"
+
+# src/preferences.c:660
+#: ../geeqie.desktop.in.h:3
+#, fuzzy
+msgid "View and manage images"
+msgstr "Predčítať nasledujúci obrázok"
+
+#: ../plugins/import/geeqie-import-geeqie.desktop.in.h:1
+msgid "Import Geeqie 1.0alphaX metadata"
+msgstr ""
+
+#: ../plugins/import/geeqie-import-gqview.desktop.in.h:1
+msgid "Import GQView metadata"
+msgstr ""
+
+# src/utilops.c:544
+#: ../plugins/rotate/rotate.desktop.in.h:1
+#, fuzzy
+msgid "Apply the orientation to image content"
+msgstr "Prosím zadajte existujúci súbor pre obsah obrázka."
+
+#: ../plugins/symlink/symlink.desktop.in.h:1
+msgid "Symlink"
+msgstr ""
+
+#: ../plugins/ufraw/geeqie-ufraw.desktop.in.h:1
+msgid "UFRaw Batch"
+msgstr ""
+
+#: ../plugins/ufraw/geeqie-ufraw-id.desktop.in.h:1
+msgid "Edit UFRaw ID file"
+msgstr ""
+
+#: ../plugins/ufraw/geeqie-ufraw-recursive.desktop.in.h:1
+msgid "UFRaw Batch recursive"
+msgstr ""
+
+#: ../src/advanced_exif.c:328 ../src/cache_maint.c:1304
+#: ../src/preferences.c:93 ../src/preferences.c:1678
+msgid "Metadata"
+msgstr "Metadáta"
+
+#: ../src/advanced_exif.c:376 ../src/preferences.c:1592
+msgid "Description"
+msgstr "Popis"
+
+#: ../src/advanced_exif.c:377
+msgid "Value"
+msgstr "Hodnota"
 
 # src/dupe.c:1652 src/dupe.c:1941
-#: src/bar_exif.c:445 src/dupe.c:2646 src/dupe.c:3167 src/print.c:3232
-#: src/search.c:2760 src/utilops.c:2971 src/view_file_list.c:1820
+#: ../src/advanced_exif.c:378 ../src/desktop_file.c:515 ../src/dupe.c:2651
+#: ../src/dupe.c:3173 ../src/print.c:3213 ../src/search.c:2852
+#: ../src/utilops.c:462 ../src/view_file_list.c:2046
 msgid "Name"
 msgstr "Meno"
 
-#: src/bar_exif.c:446
-msgid "Value"
-msgstr "Hodnota"
+#: ../src/advanced_exif.c:379
+msgid "Tag"
+msgstr "Značka"
 
 # src/preferences.c:401
-#: src/bar_exif.c:447
+#: ../src/advanced_exif.c:380
 msgid "Format"
-msgstr "Formát"
+msgstr "Formát"
 
-#: src/bar_exif.c:448
+#: ../src/advanced_exif.c:381
 msgid "Elements"
 msgstr "Prvky"
 
-#: src/bar_exif.c:449 src/preferences.c:1131
-msgid "Description"
-msgstr "Popis"
+#. default sidebar
+#: ../src/bar.c:167
+#, fuzzy
+msgid "Histogram"
+msgstr "_Kanály histogramu"
+
+# src/collect.c:329 src/image.c:1058
+#: ../src/bar.c:168
+#, fuzzy
+msgid "Title"
+msgstr "Nepomenovaný"
+
+#: ../src/bar.c:169 ../src/search.c:2775
+msgid "Keywords"
+msgstr "Kľúčové slová"
+
+# src/dupe.c:1948
+#: ../src/bar.c:170 ../src/search.c:2787
+#, fuzzy
+msgid "Comment"
+msgstr "Poznámka:"
 
 # src/main.c:622
-#: src/bar_exif.c:576 src/info.c:125 src/preferences.c:1274
+#: ../src/bar.c:171
 msgid "Exif"
 msgstr "Exif"
 
-#: src/bar_exif.c:650
-msgid "Advanced view"
-msgstr "Roz¹írený pohµad"
+#. other pre-configured panes
+#: ../src/bar.c:173
+#, fuzzy
+msgid "File info"
+msgstr "Súbor sa nenašiel"
 
-#: src/bar_info.c:35
-msgid "Favorite"
-msgstr "Obµúbené"
+#: ../src/bar.c:174
+#, fuzzy
+msgid "Location and GPS"
+msgstr "Umiestnenie"
 
-# src/preferences.c:368
-#: src/bar_info.c:36
-msgid "Todo"
-msgstr "Úlohy"
+# src/utilops.c:592
+#: ../src/bar.c:175 ../src/exif.c:347
+msgid "Copyright"
+msgstr "Autorské práva"
 
-#: src/bar_info.c:37
-msgid "People"
-msgstr "¥udia"
+#: ../src/bar.c:178 ../src/bar_gps.c:768
+msgid "GPS Map"
+msgstr ""
 
-#: src/bar_info.c:38
-msgid "Places"
-msgstr "Miesta"
+# src/utilops.c:601
+#: ../src/bar.c:297
+#, fuzzy
+msgid "Move to _top"
+msgstr "Presunúť _hore"
 
-#: src/bar_info.c:39
-msgid "Art"
-msgstr "Umenie"
+# src/utilops.c:601
+#: ../src/bar.c:298 ../src/ui_bookmark.c:410
+msgid "Move _up"
+msgstr "Presunúť _hore"
 
-#: src/bar_info.c:40
-msgid "Nature"
-msgstr "Príroda"
+# src/utilops.c:601
+#: ../src/bar.c:299 ../src/ui_bookmark.c:412
+msgid "Move _down"
+msgstr "Presunúť _dole"
 
-#: src/bar_info.c:41
-msgid "Possessions"
-msgstr "Predmety"
+#: ../src/bar.c:300
+#, fuzzy
+msgid "Move to _bottom"
+msgstr "vľavo dole"
 
-#: src/bar_info.c:801
-msgid "Keyword Presets"
-msgstr "Predvolené kµúèové slová"
+# src/collect-table.c:622 src/dupe.c:1410 src/dupe.c:1568
+#: ../src/bar.c:302
+msgid "Remove"
+msgstr "Vymazať"
 
-#: src/bar_info.c:804
-msgid "Favorite keywords list"
-msgstr "Zoznam obµúbených kµúèových slov"
+#: ../src/bar_comment.c:195
+#, fuzzy
+msgid "Add text to selected files"
+msgstr "Pridať poznámku k vybraným súborom"
 
-#: src/bar_info.c:1301 src/info.c:189 src/search.c:2699
-msgid "Keywords"
-msgstr "Kµúèové slová"
+#: ../src/bar_comment.c:196
+#, fuzzy
+msgid "Replace existing text in selected files"
+msgstr "Prepísať existujúci súbor novým."
 
-# src/utilops.c:980
-#: src/bar_info.c:1315 src/info.c:825 src/pan-view.c:1542 src/print.c:2632
-msgid "Filename:"
-msgstr "Názov súboru:"
+#: ../src/bar_exif.c:213
+msgid "<empty label, fixme>"
+msgstr ""
 
-# src/ui_pathsel.c:799
-#: src/bar_info.c:1316 src/info.c:391
-msgid "File date:"
-msgstr "Dátum súboru:"
+# src/menu.c:1087
+#: ../src/bar_exif.c:546 ../src/bar_exif.c:556
+#, fuzzy
+msgid "Configure entry"
+msgstr "Konfigurovať voľby"
+
+# src/collect-table.c:1820 src/dupe.c:2172
+#. for the pane
+#: ../src/bar_exif.c:546 ../src/bar_exif.c:556 ../src/bar_exif.c:629
+#, fuzzy
+msgid "Add entry"
+msgstr "Pridať obsah"
 
-#: src/bar_info.c:1336
-msgid "Keywords:"
-msgstr "Kµúèové slová:"
+#: ../src/bar_exif.c:562
+msgid "Key:"
+msgstr ""
 
-# src/dupe.c:1948
-#: src/bar_info.c:1404
-msgid "Comment:"
-msgstr "Poznámka:"
+#: ../src/bar_exif.c:571
+msgid "Title:"
+msgstr ""
+
+#: ../src/bar_exif.c:580
+msgid "Show only if set"
+msgstr ""
+
+#: ../src/bar_exif.c:581
+msgid "Editable (supported only for XMP)"
+msgstr ""
+
+# src/menu.c:1087
+#. for the entry
+#: ../src/bar_exif.c:617
+#, fuzzy, c-format
+msgid "Configure \"%s\""
+msgstr "Konfigurovať voľby"
+
+# src/collect-table.c:622 src/dupe.c:1410 src/dupe.c:1568
+#: ../src/bar_exif.c:618 ../src/bar_keywords.c:1207
+#, fuzzy, c-format
+msgid "Remove \"%s\""
+msgstr "Vymazať"
+
+# src/ui_pathsel.c:764
+#: ../src/bar_exif.c:630
+#, fuzzy
+msgid "Show hidden entries"
+msgstr "Ukázať _skryté súbory"
+
+# src/img-view.c:789 src/menu.c:944 src/menu.c:1079
+#: ../src/bar_gps.c:499
+#, fuzzy, c-format
+msgid "Zoom %i"
+msgstr "Priblížiť"
+
+# src/img-view.c:789 src/menu.c:944 src/menu.c:1079
+#: ../src/bar_gps.c:517
+#, fuzzy, c-format
+msgid "Zoom level %i"
+msgstr "Priblížiť"
+
+# src/collect-table.c:100 src/dupe.c:668 src/filelist.c:1811
+#: ../src/bar_gps.c:522
+#, fuzzy
+msgid "Loading map"
+msgstr "Načítavam náhľady..."
+
+#: ../src/bar_gps.c:584
+msgid "Enable markers"
+msgstr ""
+
+#: ../src/bar_gps.c:586
+msgid "Centre map on marker"
+msgstr ""
+
+#: ../src/bar_gps.c:609
+msgid ""
+"Move map centre to marker\n"
+" is disabled"
+msgstr ""
+
+#: ../src/bar_gps.c:614
+msgid ""
+"Move map centre to marker\n"
+" is enabled"
+msgstr ""
+
+#: ../src/bar_gps.c:623
+msgid "Map Centreing"
+msgstr ""
+
+#. use the same strings as in layout_util.c
+#: ../src/bar_histogram.c:265 ../src/layout_util.c:1404
+#, fuzzy
+msgid "Histogram on _Red"
+msgstr "Histogram v _log režime"
+
+#: ../src/bar_histogram.c:266 ../src/layout_util.c:1405
+#, fuzzy
+msgid "Histogram on _Green"
+msgstr "lineárny histogram zelenej"
+
+#: ../src/bar_histogram.c:267 ../src/layout_util.c:1406
+#, fuzzy
+msgid "Histogram on _Blue"
+msgstr "lineárny histogram modrej"
+
+#: ../src/bar_histogram.c:268 ../src/layout_util.c:1407
+#, fuzzy
+msgid "_Histogram on RGB"
+msgstr "lineárny histogram RGB"
+
+#: ../src/bar_histogram.c:269 ../src/layout_util.c:1408
+#, fuzzy
+msgid "Histogram on _Value"
+msgstr "lineárny histogram hodnoty"
+
+#: ../src/bar_histogram.c:273 ../src/layout_util.c:1412
+#, fuzzy
+msgid "Li_near Histogram"
+msgstr "lineárny histogram červenej"
 
-#: src/bar_info.c:1428
-msgid "Edit favorite keywords list."
-msgstr "Upravi» zoznam obµúbených kµúèových slov."
+#: ../src/bar_histogram.c:274
+msgid "L_og Histogram"
+msgstr ""
 
-#: src/bar_info.c:1432
+#: ../src/bar_keywords.c:414
 msgid "Add keywords to selected files"
-msgstr "Prida» kµúèové slová do vybraných súborov"
+msgstr "Pridať kľúčové slová do vybraných súborov"
 
-#: src/bar_info.c:1435
+#: ../src/bar_keywords.c:415
 #, fuzzy
-msgid "Add keywords to selected files, replacing existing ones"
-msgstr "Prida» kµúèové slová do vybraných súborov, existujúce prepísa»."
+msgid "Replace existing keywords in selected files"
+msgstr "Pridať kľúčové slová do vybraných súborov"
 
-#: src/bar_info.c:1438
+# src/preferences.c:915
+#: ../src/bar_keywords.c:888
 #, fuzzy
-msgid "Add comment to selected files"
-msgstr "Prida» kµúèové slová do vybraných súborov"
+msgid "Edit keyword"
+msgstr "Editory"
 
-#: src/bar_info.c:1441
+#: ../src/bar_keywords.c:888
 #, fuzzy
-msgid "Add comment to selected files, replacing existing one"
-msgstr "Prida» kµúèové slová do vybraných súborov, existujúce prepísa»."
+msgid "Add keywords"
+msgstr "Kľúčové slová"
 
-# src/collect-dlg.c:165 src/collect-table.c:641
-#: src/bar_info.c:1446
-msgid "Save comment now"
-msgstr "Ulo¾i» poznámku"
+# src/menu.c:1087
+#: ../src/bar_keywords.c:895
+#, fuzzy
+msgid "Configure keyword"
+msgstr "Konfigurovať voľby"
 
-# src/utilops.c:496
-#: src/bar_sort.c:218
-#, fuzzy, c-format
-msgid ""
-"Unable to remove symbolic link:\n"
-"%s"
+#: ../src/bar_keywords.c:895 ../src/bar_keywords.c:1161
+#, fuzzy
+msgid "Add keyword"
+msgstr "Kľúčové slová"
+
+#: ../src/bar_keywords.c:901
+#, fuzzy
+msgid "Keyword:"
+msgstr "Kľúčové slová:"
+
+#: ../src/bar_keywords.c:910
+#, fuzzy
+msgid "Keyword type:"
+msgstr "Kľúčové slová:"
+
+#: ../src/bar_keywords.c:912
+#, fuzzy
+msgid "Active keyword"
+msgstr "Aktívny monitor"
+
+# src/menu.c:771
+#: ../src/bar_keywords.c:915
+#, fuzzy
+msgid "Helper"
+msgstr "Pomoc"
+
+#: ../src/bar_keywords.c:1165
+#, fuzzy
+msgid "Add keyword to all selected images"
+msgstr "Pridať kľúčové slová do vybraných súborov"
+
+#: ../src/bar_keywords.c:1185
+#, c-format
+msgid "Hide \"%s\""
 msgstr ""
-"Nemo¾no presunú» súbor:\n"
-"%s\n"
-"do:\n"
-"%s"
 
-# src/utilops.c:664 src/utilops.c:676
-#: src/bar_sort.c:219
-msgid "Unlink failed"
-msgstr "Odpájanie sa nepodarilo"
+#: ../src/bar_keywords.c:1192
+#, fuzzy, c-format
+msgid "Mark %d"
+msgstr "Značka _%d"
 
-# src/ui_pathsel.c:517 src/utilops.c:1158
-#: src/bar_sort.c:300
+#: ../src/bar_keywords.c:1197
+#, c-format
+msgid "Connect \"%s\" to mark"
+msgstr ""
+
+# src/preferences.c:915
+#: ../src/bar_keywords.c:1204
 #, fuzzy, c-format
-msgid ""
-"Unable to create symbolic link:\n"
-"%s"
+msgid "Edit \"%s\""
+msgstr "Editory"
+
+#: ../src/bar_keywords.c:1214
+#, c-format
+msgid "Disconnect \"%s\" from mark %s"
 msgstr ""
-"Nemo¾no vytvori» prieèinok:\n"
-"%s"
 
-#: src/bar_sort.c:301
-msgid "Link failed"
-msgstr "Pripojenie sa nepodarilo"
+#. for the pane
+#: ../src/bar_keywords.c:1226 ../src/bar_keywords.c:1235
+msgid "Expand checked"
+msgstr ""
+
+#: ../src/bar_keywords.c:1227 ../src/bar_keywords.c:1236
+msgid "Collapse unchecked"
+msgstr ""
+
+#: ../src/bar_keywords.c:1228 ../src/bar_keywords.c:1237
+msgid "Hide unchecked"
+msgstr ""
+
+#: ../src/bar_keywords.c:1229
+#, fuzzy
+msgid "Show all"
+msgstr "Ukáž"
+
+#: ../src/bar_keywords.c:1232
+msgid "On any change"
+msgstr ""
 
 # src/utilops.c:1144
-#: src/bar_sort.c:452
+#: ../src/bar_sort.c:449
 #, c-format
 msgid ""
 "The collection:\n"
@@ -182,3427 +429,4550 @@ msgid ""
 msgstr ""
 "Zbierka:\n"
 "%s\n"
-"u¾ existuje."
+"už existuje."
 
 # src/collect-dlg.c:206
-#: src/bar_sort.c:453
+#: ../src/bar_sort.c:450
 msgid "Collection exists"
-msgstr "Zbierka u¾ existuje"
+msgstr "Zbierka už existuje"
 
 # src/collect-dlg.c:82 src/collect.c:1011
-#: src/bar_sort.c:467 src/collect.c:1083 src/collect-dlg.c:85
+#: ../src/bar_sort.c:464 ../src/collect.c:1098 ../src/collect-dlg.c:85
 #, c-format
 msgid ""
 "Failed to save the collection:\n"
 "%s"
 msgstr ""
-"Ulo¾enie zbierky sa nepodarilo:\n"
+"Uloženie zbierky sa nepodarilo:\n"
 "%s"
 
 # src/collect-dlg.c:83 src/collect.c:1012
-#: src/bar_sort.c:468 src/collect.c:1084 src/collect-dlg.c:86
+#: ../src/bar_sort.c:465 ../src/collect.c:1099 ../src/collect-dlg.c:86
 msgid "Save Failed"
-msgstr "Ulo¾enie sa nepodarilo"
+msgstr "Nepodarilo sa uložiť"
 
-#: src/bar_sort.c:502 src/bar_sort.c:628
+#: ../src/bar_sort.c:500 ../src/bar_sort.c:670
 msgid "Add Bookmark"
-msgstr "Prida» zálo¾ku"
+msgstr "PridaÅ¥ záložku"
 
 # src/preferences.c:897
-#: src/bar_sort.c:506
+#: ../src/bar_sort.c:504
 msgid "Add Collection"
-msgstr "Prida» zbierku"
+msgstr "Pridať zbierku"
 
 # src/dupe.c:1652 src/dupe.c:1941
-#: src/bar_sort.c:523 src/ui_bookmark.c:601
+#: ../src/bar_sort.c:521 ../src/ui_bookmark.c:288
 msgid "Name:"
 msgstr "Meno:"
 
 # src/menu.c:526
-#: src/bar_sort.c:585
+#: ../src/bar_sort.c:597
 msgid "Sort Manager"
-msgstr "Správca triedenia"
+msgstr "Správca triedenia"
 
 # src/preferences.c:368
-#: src/bar_sort.c:594 src/pan-view.c:2395 src/ui_pathsel.c:1103
+#: ../src/bar_sort.c:606 ../src/pan-view.c:2417 ../src/ui_pathsel.c:1099
 msgid "Folders"
-msgstr "Prieèinky"
+msgstr "Priečinky"
 
 # src/preferences.c:897
-#: src/bar_sort.c:595 src/main.c:567
+#: ../src/bar_sort.c:607 ../src/options.c:141
 msgid "Collections"
 msgstr "Zbierky"
 
 # src/utilops.c:592
-#: src/bar_sort.c:603 src/utilops.c:1177
+#: ../src/bar_sort.c:615 ../src/utilops.c:2124
 msgid "Copy"
-msgstr "Kopírova»"
+msgstr "Kopírovať"
 
 # src/utilops.c:601
-#: src/bar_sort.c:606 src/utilops.c:1191
+#: ../src/bar_sort.c:618 ../src/utilops.c:2075
 msgid "Move"
-msgstr "Presunú»"
-
-#: src/bar_sort.c:609
-msgid "Link"
-msgstr "Pripoji»"
+msgstr "Presunúť"
 
 # src/collect-table.c:86
-#: src/bar_sort.c:615
+#: ../src/bar_sort.c:657
 msgid "Add image"
-msgstr "Prida» obrázok"
+msgstr "Pridať obrázok"
 
 # src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/bar_sort.c:618
+#: ../src/bar_sort.c:660
 msgid "Add selection"
-msgstr "Prida» výber"
+msgstr "Pridať výber"
 
-#: src/bar_sort.c:631
+#: ../src/bar_sort.c:673
 msgid "Undo last image"
-msgstr "Vráti» posledný obrázok"
+msgstr "Vrátiť posledný obrázok"
 
 # src/rcfile.c:132
-#: src/cache.c:175
-#, fuzzy, c-format
+#: ../src/cache.c:174
+#, c-format
 msgid ""
 "error saving sim cache data: %s\n"
 "error: %s\n"
-msgstr "chyba pri ukladaní konfiguraèného súboru: %s\n"
+msgstr ""
+"chyba pri ukladaní údajov sim vyrovnávacej pamäte: %s\n"
+"chyba: %s\n"
 
 # src/preferences.c:400
-#: src/cache_maint.c:127 src/cache_maint.c:689 src/cache_maint.c:902
-#: src/editors.c:717
+#: ../src/cache_maint.c:129 ../src/cache_maint.c:730 ../src/cache_maint.c:954
+#: ../src/editors.c:1176
 msgid "done"
 msgstr "hotovo"
 
 # src/dupe.c:841
-#: src/cache_maint.c:306
+#: ../src/cache_maint.c:311
 msgid "Removing old metadata..."
-msgstr "Odstraòujem staré podobnostné dáta (metadata)..."
+msgstr "Odstraňujem staré metadáta..."
 
 # src/cache_maint.c:245
-#: src/cache_maint.c:310
+#: ../src/cache_maint.c:315
 msgid "Clearing cached thumbnails..."
-msgstr "Èistím vyrovnávaciu pamä» miniatúr..."
+msgstr "Čistím vyrovnávaciu pamäť náhľadov..."
 
 # src/cache_maint.c:249
-#: src/cache_maint.c:314 src/cache_maint.c:1056
+#: ../src/cache_maint.c:319 ../src/cache_maint.c:1116
 msgid "Removing old thumbnails..."
-msgstr "Odstraòujem staré miniatúry..."
+msgstr "Odstraňujem staré náhľady..."
 
-#: src/cache_maint.c:317 src/cache_maint.c:1059
+#: ../src/cache_maint.c:322 ../src/cache_maint.c:1119
 msgid "Maintenance"
-msgstr "Údr¾ba"
+msgstr "Ã\9adržba"
 
 # src/collect-dlg.c:59
-#: src/cache_maint.c:800 src/utilops.c:1107
+#: ../src/cache_maint.c:845
 msgid "Invalid folder"
-msgstr "Nesprávny prieèinok"
+msgstr "Nesprávny priečinok"
 
-#: src/cache_maint.c:801
+#: ../src/cache_maint.c:846
 msgid "The specified folder can not be found."
-msgstr "Uvedený prieèinok sa nena¹iel"
+msgstr "Uvedený priečinok sa nenašiel"
 
 # src/preferences.c:603
-#: src/cache_maint.c:829 src/cache_maint.c:843 src/cache_maint.c:1227
+#: ../src/cache_maint.c:877 ../src/cache_maint.c:891 ../src/cache_maint.c:1295
 msgid "Create thumbnails"
-msgstr "Vytvori» miniatúry"
+msgstr "Vytvoriť náhľady"
 
-#: src/cache_maint.c:837 src/cache_maint.c:1066
+#: ../src/cache_maint.c:885 ../src/cache_maint.c:1126
 msgid "S_tart"
-msgstr "©tart"
+msgstr "Š_tart"
 
 # src/preferences.c:368
-#: src/cache_maint.c:850 src/preferences.c:1407
+#: ../src/cache_maint.c:898 ../src/preferences.c:1866
 msgid "Folder:"
-msgstr "Prieèinok:"
+msgstr "Priečinok:"
 
 # src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/cache_maint.c:853
+#: ../src/cache_maint.c:901
 msgid "Select folder"
-msgstr "Vybra» prieèinok"
+msgstr "Vybrať priečinok"
 
 # src/collect-dlg.c:59
-#: src/cache_maint.c:857
+#: ../src/cache_maint.c:905
 msgid "Include subfolders"
-msgstr "Vrátane podprieèinkov"
+msgstr "Vrátane podpriečinkov"
 
-#: src/cache_maint.c:858
+#: ../src/cache_maint.c:906
 msgid "Store thumbnails local to source images"
-msgstr "Miniatúry uklada» lokálne ku zdrojovým obrázkov"
+msgstr "Náhľady ukladať lokálne ku zdrojovým obrázkom"
 
-#: src/cache_maint.c:867 src/cache_maint.c:1075
+#: ../src/cache_maint.c:915 ../src/cache_maint.c:1135
 msgid "click start to begin"
-msgstr "pre spustenie kliknite na ¹tart"
+msgstr "spustíte kliknutím na štart"
 
 # src/dupe.c:871 src/dupe.c:892
-#: src/cache_maint.c:1005 src/editors.c:647
+#: ../src/cache_maint.c:1062 ../src/editors.c:1102
 msgid "running..."
 msgstr "pracujem..."
 
 # src/cache_maint.c:245
-#: src/cache_maint.c:1051
+#: ../src/cache_maint.c:1111
 msgid "Clearing thumbnails..."
-msgstr "Èistím miniatúry..."
+msgstr "Čistím náhľady..."
 
 # src/preferences.c:163 src/preferences.c:604
-#: src/cache_maint.c:1117 src/cache_maint.c:1120 src/cache_maint.c:1202
-#: src/cache_maint.c:1222
+#: ../src/cache_maint.c:1177 ../src/cache_maint.c:1180
+#: ../src/cache_maint.c:1273 ../src/cache_maint.c:1290
 msgid "Clear cache"
-msgstr "Vyèisti» vyrovnávaciu pamä»"
+msgstr "Vyčistiť vyrovnávaciu pamäť"
 
 # src/preferences.c:163
-#: src/cache_maint.c:1121
+#: ../src/cache_maint.c:1181
 msgid ""
 "This will remove all thumbnails that have\n"
 "been saved to disk, continue?"
 msgstr ""
-"Chystám sa vymaza» v¹etky miniatúry, ktoré\n"
-"boli ulo¾ené na disk, pokraèova»?"
+"Chystám sa odstrániť všetky náhľady,\n"
+"ktoré boli uložené na disk; pokračovať?"
 
-#: src/cache_maint.c:1172
-#, fuzzy
+#: ../src/cache_maint.c:1223
+#, fuzzy, c-format
+msgid "Location: %s"
+msgstr "Umiestnenie:"
+
+#: ../src/cache_maint.c:1248
 msgid "Cache Maintenance"
-msgstr "Údr¾ba vyrovnávacej pamäte - Geeqie"
+msgstr "Údržba vyrovnávacej pamäte"
 
-#: src/cache_maint.c:1184
+#: ../src/cache_maint.c:1258
 msgid "Cache and Data Maintenance"
-msgstr "Údr¾ba dát a vyrovnávacej pamäte"
+msgstr "Údržba dát a vyrovnávacej pamäte"
 
 # src/fullscreen.c:117
-#: src/cache_maint.c:1188
-#, fuzzy
+#: ../src/cache_maint.c:1262
 msgid "Thumbnail cache"
-msgstr "Geeqie vyrovnávacia pamä» miniatúr"
-
-#: src/cache_maint.c:1190 src/cache_maint.c:1210 src/cache_maint.c:1238
-#: src/pan-view.c:1544 src/pan-view.c:2384 src/preferences.c:1333
-#: src/utilops.c:1747
-msgid "Location:"
-msgstr "Umiestnenie:"
+msgstr "Vyrovnávacia pamäť náhľadov"
 
 # src/dupe.c:1412 src/dupe.c:1570
-#: src/cache_maint.c:1197 src/cache_maint.c:1217 src/cache_maint.c:1245
+#: ../src/cache_maint.c:1268 ../src/cache_maint.c:1285
+#: ../src/cache_maint.c:1310
 msgid "Clean up"
-msgstr "Vyèisti»"
+msgstr "Vyčistiť"
 
-#: src/cache_maint.c:1200 src/cache_maint.c:1220
+#: ../src/cache_maint.c:1271 ../src/cache_maint.c:1288
 msgid "Remove orphaned or outdated thumbnails."
-msgstr "Odstráni» neaktuálne miniatúry"
+msgstr "Odstrániť neaktuálne náhľady."
 
 # src/preferences.c:603
-#: src/cache_maint.c:1205 src/cache_maint.c:1225
+#: ../src/cache_maint.c:1276 ../src/cache_maint.c:1293
 msgid "Delete all cached thumbnails."
-msgstr "Zmaza» v¹etky miniatúry z vyrovnávacej pamäte"
+msgstr "Odstrániť všetky náhľady z vyrovnávacej pamäte."
 
 # src/preferences.c:603
-#: src/cache_maint.c:1208
+#: ../src/cache_maint.c:1279
 msgid "Shared thumbnail cache"
-msgstr "Zdieµaná vyrovnávacia pamä» miniatúr"
+msgstr "Zdieľaná vyrovnávacia pamäť náhľadov"
 
 # src/ui_pathsel.c:437 src/ui_pathsel.c:460 src/utilops.c:944
 # src/utilops.c:1095
-#: src/cache_maint.c:1231
+#: ../src/cache_maint.c:1299
 msgid "Render"
-msgstr "Vykresli»"
+msgstr "Vykresliť"
 
-#: src/cache_maint.c:1234
+#: ../src/cache_maint.c:1302
 msgid "Render thumbnails for a specific folder."
-msgstr "Vykresli» miniatúry pre ¹pecifický prieèinok."
+msgstr "Vykresliť náhľady pre špecifický priečinok."
 
-#: src/cache_maint.c:1236
-msgid "Metadata"
-msgstr "Podobnostné dáta (metadata)"
-
-#: src/cache_maint.c:1248
+#: ../src/cache_maint.c:1313
 msgid "Remove orphaned keywords and comments."
-msgstr "Odstráni» neaktuálne kµúèové slová a poznámky."
-
-#: src/cellrenderericon.c:127
-msgid "Pixbuf Object"
-msgstr ""
-
-#: src/cellrenderericon.c:128
-msgid "The pixbuf to render"
-msgstr ""
-
-#: src/cellrenderericon.c:135 src/print.c:3439
-msgid "Text"
-msgstr "Text"
-
-#: src/cellrenderericon.c:136
-msgid "Text to render"
-msgstr ""
-
-#: src/cellrenderericon.c:143
-#, fuzzy
-msgid "Background color"
-msgstr "Èierne pozadie"
-
-#: src/cellrenderericon.c:144
-#, fuzzy
-msgid "Background color as a GdkColor"
-msgstr "Èierne pozadie"
-
-#: src/cellrenderericon.c:151
-#, fuzzy
-msgid "Foreground color"
-msgstr "Èierne pozadie"
-
-#: src/cellrenderericon.c:152
-msgid "Foreground color as a GdkColor"
-msgstr ""
-
-#: src/cellrenderericon.c:159
-msgid "Focus"
-msgstr ""
-
-#: src/cellrenderericon.c:160
-msgid "Draw focus indicator"
-msgstr ""
-
-#: src/cellrenderericon.c:167
-msgid "Fixed width"
-msgstr ""
-
-#: src/cellrenderericon.c:168
-msgid "Width of cell"
-msgstr ""
-
-#: src/cellrenderericon.c:176
-msgid "Fixed height"
-msgstr ""
-
-#: src/cellrenderericon.c:177
-msgid "Height of icon excluding text"
-msgstr ""
-
-#: src/cellrenderericon.c:185
-#, fuzzy
-msgid "Background set"
-msgstr "Èierne pozadie"
-
-#: src/cellrenderericon.c:186
-msgid "Whether this tag affects the background color"
-msgstr ""
-
-#: src/cellrenderericon.c:193
-msgid "Foreground set"
-msgstr ""
-
-#: src/cellrenderericon.c:194
-msgid "Whether this tag affects the foreground color"
-msgstr ""
-
-# src/ui_pathsel.c:764
-#: src/cellrenderericon.c:201
-#, fuzzy
-msgid "Show text"
-msgstr "Zobrazi» meno súboru"
-
-#: src/cellrenderericon.c:202
-msgid "Whether the text is displayed"
-msgstr ""
+msgstr "Odstrániť neaktuálne kľúčové slová a poznámky."
 
 # src/collect.c:329 src/image.c:1058
-#: src/collect.c:353 src/image.c:178 src/image-overlay.c:437
-#: src/image-overlay.c:512
-#, c-format
+#. When does this occur ??
+#: ../src/collect.c:366 ../src/image.c:160 ../src/image-overlay.c:512
+#: ../src/image-overlay.c:591
 msgid "Untitled"
-msgstr "Nepomenovaný"
+msgstr "Nepomenovaný"
 
 # src/collect.c:333
-#: src/collect.c:357
+#: ../src/collect.c:370
 #, c-format
 msgid "Untitled (%d)"
-msgstr "Nepomenovaný (%d)"
+msgstr "Nepomenovaný (%d)"
 
 # src/collect.c:930
-#: src/collect.c:1002
-#, fuzzy, c-format
+#: ../src/collect.c:1016
+#, c-format
 msgid "%s - Collection - %s"
-msgstr "%s - Geeqie zbierka"
+msgstr "%s - Zbierka - %s"
 
 # src/collect.c:1048
-#: src/collect.c:1120 src/collect.c:1124
+#: ../src/collect.c:1135 ../src/collect.c:1139
 msgid "Close collection"
-msgstr "Zatvori» zbierku"
+msgstr "Zatvoriť zbierku"
 
 # src/collect.c:1048
-#: src/collect.c:1125
+#: ../src/collect.c:1140
 msgid ""
 "Collection has been modified.\n"
 "Save first?"
 msgstr ""
-"Zbierka bola zmenená.\n"
-"Ulo¾i»?"
+"Zbierka bola zmenená.\n"
+"Uložiť?"
 
-#: src/collect.c:1128
+#: ../src/collect.c:1143
 msgid "_Discard"
-msgstr "ZahoDi»"
+msgstr "_Zahodiť"
 
 # src/collect-dlg.c:58
-#: src/collect-dlg.c:59
+#: ../src/collect-dlg.c:59
 #, c-format
 msgid ""
 "Specified path:\n"
 "%s\n"
 "is a folder, collections are files"
 msgstr ""
-"Zadaná cesta:\n"
+"Zadaná cesta:\n"
 "%s\n"
-"je prieèinok, ale zbierky sú súbory"
+"je priečinok, ale zbierky sú súbory"
 
 # src/collect-dlg.c:59
-#: src/collect-dlg.c:60
+#: ../src/collect-dlg.c:60
 msgid "Invalid filename"
-msgstr "Nesprávne meno súboru"
+msgstr "Nesprávne meno súboru"
 
 # src/collect-dlg.c:69
-#: src/collect-dlg.c:69
+#: ../src/collect-dlg.c:69
 msgid "Overwrite File"
-msgstr "Prepísa» súbor"
+msgstr "Prepísať súbor"
 
 # src/utilops.c:339 src/utilops.c:459 src/utilops.c:826 src/utilops.c:1032
-#: src/collect-dlg.c:74
+#: ../src/collect-dlg.c:74
 msgid "Overwrite existing file?"
-msgstr "Prepísa» existujúci súbor?"
+msgstr "Prepísať existujúci súbor?"
 
 # src/collect-dlg.c:73 src/utilops.c:463 src/utilops.c:830 src/utilops.c:1036
-#: src/collect-dlg.c:76 src/utilops.c:660 src/utilops.c:990 src/utilops.c:1902
-#: src/utilops.c:2622
+#: ../src/collect-dlg.c:76
 msgid "_Overwrite"
-msgstr "Prepísa»"
+msgstr "_Prepísať"
+
+#: ../src/collect-dlg.c:127
+#, c-format
+msgid "No such file '%s'."
+msgstr ""
+
+#: ../src/collect-dlg.c:132
+#, c-format
+msgid "'%s' is a directory, not a collection file."
+msgstr ""
+
+#: ../src/collect-dlg.c:137
+#, c-format
+msgid "You do not have read permissions on the file '%s'."
+msgstr ""
+
+# src/collect-dlg.c:82 src/collect.c:1011
+#: ../src/collect-dlg.c:143
+#, fuzzy
+msgid "Can not open collection file"
+msgstr "nepodarilo sa otvoriť kolekciu (zápis) \"%s\"\n"
 
 # src/collect-dlg.c:165 src/collect-table.c:641
-#: src/collect-dlg.c:171
+#: ../src/collect-dlg.c:195
 msgid "Save collection"
-msgstr "Ulo¾i» zbierku"
+msgstr "Uložiť zbierku"
 
 # src/collect-dlg.c:172
-#: src/collect-dlg.c:178
+#: ../src/collect-dlg.c:202
 msgid "Open collection"
-msgstr "Otvori» zbierku"
+msgstr "Otvoriť zbierku"
 
 # src/collect-dlg.c:180
-#: src/collect-dlg.c:186
+#: ../src/collect-dlg.c:210
 msgid "Append collection"
-msgstr "Pripoji» zbierku"
+msgstr "Pripojiť zbierku"
 
 # src/collect-dlg.c:182
-#: src/collect-dlg.c:187
+#: ../src/collect-dlg.c:211
 msgid "_Append"
-msgstr "Pripoji»"
+msgstr "_Pripojiť"
 
 # src/collect-dlg.c:194
-#: src/collect-dlg.c:205
+#: ../src/collect-dlg.c:228
 msgid "Collection Files"
-msgstr "Súbory zbierok"
+msgstr "Súbory zbierok"
 
 # src/collect-dlg.c:206
-#: src/collect-dlg.c:223
+#: ../src/collect-dlg.c:245
 msgid "Collection empty"
-msgstr "Zbierka je prázdna"
+msgstr "Zbierka je prázdna"
 
 # src/collect-dlg.c:206
-#: src/collect-dlg.c:224
+#: ../src/collect-dlg.c:246
 msgid "The current collection is empty, save aborted."
-msgstr "Aktuálna zbierka je prázdna, neukladám."
+msgstr "Aktuálna zbierka je prázdna, neukladám."
 
 # src/collect-dlg.c:82 src/collect.c:1011
-#: src/collect-io.c:343
-#, fuzzy, c-format
+#: ../src/collect-io.c:346
+#, c-format
 msgid "failed to open collection (write) \"%s\"\n"
-msgstr ""
-"Ulo¾enie zbierky sa nepodarilo:\n"
-"%s"
+msgstr "nepodarilo sa otvoriť kolekciu (zápis) \"%s\"\n"
 
 # src/rcfile.c:132
-#: src/collect-io.c:368
-#, fuzzy, c-format
+#: ../src/collect-io.c:371
+#, c-format
 msgid ""
 "error saving collection file: %s\n"
 "error: %s\n"
-msgstr "chyba pri ukladaní konfiguraèného súboru: %s\n"
+msgstr ""
+"chyba pri ukladaní súboru kolekcie: %s\n"
+"chyba: %s\n"
 
-# src/collect-table.c:78 src/menu.c:684
-#: src/collect-table.c:167 src/layout.c:377 src/layout_util.c:965
-msgid "Empty"
-msgstr "Prázdne"
-
-# src/collect-table.c:82
-#: src/collect-table.c:171
-#, c-format
-msgid "%d images (%d)"
-msgstr "%d obrázkov (%d)"
+# src/filelist.c:86
+#: ../src/collect-table.c:211
+#, fuzzy, c-format
+msgid "%s, %d images (%s, %d)"
+msgstr "%s, %d súborov (%s, %d)"
 
 # src/collect-table.c:86
-#: src/collect-table.c:175
-#, c-format
-msgid "%d images"
-msgstr "%d obrázkov"
+#: ../src/collect-table.c:218
+#, fuzzy, c-format
+msgid "%s, %d images"
+msgstr "%d obrázkov"
+
+# src/collect-table.c:78 src/menu.c:684
+#: ../src/collect-table.c:223 ../src/layout_util.c:1206
+#: ../src/layout_util.c:2243
+msgid "Empty"
+msgstr "Prázdne"
 
 # src/collect-table.c:100 src/dupe.c:668 src/filelist.c:1811
-#: src/collect-table.c:189 src/dupe.c:1328 src/search.c:304
-#: src/view_file_icon.c:1779 src/view_file_icon.c:1895
-#: src/view_file_list.c:915 src/view_file_list.c:1031
+#: ../src/collect-table.c:237 ../src/dupe.c:1319 ../src/search.c:320
+#: ../src/view_file.c:835 ../src/view_file.c:942
 msgid "Loading thumbs..."
-msgstr "Naèítavam miniatúry..."
+msgstr "Načítavam náhľady..."
 
 # src/menu.c:753
-#: src/collect-table.c:776 src/dupe.c:2239 src/dupe.c:2554
-#: src/layout_util.c:1042 src/search.c:983
+#: ../src/collect-table.c:870 ../src/dupe.c:2246 ../src/dupe.c:2559
+#: ../src/layout_util.c:1253 ../src/search.c:1000
 msgid "_View"
-msgstr "Zobrazi»"
+msgstr "_Zobraziť"
 
 # src/collect-table.c:620 src/dupe.c:1388 src/dupe.c:1560 src/img-view.c:801
 # src/menu.c:906 src/menu.c:964
-#: src/collect-table.c:778 src/dupe.c:2241 src/dupe.c:2556 src/img-view.c:1282
-#: src/layout_image.c:759 src/pan-view.c:2814 src/search.c:985
-#: src/view_file.c:564
+#: ../src/collect-table.c:872 ../src/dupe.c:2248 ../src/dupe.c:2561
+#: ../src/img-view.c:1281 ../src/layout_image.c:505 ../src/pan-view.c:2845
+#: ../src/search.c:1002 ../src/view_file.c:588
 msgid "View in _new window"
-msgstr "Zobrazi» v _novom okne"
+msgstr "Zobraziť v _novom okne"
 
 # src/collect-table.c:622 src/dupe.c:1410 src/dupe.c:1568
-#: src/collect-table.c:781 src/dupe.c:2274 src/dupe.c:2564 src/search.c:1014
+#: ../src/collect-table.c:875 ../src/dupe.c:2282 ../src/dupe.c:2569
+#: ../src/search.c:1032
 msgid "Rem_ove"
-msgstr "Vymaza»"
+msgstr "_Odobrať"
 
 # src/collect-table.c:624
-#: src/collect-table.c:784
+#: ../src/collect-table.c:878
 msgid "Append from file list"
-msgstr "Pripoji» zo zoznamu súborov"
+msgstr "Pripojiť zo zoznamu súborov"
 
 # src/collect-table.c:625
-#: src/collect-table.c:786
+#: ../src/collect-table.c:880
 msgid "Append from collection..."
-msgstr "Pripoji» zo zbierky..."
+msgstr "Pripojiť zo zbierky..."
+
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/collect-table.c:884
+#, fuzzy
+msgid "_Selection"
+msgstr "Výber"
 
 # src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
-#: src/collect-table.c:789 src/dupe.c:2244 src/dupe.c:2559 src/search.c:988
+#: ../src/collect-table.c:886 ../src/dupe.c:2251 ../src/dupe.c:2564
+#: ../src/layout_util.c:1299 ../src/search.c:1005
 msgid "Select all"
-msgstr "Vybra» v¹etko"
+msgstr "Vybrať všetko"
 
 # src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/collect-table.c:791 src/dupe.c:2246 src/dupe.c:2561 src/search.c:990
+#: ../src/collect-table.c:888 ../src/dupe.c:2253 ../src/dupe.c:2566
+#: ../src/layout_util.c:1300 ../src/search.c:1007
 msgid "Select none"
-msgstr "Zru¹i» výber"
+msgstr "Zrušiť výber"
 
-# src/menu.c:748
-#: src/collect-table.c:799 src/dupe.c:2255 src/img-view.c:1280
-#: src/layout_image.c:756 src/layout_util.c:1096 src/pan-view.c:2811
-#: src/search.c:995 src/view_file.c:562
-msgid "_Properties"
-msgstr "Vlastnosti"
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/collect-table.c:890
+#, fuzzy
+msgid "Invert selection"
+msgstr "_Opačný výber"
 
 # src/collect-table.c:633 src/dupe.c:1401 src/img-view.c:804 src/menu.c:910
 # src/menu.c:969
-#: src/collect-table.c:802 src/dupe.c:2262 src/img-view.c:1286
-#: src/layout_image.c:767 src/layout_util.c:1067 src/pan-view.c:2818
-#: src/search.c:1002 src/view_file.c:568
+#: ../src/collect-table.c:902 ../src/dupe.c:2271 ../src/img-view.c:1285
+#: ../src/layout_image.c:513 ../src/layout_util.c:1282 ../src/pan-view.c:2849
+#: ../src/search.c:1021 ../src/view_file.c:592
 msgid "_Copy..."
-msgstr "Kopírova»..."
+msgstr "_Kopírovať..."
 
 # src/collect-table.c:634 src/dupe.c:1403 src/img-view.c:805 src/menu.c:912
 # src/menu.c:971
-#: src/collect-table.c:804 src/dupe.c:2264 src/img-view.c:1287
-#: src/layout_image.c:769 src/layout_util.c:1068 src/pan-view.c:2820
-#: src/search.c:1004 src/view_file.c:570
+#: ../src/collect-table.c:904 ../src/dupe.c:2273 ../src/img-view.c:1286
+#: ../src/layout_image.c:515 ../src/layout_util.c:1283 ../src/pan-view.c:2851
+#: ../src/search.c:1023 ../src/view_file.c:594
 msgid "_Move..."
-msgstr "Presunú»..."
+msgstr "_Presunúť..."
 
 # src/collect-table.c:635 src/dupe.c:1405 src/img-view.c:806 src/menu.c:914
 # src/menu.c:973
-#: src/collect-table.c:806 src/dupe.c:2266 src/img-view.c:1288
-#: src/layout_image.c:771 src/layout_util.c:1069 src/pan-view.c:2822
-#: src/search.c:1006 src/view_dir.c:608 src/view_file.c:572
+#: ../src/collect-table.c:906 ../src/dupe.c:2275 ../src/img-view.c:1287
+#: ../src/layout_image.c:517 ../src/layout_util.c:1284 ../src/pan-view.c:2853
+#: ../src/search.c:1025 ../src/view_dir.c:666 ../src/view_file.c:596
 msgid "_Rename..."
-msgstr "P_remenova»..."
+msgstr "_Premenovať..."
 
 # src/collect-table.c:636 src/dupe.c:1407 src/img-view.c:807 src/menu.c:916
 # src/menu.c:975
-#: src/collect-table.c:808 src/dupe.c:2268 src/img-view.c:1289
-#: src/layout_image.c:773 src/layout_util.c:1070 src/layout_util.c:1071
-#: src/layout_util.c:1072 src/pan-view.c:2824 src/search.c:1008
-#: src/view_dir.c:610 src/view_file.c:574
+#: ../src/collect-table.c:908 ../src/dupe.c:2277 ../src/img-view.c:1288
+#: ../src/layout_image.c:519 ../src/layout_util.c:1285
+#: ../src/layout_util.c:1286 ../src/layout_util.c:1287 ../src/pan-view.c:2855
+#: ../src/search.c:1027 ../src/view_dir.c:668 ../src/view_file.c:598
 msgid "_Delete..."
-msgstr "Vymaza»..."
+msgstr "_Odstrániť..."
 
 # src/utilops.c:592
-#: src/collect-table.c:811 src/dupe.c:2271 src/img-view.c:1291
-#: src/layout_image.c:778 src/layout_util.c:1073 src/pan-view.c:2827
-#: src/search.c:1011 src/view_dir.c:614 src/view_file.c:577
-#, fuzzy
+#: ../src/collect-table.c:910 ../src/dupe.c:2279 ../src/img-view.c:1289
+#: ../src/layout_image.c:522 ../src/pan-view.c:2857 ../src/search.c:1029
+#: ../src/view_dir.c:671 ../src/view_file.c:600
 msgid "_Copy path"
-msgstr "Kopírova»"
+msgstr "_Kopírovať cestu"
+
+# src/preferences.c:645
+#: ../src/collect-table.c:916
+#, fuzzy
+msgid "Randomize"
+msgstr "Náhodne"
+
+# src/menu.c:559
+#: ../src/collect-table.c:918 ../src/view_file.c:616
+msgid "_Sort"
+msgstr "_Usporiadať"
 
 # src/ui_pathsel.c:764
-#: src/collect-table.c:816 src/view_file.c:601
+#: ../src/collect-table.c:921 ../src/view_file.c:632
 msgid "Show filename _text"
-msgstr "Zobrazi» meno súboru"
+msgstr "Zobraziť _text mena súboru"
 
 # src/collect-dlg.c:165 src/collect-table.c:641
-#: src/collect-table.c:819
+#: ../src/collect-table.c:924
 msgid "_Save collection"
-msgstr "Ulo¾i» zbierku"
+msgstr "_Uložiť zbierku"
 
 # src/collect-table.c:642
-#: src/collect-table.c:821
+#: ../src/collect-table.c:926
 msgid "Save collection _as..."
-msgstr "Ulo¾i» zbierku _ako..."
+msgstr "Uložiť zbierku _ako..."
 
 # src/collect-table.c:644 src/menu.c:885
-#: src/collect-table.c:824 src/layout_util.c:1063
+#: ../src/collect-table.c:929 ../src/layout_util.c:1278
 msgid "_Find duplicates..."
-msgstr "Nájs» duplikáty..."
+msgstr "_Nájsť duplikáty..."
 
 # src/menu.c:721
-#: src/collect-table.c:826 src/dupe.c:2259 src/search.c:999
+#: ../src/collect-table.c:931 ../src/dupe.c:2268 ../src/layout_util.c:1280
+#: ../src/search.c:1018
 msgid "Print..."
-msgstr "Tlaè..."
+msgstr "Tlač..."
 
 # src/collect-table.c:1818 src/dupe.c:2170
-#: src/collect-table.c:1978 src/dupe.c:3355 src/img-view.c:1445
+#: ../src/collect-table.c:2097 ../src/dupe.c:3363 ../src/img-view.c:1443
 msgid "Dropped list includes folders."
-msgstr "Odstraòovaný zoznam obsahuje prieèinky."
+msgstr "Odstraňovaný zoznam obsahuje priečinky."
 
 # src/collect-table.c:1820 src/dupe.c:2172
-#: src/collect-table.c:1980 src/dupe.c:3357 src/img-view.c:1447
+#: ../src/collect-table.c:2099 ../src/dupe.c:3365 ../src/img-view.c:1445
 msgid "_Add contents"
-msgstr "Prid_a» obsah"
+msgstr "_Pridať obsah"
 
 # src/collect-table.c:1821 src/dupe.c:2173
-#: src/collect-table.c:1982 src/dupe.c:3358 src/img-view.c:1448
+#: ../src/collect-table.c:2101 ../src/dupe.c:3366 ../src/img-view.c:1446
 msgid "Add contents _recursive"
-msgstr "Prida» obsah _rekurzívne"
+msgstr "Pridať obsah _rekurzívne"
 
 # src/collect-table.c:1822 src/dupe.c:2174
-#: src/collect-table.c:1984 src/dupe.c:3359 src/img-view.c:1449
+#: ../src/collect-table.c:2103 ../src/dupe.c:3367 ../src/img-view.c:1447
 msgid "_Skip folders"
-msgstr "Pre_skoèi» prieèinky"
+msgstr "P_reskočiť priečinky"
 
 # src/collect-table.c:1824 src/dupe.c:2176 src/preferences.c:536
 # src/ui_utildlg.c:105
-#: src/collect-table.c:1987 src/dupe.c:3361 src/img-view.c:1451
-#: src/view_dir.c:343
+#: ../src/collect-table.c:2106 ../src/dupe.c:3369 ../src/img-view.c:1449
+#: ../src/view_dir.c:417
 msgid "Cancel"
-msgstr "Zru¹i»"
+msgstr "Zrušiť"
+
+#: ../src/color-man.c:420 ../src/exif.c:232 ../src/exif-common.c:432
+msgid "sRGB"
+msgstr "sRGB"
+
+#: ../src/color-man.c:422
+#, fuzzy
+msgid "Adobe RGB compatible"
+msgstr "Kompatibilné s AdobeRGB"
+
+# src/preferences.c:875
+#: ../src/color-man.c:430
+#, fuzzy
+msgid "Custom profile"
+msgstr "Používateľom definovaná tlačiareň"
+
+#: ../src/desktop_file.c:74 ../src/desktop_file.c:86 ../src/desktop_file.c:92
+msgid "Can't save"
+msgstr ""
+
+#: ../src/desktop_file.c:74
+msgid "Please specify file name."
+msgstr ""
+
+# src/utilops.c:1151
+#: ../src/desktop_file.c:86
+#, fuzzy
+msgid "Could not create directory"
+msgstr "Nemôžem vytvoriť priečinok"
+
+# src/utilops.c:989
+#: ../src/desktop_file.c:182 ../src/desktop_file.c:534
+#, fuzzy
+msgid "Desktop file"
+msgstr "Plocha"
+
+# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
+#: ../src/desktop_file.c:291 ../src/ui_pathsel.c:494
+#, c-format
+msgid ""
+"Unable to delete file:\n"
+"%s"
+msgstr ""
+"Nemožno odstrániť súbor:\n"
+"%s"
+
+# src/ui_pathsel.c:344 src/utilops.c:728
+#: ../src/desktop_file.c:292 ../src/ui_pathsel.c:495 ../src/utilops.c:1962
+#: ../src/utilops.c:1989 ../src/utilops.c:2509
+msgid "File deletion failed"
+msgstr "Nepodarilo sa odstrániť súbor"
+
+# src/ui_pathsel.c:398 src/utilops.c:760
+#: ../src/desktop_file.c:336 ../src/desktop_file.c:344 ../src/ui_pathsel.c:537
+#: ../src/ui_pathsel.c:545
+msgid "Delete file"
+msgstr "Odstrániť súbor"
+
+# src/ui_pathsel.c:397 src/utilops.c:759
+#: ../src/desktop_file.c:342 ../src/ui_pathsel.c:543
+#, c-format
+msgid ""
+"About to delete the file:\n"
+" %s"
+msgstr ""
+"Pripravený odstrániť súbor:\n"
+" %s"
+
+# src/utilops.c:989
+#: ../src/desktop_file.c:374
+#, fuzzy
+msgid "new.desktop"
+msgstr "Plocha"
+
+# src/preferences.c:915
+#: ../src/desktop_file.c:453
+msgid "Editors"
+msgstr "Editory"
+
+#: ../src/desktop_file.c:524
+msgid "Hidden"
+msgstr ""
+
+# src/dupe.c:1657 src/dupe.c:1945
+#: ../src/desktop_file.c:543 ../src/dupe.c:2657 ../src/dupe.c:3177
+#: ../src/print.c:3215 ../src/search.c:2856 ../src/ui_pathsel.c:1111
+#: ../src/utilops.c:458
+msgid "Path"
+msgstr "Cesta"
 
 # src/dupe.c:61
-#: src/dupe.c:99
+#: ../src/dupe.c:100
 msgid "Drop files to compare them."
-msgstr "Pritiahnu» súbory pre ich porovnanie."
+msgstr "Vložte súbory pre ich porovnanie."
 
 # src/dupe.c:67 src/dupe.c:1449
-#: src/dupe.c:103
+#: ../src/dupe.c:104
 #, c-format
 msgid "%d files"
-msgstr "%d súborov"
+msgstr "%d súborov"
 
 # src/dupe.c:71
-#: src/dupe.c:107
+#: ../src/dupe.c:108
 #, c-format
 msgid "%d matches found in %d files"
-msgstr "%d zhôd, v %d súboroch"
+msgstr "%d zhôd, v %d súboroch"
 
-#: src/dupe.c:112
+#: ../src/dupe.c:113
 msgid "[set 1]"
 msgstr "[sada 1]"
 
 # src/dupe.c:775
-#: src/dupe.c:1454
+#: ../src/dupe.c:1445
 msgid "Reading checksums..."
-msgstr "Naèítavam kontrolné súèty..."
+msgstr "Načítavam kontrolné súčty..."
 
 # src/dupe.c:807
-#: src/dupe.c:1487
+#: ../src/dupe.c:1478
 msgid "Reading dimensions..."
-msgstr "Naèítavam rozmery..."
+msgstr "Načítavam rozmery..."
 
 # src/dupe.c:841
-#: src/dupe.c:1521
+#: ../src/dupe.c:1512
 msgid "Reading similarity data..."
-msgstr "Naèítavam podobnostné dáta..."
+msgstr "Načítavam podobnostné dáta..."
 
 # src/dupe.c:871 src/dupe.c:892
-#: src/dupe.c:1556 src/dupe.c:1587
+#: ../src/dupe.c:1548 ../src/dupe.c:1579
 msgid "Comparing..."
-msgstr "Porovnávam..."
+msgstr "Porovnávam..."
 
 # src/dupe.c:871 src/dupe.c:892
-#: src/dupe.c:1567 src/pan-view.c:1093
+#: ../src/dupe.c:1559 ../src/pan-view.c:1094
 msgid "Sorting..."
 msgstr "Triedim..."
 
-#: src/dupe.c:2248
+#: ../src/dupe.c:2255
 msgid "Select group _1 duplicates"
-msgstr "Vybra» skupinu _1 duplikátov"
+msgstr "Vybrať skupinu _1 duplikátov"
 
-#: src/dupe.c:2250
+#: ../src/dupe.c:2257
 msgid "Select group _2 duplicates"
-msgstr "Vybra» skupinu _2 duplikátov"
+msgstr "Vybrať skupinu _2 duplikátov"
 
 # src/dupe.c:1398
-#: src/dupe.c:2257 src/search.c:997
+#: ../src/dupe.c:2266 ../src/search.c:1016
 msgid "Add to new collection"
-msgstr "Prida» do novej zbierky"
+msgstr "Pridať do novej zbierky"
 
 # src/dupe.c:1412 src/dupe.c:1570
-#: src/dupe.c:2276 src/dupe.c:2566 src/search.c:1016
+#: ../src/dupe.c:2284 ../src/dupe.c:2571 ../src/search.c:1034
 msgid "C_lear"
-msgstr "Vymaza»"
+msgstr "_Vyčistiť"
 
 # src/dupe.c:1415 src/dupe.c:1573 src/img-view.c:841
-#: src/dupe.c:2279 src/dupe.c:2569
+#: ../src/dupe.c:2287 ../src/dupe.c:2574
 msgid "Close _window"
-msgstr "Zavrie» okno"
+msgstr "Zavrieť _okno"
 
 # src/filelist.c:88
-#: src/dupe.c:2439
+#: ../src/dupe.c:2447
 #, c-format
 msgid "%d files (set 2)"
-msgstr "%d súborov (sada 2)"
+msgstr "%d súborov (sada 2)"
 
-#: src/dupe.c:2647
-#, fuzzy
+#: ../src/dupe.c:2652
 msgid "Name case-insensitive"
-msgstr "Triedenie citlivé na veµkos» znakov"
+msgstr "Názov necitlivý na veľkosť znakov"
 
 # src/dupe.c:1653 src/dupe.c:1942
-#: src/dupe.c:2648 src/dupe.c:3168 src/preferences.c:1026 src/print.c:3238
-#: src/search.c:2761 src/view_file_list.c:1823
+#: ../src/dupe.c:2653 ../src/dupe.c:3174 ../src/preferences.c:1416
+#: ../src/print.c:3219 ../src/search.c:2853 ../src/view_file_list.c:2050
 msgid "Size"
-msgstr "Veµkos»"
+msgstr "Veľkosť"
 
 # src/dupe.c:1654 src/dupe.c:1943
-#: src/dupe.c:2649 src/dupe.c:3169 src/exif.c:339 src/exif-common.c:442
-#: src/print.c:3236 src/search.c:2762 src/view_file_list.c:1824
+#: ../src/dupe.c:2654 ../src/dupe.c:3175 ../src/exif.c:341
+#: ../src/exif-common.c:543 ../src/print.c:3217 ../src/search.c:2854
+#: ../src/view_file_list.c:2054
 msgid "Date"
-msgstr "Dátum"
+msgstr "Dátum"
 
 # src/dupe.c:1655 src/dupe.c:1944
-#: src/dupe.c:2650 src/dupe.c:3170 src/print.c:3240 src/search.c:2763
+#: ../src/dupe.c:2655 ../src/dupe.c:3176 ../src/print.c:3221
+#: ../src/search.c:2855
 msgid "Dimensions"
 msgstr "Rozmery"
 
 # src/dupe.c:1656
-#: src/dupe.c:2651
+#: ../src/dupe.c:2656
 msgid "Checksum"
-msgstr "Kontrolný súèet"
-
-# src/dupe.c:1657 src/dupe.c:1945
-#: src/dupe.c:2652 src/dupe.c:3171 src/print.c:3234 src/search.c:2764
-#: src/ui_pathsel.c:1115
-msgid "Path"
-msgstr "Cesta"
+msgstr "Kontrolný súčet"
 
 # src/dupe.c:1658
-#: src/dupe.c:2653
+#: ../src/dupe.c:2658
 msgid "Similarity (high)"
-msgstr "Podobnos» (vysoká)"
+msgstr "Podobnosť (vysoká)"
 
 # src/dupe.c:1659
-#: src/dupe.c:2654
+#: ../src/dupe.c:2659
 msgid "Similarity"
-msgstr "Podobnos»"
+msgstr "Podobnosť"
 
 # src/dupe.c:1660
-#: src/dupe.c:2655
+#: ../src/dupe.c:2660
 msgid "Similarity (low)"
-msgstr "Podobnos» (nízka)"
+msgstr "Podobnosť (nízka)"
 
 # src/dupe.c:1660
-#: src/dupe.c:2656
+#: ../src/dupe.c:2661
 msgid "Similarity (custom)"
-msgstr "Podobnos» (voliteµná)"
+msgstr "Podobnosť (vlastná)"
 
 # src/collect-table.c:644 src/menu.c:885
-#: src/dupe.c:3121
-#, fuzzy
+#: ../src/dupe.c:3127
 msgid "Find duplicates"
-msgstr "Nájs» duplikáty..."
+msgstr "Nájsť duplikáty"
 
 # src/dupe.c:1948
-#: src/dupe.c:3203
+#: ../src/dupe.c:3209
 msgid "Compare to:"
-msgstr "Porovna» s:"
+msgstr "Porovnať s:"
 
 # src/dupe.c:2045
-#: src/dupe.c:3216
+#: ../src/dupe.c:3222
 msgid "Compare by:"
-msgstr "Porovna» podµa:"
+msgstr "Porovnať podľa:"
 
 # src/dupe.c:2054 src/preferences.c:586
-#: src/dupe.c:3224 src/preferences.c:884 src/search.c:2777
+#: ../src/dupe.c:3230 ../src/preferences.c:1248 ../src/search.c:2869
 msgid "Thumbnails"
-msgstr "Miniatúry"
+msgstr "Náhľady"
 
 # src/dupe.c:2060
-#: src/dupe.c:3231
+#: ../src/dupe.c:3237
 msgid "Compare two file sets"
-msgstr "Porovna» dve sady súborov"
-
-# src/main.c:552
-#: src/editors.c:61
-msgid "The Gimp"
-msgstr "Gimp"
-
-# src/main.c:558
-#: src/editors.c:62
-msgid "XV"
-msgstr "XV"
-
-# src/main.c:561
-#: src/editors.c:63
-msgid "Xpaint"
-msgstr "Xpaint"
-
-#: src/editors.c:64
-msgid "UFraw"
-msgstr ""
-
-#: src/editors.c:65
-msgid "Add XMP sidecar"
-msgstr ""
-
-# src/menu.c:572
-#: src/editors.c:69
-msgid "Rotate jpeg clockwise"
-msgstr ""
-"Rotova» jpeg v smere\n"
-"hodinových ruèièiek"
+msgstr "Porovnať dve sady súborov"
 
-# src/menu.c:575
-#: src/editors.c:70
-msgid "Rotate jpeg counterclockwise"
-msgstr ""
-"Rotova» jpeg proti smeru\n"
-"hodinových ruèièiek"
-
-#. for testing
-#: src/editors.c:74 src/editors.c:80
-msgid "External Copy command"
-msgstr ""
-
-#: src/editors.c:75 src/editors.c:81
-msgid "External Move command"
-msgstr ""
-
-#: src/editors.c:76 src/editors.c:82
-msgid "External Rename command"
+#: ../src/editors.c:280
+#, c-format
+msgid "Desktop file '%s' should not include extension in Icon key: '%s'\n"
 msgstr ""
 
-# src/preferences.c:669
-#: src/editors.c:77 src/editors.c:83
-#, fuzzy
-msgid "External Delete command"
-msgstr "Povoli» klávesu Delete"
+# src/utilops.c:343
+#. flash fired (bit 0)
+#: ../src/editors.c:334 ../src/exif.c:225 ../src/exif-common.c:361
+msgid "yes"
+msgstr "áno"
 
-#: src/editors.c:78 src/editors.c:84
-msgid "External New Folder command"
-msgstr ""
+#: ../src/editors.c:334 ../src/exif.c:224 ../src/exif-common.c:361
+msgid "no"
+msgstr "nie"
 
 # src/dupe.c:871 src/dupe.c:892
-#: src/editors.c:140
+#: ../src/editors.c:506
 msgid "stopping..."
 msgstr "zastavujem..."
 
-#: src/editors.c:161
+#: ../src/editors.c:527
 msgid "Edit command results"
-msgstr "Výsledky z príkazu na úpravu"
+msgstr "Výsledky z príkazu na úpravu"
 
-#: src/editors.c:164
+#: ../src/editors.c:530
 #, c-format
 msgid "Output of %s"
-msgstr "Výstup z %s"
+msgstr "Výstup z %s"
 
 # src/ui_help.c:191
-#: src/editors.c:603
+#: ../src/editors.c:1053
 #, c-format
 msgid ""
 "Failed to run command:\n"
 "%s\n"
 msgstr ""
-"Nepodarilo sa spusti» príkaz:\n"
+"Nepodarilo sa spustiť príkaz:\n"
 "%s\n"
 
 # src/menu.c:522
-#: src/editors.c:721
+#: ../src/editors.c:1180
 msgid "stopped by user"
-msgstr "zastavené pou¾ívateµom"
+msgstr "zastavené používateľom"
 
-#: src/editors.c:836
-msgid "Editor template is empty."
+#: ../src/editors.c:1265
+#, c-format
+msgid ""
+"%s\n"
+"\"%s\""
 msgstr ""
 
-#: src/editors.c:837
+# src/utilops.c:543
+#: ../src/editors.c:1267
+#, fuzzy
+msgid "Invalid editor command"
+msgstr "Chybný adresár"
+
+#: ../src/editors.c:1354
+msgid "Editor template is empty."
+msgstr "Šablóna editora je prázdna."
+
+#: ../src/editors.c:1355
 msgid "Editor template has incorrect syntax."
-msgstr ""
+msgstr "Šablóna editora má nesprávnu syntax."
 
-#: src/editors.c:838
+#: ../src/editors.c:1356
 msgid "Editor template uses incompatible macros."
-msgstr ""
+msgstr "Šablóna editora používa nekompatibilné makrá."
 
-#: src/editors.c:839
+#: ../src/editors.c:1357
 msgid "Can't find matching file type."
-msgstr ""
+msgstr "Nepodarilo sa nájsť požadovaný typ súboru."
 
-#: src/editors.c:840
+#: ../src/editors.c:1358
 msgid "Can't execute external editor."
-msgstr ""
+msgstr "Nepodarilo sa spustiť externý editor."
 
-#: src/editors.c:841
+#: ../src/editors.c:1359
 msgid "External editor returned error status."
-msgstr ""
+msgstr "Externý editor vrátil chybový stav."
 
-#: src/editors.c:842
+#: ../src/editors.c:1360
 msgid "File was skipped."
-msgstr ""
+msgstr "Súbor bol preskočený."
 
-#: src/editors.c:843
+#: ../src/editors.c:1361
 msgid "Unknown error."
-msgstr ""
+msgstr "Neznáma chyba."
 
 # src/menu.c:432 src/menu.c:461
-#: src/exif.c:145 src/exif.c:158 src/exif.c:172 src/exif.c:197 src/exif.c:314
-#: src/exif.c:625 src/exif-common.c:308 src/exif-common.c:311
-#: src/exif-common.c:378
+#: ../src/exif.c:147 ../src/exif.c:160 ../src/exif.c:174 ../src/exif.c:199
+#: ../src/exif.c:316 ../src/exif.c:663 ../src/exif-common.c:337
+#: ../src/exif-common.c:340 ../src/exif-common.c:407
 msgid "unknown"
-msgstr "neznámy"
+msgstr "neznáme"
 
 # src/ui_pathsel.c:402 src/ui_pathsel.c:461 src/utilops.c:711
 # src/utilops.c:764
-#: src/exif.c:146
+#: ../src/exif.c:148
 msgid "top left"
-msgstr "hore vµavo"
+msgstr "hore vľavo"
 
-#: src/exif.c:147
+#: ../src/exif.c:149
 msgid "top right"
 msgstr "hore vpravo"
 
-#: src/exif.c:148
+#: ../src/exif.c:150
 msgid "bottom right"
 msgstr "dole vpravo"
 
-#: src/exif.c:149
+#: ../src/exif.c:151
 msgid "bottom left"
-msgstr "dole vµavo"
+msgstr "dole vľavo"
 
 # src/ui_pathsel.c:402 src/ui_pathsel.c:461 src/utilops.c:711
 # src/utilops.c:764
-#: src/exif.c:150
+#: ../src/exif.c:152
 msgid "left top"
-msgstr "vµavo hore"
+msgstr "vľavo hore"
 
-#: src/exif.c:151
+#: ../src/exif.c:153
 msgid "right top"
 msgstr "vpravo hore"
 
-#: src/exif.c:152
+#: ../src/exif.c:154
 msgid "right bottom"
 msgstr "vpravo dole"
 
-#: src/exif.c:153
+#: ../src/exif.c:155
 msgid "left bottom"
-msgstr "vµavo dole"
+msgstr "vľavo dole"
 
-#: src/exif.c:160
+#: ../src/exif.c:162
 msgid "inch"
 msgstr "palec"
 
-#: src/exif.c:161
+#: ../src/exif.c:163
 msgid "centimeter"
 msgstr "centimeter"
 
-#: src/exif.c:173
+#: ../src/exif.c:175
 msgid "average"
-msgstr "priemerný"
+msgstr "priemerné"
 
-#: src/exif.c:174
+#: ../src/exif.c:176
 msgid "center weighted"
-msgstr "stredovo vyvá¾ený"
+msgstr "stredovo vyvážené"
 
-#: src/exif.c:175
+#: ../src/exif.c:177
 msgid "spot"
-msgstr "bodový"
+msgstr "bodové"
 
-#: src/exif.c:176
+#: ../src/exif.c:178
 msgid "multi-spot"
-msgstr "viacbodový"
+msgstr "viacbodové"
 
-#: src/exif.c:177
+#: ../src/exif.c:179
 msgid "multi-segment"
-msgstr "viacsegmentový"
+msgstr "viacsegmentové"
 
-#: src/exif.c:178
+#: ../src/exif.c:180
 msgid "partial"
-msgstr "èiastoèný"
+msgstr "čiastočné"
 
-#: src/exif.c:179 src/exif.c:217
+#: ../src/exif.c:181 ../src/exif.c:219
 msgid "other"
-msgstr "iné"
+msgstr "iné"
 
-#: src/exif.c:184 src/exif.c:236
+#: ../src/exif.c:186 ../src/exif.c:238
 msgid "not defined"
-msgstr "nedefinované"
+msgstr "nedefinované"
 
-#: src/exif.c:185 src/exif.c:264 src/exif.c:271
+#: ../src/exif.c:187 ../src/exif.c:266 ../src/exif.c:273
 msgid "manual"
-msgstr "manuálne"
+msgstr "manuálne"
 
 # src/preferences.c:401
-#: src/exif.c:186 src/exif.c:257 src/exif.c:293 src/exif.c:300 src/exif.c:307
+#: ../src/exif.c:188 ../src/exif.c:259 ../src/exif.c:295 ../src/exif.c:302
+#: ../src/exif.c:309
 msgid "normal"
-msgstr "normálne"
+msgstr "normálne"
 
-#: src/exif.c:187
+#: ../src/exif.c:189
 msgid "aperture"
 msgstr "clona"
 
-#: src/exif.c:188
+#: ../src/exif.c:190
 msgid "shutter"
-msgstr "uzávierka"
+msgstr "uzávierka"
 
 # src/utilops.c:1216
-#: src/exif.c:189
+#: ../src/exif.c:191
 msgid "creative"
-msgstr "tvorivý"
+msgstr "tvorivý"
 
-#: src/exif.c:190
+#: ../src/exif.c:192
 msgid "action"
 msgstr "akcia"
 
-#: src/exif.c:191 src/exif.c:278
+#: ../src/exif.c:193 ../src/exif.c:280
 msgid "portrait"
-msgstr "na vý¹ku"
+msgstr "na výšku"
 
-#: src/exif.c:192 src/exif.c:277
+#: ../src/exif.c:194 ../src/exif.c:279
 msgid "landscape"
-msgstr "na ¹írku"
+msgstr "na šírku"
 
-#: src/exif.c:198
+#: ../src/exif.c:200
 msgid "daylight"
-msgstr "denné svetlo"
+msgstr "denné svetlo"
 
-#: src/exif.c:199
+#: ../src/exif.c:201
 msgid "fluorescent"
-msgstr "fluorescenèné"
+msgstr "fluorescenčné"
 
-#: src/exif.c:200
+#: ../src/exif.c:202
 msgid "tungsten (incandescent)"
-msgstr "volfrám (roz¾eravený)"
+msgstr "volfrám (rozžeravený)"
 
-#: src/exif.c:201
+#: ../src/exif.c:203
 msgid "flash"
 msgstr "blesk"
 
-#: src/exif.c:202
+#: ../src/exif.c:204
 msgid "fine weather"
-msgstr ""
+msgstr "dobré počasie"
 
-#: src/exif.c:203
+#: ../src/exif.c:205
 msgid "cloudy weather"
-msgstr ""
+msgstr "oblačno"
 
-#: src/exif.c:204
+#: ../src/exif.c:206
 msgid "shade"
-msgstr ""
+msgstr "tieň"
 
-#: src/exif.c:205
-#, fuzzy
+#: ../src/exif.c:207
 msgid "daylight fluorescent"
-msgstr "fluorescenèné"
+msgstr "denné svetlo fluorescenčné"
 
-#: src/exif.c:206
-#, fuzzy
+#: ../src/exif.c:208
 msgid "day white fluorescent"
-msgstr "fluorescenèné"
+msgstr "denná biela fluorescenčná"
 
-#: src/exif.c:207
-#, fuzzy
+#: ../src/exif.c:209
 msgid "cool white fluorescent"
-msgstr "fluorescenèné"
+msgstr "studené biele fluorescenčné"
 
-#: src/exif.c:208
-#, fuzzy
+#: ../src/exif.c:210
 msgid "white fluorescent"
-msgstr "fluorescenèné"
+msgstr "biele fluorescenčné"
 
-#: src/exif.c:209
+#: ../src/exif.c:211
 msgid "standard light A"
-msgstr ""
+msgstr "štandardné svetlo A"
 
-#: src/exif.c:210
+#: ../src/exif.c:212
 msgid "standard light B"
-msgstr ""
+msgstr "štandardné svetlo B"
 
-#: src/exif.c:211
+#: ../src/exif.c:213
 msgid "standard light C"
-msgstr ""
+msgstr "štandardné svetlo C"
 
-#: src/exif.c:212
+#: ../src/exif.c:214
 msgid "D55"
-msgstr ""
+msgstr "D55"
 
-#: src/exif.c:213
+#: ../src/exif.c:215
 msgid "D65"
-msgstr ""
+msgstr "D65"
 
-#: src/exif.c:214
+#: ../src/exif.c:216
 msgid "D75"
-msgstr ""
+msgstr "D75"
 
-#: src/exif.c:215
+#: ../src/exif.c:217
 msgid "D50"
-msgstr ""
+msgstr "D50"
 
-#: src/exif.c:216
+#: ../src/exif.c:218
 msgid "ISO studio tungsten"
-msgstr ""
+msgstr "Štúdiové svetlo ISO"
 
-#: src/exif.c:222 src/exif-common.c:332 src/info.c:257
-msgid "no"
-msgstr "nie"
-
-# src/utilops.c:343
-#. flash fired (bit 0)
-#: src/exif.c:223 src/exif-common.c:332 src/info.c:257
-msgid "yes"
-msgstr "áno"
-
-#: src/exif.c:224
+#: ../src/exif.c:226
 msgid "yes, not detected by strobe"
-msgstr "áno, nedetekované snímacím impulzom"
+msgstr "áno, nedetegované snímacím impulzom"
 
-#: src/exif.c:225
+#: ../src/exif.c:227
 msgid "yes, detected by strobe"
-msgstr "áno, detekované snímacím impulzom"
-
-#: src/exif.c:230 src/exif-common.c:403 src/layout.c:422
-msgid "sRGB"
-msgstr ""
+msgstr "áno, detegované snímacím impulzom"
 
-#: src/exif.c:231
+#: ../src/exif.c:233
 msgid "uncalibrated"
-msgstr ""
+msgstr "nekalibrované"
 
-#: src/exif.c:237
+#: ../src/exif.c:239
 msgid "1 chip color area"
-msgstr ""
+msgstr "1 farebná oblasť čipu"
 
-#: src/exif.c:238
+#: ../src/exif.c:240
 msgid "2 chip color area"
-msgstr ""
+msgstr "2 farebná oblasť čipu"
 
-#: src/exif.c:239
+#: ../src/exif.c:241
 msgid "3 chip color area"
-msgstr ""
+msgstr "3 farebná oblasť čipu"
 
-#: src/exif.c:240
+#: ../src/exif.c:242
 msgid "color sequential area"
 msgstr ""
 
 # src/preferences.c:369
-#: src/exif.c:241
-#, fuzzy
+#: ../src/exif.c:243
 msgid "trilinear"
-msgstr "Bilineárne"
+msgstr "trilineárne"
 
-#: src/exif.c:242
+#: ../src/exif.c:244
 msgid "color sequential linear"
 msgstr ""
 
-#: src/exif.c:247
+#: ../src/exif.c:249
 msgid "digital still camera"
-msgstr ""
+msgstr "digitálny fotoaparát"
 
-#: src/exif.c:252
+#: ../src/exif.c:254
 msgid "direct photo"
-msgstr ""
+msgstr "direct photo"
 
-#: src/exif.c:258
-#, fuzzy
+#: ../src/exif.c:260
 msgid "custom"
-msgstr "Pou¾ívateµské"
+msgstr "vlastné"
 
-#: src/exif.c:263 src/exif.c:270 src/exif-common.c:346
+#: ../src/exif.c:265 ../src/exif.c:272 ../src/exif-common.c:375
 msgid "auto"
 msgstr "automaticky"
 
 # src/preferences.c:930
-#: src/exif.c:265
-#, fuzzy
+#: ../src/exif.c:267
 msgid "auto bracket"
-msgstr "Automatické premenovanie"
+msgstr ""
 
 # src/dupe.c:1412 src/dupe.c:1570
-#: src/exif.c:276
-#, fuzzy
+#: ../src/exif.c:278
 msgid "standard"
-msgstr "Kalendár"
+msgstr "štandard"
 
-#: src/exif.c:279
-#, fuzzy
+#: ../src/exif.c:281
 msgid "night scene"
-msgstr "Zdroj svetla"
+msgstr "nočná scéna"
 
 # src/preferences.c:400
-#: src/exif.c:284
-#, fuzzy
+#: ../src/exif.c:286
 msgid "none"
-msgstr "hotovo"
+msgstr "žiadne"
 
 # src/dupe.c:1412 src/dupe.c:1570
-#: src/exif.c:285
+#: ../src/exif.c:287
 #, fuzzy
 msgid "low gain up"
-msgstr "Vyèisti»"
+msgstr "Vyčistiť"
 
-#: src/exif.c:286
+#: ../src/exif.c:288
 msgid "high gain up"
-msgstr ""
+msgstr "zvýšiť vysoký zisk"
 
 # src/dupe.c:1415 src/dupe.c:1573 src/img-view.c:841
-#: src/exif.c:287
-#, fuzzy
+#: ../src/exif.c:289
 msgid "low gain down"
-msgstr "Zavrie» okno"
+msgstr ""
 
-#: src/exif.c:288
+#: ../src/exif.c:290
 msgid "high gain down"
-msgstr ""
+msgstr "znížiť vysoký zisk"
 
-#: src/exif.c:294 src/exif.c:308
-#, fuzzy
+#: ../src/exif.c:296 ../src/exif.c:310
 msgid "soft"
-msgstr "bodový"
+msgstr "mäkké"
 
-#: src/exif.c:295 src/exif.c:309
+#: ../src/exif.c:297 ../src/exif.c:311
 msgid "hard"
-msgstr ""
+msgstr "pevné"
 
-#: src/exif.c:301
+#: ../src/exif.c:303
 msgid "low"
-msgstr ""
+msgstr "nízke"
 
-#: src/exif.c:302
-#, fuzzy
+#: ../src/exif.c:304
 msgid "high"
-msgstr "Vý¹ka"
+msgstr "vysoké"
 
-#: src/exif.c:315
+#: ../src/exif.c:317
 msgid "macro"
-msgstr ""
+msgstr "makro"
 
 # src/collect.c:1053 src/ui_help.c:302
-#: src/exif.c:316
-#, fuzzy
+#: ../src/exif.c:318
 msgid "close"
-msgstr "Zavrie»"
+msgstr "zavrieť"
 
-#: src/exif.c:317
+#: ../src/exif.c:319
 msgid "distant"
-msgstr ""
+msgstr "vzdialené"
 
 # src/preferences.c:676
-#: src/exif.c:327
-#, fuzzy
+#: ../src/exif.c:329
 msgid "Image Width"
-msgstr "Súbor obrázku"
+msgstr "Šírka obrázku"
 
-#: src/exif.c:328
-#, fuzzy
+#: ../src/exif.c:330
 msgid "Image Height"
-msgstr "Vý¹ka"
+msgstr "Výška obrázku"
 
-#: src/exif.c:329
+#: ../src/exif.c:331
 msgid "Bits per Sample/Pixel"
-msgstr ""
+msgstr "Bitov na vzorku/pixel"
 
 # src/dupe.c:1948
-#: src/exif.c:330
-#, fuzzy
+#: ../src/exif.c:332
 msgid "Compression"
-msgstr "Kompresný pomer:"
+msgstr "Kompresia"
 
 # src/utilops.c:539
-#: src/exif.c:331
+#: ../src/exif.c:333
 msgid "Image description"
-msgstr "Popis obrázku"
+msgstr "Popis obrázku"
 
-#: src/exif.c:332
-#, fuzzy
+#: ../src/exif.c:334
 msgid "Camera make"
-msgstr "Fotoaparát"
+msgstr "Vydanie fotoaparátu"
 
-#: src/exif.c:333
-#, fuzzy
+#: ../src/exif.c:335
 msgid "Camera model"
-msgstr "Fotoaparát"
+msgstr "Model fotoaparátu"
 
 # src/dupe.c:1655 src/dupe.c:1944
-#: src/exif.c:334
+#: ../src/exif.c:336
 msgid "Orientation"
-msgstr "Orientácia"
+msgstr "Orientácia"
 
-#: src/exif.c:335
-#, fuzzy
+#: ../src/exif.c:337
 msgid "X resolution"
-msgstr "Rozlí¹enie"
+msgstr "Rozlíšenie X"
 
-#: src/exif.c:336
-#, fuzzy
+#: ../src/exif.c:338
 msgid "Y Resolution"
-msgstr "Rozlí¹enie"
+msgstr "Rozlíšenie Y"
 
-#: src/exif.c:337
-#, fuzzy
+#: ../src/exif.c:339
 msgid "Resolution units"
-msgstr "Rozlí¹enie"
+msgstr "Jednotky rozlíšenia"
 
-#: src/exif.c:338
+#: ../src/exif.c:340
 msgid "Firmware"
-msgstr ""
+msgstr "Firmvér"
 
-#: src/exif.c:340
+#: ../src/exif.c:342
 msgid "White point"
-msgstr ""
+msgstr "Biely bod"
 
-#: src/exif.c:341
+#: ../src/exif.c:343
 msgid "Primary chromaticities"
-msgstr ""
+msgstr "Primárne chromaticity"
 
-#: src/exif.c:342
+#: ../src/exif.c:344
 msgid "YCbCy coefficients"
-msgstr ""
+msgstr "YCbCy koeficienty"
 
-#: src/exif.c:343
+#: ../src/exif.c:345
 msgid "YCbCr positioning"
-msgstr ""
+msgstr "YCbCr poziciovanie"
 
 # src/utilops.c:942 src/utilops.c:1091
-#: src/exif.c:344
-#, fuzzy
+#: ../src/exif.c:346
 msgid "Black white reference"
-msgstr "Geeqie - Nastavenia"
-
-# src/utilops.c:592
-#: src/exif.c:345
-msgid "Copyright"
-msgstr "Autorské práva"
+msgstr "Čierno-biela referencia"
 
-#: src/exif.c:346
+#: ../src/exif.c:348
 msgid "SubIFD Exif offset"
-msgstr ""
+msgstr "SubIFD Exif posun"
 
 #. subIFD follows
-#: src/exif.c:348
-#, fuzzy
+#: ../src/exif.c:350
 msgid "Exposure time (seconds)"
-msgstr "Skreslenie expozície"
+msgstr "Čas expozície (sekúnd)"
 
-#: src/exif.c:349
+#: ../src/exif.c:351
 msgid "FNumber"
-msgstr ""
+msgstr "Číslo F"
 
-#: src/exif.c:350
+#: ../src/exif.c:352
 msgid "Exposure program"
-msgstr "Expozièný program"
+msgstr "Expozičný program"
 
-#: src/exif.c:351
-#, fuzzy
+#: ../src/exif.c:353
 msgid "Spectral Sensitivity"
-msgstr "Citlivos» ISO"
+msgstr "Spektrálna citlivosť"
 
-#: src/exif.c:352 src/exif.c:388 src/exif-common.c:446
+#: ../src/exif.c:354 ../src/exif.c:390 ../src/exif-common.c:547
 msgid "ISO sensitivity"
-msgstr "Citlivos» ISO"
+msgstr "Citlivosť ISO"
 
-#: src/exif.c:353
+#: ../src/exif.c:355
 msgid "Optoelectric conversion factor"
-msgstr ""
+msgstr "Optoelektrický konverzný faktor"
 
-#: src/exif.c:354
+#: ../src/exif.c:356
 msgid "Exif version"
-msgstr ""
+msgstr "Exif verzia"
 
-#: src/exif.c:355
+#: ../src/exif.c:357
 msgid "Date original"
-msgstr "Dátum originálu"
+msgstr "Dátum originálu"
 
-#: src/exif.c:356
+#: ../src/exif.c:358
 msgid "Date digitized"
-msgstr "Dátum digitalizácie"
+msgstr "Dátum digitalizácie"
 
 # src/ui_pathsel.c:799
-#: src/exif.c:357
-#, fuzzy
+#: ../src/exif.c:359
 msgid "Pixel format"
-msgstr "Formát súboru:"
+msgstr "Formát pixlov"
 
 # src/dupe.c:1948
-#: src/exif.c:358
-#, fuzzy
+#: ../src/exif.c:360
 msgid "Compression ratio"
-msgstr "Kompresný pomer:"
+msgstr "Kompresný pomer"
 
-#: src/exif.c:359 src/exif-common.c:443
+#: ../src/exif.c:361 ../src/exif-common.c:544
 msgid "Shutter speed"
-msgstr "Rýchlos» uzávierky"
+msgstr "Rýchlosť uzávierky"
 
-#: src/exif.c:360 src/exif-common.c:444
+#: ../src/exif.c:362 ../src/exif-common.c:545
 msgid "Aperture"
 msgstr "Clona"
 
-#: src/exif.c:361
+#: ../src/exif.c:363
 msgid "Brightness"
-msgstr ""
+msgstr "Jas"
 
-#: src/exif.c:362 src/exif-common.c:445
+#: ../src/exif.c:364 ../src/exif-common.c:546
 msgid "Exposure bias"
-msgstr "Skreslenie expozície"
+msgstr "Skreslenie expozície"
 
-#: src/exif.c:363
-#, fuzzy
+#: ../src/exif.c:365
 msgid "Maximum aperture"
-msgstr "clona"
+msgstr "Maximálna clona"
 
-#: src/exif.c:364 src/exif-common.c:449
+#: ../src/exif.c:366 ../src/exif-common.c:550
 msgid "Subject distance"
-msgstr "Vzdialenos» subjektu"
+msgstr "Vzdialenosť subjektu"
 
 # src/preferences.c:693
-#: src/exif.c:365
+#: ../src/exif.c:367
 msgid "Metering mode"
-msgstr "Re¾im merania"
+msgstr "Režim merania"
 
-#: src/exif.c:366
+#: ../src/exif.c:368
 msgid "Light source"
 msgstr "Zdroj svetla"
 
-#: src/exif.c:367 src/exif-common.c:450
+#: ../src/exif.c:369 ../src/exif-common.c:551
 msgid "Flash"
 msgstr "Blesk"
 
-#: src/exif.c:368 src/exif-common.c:447
+#: ../src/exif.c:370 ../src/exif-common.c:548
 msgid "Focal length"
-msgstr "Ohnisková vzdialenos»"
+msgstr "Ohnisková vzdialenosť"
 
-#: src/exif.c:369
-#, fuzzy
+#: ../src/exif.c:371
 msgid "Subject area"
-msgstr "Vzdialenos» subjektu"
+msgstr "Oblasť subjektu"
 
-#: src/exif.c:370
+#: ../src/exif.c:372
 msgid "MakerNote"
-msgstr ""
+msgstr "PoznámkaVýrobcu"
 
 # src/dupe.c:1948
-#: src/exif.c:371
-#, fuzzy
+#: ../src/exif.c:373
 msgid "UserComment"
-msgstr "Poznámka:"
+msgstr "Poznámka používateľa"
 
-#: src/exif.c:372
+#: ../src/exif.c:374
 msgid "Subsecond time"
-msgstr ""
+msgstr "Podsekundový čas"
 
-#: src/exif.c:373
-#, fuzzy
+#: ../src/exif.c:375
 msgid "Subsecond time original"
-msgstr "Dátum originálu"
+msgstr "Podsekundový čas originálu"
 
-#: src/exif.c:374
-#, fuzzy
+#: ../src/exif.c:376
 msgid "Subsecond time digitized"
-msgstr "Dátum digitalizácie"
+msgstr "Podsekundový čas digitalizácie"
 
-#: src/exif.c:375
+#: ../src/exif.c:377
 msgid "FlashPix version"
-msgstr ""
+msgstr "FlashPix verzia"
 
 # src/collect.c:1053 src/ui_help.c:302
-#: src/exif.c:376
-#, fuzzy
+#: ../src/exif.c:378
 msgid "Colorspace"
-msgstr "Zavrie»"
+msgstr "Farebný priestor"
 
 #. ExifImageWidth, ExifImageHeight can also be unsigned short
-#: src/exif.c:378
+#: ../src/exif.c:380
 msgid "Width"
-msgstr "©írka"
+msgstr "Šírka"
 
-#: src/exif.c:379
+#: ../src/exif.c:381
 msgid "Height"
-msgstr "Vý¹ka"
+msgstr "Výška"
 
 # src/menu.c:765
-#: src/exif.c:380
-#, fuzzy
+#: ../src/exif.c:382
 msgid "Audio data"
-msgstr "_Exif dáta"
+msgstr "Zvukové dáta"
 
-#: src/exif.c:381
+#: ../src/exif.c:383
 msgid "ExifR98 extension"
-msgstr ""
+msgstr "ExifR98 rozšírenie"
 
-#: src/exif.c:382
-#, fuzzy
+#: ../src/exif.c:384
 msgid "Flash strength"
-msgstr "Ohnisková vzdialenos»"
+msgstr "Sila blesku"
 
-#: src/exif.c:383
+#: ../src/exif.c:385
 msgid "Spatial frequency response"
-msgstr ""
+msgstr "Priestorová frekvenčná odozva"
 
-#: src/exif.c:384
+#: ../src/exif.c:386
 msgid "X Pixel density"
-msgstr ""
+msgstr "Hustota pixelov X"
 
-#: src/exif.c:385
+#: ../src/exif.c:387
 msgid "Y Pixel density"
-msgstr ""
+msgstr "Hustota pixelov Y"
 
-#: src/exif.c:386
+#: ../src/exif.c:388
 msgid "Pixel density units"
-msgstr ""
+msgstr "Jednotka hustoty pixelov"
 
 # src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/exif.c:387
-#, fuzzy
+#: ../src/exif.c:389
 msgid "Subject location"
-msgstr "Výber"
+msgstr "Umiestnenie subjektu"
 
 # src/menu.c:516
-#: src/exif.c:389
-#, fuzzy
+#: ../src/exif.c:391
 msgid "Sensor type"
-msgstr "Neusporiadané"
+msgstr "Typ senzoru"
 
 # src/menu.c:559
-#: src/exif.c:390
-#, fuzzy
+#: ../src/exif.c:392
 msgid "Source type"
-msgstr "Zdroj"
+msgstr "Typ zdroja"
 
-#: src/exif.c:391
-#, fuzzy
+#: ../src/exif.c:393
 msgid "Scene type"
-msgstr "centimeter"
+msgstr "Typ scény"
 
-#: src/exif.c:392
+#: ../src/exif.c:394
 msgid "Color filter array pattern"
-msgstr ""
+msgstr "Vzor poľa farebného filtra"
 
 # src/ui_pathsel.c:437 src/ui_pathsel.c:460 src/utilops.c:944
 # src/utilops.c:1095
 #. tags a4xx were added for Exif 2.2 (not just these - some above, as well)
-#: src/exif.c:394
-#, fuzzy
+#: ../src/exif.c:396
 msgid "Render process"
-msgstr "Vykresli»"
+msgstr "Proces vykresľovania"
 
-#: src/exif.c:395
-#, fuzzy
+#: ../src/exif.c:397
 msgid "Exposure mode"
-msgstr "Skreslenie expozície"
+msgstr "Režim expozície"
 
-#: src/exif.c:396
+#: ../src/exif.c:398
 msgid "White balance"
-msgstr ""
+msgstr "Vyváženie bielej"
 
-#: src/exif.c:397
+#: ../src/exif.c:399
 msgid "Digital zoom ratio"
-msgstr ""
+msgstr "Pomer digitálnej lupy"
 
-#: src/exif.c:398
-#, fuzzy
+#: ../src/exif.c:400
 msgid "Focal length (35mm)"
-msgstr "Ohnisková vzdialenos»"
+msgstr "Ohnisková vzdialenosť (35mm)"
 
-#: src/exif.c:399
+#: ../src/exif.c:401
 msgid "Scene capture type"
-msgstr ""
+msgstr "Typ scény"
 
 # src/menu.c:1089
-#: src/exif.c:400
-#, fuzzy
+#: ../src/exif.c:402
 msgid "Gain control"
-msgstr "Plávajúce ovládanie"
+msgstr "Ovládanie zisku"
 
-#: src/exif.c:401
-#, fuzzy
+#: ../src/exif.c:403
 msgid "Contrast"
-msgstr "na vý¹ku"
+msgstr "Kontrast"
 
-#: src/exif.c:402
-#, fuzzy
+#: ../src/exif.c:404
 msgid "Saturation"
-msgstr "akcia"
+msgstr "Sýtosť"
 
-#: src/exif.c:403
+#: ../src/exif.c:405
 msgid "Sharpness"
-msgstr ""
+msgstr "Ostrosť"
 
-#: src/exif.c:404
+#: ../src/exif.c:406
 msgid "Device setting"
-msgstr ""
+msgstr "Nastavenie zariadenia"
 
-#: src/exif.c:405
-#, fuzzy
+#: ../src/exif.c:407
 msgid "Subject range"
-msgstr "Vzdialenos» subjektu"
+msgstr "Vzdialenosť subjektu"
 
 # src/preferences.c:676
-#: src/exif.c:406
-#, fuzzy
+#: ../src/exif.c:408
 msgid "Image serial number"
-msgstr "Súbor obrázku"
+msgstr "Sériové číslo obrázku"
 
-#: src/exif-common.c:307
+#: ../src/exif-common.c:336
 msgid "infinity"
-msgstr "nekoneèno"
+msgstr "nekonečno"
 
 # src/preferences.c:368
-#: src/exif-common.c:336
+#: ../src/exif-common.c:365
 msgid "mode:"
-msgstr "re¾im:"
+msgstr "režim:"
 
 # src/preferences.c:400
-#: src/exif-common.c:340 src/trash.c:193
+#: ../src/exif-common.c:369 ../src/trash.c:205
 msgid "on"
-msgstr "zapnuté"
+msgstr "zapnuté"
 
-#: src/exif-common.c:343 src/trash.c:198
+#: ../src/exif-common.c:372 ../src/trash.c:210
 msgid "off"
-msgstr "vypnuté"
+msgstr "vypnuté"
 
-#: src/exif-common.c:352
+#: ../src/exif-common.c:381
 msgid "not detected by strobe"
-msgstr "nedetekované snímacím impulzom"
+msgstr "nedetegované snímacím impulzom"
 
-#: src/exif-common.c:353
+#: ../src/exif-common.c:382
 msgid "detected by strobe"
-msgstr "detekované snímacím impulzom"
+msgstr "detegované snímacím impulzom"
 
 #. we ignore flash function (bit 5)
 #. red-eye (bit 6)
-#: src/exif-common.c:358
+#: ../src/exif-common.c:387
 msgid "red-eye reduction"
-msgstr "redukcia \"èervených oèí\""
+msgstr "redukcia \"červených očí\""
 
-#: src/exif-common.c:378
+#: ../src/exif-common.c:407
 msgid "dot"
 msgstr "bod"
 
-#: src/exif-common.c:408
+#: ../src/exif-common.c:437
 msgid "AdobeRGB"
-msgstr ""
+msgstr "AdobeRGB"
 
-#: src/exif-common.c:416
+#: ../src/exif-common.c:445
 msgid "embedded"
+msgstr "vstavaný"
+
+#: ../src/exif-common.c:534
+msgid "Above Sea Level"
 msgstr ""
 
-#: src/exif-common.c:441
-#, fuzzy
+#: ../src/exif-common.c:534
+msgid "Below Sea Level"
+msgstr ""
+
+#: ../src/exif-common.c:542
 msgid "Camera"
-msgstr "Fotoaparát"
+msgstr "Fotoaparát"
 
-#: src/exif-common.c:448
-#, fuzzy
+#: ../src/exif-common.c:549
 msgid "Focal length 35mm"
-msgstr "Ohnisková vzdialenos»"
+msgstr "Ohnisková vzdialenosť 35mm"
 
-#: src/exif-common.c:451
-#, fuzzy
+#: ../src/exif-common.c:552
 msgid "Resolution"
-msgstr "Rozlí¹enie"
+msgstr "Rozlíšenie"
 
 # src/ui_pathsel.c:697
-#: src/exif-common.c:452
-#, fuzzy
+#: ../src/exif-common.c:553
 msgid "Color profile"
-msgstr "V¹etky súbory"
+msgstr "Farebný profil"
 
-# src/dupe.c:67 src/dupe.c:1449
-#: src/filedata.c:86
-#, c-format
-msgid "%d bytes"
-msgstr "%d bytov"
+#: ../src/exif-common.c:554
+#, fuzzy
+msgid "GPS position"
+msgstr "YCbCr poziciovanie"
+
+#: ../src/exif-common.c:555
+msgid "GPS altitude"
+msgstr ""
+
+# src/preferences.c:368
+#: ../src/exif-common.c:556
+#, fuzzy
+msgid "File size"
+msgstr "Veľkosť súboru:"
+
+# src/ui_pathsel.c:799
+#: ../src/exif-common.c:557
+#, fuzzy
+msgid "File date"
+msgstr "Dátum súboru:"
+
+# src/utilops.c:980
+#: ../src/exif-common.c:558
+#, fuzzy
+msgid "File mode"
+msgstr "Názov súboru"
+
+# src/dupe.c:67 src/dupe.c:1449
+#: ../src/filedata.c:95
+#, c-format
+msgid "%d bytes"
+msgstr "%d bajtov"
 
-#: src/filedata.c:90
+#: ../src/filedata.c:99
 #, c-format
 msgid "%.1f K"
 msgstr "%.1f K"
 
-#: src/filedata.c:94
+#: ../src/filedata.c:103
 #, c-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: src/filedata.c:99
+#: ../src/filedata.c:108
 #, c-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
+#: ../src/filedata.c:2262
+msgid "file or directory does not exist"
+msgstr ""
+
+# src/filelist.c:814
+#: ../src/filedata.c:2268
+#, fuzzy
+msgid "destination already exists"
+msgstr "Súbor %s už existuje."
+
+#: ../src/filedata.c:2274
+msgid "destination can't be overwritten"
+msgstr ""
+
+#: ../src/filedata.c:2280
+msgid "destination directory is not writable"
+msgstr ""
+
+#: ../src/filedata.c:2286
+msgid "destination directory does not exist"
+msgstr ""
+
+#: ../src/filedata.c:2292
+msgid "source directory is not writable"
+msgstr ""
+
+#: ../src/filedata.c:2298
+#, fuzzy
+msgid "no read permission"
+msgstr "(zákaz čítania) %s bytov"
+
+#: ../src/filedata.c:2304
+msgid "file is readonly"
+msgstr ""
+
+#: ../src/filedata.c:2310
+msgid "destination already exists and will be overwritten"
+msgstr ""
+
+# src/utilops.c:451
+#: ../src/filedata.c:2316
+#, fuzzy
+msgid "source and destination are the same"
+msgstr "Zdroj a cieľ sú totožné, operácia zrušená."
+
+# src/utilops.c:451
+#: ../src/filedata.c:2322
+#, fuzzy
+msgid "source and destination have different extension"
+msgstr "Zdroj a cieľ sú totožné, operácia zrušená."
+
+#: ../src/filedata.c:2328
+msgid "there are unsaved metadata changes for the file"
+msgstr ""
+
 # src/img-view.c:837 src/menu.c:1001
-#: src/fullscreen.c:243 src/preferences.c:1329
+#: ../src/fullscreen.c:247 ../src/layout_util.c:1341 ../src/layout_util.c:1342
+#: ../src/layout_util.c:1343 ../src/preferences.c:1429
 msgid "Full screen"
-msgstr "Celooobrazovkový re¾im"
+msgstr "Celooobrazovkový režim"
 
 # src/preferences.c:368
-#: src/fullscreen.c:395
+#: ../src/fullscreen.c:395
 msgid "Full size"
-msgstr "Úplná veµkos»"
+msgstr "Úplná veľkosť"
 
-#: src/fullscreen.c:400
+#: ../src/fullscreen.c:400
 msgid "Monitor"
 msgstr "Monitor"
 
-#: src/fullscreen.c:405 src/layout.c:455
+#: ../src/fullscreen.c:405
 msgid "Screen"
 msgstr "Obrazovka"
 
 # src/img-view.c:792 src/menu.c:947 src/menu.c:1083 src/preferences.c:716
-#: src/fullscreen.c:642
+#: ../src/fullscreen.c:642
 msgid "Stay above other windows"
-msgstr "Zotrva» nad ostatnými oknami"
+msgstr "Zotrvať nad ostatnými oknami"
 
-#: src/fullscreen.c:649
+#: ../src/fullscreen.c:649
 msgid "Determined by Window Manager"
-msgstr "Nech rozhodne správca okien (WM)"
+msgstr "Nech rozhodne správca okien"
 
-#: src/fullscreen.c:650
+#: ../src/fullscreen.c:650
 msgid "Active screen"
-msgstr "Aktívna obrazovka"
+msgstr "Aktívna obrazovka"
 
-#: src/fullscreen.c:652
+#: ../src/fullscreen.c:652
 msgid "Active monitor"
-msgstr "Aktívny monitor"
+msgstr "Aktívny monitor"
 
-#: src/histogram.c:86
-msgid "logarithmical histogram on red"
-msgstr ""
+#: ../src/histogram.c:113
+#, fuzzy
+msgid "Log Histogram on Red"
+msgstr "lineárny histogram červenej"
 
-#: src/histogram.c:87
-msgid "logarithmical histogram on green"
-msgstr ""
+#: ../src/histogram.c:114
+#, fuzzy
+msgid "Log Histogram on Green"
+msgstr "lineárny histogram zelenej"
 
-#: src/histogram.c:88
-msgid "logarithmical histogram on blue"
-msgstr ""
+#: ../src/histogram.c:115
+#, fuzzy
+msgid "Log Histogram on Blue"
+msgstr "lineárny histogram modrej"
 
-#: src/histogram.c:89
-msgid "logarithmical histogram on value"
-msgstr ""
+#: ../src/histogram.c:116
+#, fuzzy
+msgid "Log Histogram on RGB"
+msgstr "lineárny histogram RGB"
 
-#: src/histogram.c:90
-msgid "logarithmical histogram on RGB"
-msgstr ""
+#: ../src/histogram.c:117
+#, fuzzy
+msgid "Log Histogram on value"
+msgstr "lineárny histogram hodnoty"
 
-#: src/histogram.c:91
-msgid "logarithmical histogram on max value"
-msgstr ""
+#: ../src/histogram.c:122
+#, fuzzy
+msgid "Linear Histogram on Red"
+msgstr "lineárny histogram červenej"
 
-#: src/histogram.c:96
-msgid "linear histogram on red"
-msgstr ""
+#: ../src/histogram.c:123
+#, fuzzy
+msgid "Linear Histogram on Green"
+msgstr "lineárny histogram zelenej"
 
-#: src/histogram.c:97
-msgid "linear histogram on green"
-msgstr ""
+#: ../src/histogram.c:124
+#, fuzzy
+msgid "Linear Histogram on Blue"
+msgstr "lineárny histogram modrej"
 
-#: src/histogram.c:98
-msgid "linear histogram on blue"
-msgstr ""
+#: ../src/histogram.c:125
+#, fuzzy
+msgid "Linear Histogram on RGB"
+msgstr "lineárny histogram RGB"
 
-#: src/histogram.c:99
-msgid "linear histogram on value"
-msgstr ""
+#: ../src/histogram.c:126
+#, fuzzy
+msgid "Linear Histogram on value"
+msgstr "lineárny histogram hodnoty"
 
-#: src/histogram.c:100
-msgid "linear histogram on RGB"
-msgstr ""
+# src/ui_tabcomp.c:171
+#: ../src/history_list.c:131
+#, c-format
+msgid "Unable to write history lists to: %s\n"
+msgstr "Nemožno zapísať históriu do: %s\n"
 
-#: src/histogram.c:101
-msgid "linear histogram on max value"
-msgstr ""
+# src/preferences.c:897
+#: ../src/image.c:161
+#, fuzzy, c-format
+msgid " (Collection %s)"
+msgstr "Zbierky"
 
 # src/img-view.c:789 src/menu.c:944 src/menu.c:1079
-#: src/img-view.c:1268 src/layout_image.c:743 src/layout_util.c:1105
-#: src/layout_util.c:1106 src/layout_util.c:1107 src/pan-view.c:2800
+#: ../src/img-view.c:1266 ../src/layout_image.c:489 ../src/layout_util.c:1308
+#: ../src/layout_util.c:1309 ../src/layout_util.c:1324
+#: ../src/layout_util.c:1325 ../src/pan-view.c:2830
 msgid "Zoom _in"
-msgstr "Priblí¾_i»"
+msgstr "_Zväčšiť"
 
 # src/img-view.c:790 src/menu.c:945 src/menu.c:1081
-#: src/img-view.c:1269 src/layout_image.c:744 src/layout_util.c:1108
-#: src/layout_util.c:1109 src/pan-view.c:2802
+#: ../src/img-view.c:1267 ../src/layout_image.c:490 ../src/layout_util.c:1310
+#: ../src/layout_util.c:1311 ../src/layout_util.c:1326
+#: ../src/layout_util.c:1327 ../src/pan-view.c:2832
 msgid "Zoom _out"
-msgstr "_Oddiali»"
+msgstr "Z_menšiť"
 
 # src/img-view.c:791 src/menu.c:946
-#: src/img-view.c:1270 src/layout_image.c:745 src/layout_util.c:1110
-#: src/layout_util.c:1111 src/pan-view.c:2804
+#: ../src/img-view.c:1268 ../src/layout_image.c:491 ../src/layout_util.c:1312
+#: ../src/layout_util.c:1313 ../src/layout_util.c:1328
+#: ../src/layout_util.c:1329 ../src/pan-view.c:2834
 msgid "Zoom _1:1"
 msgstr "Zobrazenie _1:1"
 
 # src/img-view.c:792 src/menu.c:947 src/menu.c:1083 src/preferences.c:716
-#: src/img-view.c:1271 src/layout_image.c:746
+#: ../src/img-view.c:1269 ../src/layout_image.c:492
 msgid "Fit image to _window"
-msgstr "Prispôsobi» obrázok do okna"
+msgstr "Prispôsobiť obrázok _oknu"
 
 # src/img-view.c:797 src/menu.c:960
-#: src/img-view.c:1276 src/layout_image.c:752 src/layout_util.c:1103
+#: ../src/img-view.c:1277 ../src/layout_image.c:501 ../src/layout_util.c:1306
 msgid "Set as _wallpaper"
-msgstr "Nastavi» ako pozadie plochy"
+msgstr "Nastaviť ako _pozadie plochy"
 
-#: src/img-view.c:1283 src/layout_image.c:762
+#: ../src/img-view.c:1282 ../src/layout_image.c:508
 msgid "_Go to directory view"
-msgstr ""
+msgstr "_Choď na pohľad priečinkov"
 
 # src/img-view.c:813 src/menu.c:982
-#: src/img-view.c:1297 src/layout_image.c:786
+#: ../src/img-view.c:1295 ../src/layout_image.c:529
 msgid "_Stop slideshow"
-msgstr "Za_stavi» prezentáciu"
+msgstr "Za_staviť prezentáciu"
 
 # src/img-view.c:816 src/menu.c:985
-#: src/img-view.c:1300 src/layout_image.c:789
+#: ../src/img-view.c:1298 ../src/layout_image.c:532
 msgid "Continue slides_how"
-msgstr "Pokraèova» v prezentácii"
+msgstr "_Pokračovať v prezentácii"
 
 # src/img-view.c:820 src/img-view.c:827 src/menu.c:989 src/menu.c:995
-#: src/img-view.c:1305 src/img-view.c:1313 src/layout_image.c:794
-#: src/layout_image.c:801
+#: ../src/img-view.c:1303 ../src/img-view.c:1311 ../src/layout_image.c:537
+#: ../src/layout_image.c:544
 msgid "Pause slides_how"
-msgstr "Pozastavi» prezentáciu"
+msgstr "_Pozastaviť prezentáciu"
 
 # src/img-view.c:825 src/menu.c:994
-#: src/img-view.c:1311 src/layout_image.c:800
+#: ../src/img-view.c:1309 ../src/layout_image.c:543
 msgid "_Start slideshow"
-msgstr "_Spusti» prezentáciu"
+msgstr "_Spustiť prezentáciu"
 
 # src/img-view.c:833 src/menu.c:1005
-#: src/img-view.c:1319 src/layout_image.c:811 src/pan-view.c:2873
+#: ../src/img-view.c:1317 ../src/layout_image.c:554 ../src/pan-view.c:2903
 msgid "Exit _full screen"
-msgstr "Ukonèi» celoobrazovkový re¾im"
+msgstr "UkonÄ\8diÅ¥ _celoobrazovkový režim"
 
 # src/img-view.c:837 src/menu.c:1001
-#: src/img-view.c:1323 src/layout_image.c:807 src/pan-view.c:2877
+#: ../src/img-view.c:1321 ../src/layout_image.c:550 ../src/pan-view.c:2907
 msgid "_Full screen"
-msgstr "Celooobrazovkový re¾im"
+msgstr "_Celooobrazovkový režim"
 
 # src/dupe.c:1415 src/dupe.c:1573 src/img-view.c:841
-#: src/img-view.c:1327 src/layout_util.c:1074 src/pan-view.c:2881
+#: ../src/img-view.c:1325 ../src/layout_util.c:1291 ../src/pan-view.c:2911
 msgid "C_lose window"
-msgstr "Zavrie» okno"
-
-# src/preferences.c:368
-#: src/info.c:392
-msgid "File size:"
-msgstr "Veµkos» súboru:"
-
-# src/dupe.c:1655 src/dupe.c:1944
-#: src/info.c:394
-msgid "Dimensions:"
-msgstr "Rozmery:"
-
-#: src/info.c:395
-msgid "Transparent:"
-msgstr "Priehµadnos»:"
-
-# src/preferences.c:676
-#: src/info.c:396 src/print.c:3419
-msgid "Image size:"
-msgstr "Veµkos» obrázku:"
-
-# src/dupe.c:1948
-#: src/info.c:398
-msgid "Compress ratio:"
-msgstr "Kompresný pomer:"
-
-# src/ui_pathsel.c:799
-#: src/info.c:399
-msgid "File type:"
-msgstr "Typ súboru:"
-
-#: src/info.c:401
-msgid "Owner:"
-msgstr "Vlastník:"
-
-#: src/info.c:402
-msgid "Group:"
-msgstr "Skupina:"
-
-# src/preferences.c:551
-#: src/info.c:405 src/preferences.c:858
-msgid "General"
-msgstr "Hlavné"
-
-#: src/info.c:531
-#, c-format
-msgid "Image %d of %d"
-msgstr "Obrázok %d z %d"
-
-#: src/info.c:778
-#, fuzzy
-msgid "Image properties"
-msgstr "Vlastnosti obrázka - Geeqie"
+msgstr "_Zavrieť okno"
 
 # src/window.c:87
-#: src/layout.c:282 src/view_file.c:585
+#: ../src/layout.c:363 ../src/view_file.c:613
 msgid "Ascending"
 msgstr "Vzostupne"
 
-#: src/layout.c:384
-#, c-format
-msgid "This installation of %s was not built with support for color profiles."
-msgstr ""
-
-#: src/layout.c:385
-#, fuzzy
-msgid "Color profiles not supported"
-msgstr "Prieèinok nie je podporovaný"
-
-#: src/layout.c:410
-msgid "Use _color profiles"
-msgstr ""
-
-#: src/layout.c:415
-msgid "Use profile from _image"
-msgstr ""
-
-#: src/layout.c:421 src/layout.c:439
-#, c-format
-msgid "Input _%d:"
-msgstr ""
-
-#: src/layout.c:422
-msgid "AdobeRGB compatible"
-msgstr ""
-
-#: src/layout.c:464
-msgid "_Screen profile"
-msgstr ""
-
 # src/filelist.c:76
-#: src/layout.c:531
+#: ../src/layout.c:433
 msgid " Slideshow"
-msgstr "Prezentácia"
+msgstr " Prezentácia"
 
 # src/filelist.c:80
-#: src/layout.c:535
+#: ../src/layout.c:437
 msgid " Paused"
-msgstr " Pozastavené"
+msgstr " Pozastavené"
 
 # src/filelist.c:86
-#: src/layout.c:552
+#: ../src/layout.c:453
 #, c-format
 msgid "%s, %d files (%s, %d)%s"
-msgstr "%s, %d súborov (%s, %d)%s"
+msgstr "%s, %d súborov (%s, %d)%s"
 
 # src/filelist.c:88
-#: src/layout.c:559
+#: ../src/layout.c:460
 #, c-format
 msgid "%s, %d files%s"
-msgstr "%s, %d súborov%s"
+msgstr "%s, %d súborov%s"
 
 # src/filelist.c:88
-#: src/layout.c:564
+#: ../src/layout.c:465
 #, c-format
 msgid "%d files%s"
-msgstr "%d súborov%s"
+msgstr "%d súborov%s"
 
-#: src/layout.c:593
+#: ../src/layout.c:510
 #, c-format
 msgid "(no read permission) %s bytes"
-msgstr "(zákaz èítania) %s bytov"
+msgstr "(zákaz čítania) %s bytov"
 
 # src/window.c:379
-#: src/layout.c:597
+#: ../src/layout.c:514
 #, c-format
 msgid "( ? x ? ) %s bytes"
 msgstr "( ? x ? ) %s bajtov"
 
 # src/window.c:383
-#: src/layout.c:605
+#: ../src/layout.c:522
 #, c-format
 msgid "( %d x %d ) %s bytes"
 msgstr "( %d x %d ) %s bajtov"
 
 # src/preferences.c:368
-#: src/layout.c:1301 src/layout_config.c:58
+#: ../src/layout.c:1243 ../src/layout_config.c:58
 msgid "Tools"
-msgstr "Nástroje"
+msgstr "Nástroje"
 
-# src/collect-dlg.c:59
-#: src/layout.c:1983
+#: ../src/layout.c:1873
+msgid "Window options and layout"
+msgstr ""
+
+# src/preferences.c:551
+#: ../src/layout.c:1932
+#, fuzzy
+msgid "General options"
+msgstr "Hlavné"
+
+#: ../src/layout.c:1934
+msgid "Home path (empty to use your home directory)"
+msgstr ""
+
+# src/preferences.c:581
+#: ../src/layout.c:1942
+msgid "Use current"
+msgstr "Použiť aktuálny"
+
+#: ../src/layout.c:1945
+#, fuzzy
+msgid "Show date in directories list view"
+msgstr "_Choď na pohľad priečinkov"
+
+#: ../src/layout.c:1948
+msgid "Exit program when this window is closed"
+msgstr ""
+
+# src/preferences.c:559
+#: ../src/layout.c:1951
 #, fuzzy
+msgid "Start-up directory:"
+msgstr "Začiatočný adresár"
+
+#: ../src/layout.c:1953
+msgid "No change"
+msgstr ""
+
+# src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
+#: ../src/layout.c:1956
+#, fuzzy
+msgid "Restore last path"
+msgstr "Použiť minulú cestu"
+
+# src/utilops.c:592
+#: ../src/layout.c:1959
+#, fuzzy
+msgid "Home path"
+msgstr "_Kopírovať cestu"
+
+#: ../src/layout.c:1963 ../src/print.c:3385 ../src/print.c:3392
+msgid "Layout"
+msgstr "Rozloženie"
+
+# src/collect-dlg.c:59
+#: ../src/layout.c:2207
 msgid "Invalid geometry\n"
-msgstr "Nesprávny prieèinok"
+msgstr "Nesprávny tvar\n"
 
 # src/preferences.c:368
-#: src/layout_config.c:58 src/ui_pathsel.c:1183
+#: ../src/layout_config.c:58 ../src/preferences.c:1526
+#: ../src/ui_pathsel.c:1179
 msgid "Files"
-msgstr "Súbory"
+msgstr "Súbory"
 
 # src/preferences.c:676
-#: src/layout_config.c:58 src/preferences.c:941 src/print.c:116
+#: ../src/layout_config.c:58 ../src/preferences.c:91 ../src/preferences.c:1317
+#: ../src/print.c:123
 msgid "Image"
-msgstr "Obrázok"
+msgstr "Obrázok"
 
-#: src/layout_config.c:364
+#: ../src/layout_config.c:364
 msgid "(drag to change order)"
-msgstr "(zmena poradia »ahaním)"
+msgstr "(poradie zmeníte ťahaním)"
 
 # src/menu.c:1010
-#: src/layout_image.c:816
+#: ../src/layout_image.c:559
 msgid "Hide file _list"
-msgstr "Sky» zoznam súborov"
+msgstr "Skyť _zoznam súborov"
 
-# src/menu.c:430 src/menu.c:457
-#: src/layout_util.c:879 src/menu.c:76
-#, fuzzy, c-format
-msgid "_%d %s..."
-msgstr "v %s..."
-
-# src/menu.c:432 src/menu.c:461
-#: src/layout_util.c:883 src/menu.c:78
-#, fuzzy, c-format
-msgid "_%d (unknown)..."
-msgstr "v (neznámom)..."
+#: ../src/layout_image.c:1559
+#, c-format
+msgid "[%*d,%*d]: RGB(%3d,%3d,%3d)"
+msgstr ""
 
-# src/collect-table.c:78 src/menu.c:684
-#: src/layout_util.c:893
-#, fuzzy, c-format
-msgid "_%d empty"
-msgstr "prázdne"
+#: ../src/layout_image.c:1567
+#, c-format
+msgid "[%*s,%*s]: RGB(---,---,---)"
+msgstr ""
 
 # src/menu.c:709
-#: src/layout_util.c:1037
+#: ../src/layout_util.c:1246
 msgid "_File"
-msgstr "Súbor(_F)"
+msgstr "_Súbor"
 
-#: src/layout_util.c:1038
+#: ../src/layout_util.c:1247
 msgid "_Go"
-msgstr ""
+msgstr "_Choď na"
 
 # src/menu.c:726
-#: src/layout_util.c:1039 src/menu.c:93
+#: ../src/layout_util.c:1248 ../src/menu.c:109
 msgid "_Edit"
-msgstr "_Upravi»"
+msgstr "_Upraviť"
 
 # src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/layout_util.c:1040
-#, fuzzy
+#: ../src/layout_util.c:1249
 msgid "_Select"
-msgstr "ber"
+msgstr "_Výber"
 
-# src/menu.c:626
-#: src/layout_util.c:1041 src/menu.c:265
-msgid "_Adjust"
-msgstr "N_astavi»"
+# src/dupe.c:1655 src/dupe.c:1944
+#: ../src/layout_util.c:1250 ../src/menu.c:280
+#, fuzzy
+msgid "_Orientation"
+msgstr "Orientácia"
 
-# src/ui_pathsel.c:507 src/ui_pathsel.c:759
-#: src/layout_util.c:1043
+#: ../src/layout_util.c:1251
+msgid "E_xternal Editors"
+msgstr ""
+
+# src/menu.c:748
+#: ../src/layout_util.c:1252
 #, fuzzy
-msgid "_View Directory as"
-msgstr "Nový adresár"
+msgid "P_references"
+msgstr "Predvoľby"
+
+#: ../src/layout_util.c:1254
+msgid "_Files and Folders"
+msgstr ""
 
 # src/img-view.c:789 src/menu.c:944 src/menu.c:1079
-#: src/layout_util.c:1044
-#, fuzzy
+#: ../src/layout_util.c:1255
 msgid "_Zoom"
-msgstr "Lupa"
+msgstr "_Lupa"
 
-#: src/layout_util.c:1045
-msgid "_Split"
+# src/menu.c:526
+#: ../src/layout_util.c:1256
+#, fuzzy
+msgid "_Color Management"
+msgstr "Správca triedenia"
+
+#: ../src/layout_util.c:1257
+msgid "_Connected Zoom"
 msgstr ""
 
+#: ../src/layout_util.c:1258
+#, fuzzy
+msgid "Spli_t"
+msgstr "_Rozdeliť"
+
+#: ../src/layout_util.c:1259 ../src/layout_util.c:1373
+#, fuzzy
+msgid "Image _Overlay"
+msgstr "_Prekrytie obrázka"
+
 # src/menu.c:771
-#: src/layout_util.c:1046
+#: ../src/layout_util.c:1260
 msgid "_Help"
-msgstr "Pomocník(_H)"
+msgstr "_Pomoc"
 
-#: src/layout_util.c:1048
-#, fuzzy
+#: ../src/layout_util.c:1262
 msgid "_First Image"
-msgstr "prvý obrázok"
+msgstr "_Prvý obrázok"
 
-#: src/layout_util.c:1049 src/layout_util.c:1050 src/layout_util.c:1051
+#: ../src/layout_util.c:1262
 #, fuzzy
+msgid "First Image"
+msgstr "_Prvý obrázok"
+
+#: ../src/layout_util.c:1263 ../src/layout_util.c:1264
+#: ../src/layout_util.c:1265
 msgid "_Previous Image"
-msgstr "predchádzajúci obrázok"
+msgstr "P_redchádzajúci obrázok"
 
-# src/preferences.c:660
-#: src/layout_util.c:1052 src/layout_util.c:1053 src/layout_util.c:1054
+#: ../src/layout_util.c:1263 ../src/layout_util.c:1264
+#: ../src/layout_util.c:1265
 #, fuzzy
+msgid "Previous Image"
+msgstr "P_redchádzajúci obrázok"
+
+# src/preferences.c:660
+#: ../src/layout_util.c:1266 ../src/layout_util.c:1267
+#: ../src/layout_util.c:1268
 msgid "_Next Image"
-msgstr "nasledujúci obrázok"
+msgstr "_nasledujúci obrázok"
 
-#: src/layout_util.c:1055
+# src/preferences.c:660
+#: ../src/layout_util.c:1266 ../src/layout_util.c:1267
+#: ../src/layout_util.c:1268
 #, fuzzy
+msgid "Next Image"
+msgstr "_nasledujúci obrázok"
+
+#: ../src/layout_util.c:1269
 msgid "_Last Image"
-msgstr "posledný obrázok"
+msgstr "Po_sledný obrázok"
+
+#: ../src/layout_util.c:1269
+#, fuzzy
+msgid "Last Image"
+msgstr "Po_sledný obrázok"
+
+#: ../src/layout_util.c:1270
+msgid "_Back"
+msgstr ""
+
+#: ../src/layout_util.c:1270
+msgid "Back"
+msgstr ""
+
+# src/ui_pathsel.c:754
+#: ../src/layout_util.c:1271
+#, fuzzy
+msgid "_Home"
+msgstr "Domov"
+
+# src/ui_pathsel.c:754
+#: ../src/layout_util.c:1271 ../src/options.c:137 ../src/ui_bookmark.c:548
+#: ../src/ui_pathsel.c:1047
+msgid "Home"
+msgstr "Domov"
 
 # src/menu.c:711
-#: src/layout_util.c:1058
+#: ../src/layout_util.c:1273
 msgid "New _window"
-msgstr "_Nové okno"
+msgstr "Nové _okno"
+
+# src/menu.c:711
+#: ../src/layout_util.c:1273
+#, fuzzy
+msgid "New window"
+msgstr "Nové _okno"
 
 # src/collect-dlg.c:165 src/collect-table.c:641
-#: src/layout_util.c:1059
+#: ../src/layout_util.c:1274
 msgid "_New collection"
-msgstr "Nová zbierka"
+msgstr "_Nová zbierka"
+
+# src/collect-dlg.c:165 src/collect-table.c:641
+#: ../src/layout_util.c:1274
+#, fuzzy
+msgid "New collection"
+msgstr "_Nová zbierka"
 
 # src/collect-dlg.c:172
-#: src/layout_util.c:1060
+#: ../src/layout_util.c:1275
 msgid "_Open collection..."
-msgstr "_Otvori» zbierku..."
+msgstr "_Otvoriť zbierku..."
+
+# src/collect-dlg.c:172
+#: ../src/layout_util.c:1275
+#, fuzzy
+msgid "Open collection..."
+msgstr "_Otvoriť zbierku..."
+
+# src/menu.c:713
+#: ../src/layout_util.c:1276
+#, fuzzy
+msgid "Open recen_t"
+msgstr "Otvoriť _nedávne"
 
 # src/menu.c:713
-#: src/layout_util.c:1061
-msgid "Open _recent"
-msgstr "Otvo_ri» nedávne"
+#: ../src/layout_util.c:1276
+#, fuzzy
+msgid "Open recent"
+msgstr "Otvoriť _nedávne"
 
 # src/dupe.c:871 src/dupe.c:892
-#: src/layout_util.c:1062
+#: ../src/layout_util.c:1277
 msgid "_Search..."
-msgstr "Vyhµadávanie..."
+msgstr "_Hľadať..."
+
+# src/dupe.c:871 src/dupe.c:892
+#: ../src/layout_util.c:1277
+#, fuzzy
+msgid "Search..."
+msgstr "_Hľadať..."
 
-#: src/layout_util.c:1064
-msgid "Pan _view"
-msgstr "Roz¹írený pohµad"
+# src/collect-table.c:644 src/menu.c:885
+#: ../src/layout_util.c:1278
+#, fuzzy
+msgid "Find duplicates..."
+msgstr "_Nájsť duplikáty..."
+
+#: ../src/layout_util.c:1279
+#, fuzzy
+msgid "Pa_n view"
+msgstr "_Rozšírený pohľad"
+
+#: ../src/layout_util.c:1279
+#, fuzzy
+msgid "Pan view"
+msgstr "_Rozšírený pohľad"
 
 # src/menu.c:721
-#: src/layout_util.c:1065
+#: ../src/layout_util.c:1280
 msgid "_Print..."
-msgstr "Tlaè..."
+msgstr "_Tlač..."
 
-#: src/layout_util.c:1066
+#: ../src/layout_util.c:1281
 msgid "N_ew folder..."
-msgstr "Nový prieèinok..."
+msgstr "_Nový priečinok..."
 
-# src/preferences.c:684
-#: src/layout_util.c:1075
-msgid "_Quit"
-msgstr "Skonèi»"
+#: ../src/layout_util.c:1281
+#, fuzzy
+msgid "New folder..."
+msgstr "_Nový priečinok..."
 
-# src/menu.c:572
-#: src/layout_util.c:1088 src/menu.c:203
-msgid "_Rotate clockwise"
-msgstr ""
-"Rotova» v smere\n"
-"hodinových ruèièiek"
+# src/collect-table.c:633 src/dupe.c:1401 src/img-view.c:804 src/menu.c:910
+# src/menu.c:969
+#: ../src/layout_util.c:1282
+#, fuzzy
+msgid "Copy..."
+msgstr "_Kopírovať..."
 
-# src/menu.c:575
-#: src/layout_util.c:1089 src/menu.c:206
-msgid "Rotate _counterclockwise"
-msgstr ""
-"Rotova» proti smeru\n"
-"hodinových ruèièiek"
+# src/collect-table.c:634 src/dupe.c:1403 src/img-view.c:805 src/menu.c:912
+# src/menu.c:971
+#: ../src/layout_util.c:1283
+#, fuzzy
+msgid "Move..."
+msgstr "_Presunúť..."
 
-# src/menu.c:578
-#: src/layout_util.c:1090
-msgid "Rotate 1_80"
-msgstr "Rotova» 1_80"
+# src/collect-table.c:635 src/dupe.c:1405 src/img-view.c:806 src/menu.c:914
+# src/menu.c:973
+#: ../src/layout_util.c:1284
+#, fuzzy
+msgid "Rename..."
+msgstr "_Premenovať..."
 
-# src/menu.c:581
-#: src/layout_util.c:1091 src/menu.c:212
-msgid "_Mirror"
-msgstr "_Zrkadli»"
+# src/collect-table.c:636 src/dupe.c:1407 src/img-view.c:807 src/menu.c:916
+# src/menu.c:975
+#: ../src/layout_util.c:1285 ../src/layout_util.c:1286
+#: ../src/layout_util.c:1287
+#, fuzzy
+msgid "Delete..."
+msgstr "_Odstrániť..."
 
-# src/menu.c:584
-#: src/layout_util.c:1092 src/menu.c:215
-msgid "_Flip"
-msgstr "_Preklopi»"
+# src/preferences.c:823
+#: ../src/layout_util.c:1288 ../src/view_file.c:603
+#, fuzzy
+msgid "Enable file _grouping"
+msgstr "Vypnúť filtrovanie súborov"
 
-# src/img-view.c:813 src/menu.c:982
-#: src/layout_util.c:1093 src/menu.c:218
+# src/preferences.c:823
+#: ../src/layout_util.c:1288
 #, fuzzy
-msgid "Toggle _grayscale"
-msgstr "Za_stavi» prezentáciu"
+msgid "Enable file grouping"
+msgstr "Vypnúť filtrovanie súborov"
 
-#: src/layout_util.c:1094 src/menu.c:221
+# src/preferences.c:823
+#: ../src/layout_util.c:1289 ../src/view_file.c:605
 #, fuzzy
-msgid "_Original state"
-msgstr "Pôvodný názov"
+msgid "Disable file groupi_ng"
+msgstr "Vypnúť filtrovanie súborov"
 
-# src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
-#: src/layout_util.c:1097
-msgid "Select _all"
-msgstr "Vybr_a» v¹etko"
+# src/preferences.c:823
+#: ../src/layout_util.c:1289
+#, fuzzy
+msgid "Disable file grouping"
+msgstr "Vypnúť filtrovanie súborov"
 
-# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/layout_util.c:1098
-msgid "Select _none"
-msgstr "Zru¹i» výber"
+# src/utilops.c:592
+#: ../src/layout_util.c:1290
+#, fuzzy
+msgid "_Copy path to clipboard"
+msgstr "_Kopírovať cestu"
 
-# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/layout_util.c:1099
+#: ../src/layout_util.c:1290
+msgid "Copy path to clipboard"
+msgstr ""
+
+# src/dupe.c:1415 src/dupe.c:1573 src/img-view.c:841
+#: ../src/layout_util.c:1291
+#, fuzzy
+msgid "Close window"
+msgstr "_Zavrieť okno"
+
+# src/preferences.c:684
+#: ../src/layout_util.c:1292
+msgid "_Quit"
+msgstr "_Koniec"
+
+# src/preferences.c:684
+#: ../src/layout_util.c:1292
+#, fuzzy
+msgid "Quit"
+msgstr "_Koniec"
+
+# src/menu.c:572
+#: ../src/layout_util.c:1293 ../src/menu.c:222
+msgid "_Rotate clockwise"
+msgstr "Otočiť _v smere hodinových ručičiek"
+
+# src/menu.c:572
+#: ../src/layout_util.c:1293
+#, fuzzy
+msgid "Rotate clockwise"
+msgstr "Otočiť _v smere hodinových ručičiek"
+
+# src/menu.c:575
+#: ../src/layout_util.c:1294 ../src/menu.c:225
+msgid "Rotate _counterclockwise"
+msgstr "Otočiť _proti smeru hodinových ručičiek"
+
+# src/menu.c:575
+#: ../src/layout_util.c:1294
+#, fuzzy
+msgid "Rotate counterclockwise"
+msgstr "Otočiť _proti smeru hodinových ručičiek"
+
+# src/menu.c:578
+#: ../src/layout_util.c:1295
+msgid "Rotate 1_80"
+msgstr "Otočiť 1_80"
+
+# src/menu.c:578
+#: ../src/layout_util.c:1295
+#, fuzzy
+msgid "Rotate 180"
+msgstr "Otočiť 1_80"
+
+# src/menu.c:581
+#: ../src/layout_util.c:1296 ../src/menu.c:231
+msgid "_Mirror"
+msgstr "_Zrkadliť"
+
+# src/menu.c:581
+#: ../src/layout_util.c:1296
+#, fuzzy
+msgid "Mirror"
+msgstr "_Zrkadliť"
+
+# src/menu.c:584
+#: ../src/layout_util.c:1297 ../src/menu.c:234
+msgid "_Flip"
+msgstr "_Preklopiť"
+
+# src/menu.c:584
+#: ../src/layout_util.c:1297
 #, fuzzy
+msgid "Flip"
+msgstr "_Preklopiť"
+
+#: ../src/layout_util.c:1298 ../src/menu.c:237
+msgid "_Original state"
+msgstr "_Pôvodný stav"
+
+#: ../src/layout_util.c:1298
+#, fuzzy
+msgid "Original state"
+msgstr "_Pôvodný stav"
+
+# src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
+#: ../src/layout_util.c:1299
+msgid "Select _all"
+msgstr "Vybrať _všetko"
+
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/layout_util.c:1300
+msgid "Select _none"
+msgstr "_Zrušiť výber"
+
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/layout_util.c:1301
 msgid "_Invert Selection"
-msgstr "Výber"
+msgstr "_Opačný výber"
+
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/layout_util.c:1301
+#, fuzzy
+msgid "Invert Selection"
+msgstr "_Opačný výber"
 
 # src/menu.c:748
-#: src/layout_util.c:1101
+#: ../src/layout_util.c:1302
 msgid "P_references..."
-msgstr "Predv_oµby..."
+msgstr "_Predvoľby..."
+
+# src/menu.c:748
+#: ../src/layout_util.c:1302
+#, fuzzy
+msgid "Preferences..."
+msgstr "_Predvoľby..."
+
+# src/menu.c:1087
+#: ../src/layout_util.c:1303
+#, fuzzy
+msgid "Configure _Editors..."
+msgstr "Konfigurovať voľby"
+
+# src/menu.c:1087
+#: ../src/layout_util.c:1303
+#, fuzzy
+msgid "Configure Editors..."
+msgstr "Konfigurovať voľby"
 
-#: src/layout_util.c:1102
+# src/menu.c:1087
+#: ../src/layout_util.c:1304
+#, fuzzy
+msgid "_Configure this window..."
+msgstr "Konfigurovať voľby"
+
+# src/menu.c:1087
+#: ../src/layout_util.c:1304
+#, fuzzy
+msgid "Configure this window..."
+msgstr "Konfigurovať voľby"
+
+#: ../src/layout_util.c:1305
 msgid "_Thumbnail maintenance..."
-msgstr "Údr¾ba minia_túr"
+msgstr "Údržba _náhľadov..."
+
+#: ../src/layout_util.c:1305
+#, fuzzy
+msgid "Thumbnail maintenance..."
+msgstr "Údržba _náhľadov..."
+
+# src/img-view.c:797 src/menu.c:960
+#: ../src/layout_util.c:1306
+#, fuzzy
+msgid "Set as wallpaper"
+msgstr "Nastaviť ako _pozadie plochy"
+
+#: ../src/layout_util.c:1307
+#, fuzzy
+msgid "_Save metadata"
+msgstr "Metadáta"
+
+#: ../src/layout_util.c:1307
+#, fuzzy
+msgid "Save metadata"
+msgstr "Metadáta"
+
+# src/img-view.c:789 src/menu.c:944 src/menu.c:1079
+#: ../src/layout_util.c:1308 ../src/layout_util.c:1309
+msgid "Zoom in"
+msgstr "Priblížiť"
+
+# src/img-view.c:790 src/menu.c:945 src/menu.c:1081
+#: ../src/layout_util.c:1310 ../src/layout_util.c:1311
+msgid "Zoom out"
+msgstr "Oddialiť"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1312 ../src/layout_util.c:1313
+#, fuzzy
+msgid "Zoom 1:1"
+msgstr "Zobrazenie _1:1"
 
 # src/menu.c:758
-#: src/layout_util.c:1112 src/layout_util.c:1113
+#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+#: ../src/layout_util.c:1330 ../src/layout_util.c:1331
 msgid "_Zoom to fit"
-msgstr "Prispôsobi» oknu"
+msgstr "_Prispôsobiť oknu"
+
+# src/menu.c:758
+#: ../src/layout_util.c:1314 ../src/layout_util.c:1315
+#, fuzzy
+msgid "Zoom to fit"
+msgstr "_Prispôsobiť oknu"
 
-#: src/layout_util.c:1114
+#: ../src/layout_util.c:1316 ../src/layout_util.c:1332
 msgid "Fit _Horizontally"
-msgstr ""
+msgstr "Vmestiť _vodorovne"
 
-#: src/layout_util.c:1115
-msgid "Fit _Vorizontally"
-msgstr ""
+#: ../src/layout_util.c:1316
+#, fuzzy
+msgid "Fit Horizontally"
+msgstr "Vmestiť _vodorovne"
 
-# src/img-view.c:791 src/menu.c:946
-#: src/layout_util.c:1116
+#: ../src/layout_util.c:1317 ../src/layout_util.c:1333
 #, fuzzy
+msgid "Fit _Vertically"
+msgstr "Vmestiť _zvisle"
+
+#: ../src/layout_util.c:1317
+#, fuzzy
+msgid "Fit Vertically"
+msgstr "Zvislé"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1318 ../src/layout_util.c:1334
 msgid "Zoom _2:1"
-msgstr "Zobrazenie _1:1"
+msgstr "Zobraziť _2:1"
 
 # src/img-view.c:791 src/menu.c:946
-#: src/layout_util.c:1117
+#: ../src/layout_util.c:1318
 #, fuzzy
+msgid "Zoom 2:1"
+msgstr "Zobraziť _2:1"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1319 ../src/layout_util.c:1335
 msgid "Zoom _3:1"
-msgstr "Zobrazenie _1:1"
+msgstr "Zobraziť _3:1"
 
 # src/img-view.c:791 src/menu.c:946
-#: src/layout_util.c:1118
+#: ../src/layout_util.c:1319
 #, fuzzy
+msgid "Zoom 3:1"
+msgstr "Zobraziť _3:1"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1320 ../src/layout_util.c:1336
 msgid "Zoom _4:1"
-msgstr "Zobrazenie _1:1"
+msgstr "Zobraziť _4:1"
 
 # src/img-view.c:791 src/menu.c:946
-#: src/layout_util.c:1119
+#: ../src/layout_util.c:1320
 #, fuzzy
+msgid "Zoom 4:1"
+msgstr "Zobraziť _4:1"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1321 ../src/layout_util.c:1337
 msgid "Zoom 1:2"
-msgstr "Zobrazenie _1:1"
+msgstr "Zobraziť 1:2"
 
 # src/img-view.c:791 src/menu.c:946
-#: src/layout_util.c:1120
-#, fuzzy
+#: ../src/layout_util.c:1322 ../src/layout_util.c:1338
 msgid "Zoom 1:3"
-msgstr "Zobrazenie _1:1"
+msgstr "Zobraziť 1:3"
 
 # src/img-view.c:791 src/menu.c:946
-#: src/layout_util.c:1121
-#, fuzzy
+#: ../src/layout_util.c:1323 ../src/layout_util.c:1339
 msgid "Zoom 1:4"
-msgstr "Zobrazenie _1:1"
+msgstr "Zobraziť 1:4"
+
+#: ../src/layout_util.c:1324 ../src/layout_util.c:1325
+#, fuzzy
+msgid "Connected Zoom in"
+msgstr "Odpojené od LIRC\n"
+
+# src/img-view.c:790 src/menu.c:945 src/menu.c:1081
+#: ../src/layout_util.c:1326 ../src/layout_util.c:1327
+#, fuzzy
+msgid "Connected Zoom out"
+msgstr "Oddialiť"
+
+# src/menu.c:1085
+#: ../src/layout_util.c:1328 ../src/layout_util.c:1329
+#, fuzzy
+msgid "Connected Zoom 1:1"
+msgstr "Nastaviť zobrazenie 1:1"
+
+# src/menu.c:758
+#: ../src/layout_util.c:1330 ../src/layout_util.c:1331
+#, fuzzy
+msgid "Connected Zoom to fit"
+msgstr "_Prispôsobiť oknu"
+
+#: ../src/layout_util.c:1332
+#, fuzzy
+msgid "Connected Fit Horizontally"
+msgstr "Vmestiť _vodorovne"
+
+#: ../src/layout_util.c:1333
+msgid "Connected Fit Vertically"
+msgstr ""
+
+# src/menu.c:1085
+#: ../src/layout_util.c:1334
+#, fuzzy
+msgid "Connected Zoom 2:1"
+msgstr "Nastaviť zobrazenie 1:1"
+
+# src/menu.c:1085
+#: ../src/layout_util.c:1335
+#, fuzzy
+msgid "Connected Zoom 3:1"
+msgstr "Nastaviť zobrazenie 1:1"
+
+# src/menu.c:1085
+#: ../src/layout_util.c:1336
+#, fuzzy
+msgid "Connected Zoom 4:1"
+msgstr "Nastaviť zobrazenie 1:1"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1337
+#, fuzzy
+msgid "Connected Zoom 1:2"
+msgstr "Zobraziť 1:2"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1338
+#, fuzzy
+msgid "Connected Zoom 1:3"
+msgstr "Zobraziť 1:3"
+
+# src/img-view.c:791 src/menu.c:946
+#: ../src/layout_util.c:1339
+#, fuzzy
+msgid "Connected Zoom 1:4"
+msgstr "Zobraziť 1:4"
 
 # src/collect-table.c:620 src/dupe.c:1388 src/dupe.c:1560 src/img-view.c:801
 # src/menu.c:906 src/menu.c:964
-#: src/layout_util.c:1124
-#, fuzzy
+#: ../src/layout_util.c:1340
 msgid "_View in new window"
-msgstr "Zobrazi» v _novom okne"
+msgstr "_Zobraziť v novom okne"
+
+# src/collect-table.c:620 src/dupe.c:1388 src/dupe.c:1560 src/img-view.c:801
+# src/menu.c:906 src/menu.c:964
+#: ../src/layout_util.c:1340
+#, fuzzy
+msgid "View in new window"
+msgstr "_Zobraziť v novom okne"
 
 # src/img-view.c:837 src/menu.c:1001
-#: src/layout_util.c:1126 src/layout_util.c:1127 src/layout_util.c:1128
+#: ../src/layout_util.c:1341 ../src/layout_util.c:1342
+#: ../src/layout_util.c:1343
 msgid "F_ull screen"
-msgstr "Celooobrazovkový re¾im"
+msgstr "_Celooobrazovkový režim"
 
-#: src/layout_util.c:1129 src/layout_util.c:1130
+# src/fullscreen.c:117
+#: ../src/layout_util.c:1344 ../src/layout_util.c:1345
 #, fuzzy
-msgid "Escape"
-msgstr "na ¹írku"
+msgid "_Leave full screen"
+msgstr "Geeqie: celoobrazovkový režim"
 
-#: src/layout_util.c:1131
-msgid "_Image Overlay"
-msgstr ""
+# src/fullscreen.c:117
+#: ../src/layout_util.c:1344 ../src/layout_util.c:1345
+#, fuzzy
+msgid "Leave full screen"
+msgstr "Geeqie: celoobrazovkový režim"
 
-#: src/layout_util.c:1132
-msgid "Histogram _channels"
+#: ../src/layout_util.c:1346
+msgid "_Cycle through overlay modes"
 msgstr ""
 
-#: src/layout_util.c:1133
-msgid "Histogram _log mode"
+#: ../src/layout_util.c:1346
+msgid "Cycle through Overlay modes"
 msgstr ""
 
+#: ../src/layout_util.c:1347
+#, fuzzy
+msgid "Cycle through histogram ch_annels"
+msgstr "_Kanály histogramu"
+
+#: ../src/layout_util.c:1347
+#, fuzzy
+msgid "Cycle through histogram channels"
+msgstr "_Kanály histogramu"
+
+#: ../src/layout_util.c:1348
+#, fuzzy
+msgid "Cycle through histogram mo_des"
+msgstr "lineárny histogram červenej"
+
+#: ../src/layout_util.c:1348
+#, fuzzy
+msgid "Cycle through histogram modes"
+msgstr "lineárny histogram červenej"
+
 # src/menu.c:1010
-#: src/layout_util.c:1134
+#: ../src/layout_util.c:1349
 msgid "_Hide file list"
-msgstr "Sky» zoznam súborov"
+msgstr "_Skyť zoznam súborov"
 
-# src/img-view.c:820 src/img-view.c:827 src/menu.c:989 src/menu.c:995
-#: src/layout_util.c:1135
+# src/menu.c:1010
+#: ../src/layout_util.c:1349
 #, fuzzy
+msgid "Hide file list"
+msgstr "_Skyť zoznam súborov"
+
+# src/img-view.c:820 src/img-view.c:827 src/menu.c:989 src/menu.c:995
+#: ../src/layout_util.c:1350
 msgid "_Pause slideshow"
-msgstr "Pozastavi» prezentáciu"
+msgstr "_Pozastaviť prezentáciu"
+
+# src/img-view.c:820 src/img-view.c:827 src/menu.c:989 src/menu.c:995
+#: ../src/layout_util.c:1350
+#, fuzzy
+msgid "Pause slideshow"
+msgstr "_Pozastaviť prezentáciu"
 
 # src/menu.c:891 src/menu.c:920
-#: src/layout_util.c:1136
+#: ../src/layout_util.c:1351
 msgid "_Refresh"
-msgstr "Obnovi»"
+msgstr "_Obnoviť"
+
+# src/menu.c:891 src/menu.c:920
+#: ../src/layout_util.c:1351
+#, fuzzy
+msgid "Refresh"
+msgstr "_Obnoviť"
 
 # src/menu.c:776
-#: src/layout_util.c:1138
+#: ../src/layout_util.c:1352
 msgid "_Contents"
-msgstr "Obsah"
+msgstr "_Obsah"
+
+# src/menu.c:776
+#: ../src/layout_util.c:1352
+#, fuzzy
+msgid "Contents"
+msgstr "_Obsah"
 
 # src/menu.c:773
-#: src/layout_util.c:1139
+#: ../src/layout_util.c:1353
 msgid "_Keyboard shortcuts"
-msgstr "_Klávesové skratky"
+msgstr "_Klávesové skratky"
+
+# src/menu.c:773
+#: ../src/layout_util.c:1353
+#, fuzzy
+msgid "Keyboard shortcuts"
+msgstr "_Klávesové skratky"
 
 # src/menu.c:774
-#: src/layout_util.c:1140
+#: ../src/layout_util.c:1354
 msgid "_Release notes"
-msgstr "Poznámky k ve_rzii"
+msgstr "_Poznámky k vydaniu"
+
+# src/menu.c:774
+#: ../src/layout_util.c:1354
+#, fuzzy
+msgid "Release notes"
+msgstr "_Poznámky k vydaniu"
 
 # src/menu.c:776
-#: src/layout_util.c:1141
+#: ../src/layout_util.c:1355
 msgid "_About"
-msgstr "O Geeqie"
+msgstr "_O aplikácii Geeqie"
 
-# src/dupe.c:2054 src/preferences.c:586
-#: src/layout_util.c:1145 src/layout_util.c:1546
-msgid "_Thumbnails"
-msgstr "Minia_túry"
+# src/menu.c:776
+#: ../src/layout_util.c:1355 ../src/preferences.c:2192
+msgid "About"
+msgstr "O aplikácii Geeqie"
 
-# src/ui_pathsel.c:764
-#: src/layout_util.c:1146
+# src/preferences.c:773
+#: ../src/layout_util.c:1356
+#, fuzzy
+msgid "_Log Window"
+msgstr "Okná"
+
+# src/preferences.c:773
+#: ../src/layout_util.c:1356
+#, fuzzy
+msgid "Log Window"
+msgstr "Okná"
+
+# src/dupe.c:1415 src/dupe.c:1573 src/img-view.c:841
+#: ../src/layout_util.c:1357
+#, fuzzy
+msgid "_Exif window"
+msgstr "_Zavrieť okno"
+
+# src/menu.c:711
+#: ../src/layout_util.c:1357
+#, fuzzy
+msgid "Exif window"
+msgstr "Nové _okno"
+
+# src/preferences.c:603
+#: ../src/layout_util.c:1362
 #, fuzzy
+msgid "Show _Thumbnails"
+msgstr "Zobraziť _náhľady"
+
+# src/preferences.c:603
+#: ../src/layout_util.c:1362
+#, fuzzy
+msgid "Show Thumbnails"
+msgstr "Zobraziť náhľady"
+
+# src/ui_pathsel.c:764
+#: ../src/layout_util.c:1363
 msgid "Show _Marks"
-msgstr "Ukáza» skryté"
+msgstr "Zobraziť _značky"
+
+# src/ui_pathsel.c:764
+#: ../src/layout_util.c:1363
+#, fuzzy
+msgid "Show Marks"
+msgstr "Zobraziť _značky"
+
+# src/ui_pathsel.c:799
+#: ../src/layout_util.c:1364
+#, fuzzy
+msgid "Pi_xel Info"
+msgstr "Formát pixlov"
+
+# src/ui_pathsel.c:764
+#: ../src/layout_util.c:1364
+#, fuzzy
+msgid "Show Pixel Info"
+msgstr "Ukázať skryté"
 
 # src/menu.c:766
-#: src/layout_util.c:1147
+#: ../src/layout_util.c:1365
 msgid "_Float file list"
-msgstr "Plávajúci zoznam súborov"
+msgstr "_Plávajúci zoznam súborov"
+
+# src/menu.c:766
+#: ../src/layout_util.c:1365
+#, fuzzy
+msgid "Float file list"
+msgstr "_Plávajúci zoznam súborov"
 
 # src/menu.c:754
-#: src/layout_util.c:1148
+#: ../src/layout_util.c:1366
 msgid "Hide tool_bar"
-msgstr "Skry» panel nástrojov"
+msgstr "Skryť _panel nástrojov"
 
-# src/dupe.c:1655 src/dupe.c:1944
-#: src/layout_util.c:1149
-msgid "_Keywords"
-msgstr "_Kµúèové slová"
+# src/menu.c:754
+#: ../src/layout_util.c:1366
+#, fuzzy
+msgid "Hide toolbar"
+msgstr "Skryť _panel nástrojov"
 
-# src/menu.c:765
-#: src/layout_util.c:1150
-msgid "E_xif data"
-msgstr "_Exif dáta"
+#: ../src/layout_util.c:1367
+msgid "_Info sidebar"
+msgstr ""
+
+#: ../src/layout_util.c:1367
+msgid "Info sidebar"
+msgstr ""
 
 # src/menu.c:526
-#: src/layout_util.c:1151
+#: ../src/layout_util.c:1368
 msgid "Sort _manager"
-msgstr "_Správca triedenia"
+msgstr "_Správca triedenia"
 
-#: src/layout_util.c:1152
-msgid "Co_nnected scroll"
-msgstr ""
-
-#: src/layout_util.c:1153
-msgid "C_onnected zoom"
-msgstr ""
+# src/menu.c:526
+#: ../src/layout_util.c:1368
+#, fuzzy
+msgid "Sort manager"
+msgstr "_Správca triedenia"
 
 # src/img-view.c:813 src/menu.c:982
-#: src/layout_util.c:1154
+#: ../src/layout_util.c:1369
 msgid "Toggle _slideshow"
-msgstr "Za_stavi» prezentáciu"
-
-# src/menu.c:765
-#: src/layout_util.c:1158 src/view_dir.c:29
-msgid "_List"
-msgstr "Zoznam"
+msgstr "Prepnúť _prezentáciu"
 
-#: src/layout_util.c:1159
-msgid "I_cons"
-msgstr "_Ikona:"
+# src/img-view.c:813 src/menu.c:982
+#: ../src/layout_util.c:1369
+#, fuzzy
+msgid "Toggle slideshow"
+msgstr "Prepnúť _prezentáciu"
 
-#: src/layout_util.c:1163
-msgid "Horizontal"
-msgstr ""
+#: ../src/layout_util.c:1370
+msgid "Use _color profiles"
+msgstr "Použiť _Farebné profily"
 
-#: src/layout_util.c:1164
+#: ../src/layout_util.c:1370
 #, fuzzy
-msgid "Vertical"
-msgstr "èiastoèný"
+msgid "Use color profiles"
+msgstr "Použiť _Farebné profily"
 
-#: src/layout_util.c:1165
-msgid "Quad"
-msgstr ""
+#: ../src/layout_util.c:1371
+msgid "Use profile from _image"
+msgstr "Použiť profil z _obrázka"
 
-# src/dupe.c:1653 src/dupe.c:1942
-#: src/layout_util.c:1166
+#: ../src/layout_util.c:1371
 #, fuzzy
-msgid "Single"
-msgstr "Veµkos»"
+msgid "Use profile from image"
+msgstr "Použiť profil z _obrázka"
 
-#: src/layout_util.c:1354
-#, c-format
-msgid "Mark _%d"
-msgstr ""
+# src/img-view.c:813 src/menu.c:982
+#: ../src/layout_util.c:1372
+msgid "Toggle _grayscale"
+msgstr "Prepnúť šedotón"
 
-#: src/layout_util.c:1355 src/view_file.c:515
-#, c-format
-msgid "_Set mark %d"
-msgstr ""
+# src/img-view.c:813 src/menu.c:982
+#: ../src/layout_util.c:1372
+#, fuzzy
+msgid "Toggle grayscale"
+msgstr "Prepnúť šedotón"
 
-#: src/layout_util.c:1356 src/view_file.c:516
-#, c-format
-msgid "_Reset mark %d"
+#: ../src/layout_util.c:1373
+#, fuzzy
+msgid "Image Overlay"
+msgstr "_Prekrytie obrázka"
+
+#: ../src/layout_util.c:1374
+msgid "_Show Histogram"
 msgstr ""
 
-#: src/layout_util.c:1357 src/layout_util.c:1358 src/view_file.c:517
-#, c-format
-msgid "_Toggle mark %d"
+#: ../src/layout_util.c:1374
+msgid "Show Histogram"
 msgstr ""
 
+# src/preferences.c:676
+#: ../src/layout_util.c:1378
+#, fuzzy
+msgid "Image _List"
+msgstr "Šírka obrázku"
+
+# src/menu.c:769
+#: ../src/layout_util.c:1378
+#, fuzzy
+msgid "View Images as List"
+msgstr "/Zobraziť/Prepnúť prezentáciu"
+
+#: ../src/layout_util.c:1379
+msgid "I_cons"
+msgstr "_Ikona:"
+
+# src/dupe.c:1655 src/dupe.c:1944
+#: ../src/layout_util.c:1379
+#, fuzzy
+msgid "View Images as Icons"
+msgstr "Zobraziť ako _ikony"
+
+# src/preferences.c:368
+#: ../src/layout_util.c:1383
+#, fuzzy
+msgid "Folder Li_st"
+msgstr "Priečinok existuje"
+
+# src/preferences.c:368
+#: ../src/layout_util.c:1383
+#, fuzzy
+msgid "View Folders as List"
+msgstr "Priečinok existuje"
+
+# src/preferences.c:368
+#: ../src/layout_util.c:1384
+#, fuzzy
+msgid "Folder T_ree"
+msgstr "Priečinok existuje"
+
+# src/menu.c:761
+#: ../src/layout_util.c:1384
+#, fuzzy
+msgid "View Folders as Tree"
+msgstr "Zobraziť ako s_trom"
+
+#: ../src/layout_util.c:1388
+#, fuzzy
+msgid "_Horizontal"
+msgstr "Vodorovne"
+
+#: ../src/layout_util.c:1388
+#, fuzzy
+msgid "Split Horizontal"
+msgstr "Vmestiť _vodorovne"
+
+#: ../src/layout_util.c:1389
+#, fuzzy
+msgid "_Vertical"
+msgstr "Zvislé"
+
+#: ../src/layout_util.c:1389
+#, fuzzy
+msgid "Split Vertical"
+msgstr "Zvislé"
+
+#: ../src/layout_util.c:1390
+#, fuzzy
+msgid "_Quad"
+msgstr "Štvor"
+
+#: ../src/layout_util.c:1390
+#, fuzzy
+msgid "Split Quad"
+msgstr "_Rozdeliť"
+
+# src/dupe.c:1653 src/dupe.c:1942
+#: ../src/layout_util.c:1391
+#, fuzzy
+msgid "_Single"
+msgstr "Jednotlivo"
+
+# src/dupe.c:1653 src/dupe.c:1942
+#: ../src/layout_util.c:1391
+#, fuzzy
+msgid "Split Single"
+msgstr "Jednotlivo"
+
+#: ../src/layout_util.c:1395
+#, fuzzy
+msgid "Input _0: sRGB"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1395
+#, fuzzy
+msgid "Input 0: sRGB"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1396
+#, fuzzy
+msgid "Input _1: AdobeRGB compatible"
+msgstr "Kompatibilné s AdobeRGB"
+
+#: ../src/layout_util.c:1396
+#, fuzzy
+msgid "Input 1: AdobeRGB compatible"
+msgstr "Kompatibilné s AdobeRGB"
+
+#: ../src/layout_util.c:1397
+#, fuzzy
+msgid "Input _2"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1397
+#, fuzzy
+msgid "Input 2"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1398
+#, fuzzy
+msgid "Input _3"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1398
+#, fuzzy
+msgid "Input 3"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1399
+#, fuzzy
+msgid "Input _4"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1399
+#, fuzzy
+msgid "Input 4"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1400
+#, fuzzy
+msgid "Input _5"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1400
+#, fuzzy
+msgid "Input 5"
+msgstr "Vstup _%d:"
+
+#: ../src/layout_util.c:1404
+#, fuzzy
+msgid "Histogram on Red"
+msgstr "Histogram v _log režime"
+
+#: ../src/layout_util.c:1405
+#, fuzzy
+msgid "Histogram on Green"
+msgstr "lineárny histogram zelenej"
+
+#: ../src/layout_util.c:1406
+#, fuzzy
+msgid "Histogram on Blue"
+msgstr "lineárny histogram modrej"
+
+#: ../src/layout_util.c:1407
+#, fuzzy
+msgid "Histogram on RGB"
+msgstr "lineárny histogram RGB"
+
+#: ../src/layout_util.c:1408
+#, fuzzy
+msgid "Histogram on Value"
+msgstr "lineárny histogram hodnoty"
+
+#: ../src/layout_util.c:1412
+#, fuzzy
+msgid "Linear Histogram"
+msgstr "lineárny histogram červenej"
+
+#: ../src/layout_util.c:1413
+msgid "_Log Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:1413
+msgid "Log Histogram"
+msgstr ""
+
+#: ../src/layout_util.c:1679
+#, c-format
+msgid "Mark _%d"
+msgstr "Značka _%d"
+
+#: ../src/layout_util.c:1680 ../src/view_file.c:540
+#, c-format
+msgid "_Set mark %d"
+msgstr "_Nastaviť značku %d"
+
+#: ../src/layout_util.c:1680
+#, fuzzy, c-format
+msgid "Set mark %d"
+msgstr "_Nastaviť značku %d"
+
+#: ../src/layout_util.c:1681 ../src/view_file.c:541
+#, c-format
+msgid "_Reset mark %d"
+msgstr "_Vynulovať značku %d"
+
+#: ../src/layout_util.c:1681
+#, fuzzy, c-format
+msgid "Reset mark %d"
+msgstr "_Vynulovať značku %d"
+
+#: ../src/layout_util.c:1682 ../src/layout_util.c:1683 ../src/view_file.c:542
+#, c-format
+msgid "_Toggle mark %d"
+msgstr "_Prepnúť značku %d"
+
+#: ../src/layout_util.c:1682 ../src/layout_util.c:1683
+#, fuzzy, c-format
+msgid "Toggle mark %d"
+msgstr "_Prepnúť značku %d"
+
 # src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
-#: src/layout_util.c:1359 src/layout_util.c:1360 src/view_file.c:518
+#: ../src/layout_util.c:1684
 #, fuzzy, c-format
-msgid "_Select mark %d"
-msgstr "Vybra» v¹etko"
+msgid "Se_lect mark %d"
+msgstr "_Vybrať značku %d"
 
-#: src/layout_util.c:1361 src/view_file.c:519
+# src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
+#: ../src/layout_util.c:1684 ../src/layout_util.c:1685
 #, fuzzy, c-format
+msgid "Select mark %d"
+msgstr "_Vybrať značku %d"
+
+# src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
+#: ../src/layout_util.c:1685 ../src/view_file.c:543
+#, c-format
+msgid "_Select mark %d"
+msgstr "_Vybrať značku %d"
+
+#: ../src/layout_util.c:1686 ../src/view_file.c:544
+#, c-format
 msgid "_Add mark %d"
-msgstr "Prida» zálo¾ku"
+msgstr "_Pridať značku %d"
 
-#: src/layout_util.c:1362 src/view_file.c:520
+#: ../src/layout_util.c:1686
+#, fuzzy, c-format
+msgid "Add mark %d"
+msgstr "_Pridať značku %d"
+
+#: ../src/layout_util.c:1687 ../src/view_file.c:545
 #, c-format
 msgid "_Intersection with mark %d"
-msgstr ""
+msgstr "_Prienik so značkou %d"
+
+#: ../src/layout_util.c:1687
+#, fuzzy, c-format
+msgid "Intersection with mark %d"
+msgstr "_Prienik so značkou %d"
 
-#: src/layout_util.c:1363 src/view_file.c:521
+#: ../src/layout_util.c:1688 ../src/view_file.c:546
 #, c-format
 msgid "_Unselect mark %d"
-msgstr ""
-
-# src/preferences.c:603
-#: src/layout_util.c:1547
-msgid "Show thumbnails"
-msgstr "Zobrazi» miniatúry"
+msgstr "_Odznačiť značku %d"
 
-# src/menu.c:1075
-#: src/layout_util.c:1552
-msgid "Change to home folder"
-msgstr "Návrat do domovského prieèinka"
+#: ../src/layout_util.c:1688
+#, fuzzy, c-format
+msgid "Unselect mark %d"
+msgstr "_Odznačiť značku %d"
 
-# src/menu.c:1077
-#: src/layout_util.c:1554
-msgid "Refresh file list"
-msgstr "Obnovi» zoznam súborov"
+#: ../src/layout_util.c:1689
+#, fuzzy, c-format
+msgid "_Filter mark %d"
+msgstr "_Nastaviť značku %d"
 
-# src/img-view.c:789 src/menu.c:944 src/menu.c:1079
-#: src/layout_util.c:1556
-msgid "Zoom in"
-msgstr "Priblí¾i»"
+#: ../src/layout_util.c:1689
+#, fuzzy, c-format
+msgid "Filter mark %d"
+msgstr "_Nastaviť značku %d"
 
-# src/img-view.c:790 src/menu.c:945 src/menu.c:1081
-#: src/layout_util.c:1558
-msgid "Zoom out"
-msgstr "Oddiali»"
+#: ../src/layout_util.c:2217
+#, c-format
+msgid "Number of files with unsaved metadata: %d"
+msgstr ""
 
-# src/img-view.c:792 src/menu.c:947 src/menu.c:1083 src/preferences.c:716
-#: src/layout_util.c:1560 src/preferences.c:978
-msgid "Fit image to window"
-msgstr "Prispôsobi» obrázok do okna"
+#: ../src/layout_util.c:2223
+msgid "No unsaved metadata"
+msgstr ""
 
-# src/menu.c:1085
-#: src/layout_util.c:1562
-msgid "Set zoom 1:1"
-msgstr "Nastavi» zobrazenie 1:1"
+#: ../src/layout_util.c:2270
+#, c-format
+msgid ""
+"Image profile: %s\n"
+"Screen profile: %s"
+msgstr ""
 
-# src/menu.c:1087
-#: src/layout_util.c:1564
-msgid "Configure options"
-msgstr "Konfigurova» voµby"
+#: ../src/layout_util.c:2278
+msgid "Click to enable color management"
+msgstr ""
 
-# src/preferences.c:401
-#: src/layout_util.c:1565
-msgid "_Float"
-msgstr "P_lávajúce"
+#: ../src/layout_util.c:2283
+msgid "Color profiles not supported"
+msgstr "Farebné profily nie sú podporované"
 
-# src/menu.c:1089
-#: src/layout_util.c:1566
-msgid "Float Controls"
-msgstr "Plávajúce ovládanie"
+#: ../src/layout_util.c:2305
+#, fuzzy, c-format
+msgid "Input _%d: %s"
+msgstr "Vstup _%d:"
 
 #. something went badly wrong
-#: src/lirc.c:184
+#: ../src/lirc.c:197
 #, c-format
 msgid "disconnected from LIRC\n"
-msgstr ""
+msgstr "Odpojené od LIRC\n"
 
-#: src/lirc.c:199
-#, fuzzy, c-format
+#: ../src/lirc.c:212
+#, c-format
 msgid "Could not init LIRC support\n"
-msgstr "Prieèinok nie je podporovaný"
+msgstr "Nepodarilo sa spustiť podporu LIRC\n"
 
-#: src/lirc.c:206
+#: ../src/lirc.c:219
 #, c-format
 msgid ""
 "could not read LIRC config file\n"
 "please read the documentation of LIRC to \n"
 "know how to create a proper config file\n"
 msgstr ""
+"nepodarilo sa otvoriť konfiguračný súbor LIRC\n"
+"prosím prečítajte si dokumentáciu LIRC,\n"
+"aby ste vedeli vytvoriť správny konfiguračný súbor\n"
+
+#: ../src/logwindow.c:76
+msgid "Log"
+msgstr ""
 
 # src/main.c:457
-#: src/main.c:391
-#, fuzzy, c-format
+#: ../src/main.c:321
+#, c-format
 msgid ""
 "Usage: %s [options] [path]\n"
 "\n"
 msgstr ""
-"Pou¾itie: gqview [parametre] [cesta]\n"
+"Použitie: %s [parametre] [cesta]\n"
 "\n"
 
 # src/main.c:458
-#: src/main.c:392
+#: ../src/main.c:322
 msgid "valid options are:\n"
-msgstr "mo¾né parametre sú:\n"
+msgstr "možné parametre sú:\n"
 
 # src/main.c:459
-#: src/main.c:393
+#: ../src/main.c:323
 msgid "  +t, --with-tools           force show of tools\n"
-msgstr "  +t, --with-tools           vynúti» zobrazenie nástrojov\n"
+msgstr "  +t, --with-tools           vynútiť zobrazenie nástrojov\n"
 
 # src/main.c:460
-#: src/main.c:394
+#: ../src/main.c:324
 msgid "  -t, --without-tools        force hide of tools\n"
-msgstr "  -t, --without-tools         vynúti» skrytie nástrojov\n"
+msgstr "  -t, --without-tools         vynútiť skrytie nástrojov\n"
 
 # src/main.c:461
-#: src/main.c:395
+#: ../src/main.c:325
 msgid "  -f, --fullscreen           start in full screen mode\n"
-msgstr "  -f, --fullscreen           ¹tart v celoobrazovkovom móde\n"
+msgstr "  -f, --fullscreen           štart v celoobrazovkovom móde\n"
 
 # src/main.c:462
-#: src/main.c:396
+#: ../src/main.c:326
 msgid "  -s, --slideshow            start in slideshow mode\n"
-msgstr "  -s, --slideshow            ¹tart v prezentaènom móde\n"
+msgstr "  -s, --slideshow            štart v prezentačnom móde\n"
 
 # src/main.c:463
-#: src/main.c:397
+#: ../src/main.c:327
 msgid "  -l, --list                 open collection window for command line\n"
 msgstr ""
-"  -l, --list                 otvori» okno so zbierkou pre príkazový riadok\n"
+"  -l, --list                 otvoriť okno so zbierkou pre príkazový riadok\n"
 
-#: src/main.c:398
+#: ../src/main.c:328
 msgid "      --geometry=GEOMETRY    set main window location\n"
-msgstr ""
+msgstr "      --geometry=GEOMETRY    nastaviť umiestnenie hlavného okna\n"
 
 # src/main.c:463
-#: src/main.c:399
+#: ../src/main.c:329
 msgid "  -r, --remote               send following commands to open window\n"
 msgstr ""
-"  -r, --remote              odosla» nasledujúce príkazy do otvoreného okna\n"
-"  -l, --list                 otvori» okno so zbierkou pre príkazový riadok\n"
+"  -r, --remote              odoslať nasledujúce príkazy do otvoreného okna\n"
+"  -l, --list                 otvoriť okno so zbierkou pre príkazový riadok\n"
 
-#: src/main.c:400
+#: ../src/main.c:330
 msgid "  -rh,--remote-help          print remote command list\n"
-msgstr "  -rh,--remote-help         zobrazi» zoznam vzdialených príkazov\n"
+msgstr "  -rh,--remote-help         zobraziť zoznam vzdialených príkazov\n"
 
 # src/main.c:464
-#: src/main.c:402
-#, fuzzy
+#: ../src/main.c:332
 msgid "  --debug[=level]            turn on debug output\n"
-msgstr "  --debug                    zapnú» ladiaci výstup\n"
+msgstr "  --debug                    zapnúť ladiaci výstup\n"
 
 # src/main.c:465
-#: src/main.c:404
+#: ../src/main.c:334
 msgid "  -v, --version              print version info\n"
-msgstr "  -v, --version              vypísa» verziu programu\n"
+msgstr "  -v, --version              vypísať verziu programu\n"
 
 # src/main.c:466
-#: src/main.c:405
+#: ../src/main.c:335
 msgid ""
 "  -h, --help                 show this message\n"
 "\n"
 msgstr ""
-"  -h, --help                 zobrazí túto správu\n"
+"  -h, --help                 zobrazí túto správu\n"
 "\n"
 
 # src/main.c:471
-#: src/main.c:417
+#: ../src/main.c:347
 #, c-format
 msgid ""
 "invalid or ignored: %s\n"
 "Use --help for options\n"
 msgstr ""
-"chybný alebo ignorovaný: %s\n"
-"Pou¾i --help pre parametre\n"
+"chybný alebo ignorovaný: %s\n"
+"Použi --help pre parametre\n"
 
 # src/main.c:471
-#: src/main.c:445
-#, fuzzy
+#: ../src/main.c:376
 msgid "Invalid or ignored remote options: "
-msgstr ""
-"chybný alebo ignorovaný: %s\n"
-"Pou¾i --help pre parametre\n"
+msgstr "Chybné alebo ignorované vzdialené možnosti:"
 
-#: src/main.c:454
+#: ../src/main.c:385
 msgid ""
 "\n"
 "Use --remote-help for valid remote options.\n"
 msgstr ""
+"\n"
+"Správne vzdialené možnosti získate pomocou --remote-help.\n"
 
 # src/main.c:533
-#: src/main.c:539
-#, fuzzy, c-format
+#: ../src/main.c:487
+#, c-format
 msgid "Creating %s dir:%s\n"
-msgstr "Vytváram Geeqie adresár:%s\n"
+msgstr "Vytváram %s adresár:%s\n"
 
 # src/main.c:536
-#: src/main.c:543
+#: ../src/main.c:491
 #, c-format
 msgid "Could not create dir:%s\n"
-msgstr "Nemô¾em vytvori» adresár:%s\n"
+msgstr "Nemôžem vytvoriť adresár:%s\n"
 
-# src/ui_pathsel.c:754
-#: src/main.c:562 src/ui_bookmark.c:856 src/ui_pathsel.c:1051
-msgid "Home"
-msgstr "Domov"
+# src/rcfile.c:132
+#: ../src/main.c:543
+#, fuzzy, c-format
+msgid "error saving file: %s\n"
+msgstr "chyba pri ukladaní konfiguračného súboru: %s\n"
 
-# src/utilops.c:989
-#: src/main.c:564 src/ui_bookmark.c:863
-msgid "Desktop"
-msgstr "Plocha"
+# src/rcfile.c:132
+#: ../src/main.c:562
+#, fuzzy, c-format
+msgid ""
+"error saving file: %s\n"
+"error: %s\n"
+msgstr ""
+"chyba pri ukladaní konfiguračného súboru: %s\n"
+"chyba: %s\n"
 
 # src/main.c:622
-#: src/main.c:680
-#, fuzzy
+#: ../src/main.c:670
 msgid "exit"
-msgstr "Koniec"
+msgstr "koniec"
 
 # src/preferences.c:684
-#: src/main.c:685
-#, fuzzy, c-format
+#: ../src/main.c:675
+#, c-format
 msgid "Quit %s"
-msgstr "Skonèi»"
+msgstr "Skončiť %s"
 
 # src/main.c:619
-#: src/main.c:687
+#: ../src/main.c:677
 msgid "Collections have been modified. Quit anyway?"
-msgstr "Zbierky boli zmenené. Naozaj skonèi»?"
+msgstr "Zbierky boli zmenené. Naozaj skončiť?"
 
 # src/main.c:743
-#: src/main.c:836 src/remote.c:536
+#: ../src/main.c:878 ../src/remote.c:601
 msgid "Command line"
-msgstr "Príkazový riadok"
+msgstr "Príkazový riadok"
 
 # src/menu.c:510
-#: src/menu.c:117
+#: ../src/menu.c:133
 msgid "Sort by size"
-msgstr "Usporiada» podµa veµkosti"
+msgstr "Usporiadať podľa veľkosti"
 
 # src/menu.c:513
-#: src/menu.c:120
+#: ../src/menu.c:136
 msgid "Sort by date"
-msgstr "Usporiada» podµa dátumu"
+msgstr "Usporiadať podľa dátumu"
+
+# src/menu.c:513
+#: ../src/menu.c:139
+#, fuzzy
+msgid "Sort by Exif-date"
+msgstr "Usporiadať podľa E_xif dátumu"
 
 # src/menu.c:516
-#: src/menu.c:123
+#: ../src/menu.c:142
 msgid "Unsorted"
-msgstr "Neusporiadané"
+msgstr "Neusporiadané"
 
 # src/menu.c:519
-#: src/menu.c:126
+#: ../src/menu.c:145
 msgid "Sort by path"
-msgstr "Usporiada» podµa cesty"
+msgstr "Usporiadať podľa cesty"
 
 # src/menu.c:522
-#: src/menu.c:129
+#: ../src/menu.c:148
 msgid "Sort by number"
-msgstr "Usporiada» podµa èísla"
+msgstr "Usporiadať podľa čísla"
 
 # src/menu.c:526
-#: src/menu.c:133
+#: ../src/menu.c:152
 msgid "Sort by name"
-msgstr "Usporiada» podµa mena"
+msgstr "Usporiadať podľa mena"
 
 # src/menu.c:559
-#: src/menu.c:184
+#: ../src/menu.c:203
 msgid "Sort"
-msgstr "Usporiada»"
+msgstr "Usporiadať"
 
 # src/menu.c:578
-#: src/menu.c:209
+#: ../src/menu.c:228
 msgid "Rotate _180"
-msgstr "Rotova» _180"
+msgstr "Otočiť _180"
 
-# src/collect-table.c:86
-#: src/pan-view.c:470
-#, c-format
-msgid "%d images, %s"
-msgstr "%d obrázkov, %s"
+#: ../src/metadata.c:1463
+msgid "People"
+msgstr "Ľudia"
 
-#: src/pan-view.c:480
-#, c-format
-msgid "The pan view does not support the folder \"%s\"."
-msgstr "Roz¹írený pohµad nepodporuje prieèinok \"%s\"."
+#: ../src/metadata.c:1464
+msgid "Family"
+msgstr ""
 
-#: src/pan-view.c:481
-msgid "Folder not supported"
-msgstr "Prieèinok nie je podporovaný"
+#: ../src/metadata.c:1465
+msgid "Free time"
+msgstr ""
 
-# src/dupe.c:841
-#: src/pan-view.c:1083 src/pan-view.c:1099
-msgid "Reading image data..."
-msgstr "Naèítavam dáta obrázku..."
+#: ../src/metadata.c:1466
+msgid "Children"
+msgstr ""
 
-# src/dupe.c:871 src/dupe.c:892
-#: src/pan-view.c:1158
-msgid "Sorting images..."
-msgstr "Triedim obrázky..."
+#: ../src/metadata.c:1467
+#, fuzzy
+msgid "Sport"
+msgstr "na výšku"
 
-# src/dupe.c:1654 src/dupe.c:1943
-#: src/pan-view.c:1546 src/pan-view.c:1912
-msgid "Date:"
-msgstr "Dátum:"
+#: ../src/metadata.c:1468
+#, fuzzy
+msgid "Culture"
+msgstr "Príroda"
 
-# src/preferences.c:595
-#: src/pan-view.c:1548 src/preferences.c:887 src/print.c:3245 src/print.c:3456
-msgid "Size:"
-msgstr "Rozmer:"
+#: ../src/metadata.c:1469
+msgid "Festival"
+msgstr ""
 
-#: src/pan-view.c:1650
-msgid "path found"
-msgstr "nájdená cesta"
+#: ../src/metadata.c:1470
+msgid "Nature"
+msgstr "Príroda"
 
-# src/utilops.c:980
-#: src/pan-view.c:1650
-msgid "filename found"
-msgstr "nájdený súbor"
+#: ../src/metadata.c:1471
+msgid "Animal"
+msgstr ""
 
-#: src/pan-view.c:1698
-msgid "partial match"
-msgstr "èiastoèná zhoda"
+#: ../src/metadata.c:1472
+msgid "Bird"
+msgstr ""
 
-#: src/pan-view.c:1909 src/pan-view.c:1942
-msgid "no match"
-msgstr "¾iadna zhoda"
+#: ../src/metadata.c:1473
+msgid "Insect"
+msgstr ""
 
-#: src/pan-view.c:2268 src/search.c:2150
-msgid "Folder not found"
-msgstr "Prieèinok sa nena¹iel"
+#: ../src/metadata.c:1474
+msgid "Pets"
+msgstr ""
 
-#: src/pan-view.c:2269
-msgid "The entered path is not a folder"
-msgstr "Zadaná cesta nie je prieèinok"
+#: ../src/metadata.c:1475
+msgid "Wildlife"
+msgstr ""
 
-#: src/pan-view.c:2368
+# src/img-view.c:789 src/menu.c:944 src/menu.c:1079
+#: ../src/metadata.c:1476
 #, fuzzy
-msgid "Pan View"
-msgstr "Roz¹írený pohµad"
+msgid "Zoo"
+msgstr "Lupa"
 
-# src/preferences.c:369
-#: src/pan-view.c:2393
+#: ../src/metadata.c:1477
+msgid "Plant"
+msgstr ""
+
+# src/menu.c:768
+#: ../src/metadata.c:1478
 #, fuzzy
-msgid "Timeline"
-msgstr "Bilineárne"
+msgid "Tree"
+msgstr "_Strom"
 
-# src/dupe.c:1412 src/dupe.c:1570
-#: src/pan-view.c:2394
-msgid "Calendar"
-msgstr "Kalendár"
+#: ../src/metadata.c:1479
+msgid "Flower"
+msgstr ""
 
-# src/preferences.c:368
-#: src/pan-view.c:2396
-msgid "Folders (flower)"
-msgstr "Prieèinky (kvet)"
+#: ../src/metadata.c:1480
+msgid "Water"
+msgstr ""
 
-#: src/pan-view.c:2397
-msgid "Grid"
-msgstr "Mrie¾ka"
+#: ../src/metadata.c:1481
+msgid "River"
+msgstr ""
 
-# src/main.c:561
-#: src/pan-view.c:2406
-msgid "Dots"
-msgstr "Bodky"
+#: ../src/metadata.c:1482
+msgid "Lake"
+msgstr ""
 
-# src/preferences.c:676
-#: src/pan-view.c:2407
-msgid "No Images"
-msgstr "®iadne obrázky"
+# src/dupe.c:871 src/dupe.c:892
+#: ../src/metadata.c:1483
+#, fuzzy
+msgid "Sea"
+msgstr "Hľadanie:"
 
-# src/dupe.c:2054 src/preferences.c:586
-#: src/pan-view.c:2408
-msgid "Small Thumbnails"
-msgstr "Malé miniatúry"
+#: ../src/metadata.c:1484 ../src/print.c:375
+msgid "Landscape"
+msgstr "Na šírku"
 
-# src/dupe.c:2054 src/preferences.c:586
-#: src/pan-view.c:2409
-msgid "Normal Thumbnails"
-msgstr "Normálne miniatúry"
+#: ../src/metadata.c:1485
+msgid "Art"
+msgstr "Umenie"
 
-# src/cache_maint.c:252
-#: src/pan-view.c:2410
-msgid "Large Thumbnails"
-msgstr "Veµké miniatúry"
+#: ../src/metadata.c:1486
+#, fuzzy
+msgid "Statue"
+msgstr "Stav"
 
-#: src/pan-view.c:2411 src/pan-view.c:2863
-msgid "1:10 (10%)"
-msgstr "1:10 (10%)"
+# src/ui_pathsel.c:799
+#: ../src/metadata.c:1487
+#, fuzzy
+msgid "Painting"
+msgstr "Chyba pri tlači"
 
-#: src/pan-view.c:2412 src/pan-view.c:2859
-msgid "1:4 (25%)"
-msgstr "1:4 (25%)"
+#: ../src/metadata.c:1488 ../src/metadata.c:1502
+msgid "Historic"
+msgstr ""
 
-#: src/pan-view.c:2413 src/pan-view.c:2855
-msgid "1:3 (33%)"
-msgstr "1:3 (33%)"
+#: ../src/metadata.c:1489 ../src/metadata.c:1503
+msgid "Modern"
+msgstr ""
 
-#: src/pan-view.c:2414 src/pan-view.c:2851
-msgid "1:2 (50%)"
-msgstr "1:2 (50%)"
+#: ../src/metadata.c:1490
+msgid "City"
+msgstr ""
 
-#: src/pan-view.c:2415
+#: ../src/metadata.c:1491
+msgid "Park"
+msgstr ""
+
+#: ../src/metadata.c:1492
+msgid "Street"
+msgstr ""
+
+#: ../src/metadata.c:1493
+msgid "Square"
+msgstr ""
+
+#: ../src/metadata.c:1494
+#, fuzzy
+msgid "Architecture"
+msgstr "Clona"
+
+#: ../src/metadata.c:1495
+msgid "Buildings"
+msgstr ""
+
+#: ../src/metadata.c:1496
+msgid "House"
+msgstr ""
+
+#: ../src/metadata.c:1497
+msgid "Cathedral"
+msgstr ""
+
+#: ../src/metadata.c:1498
+#, fuzzy
+msgid "Palace"
+msgstr "Miesta"
+
+#: ../src/metadata.c:1499
+msgid "Castle"
+msgstr ""
+
+#: ../src/metadata.c:1500
+msgid "Bridge"
+msgstr ""
+
+#: ../src/metadata.c:1501
+msgid "Interior"
+msgstr ""
+
+#: ../src/metadata.c:1504
+msgid "Places"
+msgstr "Miesta"
+
+# src/preferences.c:897
+#: ../src/metadata.c:1505
+#, fuzzy
+msgid "Conditions"
+msgstr "Zbierky"
+
+#: ../src/metadata.c:1506
+#, fuzzy
+msgid "Night"
+msgstr "Výška"
+
+#: ../src/metadata.c:1507
+#, fuzzy
+msgid "Lights"
+msgstr "Zdroj svetla"
+
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/metadata.c:1508
+#, fuzzy
+msgid "Reflections"
+msgstr "Výber"
+
+#: ../src/metadata.c:1509
+msgid "Sun"
+msgstr ""
+
+#: ../src/metadata.c:1510
+#, fuzzy
+msgid "Weather"
+msgstr "iné"
+
+#: ../src/metadata.c:1511
+msgid "Fog"
+msgstr ""
+
+#: ../src/metadata.c:1512
+msgid "Rain"
+msgstr ""
+
+#: ../src/metadata.c:1513
+msgid "Clouds"
+msgstr ""
+
+#: ../src/metadata.c:1514
+msgid "Snow"
+msgstr ""
+
+#: ../src/metadata.c:1515
+#, fuzzy
+msgid "Sunny weather"
+msgstr "oblačno"
+
+#: ../src/metadata.c:1516
+#, fuzzy
+msgid "Photo"
+msgstr "Fotka 6x4"
+
+# src/menu.c:492
+#: ../src/metadata.c:1517
+#, fuzzy
+msgid "Edited"
+msgstr "Editovať"
+
+#: ../src/metadata.c:1518
+#, fuzzy
+msgid "Detail"
+msgstr "Podrobnosti"
+
+#: ../src/metadata.c:1519
+#, fuzzy
+msgid "Macro"
+msgstr "makro"
+
+#: ../src/metadata.c:1520 ../src/print.c:374
+msgid "Portrait"
+msgstr "Na výšku"
+
+#: ../src/metadata.c:1521
+msgid "Black and White"
+msgstr ""
+
+# src/utilops.c:1216
+#: ../src/metadata.c:1522
+#, fuzzy
+msgid "Perspective"
+msgstr "tvorivý"
+
+# src/utilops.c:989
+#: ../src/options.c:139 ../src/ui_bookmark.c:555
+msgid "Desktop"
+msgstr "Plocha"
+
+# src/collect-table.c:86
+#: ../src/pan-view.c:472
+#, c-format
+msgid "%d images, %s"
+msgstr "%d obrázkov, %s"
+
+#: ../src/pan-view.c:482
+#, c-format
+msgid "The pan view does not support the folder \"%s\"."
+msgstr "Rozšírený pohľad nepodporuje priečinok \"%s\"."
+
+#: ../src/pan-view.c:483
+msgid "Folder not supported"
+msgstr "Priečinok nie je podporovaný"
+
+# src/dupe.c:841
+#: ../src/pan-view.c:1084 ../src/pan-view.c:1100
+msgid "Reading image data..."
+msgstr "Načítavam dáta obrázku..."
+
+# src/dupe.c:871 src/dupe.c:892
+#: ../src/pan-view.c:1159
+msgid "Sorting images..."
+msgstr "Triedim obrázky..."
+
+# src/utilops.c:980
+#: ../src/pan-view.c:1552 ../src/print.c:2613
+msgid "Filename:"
+msgstr "Názov súboru:"
+
+#: ../src/pan-view.c:1554 ../src/pan-view.c:2406 ../src/preferences.c:1433
+msgid "Location:"
+msgstr "Umiestnenie:"
+
+# src/dupe.c:1654 src/dupe.c:1943
+#: ../src/pan-view.c:1556 ../src/pan-view.c:1922
+msgid "Date:"
+msgstr "Dátum:"
+
+# src/preferences.c:595
+#: ../src/pan-view.c:1558 ../src/preferences.c:1251 ../src/print.c:3226
+#: ../src/print.c:3437
+msgid "Size:"
+msgstr "Rozmer:"
+
+#: ../src/pan-view.c:1660
+msgid "path found"
+msgstr "nájdená cesta"
+
+# src/utilops.c:980
+#: ../src/pan-view.c:1660
+msgid "filename found"
+msgstr "nájdený súbor"
+
+#: ../src/pan-view.c:1708
+msgid "partial match"
+msgstr "čiastočná zhoda"
+
+#: ../src/pan-view.c:1919 ../src/pan-view.c:1952
+msgid "no match"
+msgstr "žiadna zhoda"
+
+#: ../src/pan-view.c:2294 ../src/search.c:2219
+msgid "Folder not found"
+msgstr "Priečinok sa nenašiel"
+
+#: ../src/pan-view.c:2295
+msgid "The entered path is not a folder"
+msgstr "Zadaná cesta nie je priečinok"
+
+#: ../src/pan-view.c:2390
+msgid "Pan View"
+msgstr "Rozšírený pohľad"
+
+# src/preferences.c:369
+#: ../src/pan-view.c:2415
+msgid "Timeline"
+msgstr "Harmonogram"
+
+# src/dupe.c:1412 src/dupe.c:1570
+#: ../src/pan-view.c:2416
+msgid "Calendar"
+msgstr "Kalendár"
+
+# src/preferences.c:368
+#: ../src/pan-view.c:2418
+msgid "Folders (flower)"
+msgstr "Priečinky (kvet)"
+
+#: ../src/pan-view.c:2419
+msgid "Grid"
+msgstr "Mriežka"
+
+# src/main.c:561
+#: ../src/pan-view.c:2428
+msgid "Dots"
+msgstr "Bodky"
+
+# src/preferences.c:676
+#: ../src/pan-view.c:2429
+msgid "No Images"
+msgstr "Žiadne obrázky"
+
+# src/dupe.c:2054 src/preferences.c:586
+#: ../src/pan-view.c:2430
+msgid "Small Thumbnails"
+msgstr "Malé náhľady"
+
+# src/dupe.c:2054 src/preferences.c:586
+#: ../src/pan-view.c:2431
+msgid "Normal Thumbnails"
+msgstr "Normálne náhľady"
+
+# src/cache_maint.c:252
+#: ../src/pan-view.c:2432
+msgid "Large Thumbnails"
+msgstr "Veľké náhľady"
+
+#: ../src/pan-view.c:2433 ../src/pan-view.c:2893
+msgid "1:10 (10%)"
+msgstr "1:10 (10%)"
+
+#: ../src/pan-view.c:2434 ../src/pan-view.c:2889
+msgid "1:4 (25%)"
+msgstr "1:4 (25%)"
+
+#: ../src/pan-view.c:2435 ../src/pan-view.c:2885
+msgid "1:3 (33%)"
+msgstr "1:3 (33%)"
+
+#: ../src/pan-view.c:2436 ../src/pan-view.c:2881
+msgid "1:2 (50%)"
+msgstr "1:2 (50%)"
+
+#: ../src/pan-view.c:2437
 msgid "1:1 (100%)"
 msgstr "1:1 (100%)"
 
 # src/ui_pathsel.c:799
-#: src/pan-view.c:2463
+#: ../src/pan-view.c:2485
 msgid "Find:"
-msgstr "Hµada»:"
+msgstr "Hľadať:"
 
 # src/menu.c:765
-#: src/pan-view.c:2506
+#: ../src/pan-view.c:2528
 msgid "Use Exif date"
-msgstr "Pou¾i» Exif dátum"
+msgstr "Použiť Exif dátum"
 
-#: src/pan-view.c:2519
+#: ../src/pan-view.c:2541
 msgid "Find"
-msgstr "Hµada»"
+msgstr "Hľadať"
 
-#: src/pan-view.c:2586
+#: ../src/pan-view.c:2608
 msgid "Pan View Performance"
-msgstr "Výkon roz¹íreného pohµadu"
+msgstr "Výkon rozšíreného pohľadu"
 
-#: src/pan-view.c:2593
+#: ../src/pan-view.c:2615
 msgid "Pan view performance may be poor."
-msgstr "Výkon roz¹íreného pohµadu mô¾e by» chabý."
+msgstr "Výkon rozšíreného pohľadu môže byť chabý."
 
-#: src/pan-view.c:2594
+#: ../src/pan-view.c:2616
 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 ""
-"Pre zlep¹enie výkonu miniatúr v roz¹írenom pohµade mô¾u by» pou¾ité "
-"nasledujúce voµby. Upozornenie: obidvoje voµby musia by» zapnuté, ak chcete "
-"pocíti» zmenu vo výkone."
+"Nasledujúce voľby slúžia na zlepšenie výkonu miniatúr v rozšírenom pohľade. "
+"Upozornenie: obidve voľby musia byť zapnuté, ak chcete pocítiť zmenu vo "
+"kone."
 
 # src/preferences.c:603
-#: src/pan-view.c:2602 src/preferences.c:890
+#: ../src/pan-view.c:2624 ../src/preferences.c:1254
 msgid "Cache thumbnails"
-msgstr "Ke¹ova» miniatúry"
+msgstr "Kešovať náhľady"
 
-#: src/pan-view.c:2604 src/preferences.c:896
+#: ../src/pan-view.c:2626
 msgid "Use shared thumbnail cache"
-msgstr "Pou¾i» zdieµanú vyrovnávaciu pamä» pre miniatúry"
+msgstr "Použiť zdieľanú vyrovnávaciu pamäť pre náhľady"
 
-#: src/pan-view.c:2610
+#: ../src/pan-view.c:2632
 msgid "Do not show this dialog again"
-msgstr "Tento dialóg u¾ nezobrazuj"
+msgstr "Tento dialóg už nezobrazuj"
 
 # src/menu.c:513
-#: src/pan-view.c:2831
+#: ../src/pan-view.c:2861
 msgid "Sort by E_xif date"
-msgstr "Usporiada» podµa Exif dátumu"
+msgstr "Usporiadať podľa E_xif dátumu"
 
-#: src/pan-view.c:2837
+#: ../src/pan-view.c:2867
 msgid "_Show Exif information"
-msgstr ""
+msgstr "_Zobraziť Exif informácie"
 
 # src/ui_pathsel.c:764
-#: src/pan-view.c:2839
-#, fuzzy
+#: ../src/pan-view.c:2869
 msgid "Show im_age"
-msgstr "Ukáza» skryté"
+msgstr "Zobraziť _obrázok"
 
 # src/preferences.c:400
-#: src/pan-view.c:2843
-#, fuzzy
+#: ../src/pan-view.c:2873
 msgid "_None"
-msgstr "®iadna"
+msgstr "Žiad_na"
 
 # src/preferences.c:368
-#: src/pan-view.c:2847
-#, fuzzy
+#: ../src/pan-view.c:2877
 msgid "_Full size"
-msgstr "Úplná veµkos»"
+msgstr "_Plná veľkosť"
 
-#. note: the order is important, it must match the values of
-#. * EXIF_UI_OFF, _IFSET, _ON
-#: src/preferences.c:402
-msgid "Never"
-msgstr ""
-
-#: src/preferences.c:403
-msgid "If set"
-msgstr ""
+# src/menu.c:432 src/menu.c:461
+#: ../src/preferences.c:90
+#, fuzzy
+msgid "Unknown"
+msgstr "neznáme"
 
-#: src/preferences.c:404
-msgid "Always"
-msgstr ""
+# src/preferences.c:676
+#: ../src/preferences.c:92
+#, fuzzy
+msgid "RAW Image"
+msgstr "Obrázok"
 
 # src/preferences.c:367
-#: src/preferences.c:451
+#: ../src/preferences.c:418
 msgid "Nearest (worst, but fastest)"
-msgstr "Najbli¾¹ie (najhor¹ie, ale narýchlej¹ie)"
+msgstr "Najbližšie (najhoršia, ale narýchlejšia)"
 
 # src/preferences.c:368
-#: src/preferences.c:453
+#: ../src/preferences.c:420
 msgid "Tiles"
-msgstr "Dla¾dice"
+msgstr "Dlaždice"
 
 # src/preferences.c:369
-#: src/preferences.c:455
+#: ../src/preferences.c:422
 msgid "Bilinear"
-msgstr "Bilineárne"
+msgstr "Bilineárne"
 
 # src/preferences.c:370
-#: src/preferences.c:457
+#: ../src/preferences.c:424
 msgid "Hyper (best, but slowest)"
-msgstr "Hyper (najlep¹ie, ale najpomal¹ie)"
+msgstr "Hyper (najlepšia, ale najpomalšia)"
 
 # src/preferences.c:400
-#: src/preferences.c:485
+#: ../src/preferences.c:452
 msgid "None"
-msgstr "®iadna"
+msgstr "Žiadna"
 
 # src/preferences.c:401
-#: src/preferences.c:486
+#: ../src/preferences.c:453
 msgid "Normal"
-msgstr "Normálna"
+msgstr "Normálna"
 
 # src/preferences.c:402
-#: src/preferences.c:487
+#: ../src/preferences.c:454
 msgid "Best"
-msgstr "Najlep¹ia"
+msgstr "Najlepšia"
 
-#: src/preferences.c:548 src/print.c:372
+#: ../src/preferences.c:516 ../src/print.c:380
 msgid "Custom"
-msgstr "Pou¾ívateµské"
+msgstr "Používateľské"
 
 # src/utilops.c:707
-#: src/preferences.c:712 src/preferences.c:715
+#: ../src/preferences.c:815 ../src/preferences.c:818
 msgid "Reset filters"
-msgstr "Vynulova» filtre"
+msgstr "Vynulovať filtre"
 
-#: src/preferences.c:716
+#: ../src/preferences.c:819
 msgid ""
 "This will reset the file filters to the defaults.\n"
 "Continue?"
 msgstr ""
-"Chystám sa nastavi» filtre na prednastavené hodnoty.\n"
-"Pokraèova»?"
-
-# src/utilops.c:707
-#: src/preferences.c:750 src/preferences.c:753
-msgid "Reset editors"
-msgstr "Vynulova» editory"
-
-#: src/preferences.c:754
-msgid ""
-"This will reset the edit commands to the defaults.\n"
-"Continue?"
-msgstr ""
-"Chystám sa nastavi» príkazy na úpravu na prednastavené hodnoty.\n"
-"Pokraèova»?"
+"Chystám sa nastaviť filtre na predvolené hodnoty.\n"
+"Pokračovať?"
 
 # src/preferences.c:163 src/preferences.c:604
-#: src/preferences.c:778 src/preferences.c:781
+#: ../src/preferences.c:846 ../src/preferences.c:849
 msgid "Clear trash"
-msgstr "Vyèisti» kô¹"
+msgstr "Vyčistiť kôš"
 
-#: src/preferences.c:782
+#: ../src/preferences.c:850
 msgid "This will remove the trash contents."
-msgstr "Toto vyma¾e obsah ko¹a."
+msgstr "Týmto sa odstráni obsah koša."
 
-#: src/preferences.c:826 src/preferences.c:829
+#: ../src/preferences.c:894 ../src/preferences.c:897
 msgid "Reset image overlay template string"
-msgstr ""
+msgstr "Vynulovať reťazec šablóny prekrytia obrázku"
 
-#: src/preferences.c:830
-#, fuzzy
+#: ../src/preferences.c:898
 msgid ""
 "This will reset the image overlay template string to the default.\n"
 "Continue?"
 msgstr ""
-"Chystám sa nastavi» filtre na prednastavené hodnoty.\n"
-"Pokraèova»?"
+"Chystám sa nastaviť reťazec šablóny prekrytia obrázkov na prednastavené "
+"hodnoty.\n"
+"Pokračovať?"
 
-#: src/preferences.c:861
-msgid "Startup"
-msgstr "©tart"
-
-#: src/preferences.c:863
-msgid "Restore folder on startup"
-msgstr ""
-
-# src/preferences.c:581
-#: src/preferences.c:876
-msgid "Use current"
-msgstr "Pou¾i» aktuálny"
-
-# src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
-#: src/preferences.c:879
-#, fuzzy
-msgid "Use last path"
-msgstr "Vybra» cestu"
+# src/preferences.c:551
+#: ../src/preferences.c:1246
+msgid "General"
+msgstr "Hlavné"
 
 # src/preferences.c:597
-#: src/preferences.c:888 src/preferences.c:950
+#: ../src/preferences.c:1252 ../src/preferences.c:1325
 msgid "Quality:"
 msgstr "Kvalita:"
 
-# src/preferences.c:610
-#: src/preferences.c:902
-msgid "Cache thumbnails into .thumbnails"
-msgstr "Ke¹ova» miniatúry do .thumbnails"
+#: ../src/preferences.c:1260
+msgid "Use standard thumbnail cache, shared with other applications"
+msgstr ""
+
+#: ../src/preferences.c:1266
+msgid ""
+"Store thumbnails in '.thumbnails' folder, local to image folder (non-"
+"standard)"
+msgstr ""
 
 # src/preferences.c:613
-#: src/preferences.c:906
+#: ../src/preferences.c:1270
 msgid "Use xvpics thumbnails when found (read only)"
-msgstr "Pou¾i» xvpics miniatúry ak sú nájdené (iba na èítanie)"
+msgstr "Použiť xvpics náhľady ak sú k dispozícii (iba na čítanie)"
 
-#: src/preferences.c:910
-msgid "Faster jpeg thumbnailing (may reduce quality)"
-msgstr "Rýchlej¹ie jpeg miniatúry (mô¾e zní¾i» kvalitu)"
+#: ../src/preferences.c:1274
+msgid "Use EXIF thumbnails when available (EXIF thumbnails may be outdated)"
+msgstr ""
 
 # src/preferences.c:615
-#: src/preferences.c:913
+#: ../src/preferences.c:1277
 msgid "Slide show"
-msgstr "Prezentácia"
+msgstr "Prezentácia"
 
 # src/preferences.c:628
-#: src/preferences.c:916
+#: ../src/preferences.c:1280
 msgid "Delay between image change:"
-msgstr "Oneskorenie pri zmene obrázku (v sekundách):"
+msgstr "Oneskorenie pri zmene obrázku (v sekundách):"
 
-#: src/preferences.c:916
+#: ../src/preferences.c:1280
 msgid "seconds"
-msgstr "sekúnd"
+msgstr "sekúnd"
 
 # src/preferences.c:645
-#: src/preferences.c:922
+#: ../src/preferences.c:1286
 msgid "Random"
-msgstr "Náhodne"
+msgstr "Náhodne"
 
 # src/preferences.c:647
-#: src/preferences.c:923
+#: ../src/preferences.c:1287
 msgid "Repeat"
 msgstr "Opakovane"
 
+#: ../src/preferences.c:1289
+msgid "Image loading and caching"
+msgstr "Načítavanie a kešovanie obrázka"
+
+# src/preferences.c:735
+#: ../src/preferences.c:1292
+msgid "Offscreen cache size (Mb per image):"
+msgstr "Veľkosť mimoobrazovej vyrovnávacej pamäte (Mb na obrázok):"
+
+# src/preferences.c:735
+#: ../src/preferences.c:1296
+#, fuzzy
+msgid "Decoded image cache size (Mb):"
+msgstr "Veľkosť mimoobrazovej vyrovnávacej pamäte (Mb na obrázok):"
+
+# src/preferences.c:660
+#: ../src/preferences.c:1298
+msgid "Preload next image"
+msgstr "Predčítať nasledujúci obrázok"
+
+# src/menu.c:1077
+#: ../src/preferences.c:1301
+msgid "Refresh on file change"
+msgstr "Obnoviť pri zmene súboru"
+
 # src/img-view.c:789 src/menu.c:944 src/menu.c:1079
-#: src/preferences.c:944
+#: ../src/preferences.c:1319
 msgid "Zoom"
 msgstr "Lupa"
 
 # src/preferences.c:693
-#: src/preferences.c:947
+#: ../src/preferences.c:1322
 msgid "Dithering method:"
-msgstr "Metóda vyhladzovania:"
+msgstr "Metóda vyhladzovania:"
 
-#: src/preferences.c:952
-msgid "Two pass zooming"
-msgstr "Dvojpriechodová zmena mierky"
+#: ../src/preferences.c:1327
+msgid "Two pass rendering (apply HQ zoom and color correction in second pass)"
+msgstr ""
 
 # src/preferences.c:729
-#: src/preferences.c:955
+#: ../src/preferences.c:1330
 msgid "Allow enlargement of image for zoom to fit"
-msgstr "Povoli» zväè¹enie obrázku pre prispôsobenie veµkosti"
+msgstr "Povoliť zväčšenie obrázku pre prispôsobenie veľkosti"
 
 # src/preferences.c:794
-#: src/preferences.c:959
-#, fuzzy
+#: ../src/preferences.c:1334
 msgid "Limit image size when autofitting (%):"
-msgstr "Obmedzi» rozmer ak sa okno automaticky prispôsobuje (%):"
+msgstr "Obmedziť veľkosť obrázka ak ho prispôsobujeme oknu (%):"
 
 # src/preferences.c:751
-#: src/preferences.c:967
+#: ../src/preferences.c:1342
 msgid "Zoom increment:"
-msgstr "Krok zväè¹enia/zmen¹enia:"
+msgstr "Krok zväčšenia/zmenšenia:"
 
 # src/preferences.c:700
-#: src/preferences.c:972
+#: ../src/preferences.c:1347
 msgid "When new image is selected:"
-msgstr "Keï je zvolený nový obrázok:"
+msgstr "Keď je vybraný nový obrázok:"
 
 # src/preferences.c:710
-#: src/preferences.c:975
+#: ../src/preferences.c:1351
 msgid "Zoom to original size"
-msgstr "Mierka na originálny rozmer"
+msgstr "Nastaviť mierku na originálny rozmer"
+
+# src/img-view.c:792 src/menu.c:947 src/menu.c:1083 src/preferences.c:716
+#: ../src/preferences.c:1354
+msgid "Fit image to window"
+msgstr "Prispôsobiť obrázok oknu"
 
 # src/preferences.c:722
-#: src/preferences.c:981
+#: ../src/preferences.c:1357
 msgid "Leave Zoom at previous setting"
-msgstr "Ponecha» mierku na predchádajúcom nastavení"
+msgstr "Ponechať mierku na predchádzajúcom nastavení"
+
+#: ../src/preferences.c:1363
+msgid "Scroll to top left corner"
+msgstr ""
+
+#: ../src/preferences.c:1366
+msgid "Scroll to image center"
+msgstr ""
+
+#: ../src/preferences.c:1369
+msgid "Keep the region from previous image"
+msgstr ""
 
 # src/collect-dlg.c:182
-#: src/preferences.c:985
+#: ../src/preferences.c:1374
 msgid "Appearance"
-msgstr "Vzhµad"
+msgstr "Vzhľad"
 
 # src/preferences.c:875
-#: src/preferences.c:987
+#: ../src/preferences.c:1376
 #, fuzzy
-msgid "Custom border color"
-msgstr "Pou¾ívateµom definovaná tlaèiareò"
+msgid "Use custom border color in window mode"
+msgstr "Používateľská farba pozadia"
 
-#: src/preferences.c:990
-#, fuzzy
+#: ../src/preferences.c:1379
+msgid "Use custom border color in fullscreen mode"
+msgstr ""
+
+#: ../src/preferences.c:1382
 msgid "Border color"
-msgstr "Èierne pozadie"
+msgstr "Farba pozadia"
 
 # src/utilops.c:328 src/utilops.c:394 src/utilops.c:668
-#: src/preferences.c:993
+#: ../src/preferences.c:1385
 msgid "Convenience"
 msgstr "Pohodlie"
 
-# src/menu.c:1077
-#: src/preferences.c:995
-msgid "Refresh on file change"
-msgstr "Obnovi» pri zmene súboru"
-
-# src/preferences.c:660
-#: src/preferences.c:997
-msgid "Preload next image"
-msgstr "Predèíta» nasledujúci obrázok"
-
-#: src/preferences.c:999
+#: ../src/preferences.c:1387
 msgid "Auto rotate image using Exif information"
-msgstr "Automaticky rotova» obrázok podµa Exif informácií"
+msgstr "Automaticky otočiť obrázok podľa Exif informácií"
+
+#: ../src/preferences.c:1390
+#, fuzzy
+msgid "Auto rotate proofs using Exif information"
+msgstr "Automaticky otočiť obrázok podľa Exif informácií"
 
 # src/preferences.c:773
-#: src/preferences.c:1016
+#: ../src/preferences.c:1407
 msgid "Windows"
-msgstr "Okná"
+msgstr "Okná"
 
-#: src/preferences.c:1019
+#: ../src/preferences.c:1409
 msgid "State"
 msgstr "Stav"
 
 # src/preferences.c:782
-#: src/preferences.c:1021
+#: ../src/preferences.c:1411
 msgid "Remember window positions"
-msgstr "Pamäta» si pozície okien"
+msgstr "Pamätať si pozície okien"
 
 # src/preferences.c:784
-#: src/preferences.c:1023
+#: ../src/preferences.c:1413
 msgid "Remember tool state (float/hidden)"
-msgstr "Pamäta» si stav nástrojov (plávajúce/skryté)"
+msgstr "Pamätať si stav nástrojov (plávajúce/skryté)"
 
 # src/preferences.c:787
-#: src/preferences.c:1028
+#: ../src/preferences.c:1418
 msgid "Fit window to image when tools are hidden/floating"
-msgstr "Prispôsobi» okno na veµkos» obrázku, ak sú nástroje skryté/plávajúce"
+msgstr "Prispôsobiť okno veľkosti obrázku ak sú nástroje skryté/plávajúce"
 
 # src/preferences.c:794
-#: src/preferences.c:1032
+#: ../src/preferences.c:1422
 msgid "Limit size when auto-sizing window (%):"
-msgstr "Obmedzi» rozmer ak sa okno automaticky prispôsobuje (%):"
+msgstr "Obmedziť rozmer ak sa okno automaticky prispôsobuje (%):"
 
-#: src/preferences.c:1039 src/print.c:3404 src/print.c:3411
-msgid "Layout"
-msgstr "Rozlo¾enie"
+# src/preferences.c:676
+#: ../src/preferences.c:1437
+msgid "Smooth image flip"
+msgstr "Plynulé preklopenie obrázku"
 
-# src/preferences.c:812
-#: src/preferences.c:1066
-msgid "Filtering"
-msgstr "Filtrovanie"
+#: ../src/preferences.c:1439
+msgid "Disable screen saver"
+msgstr "Vypnúť šetrič obrazovky"
 
-#: src/preferences.c:1071
-msgid "Show hidden files or folders"
+#: ../src/preferences.c:1443
+msgid "Overlay Screen Display"
 msgstr ""
 
-# src/ui_pathsel.c:507 src/ui_pathsel.c:759
-#: src/preferences.c:1073
-#, fuzzy
-msgid "Show dot directory"
-msgstr "Nový adresár"
+#: ../src/preferences.c:1445
+msgid "Image overlay template"
+msgstr "Šablóna prekrytia obrázku"
 
-#: src/preferences.c:1075
-msgid "Case sensitive sort"
-msgstr "Triedenie citlivé na veµkos» znakov"
+#: ../src/preferences.c:1459
+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"
+"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 to add lines that totally "
+"disappear when no data is available.\n"
+msgstr ""
+
+#: ../src/preferences.c:1476 ../src/preferences.c:1652
+#: ../src/preferences.c:2025
+msgid "Defaults"
+msgstr "Predvolené"
+
+#: ../src/preferences.c:1530
+msgid "Show hidden files or folders"
+msgstr "Zobraziť skryté súbory alebo priečinky"
+
+# src/ui_pathsel.c:507 src/ui_pathsel.c:759
+#: ../src/preferences.c:1533
+msgid "Show dot directory"
+msgstr "Zobraziť bodkový priečinok"
+
+#: ../src/preferences.c:1536
+msgid "Case sensitive sort"
+msgstr "Triedenie citlivé na veľkosť znakov"
 
 # src/preferences.c:823
-#: src/preferences.c:1078
+#: ../src/preferences.c:1539
 msgid "Disable File Filtering"
-msgstr "Vypnú» filtrovanie súborov"
+msgstr "Vypnúť filtrovanie súborov"
 
-#: src/preferences.c:1082
+#: ../src/preferences.c:1543
 msgid "Grouping sidecar extensions"
 msgstr ""
 
 # src/ui_pathsel.c:799
-#: src/preferences.c:1089
+#: ../src/preferences.c:1550
 msgid "File types"
-msgstr "Typy súborov"
+msgstr "Typy súborov"
 
 # src/ui_pathsel.c:799
-#: src/preferences.c:1111
+#: ../src/preferences.c:1572
 msgid "Filter"
 msgstr "Filter"
 
-#: src/preferences.c:1148 src/preferences.c:1234 src/preferences.c:1378
-msgid "Defaults"
-msgstr "Prednastavené"
+#: ../src/preferences.c:1607
+msgid "Class"
+msgstr ""
 
-# src/preferences.c:915
-#: src/preferences.c:1177
-msgid "Editors"
-msgstr "Editory"
+#: ../src/preferences.c:1624
+msgid "Writable"
+msgstr ""
 
-# src/preferences.c:927
-#: src/preferences.c:1183
-msgid "#"
-msgstr "#"
+#: ../src/preferences.c:1635
+msgid "Sidecar is allowed"
+msgstr ""
 
-# src/preferences.c:930
-#: src/preferences.c:1186 src/preferences.c:1497
-msgid "Menu name"
-msgstr "Názov ponuky"
+#: ../src/preferences.c:1681
+msgid "Metadata writing process"
+msgstr ""
 
-# src/preferences.c:933
-#: src/preferences.c:1189
-msgid "Command Line"
-msgstr "Príkazový riadok"
+#: ../src/preferences.c:1683
+msgid "Warning: Geeqie is built without Exiv2. Some options are disabled."
+msgstr ""
 
-# src/menu.c:748
-#: src/preferences.c:1261
-#, fuzzy
-msgid "Properties"
-msgstr "Vlastnosti"
+#: ../src/preferences.c:1685
+msgid ""
+"Metadata are written in the following order. The process ends after first "
+"success."
+msgstr ""
 
-#: src/preferences.c:1279
-msgid "What to show in properties dialog:"
+#: ../src/preferences.c:1688
+msgid ""
+"1) Save metadata in image files, resp. sidecar files, according to the XMP "
+"standard"
 msgstr ""
 
-#: src/preferences.c:1316
-msgid "Advanced"
-msgstr "Pokroèilé"
+#: ../src/preferences.c:1694
+msgid ""
+"2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
+msgstr ""
 
-# src/preferences.c:676
-#: src/preferences.c:1337
-msgid "Smooth image flip"
-msgstr "Plynulé preklopenie obrázku"
+#: ../src/preferences.c:1697
+#, c-format
+msgid "3) Save metadata in Geeqie private directory '%s'"
+msgstr ""
 
-#: src/preferences.c:1339
-msgid "Disable screen saver"
-msgstr "Vypnú» ¹etriè obrazovky"
+#: ../src/preferences.c:1703
+msgid "Step 1: Write to image files"
+msgstr ""
 
-#: src/preferences.c:1343
-msgid "Overlay Screen Display"
+#: ../src/preferences.c:1711
+msgid ""
+"Store metadata also in legacy IPTC tags (converted according to IPTC4XMP "
+"standard)"
 msgstr ""
 
-#: src/preferences.c:1345
-msgid "Always show image overlay at startup"
+#: ../src/preferences.c:1714
+msgid "Warn if the image files are unwritable"
 msgstr ""
 
-#: src/preferences.c:1347
-msgid "Image overlay template"
+#: ../src/preferences.c:1717
+#, fuzzy
+msgid "Ask before writing to image files"
+msgstr "Chyba pri zápise do súboru %s"
+
+#: ../src/preferences.c:1720
+msgid "Step 2 and 3: write to Geeqie private files"
 msgstr ""
 
-#: src/preferences.c:1361
+#: ../src/preferences.c:1725
 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"
-"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 to add lines that totally "
-"disappear when no data is available.\n"
+"Use GQview legacy metadata format (supports only keywords and comments) "
+"instead of XMP"
+msgstr ""
+
+#: ../src/preferences.c:1729 ../src/preferences.c:1917
+msgid "Miscellaneous"
+msgstr "Rozličné"
+
+#: ../src/preferences.c:1730
+msgid ""
+"Write the same description tags (keywords, comment, etc.) to all grouped "
+"sidecars"
+msgstr ""
+
+#: ../src/preferences.c:1733
+msgid "Allow keywords to differ only in case"
+msgstr ""
+
+#: ../src/preferences.c:1736
+msgid "Write altered image orientation to the metadata"
+msgstr ""
+
+#: ../src/preferences.c:1742
+msgid "Auto-save options"
+msgstr ""
+
+#: ../src/preferences.c:1744
+msgid "Write metadata after timeout"
+msgstr ""
+
+#: ../src/preferences.c:1750
+#, fuzzy
+msgid "Timeout (seconds):"
+msgstr "Čas expozície (sekúnd)"
+
+# src/preferences.c:628
+#: ../src/preferences.c:1753
+#, fuzzy
+msgid "Write metadata on image change"
+msgstr "Oneskorenie pri zmene obrázku (v sekundách):"
+
+#: ../src/preferences.c:1756
+msgid "Write metadata on directory change"
+msgstr ""
+
+# src/menu.c:526
+#: ../src/preferences.c:1770
+#, fuzzy
+msgid "Color management"
+msgstr "_Správca triedenia"
+
+# src/ui_pathsel.c:697
+#: ../src/preferences.c:1772
+#, fuzzy
+msgid "Input profiles"
+msgstr "Farebné profily"
+
+#: ../src/preferences.c:1780
+msgid "Type"
+msgstr "Typ"
+
+# src/preferences.c:930
+#: ../src/preferences.c:1783
+msgid "Menu name"
+msgstr "Názov ponuky"
+
+# src/ui_pathsel.c:799
+#: ../src/preferences.c:1786
+msgid "File"
+msgstr "Súbor"
+
+#: ../src/preferences.c:1794
+#, fuzzy, c-format
+msgid "Input %d:"
+msgstr "Vstup _%d:"
+
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/preferences.c:1811 ../src/preferences.c:1831
+msgid "Select color profile"
+msgstr "Vybrať farebný profil"
+
+#: ../src/preferences.c:1819
+#, fuzzy
+msgid "Screen profile"
+msgstr "Profil _Zobrazenia"
+
+#: ../src/preferences.c:1823
+msgid "Use system screen profile if available"
 msgstr ""
 
+#: ../src/preferences.c:1828
+msgid "Screen:"
+msgstr "Obrazovka:"
+
+#: ../src/preferences.c:1850 ../src/preferences.c:1893
+msgid "Behavior"
+msgstr "Správanie"
+
 # src/ui_pathsel.c:402 src/ui_pathsel.c:461 src/utilops.c:711
 # src/utilops.c:764
-#: src/preferences.c:1393
+#: ../src/preferences.c:1852 ../src/utilops.c:1985
 msgid "Delete"
-msgstr "Zmaza»"
+msgstr "Odstrániť"
 
 # src/preferences.c:667
-#: src/preferences.c:1395
+#: ../src/preferences.c:1854
 msgid "Confirm file delete"
-msgstr "Potvrdi» zmazanie súboru"
+msgstr "Potvrdiť odstránenie súboru"
 
 # src/preferences.c:669
-#: src/preferences.c:1397
+#: ../src/preferences.c:1856
 msgid "Enable Delete key"
-msgstr "Povoli» klávesu Delete"
+msgstr "Povoliť klávesu Delete"
 
 # src/preferences.c:667
-#: src/preferences.c:1400
+#: ../src/preferences.c:1859
 msgid "Safe delete"
-msgstr "Bezpeèné mazanie"
+msgstr "Bezpečné odstránenie"
 
-#: src/preferences.c:1418
+#: ../src/preferences.c:1877
 msgid "Maximum size:"
-msgstr "Maximálna veµkos»:"
+msgstr "Maximálna veľkosť:"
 
-#: src/preferences.c:1418
+#: ../src/preferences.c:1877
 msgid "MB"
 msgstr "MB"
 
-#: src/preferences.c:1421
+#: ../src/preferences.c:1880
 msgid "Set to 0 for unlimited size"
-msgstr ""
+msgstr "Ak chcete neobmedzenú veľkosť, nastavte na 0"
 
 # src/collect-table.c:619 src/dupe.c:1386 src/dupe.c:1558
-#: src/preferences.c:1423
+#: ../src/preferences.c:1882
 msgid "View"
-msgstr "Zobrazi»"
-
-#: src/preferences.c:1434
-msgid "Behavior"
-msgstr "Správanie"
+msgstr "Zobraziť"
 
 # src/preferences.c:906
-#: src/preferences.c:1436
+#: ../src/preferences.c:1895
 msgid "Rectangular selection in icon view"
-msgstr "Obdå¾nikový výber v ikonovom pohµade"
+msgstr "Obdĺžnikový výber v ikonovom pohľade"
 
-#: src/preferences.c:1439
+#: ../src/preferences.c:1898
 msgid "Descend folders in tree view"
-msgstr "Zni¾ova» prieèinky v stromovom zobrazení"
+msgstr "Znižovať priečinky v stromovom zobrazení"
 
 # src/preferences.c:658
-#: src/preferences.c:1442
+#: ../src/preferences.c:1901
 msgid "In place renaming"
 msgstr "Premenovanie na mieste"
 
-#: src/preferences.c:1445
-msgid ""
-"Show \"Copy path\" menu item which write the path of selected files to "
-"clipboard"
-msgstr ""
-
-#: src/preferences.c:1448
+#: ../src/preferences.c:1904
 msgid "Open recent list maximum size"
-msgstr ""
+msgstr "Maximálna veľkosť zoznamu naposledy otvorených"
 
-#: src/preferences.c:1451
+#: ../src/preferences.c:1907
 msgid "Drag'n drop icon size"
-msgstr ""
+msgstr "Veľkosť ikony pre ťahaj-a-pusť"
 
-#: src/preferences.c:1454
+#: ../src/preferences.c:1910
 msgid "Navigation"
-msgstr "Navigácia"
+msgstr "Navigácia"
 
 # src/preferences.c:764
-#: src/preferences.c:1456
+#: ../src/preferences.c:1912
 msgid "Progressive keyboard scrolling"
-msgstr "Progresívne posúvanie klávesnicou"
+msgstr "Progresívne posúvanie klávesnicou"
 
 # src/preferences.c:766
-#: src/preferences.c:1458
+#: ../src/preferences.c:1914
 msgid "Mouse wheel scrolls image"
-msgstr "Koliesko my¹i posúva obrázok"
-
-#: src/preferences.c:1461
-msgid "Miscellaneous"
-msgstr "Rozlièné"
-
-#: src/preferences.c:1463
-msgid "Store metadata and cache files in source image's directory"
-msgstr ""
-
-#: src/preferences.c:1466
-#, fuzzy
-msgid "Store keywords and comments as XMP tags in image files"
-msgstr "Uklada» kµúèové slová a poznámky lokálne do zdrojových obrázkov"
+msgstr "Koliesko myši posúva obrázok"
 
 # src/preferences.c:875
-#: src/preferences.c:1469
+#: ../src/preferences.c:1919
 msgid "Custom similarity threshold:"
-msgstr "Pou¾ívateµský prah podobnosti:"
+msgstr "Používateľský prah podobnosti:"
 
-#: src/preferences.c:1472
-msgid "Image loading and caching"
-msgstr ""
+#: ../src/preferences.c:1924
+msgid "Debugging"
+msgstr "Ladenie"
 
-# src/preferences.c:735
-#: src/preferences.c:1474
-msgid "Offscreen cache size (Mb per image):"
-msgstr "Veµkos» mimoobrazokovej vyrovnávacej pamäte (Mb na obrázok):"
+#: ../src/preferences.c:1926
+msgid "Debug level:"
+msgstr "Úroveň ladenia:"
 
-#: src/preferences.c:1477
-msgid "Image read buffer size (bytes):"
+#: ../src/preferences.c:1945
+msgid "Keyboard"
 msgstr ""
 
-#: src/preferences.c:1481
-msgid "Image idle loop read count:"
+#: ../src/preferences.c:1947
+msgid "Accelerators"
 msgstr ""
 
-# src/ui_pathsel.c:697
-#: src/preferences.c:1486
+#: ../src/preferences.c:1966
 #, fuzzy
-msgid "Color profiles"
-msgstr "V¹etky súbory"
+msgid "Action"
+msgstr "akcia"
 
-#: src/preferences.c:1494
-msgid "Type"
+#: ../src/preferences.c:1988
+msgid "KEY"
 msgstr ""
 
-# src/ui_pathsel.c:799
-#: src/preferences.c:1500
+# src/preferences.c:368
+#: ../src/preferences.c:1999
 #, fuzzy
-msgid "File"
-msgstr "Súbor:"
+msgid "Tooltip"
+msgstr "Nástroje"
 
-# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/preferences.c:1525 src/preferences.c:1536
+# src/utilops.c:707
+#: ../src/preferences.c:2037
 #, fuzzy
-msgid "Select color profile"
-msgstr "Vybra» prieèinok"
+msgid "Reset selected"
+msgstr "Vynulovať filtre"
 
-#: src/preferences.c:1533
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/preferences.c:2043
 #, fuzzy
-msgid "Screen:"
-msgstr "Obrazovka"
-
-#: src/preferences.c:1544
-msgid "Debugging"
-msgstr ""
-
-#: src/preferences.c:1546
-msgid "Debug level:"
-msgstr ""
+msgid "Add Alt"
+msgstr "Pridať výber"
 
 # src/menu.c:748
-#: src/preferences.c:1562
-#, fuzzy
+#: ../src/preferences.c:2062
 msgid "Preferences"
-msgstr "Predv_oµby..."
-
-# src/menu.c:776
-#: src/preferences.c:1685
-#, fuzzy
-msgid "About"
-msgstr "O Geeqie"
+msgstr "Predvoľby"
 
 # src/preferences.c:1041
-#: src/preferences.c:1702
-#, fuzzy, c-format
+#: ../src/preferences.c:2209
+#, c-format
 msgid ""
 "%s %s\n"
 "\n"
@@ -3613,106 +4983,99 @@ msgid ""
 "\n"
 "Released under the GNU General Public License"
 msgstr ""
-"Geeqie %s\n"
+"%s %s\n"
 "\n"
-"Copyright (c) %s John Ellis\n"
-"WWW: %s\n"
+"Copyright (c) 2006 John Ellis\n"
+"Copyright (c) %s Tím Geeqie\n"
+"web: %s\n"
 "email: %s\n"
 "\n"
-"Vydané pod GNU General Public License"
+"Vydané pod GNU General Public License"
 
 # src/menu.c:748
-#: src/preferences.c:1721
+#: ../src/preferences.c:2228
 msgid "Credits..."
-msgstr "Poïakovanie..."
+msgstr "Poďakovanie..."
 
 # src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/print.c:117
+#: ../src/print.c:124
 msgid "Selection"
-msgstr "Výber"
+msgstr "Výber"
 
-#: src/print.c:118
+#: ../src/print.c:125
 msgid "All"
-msgstr "V¹etko"
+msgstr "Všetko"
 
-#: src/print.c:129
+#: ../src/print.c:136
 msgid "One image per page"
-msgstr "Jeden obrázok na stránku"
+msgstr "Jeden obrázok na stránku"
 
-#: src/print.c:130
+#: ../src/print.c:137
 msgid "Proof sheet"
 msgstr ""
 
-#: src/print.c:143
+#: ../src/print.c:150
 msgid "Default printer"
-msgstr "Prednastavená tlaèiareò"
+msgstr "Predvolená tlačiareň"
 
 # src/preferences.c:875
-#: src/print.c:144
+#: ../src/print.c:151
 msgid "Custom printer"
-msgstr "Pou¾ívateµom definovaná tlaèiareò"
+msgstr "Používateľom definovaná tlačiareň"
 
-#: src/print.c:145
+#: ../src/print.c:152
 msgid "PostScript file"
-msgstr "Postskriptový súbor"
+msgstr "Postskriptový súbor"
 
 # src/preferences.c:676
-#: src/print.c:146
+#: ../src/print.c:153
 msgid "Image file"
-msgstr "Súbor obrázku"
+msgstr "Súbor obrázku"
 
-#: src/print.c:160
+#: ../src/print.c:167
 msgid "jpeg, low quality"
-msgstr "jpeg, nízka kvalita"
+msgstr "jpeg, nízka kvalita"
 
-#: src/print.c:161
+#: ../src/print.c:168
 msgid "jpeg, normal quality"
-msgstr "jpeg, normálna kvalita"
+msgstr "jpeg, normálna kvalita"
 
-#: src/print.c:162
+#: ../src/print.c:169
 msgid "jpeg, high quality"
-msgstr "jpeg, vysoká kvalita"
+msgstr "jpeg, vysoká kvalita"
 
 # src/main.c:561
-#: src/print.c:357 src/print.c:3245
+#: ../src/print.c:365 ../src/print.c:3226
 msgid "points"
 msgstr "body"
 
-#: src/print.c:358
+#: ../src/print.c:366
 msgid "millimeters"
 msgstr "milimetre"
 
-#: src/print.c:359
+#: ../src/print.c:367
 msgid "centimeters"
 msgstr "centimetre"
 
-#: src/print.c:360
+#: ../src/print.c:368
 msgid "inches"
 msgstr "palce"
 
-#: src/print.c:361
+#: ../src/print.c:369
 msgid "picas"
 msgstr ""
 
-#: src/print.c:366
-msgid "Portrait"
-msgstr "Na vý¹ku"
-
-#: src/print.c:367
-msgid "Landscape"
-msgstr "Na ¹írku"
-
-#: src/print.c:373
+#: ../src/print.c:381
 msgid "Letter"
 msgstr "List"
 
 #. in 8.5 x 11
-#: src/print.c:374
+#: ../src/print.c:382
 msgid "Legal"
 msgstr ""
 
 #. in 8.5 x 14
-#: src/print.c:375
+#: ../src/print.c:383
 msgid "Executive"
 msgstr ""
 
@@ -3728,1507 +5091,1989 @@ msgstr ""
 #. mm 250 x 353
 #. mm 176 x 250
 #. mm 125 x 176
-#: src/print.c:387
+#: ../src/print.c:395
 msgid "Envelope #10"
-msgstr ""
+msgstr "Obálka #10"
 
 #. in 4.125 x 9.5
-#: src/print.c:388
+#: ../src/print.c:396
 msgid "Envelope #9"
-msgstr ""
+msgstr "Obálka #9"
 
 #. in 3.875 x 8.875
-#: src/print.c:389
+#: ../src/print.c:397
 msgid "Envelope C4"
-msgstr ""
+msgstr "Obálka C4"
 
 #. mm 229 x 324
-#: src/print.c:390
+#: ../src/print.c:398
 msgid "Envelope C5"
-msgstr ""
+msgstr "Obálka C5"
 
 #. mm 162 x 229
-#: src/print.c:391
+#: ../src/print.c:399
 msgid "Envelope C6"
-msgstr ""
+msgstr "Obálka C6"
 
 #. mm 114 x 162
-#: src/print.c:392
+#: ../src/print.c:400
 msgid "Photo 6x4"
-msgstr ""
+msgstr "Fotka 6x4"
 
 #. in 6   x 4
-#: src/print.c:393
+#: ../src/print.c:401
 msgid "Photo 8x10"
-msgstr ""
+msgstr "Fotka 8x10"
 
 #. in 8   x 10
-#: src/print.c:394
+#: ../src/print.c:402
 msgid "Postcard"
-msgstr ""
+msgstr "Pohľadnica"
 
 #. mm 100 x 148
-#: src/print.c:395
+#: ../src/print.c:403
 msgid "Tabloid"
 msgstr ""
 
-#: src/print.c:551
+#: ../src/print.c:559
 #, c-format
 msgid "page %d of %d"
-msgstr "stránka %d z %d"
+msgstr "stránka %d z %d"
 
-#: src/print.c:743 src/utilops.c:2462
+#: ../src/print.c:751
 msgid "Preview"
-msgstr "Náhµad"
+msgstr "Predbežné zobrazenie"
 
-#: src/print.c:1051
+#: ../src/print.c:1059
 #, c-format
 msgid ""
 "Unable to open pipe for writing.\n"
 "\"%s\""
-msgstr "Nemohol som otvori» rúru pre zápis.!n\"%s\""
+msgstr ""
+"Nemohol som otvoriť rúru pre zápis.\n"
+"\"%s\""
 
 # src/ui_pathsel.c:307
-#: src/print.c:1066 src/print.c:1506 src/ui_pathsel.c:432
-#: src/view_file_list.c:396
+#: ../src/print.c:1074 ../src/print.c:1466 ../src/ui_pathsel.c:432
 #, c-format
 msgid "A file with name %s already exists."
-msgstr "Súbor s názvom %s u¾ existuje."
+msgstr "Súbor s názvom %s už existuje."
 
-#: src/print.c:1081 src/print.c:1561
+#: ../src/print.c:1089 ../src/print.c:1521
 #, c-format
 msgid "Failure writing to file %s"
-msgstr "Chyba pri zápise do súboru %s"
+msgstr "Chyba pri zápise do súboru %s"
 
-#: src/print.c:1135 src/print.c:1172 src/print.c:1208 src/print.c:1325
-#: src/print.c:1416 src/print.c:1447
+#: ../src/print.c:1144 ../src/print.c:1181 ../src/print.c:1217
+#: ../src/print.c:1334 ../src/print.c:1407
 msgid "SIGPIPE error writing to printer."
-msgstr "SIGPIPE chyba pri zápise na tlaèiareò."
+msgstr "SIGPIPE chyba pri zápise na tlačiareň."
 
-#: src/print.c:1982
+#: ../src/print.c:1942
 #, c-format
 msgid "Page %d"
 msgstr "Strana %d"
 
 # src/ui_pathsel.c:799
-#: src/print.c:2004 src/print.c:2009
+#: ../src/print.c:1968 ../src/print.c:1973
 msgid "Printing error"
-msgstr "Chyba pri tlaèi"
+msgstr "Chyba pri tlači"
 
-#: src/print.c:2008
+#: ../src/print.c:1972
 #, c-format
 msgid "An error occured printing to %s."
-msgstr "Pri tlaèi na %s sa vyskytla chyba."
+msgstr "Pri tlači na %s sa vyskytla chyba."
 
-#: src/print.c:2012
+#: ../src/print.c:1976
 msgid "Details"
 msgstr "Podrobnosti"
 
 # src/ui_pathsel.c:799
-#: src/print.c:2617 src/print.c:3377
-#, fuzzy
+#: ../src/print.c:2601 ../src/print.c:3361
 msgid "Print"
-msgstr "Tlaèiareò"
+msgstr "Tlač"
 
-#: src/print.c:2624
+#: ../src/print.c:2605
 #, c-format
 msgid "Printing %d pages to %s."
-msgstr "Tlaèím %d strán na %s."
+msgstr "Tlačím %d strán na %s."
 
 # src/preferences.c:401
-#: src/print.c:2724
+#: ../src/print.c:2705
 msgid "Format:"
-msgstr "Formát:"
+msgstr "Formát:"
 
-#: src/print.c:2799
+#: ../src/print.c:2780
 msgid "Units:"
 msgstr "Jednotky:"
 
 # src/dupe.c:1655 src/dupe.c:1944
-#: src/print.c:2843
+#: ../src/print.c:2824
 msgid "Orientation:"
-msgstr "Orientácia:"
+msgstr "Orientácia:"
 
-#: src/print.c:2975
+#: ../src/print.c:2956
 msgid "Destination:"
-msgstr "Cieµ:"
+msgstr "Cieľ:"
 
 # src/utilops.c:980
-#: src/print.c:3023
+#: ../src/print.c:3004
 msgid "<printer name>"
-msgstr "<názov tlaèiarne>"
+msgstr "<názov tlačiarne>"
 
 # src/collect.c:329 src/image.c:1058
-#: src/print.c:3112
+#: ../src/print.c:3093
 msgid "Unlimited"
-msgstr "Neobmedzené"
+msgstr "Neobmedzené"
 
-#: src/print.c:3230
+#: ../src/print.c:3211
 msgid "Show"
-msgstr "Uká¾"
+msgstr "Ukáž"
 
 # src/preferences.c:400
-#: src/print.c:3243
+#: ../src/print.c:3224
 msgid "Font"
-msgstr "Písmo"
+msgstr "Písmo"
 
 # src/menu.c:559
-#: src/print.c:3407
+#: ../src/print.c:3388
 msgid "Source"
 msgstr "Zdroj"
 
 # src/preferences.c:676
-#: src/print.c:3423
-#, fuzzy
+#: ../src/print.c:3400
+msgid "Image size:"
+msgstr "Veľkosť obrázku:"
+
+# src/preferences.c:676
+#: ../src/print.c:3404
 msgid "Proof size:"
-msgstr "Veµkos» obrázoku:"
+msgstr "Veľkosť obrázku:"
+
+#: ../src/print.c:3420
+msgid "Text"
+msgstr "Text"
 
-#: src/print.c:3449
+#: ../src/print.c:3430
 msgid "Paper"
 msgstr "Papier"
 
-#: src/print.c:3472
+#: ../src/print.c:3453
 msgid "Margins"
-msgstr "Hranice"
+msgstr "Okraje"
 
-#: src/print.c:3474
+#: ../src/print.c:3455
 msgid "Left:"
-msgstr "Vµavo:"
+msgstr "Vľavo:"
 
-#: src/print.c:3477
+#: ../src/print.c:3458
 msgid "Right:"
 msgstr "Vpravo:"
 
-#: src/print.c:3480
+#: ../src/print.c:3461
 msgid "Top:"
 msgstr "Hore:"
 
 # src/utilops.c:989
-#: src/print.c:3483
+#: ../src/print.c:3464
 msgid "Bottom:"
 msgstr "Dole:"
 
 # src/ui_pathsel.c:799
-#: src/print.c:3492
+#: ../src/print.c:3473
 msgid "Printer"
-msgstr "Tlaèiareò"
+msgstr "Tlačiareň"
 
 # src/preferences.c:875
-#: src/print.c:3498
+#: ../src/print.c:3479
 msgid "Custom printer:"
-msgstr "Pou¾ívateµom definovaná tlaèiareò:"
+msgstr "Používateľom definovaná tlačiareň:"
 
 # src/ui_pathsel.c:799
-#: src/print.c:3507
+#: ../src/print.c:3488
 msgid "File:"
-msgstr "Súbor:"
+msgstr "Súbor:"
 
 # src/ui_pathsel.c:799
-#: src/print.c:3516
+#: ../src/print.c:3497
 msgid "File format:"
-msgstr "Formát súboru:"
+msgstr "Formát súboru:"
 
-#: src/print.c:3521
+#: ../src/print.c:3502
 msgid "DPI:"
 msgstr "DPI:"
 
 # src/preferences.c:782
-#: src/print.c:3529
+#: ../src/print.c:3510
 msgid "Remember print settings"
-msgstr "Zapamäta» si nastavenia tlaèe"
+msgstr "Zapamätať si nastavenia tlače"
 
 # src/rcfile.c:132
-#: src/rcfile.c:309
+#: ../src/rcfile.c:495
 #, c-format
 msgid "error saving config file: %s\n"
-msgstr "chyba pri ukladaní konfiguraèného súboru: %s\n"
+msgstr "chyba pri ukladaní konfiguračného súboru: %s\n"
 
 # src/rcfile.c:132
-#: src/rcfile.c:583
-#, fuzzy, c-format
+#: ../src/rcfile.c:553
+#, c-format
 msgid ""
 "error saving config file: %s\n"
 "error: %s\n"
-msgstr "chyba pri ukladaní konfiguraèného súboru: %s\n"
+msgstr ""
+"chyba pri ukladaní konfiguračného súboru: %s\n"
+"chyba: %s\n"
 
 # src/preferences.c:660
 #. short, long                  callback,               extra, prefer,description
-#: src/remote.c:574
+#: ../src/remote.c:639
 msgid "next image"
-msgstr "nasledujúci obrázok"
+msgstr "nasledujúci obrázok"
 
-#: src/remote.c:575
+#: ../src/remote.c:640
 msgid "previous image"
-msgstr "predchádzajúci obrázok"
+msgstr "predchádzajúci obrázok"
 
-#: src/remote.c:576
+#: ../src/remote.c:641
 msgid "first image"
-msgstr "prvý obrázok"
+msgstr "prvý obrázok"
 
-#: src/remote.c:577
+#: ../src/remote.c:642
 msgid "last image"
-msgstr "posledný obrázok"
+msgstr "posledný obrázok"
 
 # src/img-view.c:833 src/menu.c:1005
-#: src/remote.c:578
+#: ../src/remote.c:643
 msgid "toggle full screen"
-msgstr "Prepnú» celoobrazovkový re¾im"
+msgstr "prepnúť celoobrazovkový režim"
 
 # src/img-view.c:833 src/menu.c:1005
-#: src/remote.c:579
+#: ../src/remote.c:644
 msgid "start full screen"
-msgstr "Zapnú» celoobrazovkový re¾im"
+msgstr "prepnúť na celoobrazovkový režim"
 
 # src/img-view.c:833 src/menu.c:1005
-#: src/remote.c:580
+#: ../src/remote.c:645
 msgid "stop full screen"
-msgstr "Ukonèi» celoobrazovkový re¾im"
+msgstr "ukonÄ\8diÅ¥ celoobrazovkový režim"
 
 # src/img-view.c:813 src/menu.c:982
-#: src/remote.c:581
+#: ../src/remote.c:646
 msgid "toggle slide show"
-msgstr "Prepnú» prezentáciu"
+msgstr "prepnúť prezentáciu"
 
 # src/img-view.c:825 src/menu.c:994
-#: src/remote.c:582
+#: ../src/remote.c:647
 msgid "start slide show"
-msgstr "Spusti» prezentáciu"
+msgstr "spustiť prezentáciu"
 
 # src/img-view.c:813 src/menu.c:982
-#: src/remote.c:583
+#: ../src/remote.c:648
 msgid "stop slide show"
-msgstr "zastavi» prezentáciu"
+msgstr "zastaviť prezentáciu"
 
 # src/img-view.c:825 src/menu.c:994
-#: src/remote.c:584
+#: ../src/remote.c:649
 msgid "start recursive slide show"
-msgstr "spusti» rekurzívnu prezentáciu"
+msgstr "spustiť rekurzívnu prezentáciu"
 
-#: src/remote.c:585
+#: ../src/remote.c:650
 msgid "set slide show delay in seconds"
-msgstr "nastavi» pozdr¾anie v sekundách"
+msgstr "nastaviť prestávku medzi obrázkami prezentácie v sekundách"
 
-#: src/remote.c:586
+#: ../src/remote.c:651
 msgid "show tools"
-msgstr "zobrazi» nástroje"
+msgstr "zobraziť nástroje"
 
 # src/window.c:234
-#: src/remote.c:587
+#: ../src/remote.c:652
 msgid "hide tools"
-msgstr "skry» nástroje"
+msgstr "skryť nástroje"
 
-#: src/remote.c:588
+#: ../src/remote.c:653
 msgid "quit"
-msgstr "skonèi»"
+msgstr "skončiť"
+
+# src/utilops.c:382 src/utilops.c:490
+#: ../src/remote.c:654
+#, fuzzy
+msgid "load config file"
+msgstr "Chyba pri kopírovaní súboru"
+
+#: ../src/remote.c:655
+msgid "get list of sidecars of the given file"
+msgstr ""
+
+#: ../src/remote.c:656
+msgid "get destination path for the given file"
+msgstr ""
 
 # src/utilops.c:1090
-#: src/remote.c:589
+#: ../src/remote.c:657
 msgid "open file"
-msgstr "otvori» súbor:"
+msgstr "otvoriť súbor"
 
 # src/collect-table.c:620 src/dupe.c:1388 src/dupe.c:1560 src/img-view.c:801
 # src/menu.c:906 src/menu.c:964
-#: src/remote.c:590
+#: ../src/remote.c:658
 msgid "open file in new window"
-msgstr "otvori» súbor v novom okne novom okne"
+msgstr "otvoriť súbor v novom okne novom okne"
 
-#: src/remote.c:656
+#: ../src/remote.c:724
 msgid "Remote command list:\n"
-msgstr "Zoznam vzdialených príkazov:\n"
+msgstr "Zoznam vzdialených príkazov:\n"
 
-#: src/remote.c:713
-#, fuzzy, c-format
+#: ../src/remote.c:781
+#, c-format
 msgid "Remote %s not running, starting..."
-msgstr "Vzdialený Geeqie nebe¾í, ¹tartujem..."
+msgstr "Vzdialený %s nebeží, štartujem..."
 
-#: src/remote.c:849
+#: ../src/remote.c:917
 msgid "Remote not available\n"
-msgstr "Vzdialený je nedostupný\n"
+msgstr "Vzdialený je nedostupný\n"
 
 # src/preferences.c:368
-#: src/search.c:202
+#: ../src/search.c:212
 msgid "folder"
-msgstr "prieèinok"
+msgstr "priečinok"
 
-#: src/search.c:203
+#: ../src/search.c:213
 msgid "comments"
-msgstr "poznámky"
+msgstr "poznámky"
 
-#: src/search.c:204
+#: ../src/search.c:214
 msgid "results"
-msgstr "výsledky"
+msgstr "výsledky"
 
 # src/utilops.c:328 src/utilops.c:394 src/utilops.c:668
-#: src/search.c:208
+#: ../src/search.c:218 ../src/search.c:243
 msgid "contains"
 msgstr "obsahuje"
 
-#: src/search.c:209
+#: ../src/search.c:219
 msgid "is"
 msgstr "je"
 
-#: src/search.c:213 src/search.c:220
+#: ../src/search.c:223 ../src/search.c:230
 msgid "equal to"
-msgstr "rovnaký ako"
+msgstr "rovnaký ako"
 
-#: src/search.c:214
+#: ../src/search.c:224
 msgid "less than"
-msgstr "men¹í ne¾"
+msgstr "menší než"
 
 # src/menu.c:1066
-#: src/search.c:215
+#: ../src/search.c:225
 msgid "greater than"
-msgstr "väè¹í ne¾"
+msgstr "väÄ\8dší než"
 
-#: src/search.c:216 src/search.c:223
+#: ../src/search.c:226 ../src/search.c:233
 msgid "between"
 msgstr "medzi"
 
-#: src/search.c:221
+#: ../src/search.c:231
 msgid "before"
 msgstr "pred"
 
 # src/ui_pathsel.c:799
-#: src/search.c:222
+#: ../src/search.c:232
 msgid "after"
 msgstr "po"
 
-#: src/search.c:227
+#: ../src/search.c:237
 msgid "match all"
-msgstr "úplná zhoda"
+msgstr "úplná zhoda"
 
-#: src/search.c:228
+#: ../src/search.c:238
 msgid "match any"
-msgstr "akákoµvek zhoda"
+msgstr "akákoľvek zhoda"
 
-#: src/search.c:229
+#: ../src/search.c:239
 msgid "exclude"
 msgstr "okrem"
 
+#: ../src/search.c:244
+msgid "miss"
+msgstr ""
+
 # src/filelist.c:86
-#: src/search.c:279
+#: ../src/search.c:295
 #, c-format
 msgid "%s, %d files (%s, %d)"
-msgstr "%s, %d súborov (%s, %d)"
+msgstr "%s, %d súborov (%s, %d)"
 
 # src/filelist.c:88
-#: src/search.c:284
+#: ../src/search.c:300
 #, c-format
 msgid "%s, %d files"
-msgstr "%s, %d súborov"
+msgstr "%s, %d súborov"
 
 # src/dupe.c:871 src/dupe.c:892
-#: src/search.c:302
+#: ../src/search.c:318
 msgid "Searching..."
-msgstr "Hµadám..."
+msgstr "Hľadám..."
 
-#: src/search.c:2100
+#: ../src/search.c:2170
 msgid "File not found"
-msgstr "Súbor sa nena¹iel"
+msgstr "Súbor sa nenašiel"
 
 # src/utilops.c:544
-#: src/search.c:2101
+#: ../src/search.c:2171
 msgid "Please enter an existing file for image content."
-msgstr "Prosím zadajte existujúci súbor pre obsah obrázka."
+msgstr "Prosím zadajte existujúci súbor pre obsah obrázka."
 
 # src/utilops.c:544
-#: src/search.c:2151
+#: ../src/search.c:2220
 msgid "Please enter an existing folder to search."
-msgstr "Prosím zadajte existujúci prieèinok pre vyhµadávanie."
+msgstr "Prosím zadajte existujúci priečinok pre vyhľadávanie."
 
-#: src/search.c:2576
-#, fuzzy
+#: ../src/search.c:2646
 msgid "Image search"
-msgstr "Vyhµada» obrázok - Geeqie"
+msgstr "Hľadať obrázok"
 
 # src/dupe.c:871 src/dupe.c:892
-#: src/search.c:2606
+#: ../src/search.c:2676
 msgid "Search:"
-msgstr "Hµadanie:"
+msgstr "Hľadanie:"
 
-#: src/search.c:2620
+#: ../src/search.c:2690
 msgid "Recurse"
 msgstr "Rekurzia"
 
 # src/utilops.c:980
-#: src/search.c:2624
+#: ../src/search.c:2695
 msgid "File name"
-msgstr "Názov súboru"
+msgstr "Názov súboru"
 
-#: src/search.c:2630
+#: ../src/search.c:2701 ../src/search.c:2796
 msgid "Match case"
-msgstr "Citlivé na veµkos» písma"
+msgstr "Citlivé na veľkosť písma"
 
 # src/preferences.c:368
-#: src/search.c:2634
+#: ../src/search.c:2706
 msgid "File size is"
-msgstr "Veµkos» súboru je"
+msgstr "Veľkosť súboru je"
 
 # src/preferences.c:645
-#: src/search.c:2641 src/search.c:2656 src/search.c:2674
+#: ../src/search.c:2713 ../src/search.c:2729 ../src/search.c:2748
 msgid "and"
 msgstr "a"
 
 # src/ui_pathsel.c:799
-#: src/search.c:2646
+#: ../src/search.c:2719
 msgid "File date is"
-msgstr "Dátum súboru je"
+msgstr "Dátum súboru je"
 
 # src/utilops.c:539
-#: src/search.c:2663
+#: ../src/search.c:2737
 msgid "Image dimensions are"
-msgstr "Rozmery obrázku sú"
+msgstr "Rozmery obrázku sú"
 
 # src/collect-table.c:1820 src/dupe.c:2172
-#: src/search.c:2683
+#: ../src/search.c:2758
 msgid "Image content is"
-msgstr "Obsah obrázku je"
+msgstr "Obsah obrázku je"
 
 # src/dupe.c:1659
-#: src/search.c:2689
+#: ../src/search.c:2764
 #, no-c-format
 msgid "% similar to"
-msgstr "& podobnos» s"
+msgstr "% podobnosť s"
 
 # src/preferences.c:645
-#: src/search.c:2758
+#: ../src/search.c:2850
 msgid "Rank"
 msgstr "Trieda"
 
 # src/utilops.c:1151
-#: src/secure_save.c:398
-#, fuzzy
+#: ../src/secure_save.c:397
 msgid "Cannot read the file"
-msgstr "Nemô¾em vytvori» prieèinok"
+msgstr "Nemôžem prečítať tento súbor"
 
 # src/dupe.c:2060
-#: src/secure_save.c:400
-#, fuzzy
+#: ../src/secure_save.c:399
 msgid "Cannot get file status"
-msgstr "Porovna» dve sady súborov"
+msgstr "Nemôžem získať stav súboru"
 
-#: src/secure_save.c:402
+#: ../src/secure_save.c:401
 msgid "Cannot access the file"
-msgstr ""
+msgstr "Súbor sa nepodarilo otvoriť"
 
 # src/utilops.c:1151
-#: src/secure_save.c:404
-#, fuzzy
+#: ../src/secure_save.c:403
 msgid "Cannot create temp file"
-msgstr "Nemô¾em vytvori» prieèinok"
+msgstr "Nemôžem vytvoriť dočasný súbor"
 
 # src/utilops.c:1151
-#: src/secure_save.c:406
-#, fuzzy
+#: ../src/secure_save.c:405
 msgid "Cannot rename the file"
-msgstr "Nemô¾em vytvori» prieèinok"
+msgstr "Nemôžem premenovať tento súbor"
 
-#: src/secure_save.c:408
+#: ../src/secure_save.c:407
 msgid "File saving disabled by option"
-msgstr ""
+msgstr "Ukladanie súboru je vypnuté v možnostiach"
 
-#: src/secure_save.c:410
+#: ../src/secure_save.c:409
 msgid "Out of memory"
-msgstr ""
+msgstr "Preplnenie pamäte"
 
-#: src/secure_save.c:412
+#: ../src/secure_save.c:411
 msgid "Cannot write the file"
-msgstr ""
+msgstr "Nepodarilo sa zapísať do súboru"
 
-#: src/secure_save.c:416
+#: ../src/secure_save.c:415
 msgid "Secure file saving error"
-msgstr ""
+msgstr "Chyba pri bezpečnom ukladaní súboru"
 
 # src/thumb.c:268
-#: src/thumb.c:382
+#: ../src/thumb.c:396
 msgid "Thumbnail image in cache failed to load, trying to recreate.\n"
 msgstr ""
-"Zlyhalo naèítanie miniatúry z vyrovnávacej pamäte, pokus o opätovné "
+"Nepodarilo sa načítať náhľad z vyrovnávacej pamäte, pokus o opätovné "
 "vytvorenie\n"
 
 # src/utilops.c:664 src/utilops.c:676
-#: src/trash.c:74 src/utilops.c:1402 src/utilops.c:1415 src/utilops.c:1494
-#: src/utilops.c:1511 src/utilops.c:3095 src/utilops.c:3146 src/utilops.c:3232
-#: src/utilops.c:3243
+#: ../src/trash.c:80 ../src/utilops.c:2448 ../src/utilops.c:2459
+#: ../src/utilops.c:2516
 msgid "Delete failed"
-msgstr "Mazanie sa nepodarilo"
+msgstr "Odstraňovanie sa nepodarilo"
 
 # src/utilops.c:322
-#: src/trash.c:75
+#: ../src/trash.c:81
 msgid "Unable to remove old file from trash folder"
-msgstr "Nemo¾no vybra» starý súbor z ko¹a"
+msgstr "Nemožno vybrať starý súbor z koša"
 
 # src/utilops.c:1151
-#: src/trash.c:126 src/utilops.c:2755
+#: ../src/trash.c:138
 msgid "Could not create folder"
-msgstr "Nemô¾em vytvori» prieèinok"
+msgstr "Nemôžem vytvoriť priečinok"
 
-#: src/trash.c:148
+#: ../src/trash.c:160
 msgid "Permission denied"
-msgstr "Prístup odmietnutý"
+msgstr "Prístup odmietnutý"
 
 # src/ui_pathsel.c:517 src/utilops.c:1158
-#: src/trash.c:158
+#: ../src/trash.c:170
 #, c-format
 msgid ""
 "Unable to access or create the trash folder.\n"
 "\"%s\""
 msgstr ""
-"Nemo¾no pristupova» alebo vytvori» prieèinok ko¹a.\n"
+"Nemožno pristupovať alebo vytvoriť priečinok koša.\n"
 "\"%s\""
 
 # src/preferences.c:667
-#: src/trash.c:162
+#: ../src/trash.c:174
 msgid "Turn off safe delete"
-msgstr "Vypnú» bezpeèné mazanie"
+msgstr "Vypnúť bezpečné odstraňovanie"
 
-#: src/trash.c:181
+#: ../src/trash.c:193
 msgid "Deletion by external command"
-msgstr ""
+msgstr "Odstránenie pomocou externého príkazu"
 
-#: src/trash.c:189
+#: ../src/trash.c:201
 #, c-format
 msgid " (max. %d MB)"
-msgstr ""
+msgstr " (max. %d MB)"
 
 # src/preferences.c:667
-#: src/trash.c:193
-#, fuzzy, c-format
+#: ../src/trash.c:205
+#, c-format
 msgid ""
 "Safe delete: %s%s\n"
 "Trash: %s"
-msgstr "Bezpeèné mazanie: %s"
+msgstr ""
+"Bezpečné odstraňovanie: %s%s\n"
+"Kôš: %s"
 
 # src/preferences.c:667
-#: src/trash.c:198
+#: ../src/trash.c:210
 #, c-format
 msgid "Safe delete: %s"
-msgstr "Bezpeèné mazanie: %s"
-
-# src/ui_tabcomp.c:171
-#: src/ui_bookmark.c:151
-#, c-format
-msgid "Unable to write history lists to: %s\n"
-msgstr "Nemo¾no zapísa» históriu do: %s\n"
+msgstr "Bezpečné mazanie: %s"
 
-#: src/ui_bookmark.c:443 src/ui_bookmark.c:506
+#: ../src/ui_bookmark.c:130 ../src/ui_bookmark.c:193
 msgid "New Bookmark"
-msgstr "Nová zálo¾ka"
+msgstr "Nová záložka"
 
 # src/preferences.c:915
-#: src/ui_bookmark.c:589 src/ui_bookmark.c:595
+#: ../src/ui_bookmark.c:276 ../src/ui_bookmark.c:282
 msgid "Edit Bookmark"
-msgstr "Upravi» zálo¾ku"
+msgstr "UpraviÅ¥ záložku"
 
 # src/dupe.c:1657 src/dupe.c:1945
-#: src/ui_bookmark.c:610
+#: ../src/ui_bookmark.c:297
 msgid "Path:"
 msgstr "Cesta:"
 
-#: src/ui_bookmark.c:619
+#: ../src/ui_bookmark.c:306
 msgid "Icon:"
 msgstr "Ikona:"
 
 # src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/ui_bookmark.c:625
+#: ../src/ui_bookmark.c:312
 msgid "Select icon"
-msgstr "Vybra» ikonu"
+msgstr "Vybrať ikonu"
 
 # src/menu.c:748
-#: src/ui_bookmark.c:716
+#: ../src/ui_bookmark.c:408
 msgid "_Properties..."
-msgstr "Vlastnosti..."
-
-# src/utilops.c:601
-#: src/ui_bookmark.c:718
-msgid "Move _up"
-msgstr "Pres_unú» hore"
-
-# src/utilops.c:601
-#: src/ui_bookmark.c:720
-msgid "Move _down"
-msgstr "Presunú» _dole"
+msgstr "_Vlastnosti..."
 
 # src/collect-table.c:622 src/dupe.c:1410 src/dupe.c:1568
-#: src/ui_bookmark.c:722
+#: ../src/ui_bookmark.c:414
 msgid "_Remove"
-msgstr "_Vymaza»"
+msgstr "_Odobrať"
 
-# src/ui_help.c:191
-#: src/ui_help.c:114
-#, c-format
+#: ../src/ui_fileops.c:94
 msgid ""
-"Unable to load:\n"
-"%s"
+"One or more filenames are not encoded with the preferred locale character "
+"set.\n"
 msgstr ""
-"Nemo¾no naèíta» súbor:\n"
-"%s"
 
-# src/ui_pathsel.c:313
-#: src/ui_pathsel.c:438 src/utilops.c:2859
+#: ../src/ui_fileops.c:95
 #, c-format
-msgid "Failed to rename %s to %s."
-msgstr "Nemo¾no premenova» %s na %s."
+msgid "Operations on, and display of these files with %s may not succeed.\n"
+msgstr ""
 
-# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
-#: src/ui_pathsel.c:494 src/utilops.c:1510 src/utilops.c:1703
-#, c-format
+#: ../src/ui_fileops.c:97
 msgid ""
-"Unable to delete file:\n"
-"%s"
+"If your filenames are not encoded in utf-8, try setting the environment "
+"variable G_BROKEN_FILENAMES=1\n"
 msgstr ""
-"Nemo¾no zmaza» súbor:\n"
-"%s"
 
-# src/ui_pathsel.c:344 src/utilops.c:728
-#: src/ui_pathsel.c:495 src/utilops.c:1452 src/utilops.c:1472
-#: src/utilops.c:1684 src/utilops.c:1696 src/utilops.c:1704
-msgid "File deletion failed"
-msgstr "Zmazanie súboru sa nepodarilo"
+#: ../src/ui_fileops.c:99
+#, c-format
+msgid "It appears G_BROKEN_FILENAMES is set to %s\n"
+msgstr ""
 
-# src/ui_pathsel.c:398 src/utilops.c:760
-#: src/ui_pathsel.c:537 src/ui_pathsel.c:545 src/utilops.c:1734
-msgid "Delete file"
-msgstr "Zmaza» súbor"
+#: ../src/ui_fileops.c:101
+msgid "It appears G_BROKEN_FILENAMES is not set\n"
+msgstr ""
 
-# src/ui_pathsel.c:397 src/utilops.c:759
-#: src/ui_pathsel.c:543
+#: ../src/ui_fileops.c:103
 #, c-format
 msgid ""
-"About to delete the file:\n"
-" %s"
+"The locale appears to be set to \"%s\"\n"
+"(set by the LANG environment variable)\n"
 msgstr ""
-"Pripravený zmaza» súbor:\n"
-" %s"
 
-# src/ui_pathsel.c:437 src/ui_pathsel.c:460 src/utilops.c:944
-# src/utilops.c:1095
-#: src/ui_pathsel.c:634 src/ui_pathsel.c:642 src/utilops.c:2428
-#: src/utilops.c:2690
-msgid "_Rename"
-msgstr "P_remenova»"
+#: ../src/ui_fileops.c:108
+msgid ""
+"\n"
+"Preferred encoding appears to be UTF-8, however the file:\n"
+msgstr ""
 
-# src/preferences.c:915
-#: src/ui_pathsel.c:636 src/ui_pathsel.c:646
-msgid "Add _Bookmark"
-msgstr "Prida» zálo¾ku"
+#: ../src/ui_fileops.c:109 ../src/ui_fileops.c:112 ../src/ui_fileops.c:114
+#, fuzzy
+msgid "[name not displayable]"
+msgstr "Vzdialený je nedostupný\n"
 
-# src/ui_pathsel.c:402 src/ui_pathsel.c:461 src/utilops.c:711
-# src/utilops.c:764
-#: src/ui_pathsel.c:644
-msgid "_Delete"
-msgstr "Vymaza»"
+#: ../src/ui_fileops.c:112
+#, c-format
+msgid "\"%s\" is encoded in valid UTF-8."
+msgstr ""
 
-#: src/ui_pathsel.c:748 src/ui_pathsel.c:1053 src/utilops.c:2807
-msgid "New folder"
-msgstr "Nový prieèinok"
+#: ../src/ui_fileops.c:114
+#, c-format
+msgid "\"%s\" is not encoded in valid UTF-8."
+msgstr ""
 
-# src/ui_pathsel.c:517 src/utilops.c:1158
-#: src/ui_pathsel.c:758 src/utilops.c:2762 src/view_dir.c:511
+#: ../src/ui_fileops.c:119 ../src/ui_fileops.c:124
+msgid "Filename encoding locale mismatch"
+msgstr ""
+
+# src/ui_help.c:191
+#: ../src/ui_help.c:114
 #, c-format
 msgid ""
-"Unable to create folder:\n"
+"Unable to load:\n"
 "%s"
 msgstr ""
-"Nemo¾no vytvori» prieèinok:\n"
+"Nemožno načítať súbor:\n"
+"%s"
+
+# src/utilops.c:1090
+#: ../src/ui_pathsel.c:433 ../src/ui_pathsel.c:439 ../src/utilops.c:2147
+#: ../src/utilops.c:2174 ../src/utilops.c:2640
+msgid "Rename failed"
+msgstr "Premenovanie sa nepodarilo"
+
+# src/ui_pathsel.c:313
+#: ../src/ui_pathsel.c:438
+#, c-format
+msgid "Failed to rename %s to %s."
+msgstr "Nemožno premenovať %s na %s."
+
+# src/ui_pathsel.c:437 src/ui_pathsel.c:460 src/utilops.c:944
+# src/utilops.c:1095
+#: ../src/ui_pathsel.c:634 ../src/ui_pathsel.c:642
+msgid "_Rename"
+msgstr "_Premenovať"
+
+# src/preferences.c:915
+#: ../src/ui_pathsel.c:636 ../src/ui_pathsel.c:646
+msgid "Add _Bookmark"
+msgstr "Pridať _záložku"
+
+# src/ui_pathsel.c:402 src/ui_pathsel.c:461 src/utilops.c:711
+# src/utilops.c:764
+#: ../src/ui_pathsel.c:644
+msgid "_Delete"
+msgstr "_Odstrániť"
+
+#: ../src/ui_pathsel.c:748 ../src/ui_pathsel.c:1049 ../src/utilops.c:2674
+msgid "New folder"
+msgstr "Nový priečinok"
+
+# src/ui_pathsel.c:517 src/utilops.c:1158
+#: ../src/ui_pathsel.c:758
+#, c-format
+msgid ""
+"Unable to create folder:\n"
+"%s"
+msgstr ""
+"Nemožno vytvoriť priečinok:\n"
 "%s"
 
 # src/ui_pathsel.c:518 src/utilops.c:1159
-#: src/ui_pathsel.c:759 src/utilops.c:2763 src/view_dir.c:512
+#: ../src/ui_pathsel.c:759
 msgid "Error creating folder"
-msgstr "Chyba pri vytváraní prieèinka"
+msgstr "Chyba pri vytváraní priečinku"
 
 # src/ui_pathsel.c:697
-#: src/ui_pathsel.c:980
+#: ../src/ui_pathsel.c:980
 msgid "All Files"
-msgstr "V¹etky súbory"
+msgstr "Všetky súbory"
 
 # src/ui_pathsel.c:764
-#: src/ui_pathsel.c:1056
+#: ../src/ui_pathsel.c:1052
 msgid "Show hidden"
-msgstr "Ukáza» skryté"
+msgstr "Ukázať skryté"
 
 # src/ui_pathsel.c:799
-#: src/ui_pathsel.c:1140
+#: ../src/ui_pathsel.c:1136
 msgid "Filter:"
 msgstr "Filter:"
 
 # src/collect-table.c:627 src/dupe.c:1391 src/dupe.c:1563
-#: src/ui_tabcomp.c:858
+#: ../src/ui_tabcomp.c:933
 msgid "Select path"
-msgstr "Vybra» cestu"
+msgstr "Vybrať cestu"
 
 # src/ui_pathsel.c:697
-#: src/ui_tabcomp.c:874
+#: ../src/ui_tabcomp.c:949
 msgid "All files"
-msgstr "V¹etky súbory"
-
-# src/utilops.c:382 src/utilops.c:490
-#: src/utilops.c:346 src/utilops.c:811 src/utilops.c:1048
-msgid "Error copying file"
-msgstr "Chyba pri kopírovaní súboru"
+msgstr "Všetky súbory"
 
-# src/utilops.c:491
-#: src/utilops.c:347
-#, fuzzy, c-format
+# src/utilops.c:663
+#: ../src/utilops.c:547
+#, fuzzy
 msgid ""
-"%s\n"
-"Unable to copy file:\n"
-"%s\n"
-"to:\n"
-"%s"
+"\n"
+" Continue multiple file operation?"
 msgstr ""
-"Nemo¾no kopírova» súbor:\n"
-"%s\n"
-"do:\n"
-"%s"
+"\n"
+" Pokračovať s operáciou hromadného odstraňovania?"
 
-# src/utilops.c:387 src/utilops.c:495
-#: src/utilops.c:390 src/utilops.c:816 src/utilops.c:1053
-msgid "Error moving file"
-msgstr "Chyba pri presúvaní súboru"
+# src/utilops.c:328 src/utilops.c:394 src/utilops.c:668
+#: ../src/utilops.c:554 ../src/utilops.c:989
+msgid "Co_ntinue"
+msgstr "_Pokračovať"
 
-# src/utilops.c:496
-#: src/utilops.c:391
-#, fuzzy, c-format
+#: ../src/utilops.c:731
+#, c-format
 msgid ""
-"%s\n"
-"Unable to move file:\n"
-"%s\n"
-"to:\n"
+"Removal of folder contents failed at this file:\n"
+"\n"
 "%s"
 msgstr ""
-"Nemo¾no presunú» súbor:\n"
-"%s\n"
-"do:\n"
+"Odoberanie obsahu priečinka zlyhalo na tomto súbore:\n"
+"\n"
 "%s"
 
-# src/filelist.c:809 src/filelist.c:815 src/filelist.c:821 src/utilops.c:845
-# src/utilops.c:1048
-#: src/utilops.c:439 src/utilops.c:1920 src/utilops.c:2642
-#: src/view_file_list.c:391 src/view_file_list.c:397 src/view_file_list.c:411
-msgid "Error renaming file"
-msgstr "Chyba pri premenovaní súboru"
-
-# src/filelist.c:820 src/utilops.c:1047
-#: src/utilops.c:440
+# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
+#: ../src/utilops.c:877
 #, fuzzy, c-format
 msgid ""
 "%s\n"
-"Unable to rename file:\n"
-"%s\n"
-"to:\n"
-"%s"
+"Unable to start external command.\n"
 msgstr ""
-"Nemo¾no premenova» súbor:\n"
 "%s\n"
-"na:\n"
-"%s"
+"Nemožno odstrániť súbory externým príkazom.\n"
 
-# src/utilops.c:339 src/utilops.c:459 src/utilops.c:826 src/utilops.c:1032
-#: src/utilops.c:651 src/utilops.c:981 src/utilops.c:1893 src/utilops.c:2613
-msgid "Overwrite file"
-msgstr "Prepísa» súbor"
+# src/preferences.c:559
+#: ../src/utilops.c:957
+#, fuzzy, c-format
+msgid "%s is not a directory"
+msgstr "Začiatočný adresár"
 
-# src/utilops.c:339 src/utilops.c:459 src/utilops.c:826 src/utilops.c:1032
-#: src/utilops.c:656 src/utilops.c:986 src/utilops.c:1898 src/utilops.c:2618
-msgid "Overwrite file?"
-msgstr "Prepísa» súbor?"
+#: ../src/utilops.c:987
+msgid "Really continue?"
+msgstr ""
+
+#: ../src/utilops.c:1001
+msgid "This operation can't continue:"
+msgstr ""
+
+#: ../src/utilops.c:1364 ../src/utilops.c:1477 ../src/utilops.c:1861
+#, fuzzy
+msgid "Discard changes"
+msgstr "_Zahodiť"
 
-#: src/utilops.c:657 src/utilops.c:987
-msgid "Replace existing file with new file."
-msgstr "Prepísa» existujúci súbor novým."
+# src/ui_pathsel.c:799
+#: ../src/utilops.c:1365 ../src/utilops.c:1478 ../src/utilops.c:1811
+#: ../src/utilops.c:1827
+#, fuzzy
+msgid "File details"
+msgstr "Dátum súboru je"
+
+#: ../src/utilops.c:1387 ../src/utilops.c:1485
+msgid "Sidecars"
+msgstr ""
 
 # src/utilops.c:339 src/utilops.c:459 src/utilops.c:826 src/utilops.c:1032
-#: src/utilops.c:661
-msgid "Overwrite _all"
-msgstr "Prepísa» v¹etky"
+#: ../src/utilops.c:1389
+#, fuzzy
+msgid "Write to file"
+msgstr "Prepísať súbor"
 
-# src/utilops.c:345
-#: src/utilops.c:663
-msgid "S_kip all"
-msgstr "Preskoèi» v¹etky"
+# src/utilops.c:450
+#: ../src/utilops.c:1429
+msgid "Choose the destination folder."
+msgstr "Vyberte cieľový priečinok."
 
-# src/utilops.c:345
-#: src/utilops.c:664
-msgid "_Skip"
-msgstr "Preskoèi»"
+# src/utilops.c:980
+#: ../src/utilops.c:1487
+#, fuzzy
+msgid "New name"
+msgstr "Nový názov:"
 
-# src/utilops.c:387 src/utilops.c:495
-#: src/utilops.c:665 src/utilops.c:991 src/utilops.c:1904 src/utilops.c:2624
-msgid "Existing file"
-msgstr "Existujúci súbor"
+# src/preferences.c:930
+#: ../src/utilops.c:1517
+msgid "Manual rename"
+msgstr "Ručné premenovanie"
+
+#: ../src/utilops.c:1522
+msgid "Original name:"
+msgstr "Pôvodný názov:"
 
-#: src/utilops.c:665 src/utilops.c:991 src/utilops.c:1905 src/utilops.c:2625
-msgid "New file"
-msgstr "Nový súbor"
+# src/utilops.c:980
+#: ../src/utilops.c:1525
+msgid "New name:"
+msgstr "Nový názov:"
 
 # src/preferences.c:930
-#: src/utilops.c:675 src/utilops.c:1000 src/utilops.c:2038 src/utilops.c:2094
-#: src/utilops.c:2167 src/utilops.c:2501
+#: ../src/utilops.c:1538
 msgid "Auto rename"
-msgstr "Automatické premenovanie"
+msgstr "Automatické premenovanie"
 
-# src/ui_pathsel.c:437 src/ui_pathsel.c:460 src/utilops.c:944
-# src/utilops.c:1095
-#: src/utilops.c:683 src/utilops.c:1008 src/utilops.c:2423 src/utilops.c:2682
-msgid "Rename"
-msgstr "Premenova»"
+#: ../src/utilops.c:1544
+msgid "Begin text"
+msgstr "Začiatočný text"
 
-# src/utilops.c:316
-#: src/utilops.c:724
-msgid "Source to copy matches destination"
-msgstr "Zdroj pre kopírovanie sa zhoduje s cieµom"
+#: ../src/utilops.c:1552 ../src/utilops.c:1584
+msgid "Start #"
+msgstr "Štart #"
 
-# src/utilops.c:317
-#: src/utilops.c:725
-#, c-format
-msgid ""
-"Unable to copy file:\n"
-"%s\n"
-"to itself."
-msgstr ""
-"Nemo¾no kopírova» súbor:\n"
-"%s\n"
-"do seba."
+#: ../src/utilops.c:1558
+msgid "End text"
+msgstr "Koncový text"
 
-# src/utilops.c:321
-#: src/utilops.c:729
-msgid "Source to move matches destination"
-msgstr "Zdroj pre presúvanie sa zhoduje s cieµom"
+#: ../src/utilops.c:1566
+msgid "Padding:"
+msgstr "Výplň:"
 
-# src/utilops.c:322
-#: src/utilops.c:730
-#, c-format
-msgid ""
-"Unable to move file:\n"
-"%s\n"
-"to itself."
-msgstr ""
-"Nemo¾no presunú» súbor:\n"
-"%s\n"
-"do seba."
+#: ../src/utilops.c:1571
+msgid "Formatted rename"
+msgstr "Formátované premenovanie"
 
-# src/utilops.c:328 src/utilops.c:394 src/utilops.c:668
-#: src/utilops.c:738 src/utilops.c:825 src/utilops.c:1408 src/utilops.c:1502
-msgid "Co_ntinue"
-msgstr "Pokraèova»"
+#: ../src/utilops.c:1576
+msgid "Format (* = original name, ## = numbers)"
+msgstr "Formát (* = pôvodné meno, ## = čísla)"
 
-# src/utilops.c:383
-#: src/utilops.c:812
-#, c-format
-msgid ""
-"Unable to copy file:\n"
-"%s\n"
-"to:\n"
-"%s\n"
-"during multiple file copy."
+#: ../src/utilops.c:1714
+msgid "Another operation in progress.\n"
+msgstr "Momentálne prebieha iná operácia.\n"
+
+# src/ui_pathsel.c:799
+#: ../src/utilops.c:1770
+#, fuzzy, c-format
+msgid "File: '%s'\n"
+msgstr "Súbor:"
+
+#: ../src/utilops.c:1775
+msgid "with sidecar files:\n"
 msgstr ""
-"Nemo¾no kopírova» súbor:\n"
-"%s\n"
-"do:\n"
-"%s\n"
-"poèas viacnásobného kopírovania."
 
-# src/utilops.c:388
-#: src/utilops.c:817
+#: ../src/utilops.c:1781
 #, c-format
+msgid " '%s'\n"
+msgstr ""
+
+#: ../src/utilops.c:1785
 msgid ""
-"Unable to move file:\n"
-"%s\n"
-"to:\n"
-"%s\n"
-"during multiple file move."
+"\n"
+"Status: "
 msgstr ""
-"Nemo¾no presunú» súbor:\n"
-"%s\n"
-"do:\n"
-"%s\n"
-"poèas viacnásobného presúvania."
 
-# src/utilops.c:450
-#: src/utilops.c:972
-msgid "Source matches destination"
-msgstr "Zdroj zodpovedá cieµu"
+#: ../src/utilops.c:1797
+msgid "no problem detected"
+msgstr ""
 
-# src/utilops.c:451
-#: src/utilops.c:973
-msgid "Source and destination are the same, operation cancelled."
-msgstr "Zdroj a cieµ sú toto¾né, operácia zru¹ená."
+#: ../src/utilops.c:1813 ../src/utilops.c:1860
+#, fuzzy
+msgid "Exclude file"
+msgstr "okrem"
 
-# src/utilops.c:491
-#: src/utilops.c:1049
+#: ../src/utilops.c:1858 ../src/utilops.c:1883
+msgid "Overview of changed metadata"
+msgstr ""
+
+#: ../src/utilops.c:1876
 #, c-format
 msgid ""
-"Unable to copy file:\n"
-"%s\n"
-"to:\n"
-"%s"
+"The following metadata tags will be written to\n"
+"'%s'."
 msgstr ""
-"Nemo¾no kopírova» súbor:\n"
-"%s\n"
-"do:\n"
-"%s"
 
-# src/utilops.c:496
-#: src/utilops.c:1054
+#: ../src/utilops.c:1880
 #, c-format
-msgid ""
-"Unable to move file:\n"
-"%s\n"
-"to:\n"
-"%s"
+msgid "The following metadata tags will be written to the image file itself."
 msgstr ""
-"Nemo¾no presunú» súbor:\n"
-"%s\n"
-"do:\n"
-"%s"
 
-# src/utilops.c:539
-#: src/utilops.c:1102
-msgid "Invalid destination"
-msgstr "Chybný cieµ"
+# src/ui_pathsel.c:398 src/utilops.c:760
+#: ../src/utilops.c:1986
+#, fuzzy
+msgid "Delete files?"
+msgstr "Odstrániť súbor"
 
-# src/utilops.c:540
-#: src/utilops.c:1103
-msgid ""
-"When operating with multiple files, please select\n"
-"a folder, not a file."
-msgstr ""
-"Keï narábate s viacerými súbormi, prosím zvoµte\n"
-" prieèinok, nie súbor."
+#: ../src/utilops.c:1987
+#, fuzzy
+msgid "This will delete the following files"
+msgstr "Týmto sa odstráni obsah koša."
 
-# src/utilops.c:544
-#: src/utilops.c:1108
-msgid "Please select an existing folder."
-msgstr "Prosím zvoµte existujúci prieèinok"
+#: ../src/utilops.c:2006
+msgid "Can't write metadata"
+msgstr ""
 
-# src/utilops.c:592
-#: src/utilops.c:1178 src/view_dir.c:338
-msgid "_Copy"
-msgstr "Kopírova»"
+#: ../src/utilops.c:2029
+#, fuzzy
+msgid "Write metadata"
+msgstr "Metadáta"
 
-# src/utilops.c:1090
-#: src/utilops.c:1181
-msgid "Copy file"
-msgstr "Kopírova» súbor:"
+#: ../src/utilops.c:2030
+#, fuzzy
+msgid "Write metadata?"
+msgstr "Metadáta"
 
-# src/utilops.c:596
-#: src/utilops.c:1185
-msgid "Copy multiple files"
-msgstr "Kopírova» viacero súborov"
+#: ../src/utilops.c:2031
+#, fuzzy
+msgid "This will write the changed metadata into the following files"
+msgstr ""
+"Chystám sa nastaviť príkazy na úpravu na predvolené hodnoty.\n"
+"Pokračovať?"
 
-# src/utilops.c:601
-#: src/utilops.c:1192 src/view_dir.c:340
-msgid "_Move"
-msgstr "Presunú»"
+#: ../src/utilops.c:2033
+msgid "Metadata writting failed"
+msgstr ""
 
 # src/utilops.c:1090
-#: src/utilops.c:1195
-msgid "Move file"
-msgstr "Presunú» súbor"
-
-# src/utilops.c:605
-#: src/utilops.c:1199
-msgid "Move multiple files"
-msgstr "Presunú» viacero súborov"
+#: ../src/utilops.c:2052 ../src/utilops.c:2079
+#, fuzzy
+msgid "Move failed"
+msgstr "Presunúť súbor"
 
-# src/utilops.c:980
-#: src/utilops.c:1214 src/utilops.c:1744
-msgid "File name:"
-msgstr "Názov súboru:"
+# src/utilops.c:1090
+#: ../src/utilops.c:2076
+#, fuzzy
+msgid "Move files?"
+msgstr "Presunúť súbor"
 
-# src/utilops.c:450
-#: src/utilops.c:1218
-msgid "Choose the destination folder."
-msgstr "Výber cieµového prieèinku."
+#: ../src/utilops.c:2077
+#, fuzzy
+msgid "This will move the following files"
+msgstr "Týmto sa odstráni obsah koša."
 
-# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
-#: src/utilops.c:1389
+# src/utilops.c:1090
+#: ../src/utilops.c:2101 ../src/utilops.c:2128
 #, fuzzy
-msgid ""
-"\n"
-"Unable to delete file by external command:\n"
-msgstr ""
-"Nemo¾no zmaza» súbor:\n"
-"%s"
+msgid "Copy failed"
+msgstr "Kopírovať súbor"
 
-# src/utilops.c:663
-#: src/utilops.c:1401
+# src/utilops.c:1090
+#: ../src/utilops.c:2125
 #, fuzzy
-msgid ""
-"\n"
-" Continue multiple delete operation?"
-msgstr ""
-"Nemo¾no zmaza» súbor:\n"
-" %s\n"
-" Pokraèova» s viacnásobnou operáciou mazania?"
+msgid "Copy files?"
+msgstr "Kopírovať súbor"
 
-#: src/utilops.c:1452 src/utilops.c:1684
-msgid "Another operation in progress.\n"
+#: ../src/utilops.c:2126 ../src/utilops.c:2260
+msgid "This will copy the following files"
 msgstr ""
 
-# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
-#: src/utilops.c:1471
-#, fuzzy, c-format
-msgid ""
-"%s\n"
-"Unable to delete files by external command.\n"
-msgstr ""
-"Nemo¾no zmaza» súbor:\n"
-"%s"
+# src/ui_pathsel.c:437 src/ui_pathsel.c:460 src/utilops.c:944
+# src/utilops.c:1095
+#: ../src/utilops.c:2170 ../src/utilops.c:2636
+msgid "Rename"
+msgstr "Premenovať"
 
-# src/utilops.c:663
-#: src/utilops.c:1498
-#, c-format
-msgid ""
-"Unable to delete file:\n"
-" %s\n"
-" Continue multiple delete operation?"
-msgstr ""
-"Nemo¾no zmaza» súbor:\n"
-" %s\n"
-" Pokraèova» s viacnásobnou operáciou mazania?"
+# src/utilops.c:1090
+#: ../src/utilops.c:2171
+#, fuzzy
+msgid "Rename files?"
+msgstr "Premenovať súbor"
 
-#: src/utilops.c:1569
-#, c-format
-msgid "File %d of %d"
-msgstr "Súbor %d z %d"
+#: ../src/utilops.c:2172
+#, fuzzy
+msgid "This will rename the following files"
+msgstr "Týmto sa odstráni obsah koša."
 
-# src/ui_pathsel.c:398 src/utilops.c:760
-#: src/utilops.c:1637
+#: ../src/utilops.c:2224
 #, fuzzy
-msgid "Delete files"
-msgstr "Zmaza» súbor"
+msgid "Can't run external editor"
+msgstr "Nepodarilo sa spustiť externý editor."
 
-# src/utilops.c:942
-#: src/utilops.c:1643
-msgid "Delete multiple files"
-msgstr "Zmaza» viacero súborov"
+# src/preferences.c:915
+#: ../src/utilops.c:2258
+#, fuzzy
+msgid "Editor"
+msgstr "Editory"
 
-# src/dupe.c:67 src/dupe.c:1449
-#: src/utilops.c:1661
-#, c-format
-msgid "Review %d files"
-msgstr "Prehµad %d súborov"
+# src/utilops.c:707
+#: ../src/utilops.c:2259
+#, fuzzy
+msgid "Run editor?"
+msgstr "Vynulovať editory"
 
-# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
-#: src/utilops.c:1695
-#, fuzzy, c-format
-msgid ""
-"%s\n"
-"Unable to delete file by external command:\n"
-"%s"
-msgstr ""
-"Nemo¾no zmaza» súbor:\n"
-"%s"
+#: ../src/utilops.c:2262
+#, fuzzy
+msgid "External command failed"
+msgstr "Externý príkaz na kopírovanie"
 
-# src/ui_pathsel.c:398 src/utilops.c:760
-#: src/utilops.c:1740
-msgid "Delete file?"
-msgstr "Zmaza» súbor?"
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/utilops.c:2431 ../src/utilops.c:2504
+msgid "Delete folder"
+msgstr "Odstrániť priečinok"
 
-#: src/utilops.c:1899 src/utilops.c:2619
-msgid "Replace existing file by renaming new file."
-msgstr "Prepísa» existujúci súbor premenovaním nového súboru."
+#: ../src/utilops.c:2432
+#, fuzzy
+msgid "Delete symbolic link?"
+msgstr "Odstrániť symbolický odkaz na priečinok?"
 
-# src/utilops.c:842
-#: src/utilops.c:1917
-#, c-format
+#: ../src/utilops.c:2434
+#, fuzzy
 msgid ""
-"Unable to rename file:\n"
-"%s\n"
-" to:\n"
-"%s"
+"This will delete the symbolic link.\n"
+"The folder this link points to will not be deleted."
 msgstr ""
-"Nemo¾no premenova» súbor:\n"
+"Týmto sa odstráni symbolický odkaz:\n"
+"\n"
 "%s\n"
-" na:\n"
-"%s"
+"\n"
+"Priečinok, na ktorý odkaz smeruje, nebude odstránený."
 
-#: src/utilops.c:2039
-msgid "Format must include at least one of the symbol characters '*' or '#'.\n"
-msgstr ""
+# src/ui_pathsel.c:344 src/utilops.c:728
+#: ../src/utilops.c:2436
+#, fuzzy
+msgid "Link deletion failed"
+msgstr "Nepodarilo sa odstrániť súbor"
 
-#: src/utilops.c:2095
+# src/utilops.c:322
+#: ../src/utilops.c:2446
+#, c-format
 msgid ""
-"Can not auto rename with the selected\n"
-"number set, one or more files exist that\n"
-"match the resulting name list.\n"
+"Unable to remove folder %s\n"
+"Permissions do not allow writing to the folder."
 msgstr ""
-"Nemô¾em automaticky premenova» s vybranou\n"
-"èíselnou sadou, preto¾e existujú nejaké súbory,\n"
-"ktorých mená sa nachádzajú vo výslednom zozname.\n"
+"Nemožno odobrať priečinok %s\n"
+"Prístupové oprávnenia neumožňujú zápis do tohto priečinku."
 
-# src/ui_pathsel.c:313
-#: src/utilops.c:2166
+# src/ui_pathsel.c:517 src/utilops.c:1158
+#: ../src/utilops.c:2458 ../src/utilops.c:2515
 #, c-format
-msgid ""
-"Failed to rename\n"
-"%s\n"
-"The number was %d."
-msgstr ""
-"Premenovanie sa nepodarilo\n"
-"%s\n"
-"Èíslo bolo: %d."
+msgid "Unable to list contents of folder %s"
+msgstr "Nemožno zobraziť obsah priečinku %s"
 
-# src/utilops.c:942
-#: src/utilops.c:2427
-msgid "Rename multiple files"
-msgstr "Premenova» viacero súborov"
+# src/collect-dlg.c:59
+#: ../src/utilops.c:2472 ../src/utilops.c:2480
+msgid "Folder contains subfolders"
+msgstr "Priečinok obsahuje podpriečinky"
+
+#: ../src/utilops.c:2476
+#, c-format
+msgid ""
+"Unable to delete the folder:\n"
+"\n"
+"%s\n"
+"\n"
+"This folder contains subfolders which must be moved before it can be deleted."
+msgstr ""
+"Nemožno odstrániť tento priečinok:\n"
+"\n"
+"%s\n"
+"\n"
+"Tento priečinok obsahuje podpriečinky, ktoré sa najprv musia presunúť, a až "
+"potom ho bude možné odstrániť."
 
-#: src/utilops.c:2461
-msgid "Original Name"
-msgstr "Pôvodný názov"
+# src/preferences.c:368
+#: ../src/utilops.c:2484
+msgid "Subfolders:"
+msgstr "Podpriečinky:"
 
-# src/preferences.c:930
-#: src/utilops.c:2499
+# src/ui_pathsel.c:398 src/utilops.c:760
+#: ../src/utilops.c:2505
+msgid "Delete folder?"
+msgstr "Odstrániť priečinok?"
+
+# src/collect-dlg.c:59
+#: ../src/utilops.c:2506
 #, fuzzy
-msgid "Manual rename"
-msgstr "Názov ponuky"
+msgid "The folder contains these files:"
+msgstr "Priečinok obsahuje podpriečinky"
 
-#: src/utilops.c:2500
-msgid "Formatted rename"
+#: ../src/utilops.c:2507
+#, fuzzy
+msgid ""
+"This will delete the folder.\n"
+"The contents of this folder will also be deleted."
 msgstr ""
+"Týmto bude odstránený priečinok:\n"
+"\n"
+"%s\n"
+"\n"
+"Obsah priečinku bude tiež odstránený."
 
-#: src/utilops.c:2513 src/utilops.c:2697
-msgid "Original name:"
-msgstr "Pôvodný názov:"
+# src/utilops.c:1090
+#: ../src/utilops.c:2637
+#, fuzzy
+msgid "Rename folder?"
+msgstr "Premenovať súbor"
 
-# src/utilops.c:980
-#: src/utilops.c:2516 src/utilops.c:2700
-msgid "New name:"
-msgstr "Nový názov:"
+# src/collect-dlg.c:59
+#: ../src/utilops.c:2638
+#, fuzzy
+msgid "The folder contains the following files"
+msgstr "Priečinok obsahuje podpriečinky"
 
-#: src/utilops.c:2534
-msgid "Begin text"
-msgstr "Zaèiatoèný text"
+# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
+#: ../src/utilops.c:2684
+#, fuzzy
+msgid "Create Folder"
+msgstr "Odstrániť priečinok"
 
-#: src/utilops.c:2542 src/utilops.c:2574
-msgid "Start #"
-msgstr "©tart #"
+# src/ui_pathsel.c:398 src/utilops.c:760
+#: ../src/utilops.c:2685
+#, fuzzy
+msgid "Create folder?"
+msgstr "Odstrániť priečinok?"
 
-#: src/utilops.c:2548
-msgid "End text"
-msgstr "Koncový text"
+# src/utilops.c:1151
+#: ../src/utilops.c:2688
+#, fuzzy
+msgid "Can't create folder"
+msgstr "Nemôžem vytvoriť priečinok"
 
-#: src/utilops.c:2556
-msgid "Padding:"
-msgstr "výplò:"
+# src/utilops.c:592
+#: ../src/view_dir.c:397
+msgid "_Copy"
+msgstr "_Kopírovať"
 
-#: src/utilops.c:2566
-msgid "Format (* = original name, ## = numbers)"
+# src/utilops.c:601
+#: ../src/view_dir.c:399
+msgid "_Move"
+msgstr "_Presunúť"
+
+#: ../src/view_dir.c:645
+msgid "_Up to parent"
+msgstr "O stupeň _vyššie"
+
+# src/menu.c:879
+#: ../src/view_dir.c:650
+msgid "_Slideshow"
+msgstr "_Prezentácia"
+
+# src/menu.c:881
+#: ../src/view_dir.c:652
+msgid "Slideshow recursive"
+msgstr "Prezentácia rekurzívne"
+
+# src/collect-table.c:644 src/menu.c:885
+#: ../src/view_dir.c:656
+msgid "Find _duplicates..."
+msgstr "Nájsť _duplikáty..."
+
+# src/menu.c:887
+#: ../src/view_dir.c:658
+msgid "Find duplicates recursive..."
+msgstr "Nájsť duplikáty rekurzívne..."
+
+#: ../src/view_dir.c:663
+msgid "_New folder..."
+msgstr "_Nový priečinok..."
+
+# src/dupe.c:1655 src/dupe.c:1944
+#: ../src/view_dir.c:677 ../src/view_file.c:619
+#, fuzzy
+msgid "View as _List"
+msgstr "Zobraziť ako _ikony"
+
+# src/menu.c:761
+#: ../src/view_dir.c:680
+#, fuzzy
+msgid "View as _Tree"
+msgstr "Zobraziť ako s_trom"
+
+# src/ui_pathsel.c:764
+#: ../src/view_dir.c:685
+msgid "Show _hidden files"
+msgstr "Ukázať _skryté súbory"
+
+# src/menu.c:891 src/menu.c:920
+#: ../src/view_dir.c:688 ../src/view_file.c:637
+msgid "Re_fresh"
+msgstr "_Obnoviť"
+
+# src/dupe.c:1655 src/dupe.c:1944
+#: ../src/view_file.c:622
+#, fuzzy
+msgid "View as _Icons"
+msgstr "Zobraziť ako _ikony"
+
+# src/preferences.c:603
+#: ../src/view_file.c:628
+msgid "Show _thumbnails"
+msgstr "Zobraziť _náhľady"
+
+#: ../src/view_file_icon.c:2199 ../src/view_file_list.c:899
+msgid " [NO GROUPING]"
 msgstr ""
 
-# src/filelist.c:820 src/utilops.c:1047
-#: src/utilops.c:2641 src/view_file_list.c:410
+# src/filelist.c:808
+#: ../src/view_file_list.c:512
 #, c-format
 msgid ""
-"Unable to rename file:\n"
-"%s\n"
-"to:\n"
+"Invalid file name:\n"
 "%s"
 msgstr ""
-"Nemo¾no premenova» súbor:\n"
-"%s\n"
-"na:\n"
+"Nesprávny názov súboru:\n"
 "%s"
 
-# src/utilops.c:1090
-#: src/utilops.c:2687
-msgid "Rename file"
-msgstr "Premenova» súbor"
+# src/filelist.c:809 src/filelist.c:815 src/filelist.c:821 src/utilops.c:845
+# src/utilops.c:1048
+#: ../src/view_file_list.c:513
+msgid "Error renaming file"
+msgstr "Chyba pri premenovaní súboru"
+
+# src/menu.c:771
+#: ../src/window.c:252
+msgid "Help"
+msgstr "Pomoc"
+
+#~ msgid "Advanced view"
+#~ msgstr "Rozšírený pohľad"
+
+#~ msgid "Favorite"
+#~ msgstr "Obľúbené"
+
+# src/preferences.c:368
+#~ msgid "Todo"
+#~ msgstr "Úlohy"
+
+#~ msgid "Possessions"
+#~ msgstr "Predmety"
+
+#~ msgid "Keyword Presets"
+#~ msgstr "Predvolené kľúčové slová"
+
+#~ msgid "Favorite keywords list"
+#~ msgstr "Zoznam obľúbených kľúčových slov"
+
+#~ msgid "Edit favorite keywords list."
+#~ msgstr "Upraviť zoznam obľúbených kľúčových slov."
+
+#~ msgid "Add keywords to selected files, replacing existing ones"
+#~ msgstr "Pridať kľúčové slová do vybraných súborov, existujúce prepísať"
+
+#~ msgid "Add comment to selected files, replacing existing one"
+#~ msgstr "Pridať poznámku k vybraným súborom, existujúce poznámky sa prepíšu."
+
+# src/collect-dlg.c:165 src/collect-table.c:641
+#~ msgid "Save comment now"
+#~ msgstr "Uložiť poznámku"
+
+# src/utilops.c:496
+#~ msgid ""
+#~ "Unable to remove symbolic link:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nemožno odstrániť symbolický odkaz:\n"
+#~ "%s"
+
+# src/utilops.c:664 src/utilops.c:676
+#~ msgid "Unlink failed"
+#~ msgstr "Odpájanie sa nepodarilo"
+
+# src/ui_pathsel.c:517 src/utilops.c:1158
+#~ msgid ""
+#~ "Unable to create symbolic link:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nemožno vytvoriť symbolický odkaz:\n"
+#~ "%s"
+
+#~ msgid "Link failed"
+#~ msgstr "Pripojenie sa nepodarilo"
+
+#~ msgid "Link"
+#~ msgstr "Pripojiť"
+
+#~ msgid "Text to render"
+#~ msgstr "Text pre vykreslenie"
+
+#~ msgid "Background color"
+#~ msgstr "Farba pozadia"
+
+#~ msgid "Background color as a GdkColor"
+#~ msgstr "Farba pozadia podľa GdkColor"
+
+#~ msgid "Foreground color"
+#~ msgstr "Farba popredia"
+
+#~ msgid "Foreground color as a GdkColor"
+#~ msgstr "Farba popredia ako GdkColor"
+
+#~ msgid "Focus"
+#~ msgstr "Ohnisko"
+
+#~ msgid "Fixed width"
+#~ msgstr "Pevná šírka"
+
+#~ msgid "Width of cell"
+#~ msgstr "Šírka bunky"
+
+#~ msgid "Fixed height"
+#~ msgstr "Pevná výška"
+
+#~ msgid "Height of icon excluding text"
+#~ msgstr "Výška ikony okrem textu"
+
+#~ msgid "Background set"
+#~ msgstr "Pozadie nastavené"
+
+#~ msgid "Whether this tag affects the background color"
+#~ msgstr "Určuje, či táto značka ovplyvňuje farbu pozadia"
+
+#~ msgid "Foreground set"
+#~ msgstr "Popredie nastavené"
+
+#~ msgid "Whether this tag affects the foreground color"
+#~ msgstr "Určuje, či táto značka ovplyvňuje farbu popredia"
+
+# src/ui_pathsel.c:764
+#~ msgid "Show text"
+#~ msgstr "Zobraziť text"
+
+#~ msgid "Whether the text is displayed"
+#~ msgstr "Určuje, či sa zobrazuje text"
+
+# src/collect-table.c:82
+#~ msgid "%d images (%d)"
+#~ msgstr "%d obrázkov (%d)"
+
+# src/menu.c:748
+#~ msgid "_Properties"
+#~ msgstr "_Vlastnosti"
+
+# src/main.c:552
+#~ msgid "The Gimp"
+#~ msgstr "Gimp"
+
+# src/main.c:558
+#~ msgid "XV"
+#~ msgstr "XV"
+
+# src/main.c:561
+#~ msgid "Xpaint"
+#~ msgstr "Xpaint"
+
+#~ msgid "UFraw"
+#~ msgstr "UFraw"
+
+#~ msgid "Add XMP sidecar"
+#~ msgstr "Pridať XMP prívesok"
+
+# src/menu.c:572
+#~ msgid "Rotate jpeg clockwise"
+#~ msgstr "Otočiť jpeg v smere hodinových ručičiek"
+
+# src/menu.c:575
+#~ msgid "Rotate jpeg counterclockwise"
+#~ msgstr "Otočiť jpeg proti smeru hodinových ručičiek"
+
+#~ msgid "External Move command"
+#~ msgstr "Externý príkaz na presun"
+
+#~ msgid "External Rename command"
+#~ msgstr "Externý príkaz na premenovanie"
+
+# src/preferences.c:669
+#~ msgid "External Delete command"
+#~ msgstr "Externý príkaz pre odstránenie"
+
+#~ msgid "External New Folder command"
+#~ msgstr "Externý príkaz pre Nový priečinok"
+
+#~ msgid "logarithmical histogram on red"
+#~ msgstr "logaritmický histogram červenej"
+
+#~ msgid "logarithmical histogram on green"
+#~ msgstr "logaritmický histogram zelenej"
+
+#~ msgid "logarithmical histogram on blue"
+#~ msgstr "logaritmický histogram modrej"
+
+#~ msgid "logarithmical histogram on value"
+#~ msgstr "logaritmický histogram hodnoty"
+
+#~ msgid "logarithmical histogram on RGB"
+#~ msgstr "logaritmický histogram RGB"
+
+#~ msgid "logarithmical histogram on max value"
+#~ msgstr "logaritmický histogram maximálnej hodnoty"
+
+#~ msgid "linear histogram on max value"
+#~ msgstr "lineárny histogram maximálnej hodnoty"
+
+# src/dupe.c:1655 src/dupe.c:1944
+#~ msgid "Dimensions:"
+#~ msgstr "Rozmery:"
+
+#~ msgid "Transparent:"
+#~ msgstr "Priehľadnosť:"
+
+# src/dupe.c:1948
+#~ msgid "Compress ratio:"
+#~ msgstr "Kompresný pomer:"
+
+# src/ui_pathsel.c:799
+#~ msgid "File type:"
+#~ msgstr "Typ súboru:"
+
+#~ msgid "Owner:"
+#~ msgstr "Vlastník:"
+
+#~ msgid "Group:"
+#~ msgstr "Skupina:"
+
+#~ msgid "Image %d of %d"
+#~ msgstr "Obrázok %d z %d"
+
+#~ msgid "Image properties"
+#~ msgstr "Vlastnosti obrázku"
+
+#~ msgid ""
+#~ "This installation of %s was not built with support for color profiles."
+#~ msgstr "Táto inštalácia %s nebola vytvorená s podporou pre farebné profily."
+
+# src/menu.c:430 src/menu.c:457
+#~ msgid "_%d %s..."
+#~ msgstr "_%d %s..."
+
+# src/menu.c:432 src/menu.c:461
+#~ msgid "_%d (unknown)..."
+#~ msgstr "_%d (neznáme)..."
+
+# src/collect-table.c:78 src/menu.c:684
+#~ msgid "_%d empty"
+#~ msgstr "_%d prázdne"
+
+# src/menu.c:626
+#~ msgid "_Adjust"
+#~ msgstr "_Nastaviť"
+
+# src/ui_pathsel.c:507 src/ui_pathsel.c:759
+#~ msgid "_View Directory as"
+#~ msgstr "_Zobraziť priečinok ako"
+
+# src/dupe.c:2054 src/preferences.c:586
+#~ msgid "_Thumbnails"
+#~ msgstr "_Náhľady"
+
+# src/dupe.c:1655 src/dupe.c:1944
+#~ msgid "_Keywords"
+#~ msgstr "_Kľúčové slová"
+
+# src/menu.c:765
+#~ msgid "E_xif data"
+#~ msgstr "E_xif dáta"
+
+# src/menu.c:765
+#~ msgid "_List"
+#~ msgstr "_Zoznam"
+
+# src/menu.c:1075
+#~ msgid "Change to home folder"
+#~ msgstr "Návrat do domovského priečinka"
+
+# src/menu.c:1077
+#~ msgid "Refresh file list"
+#~ msgstr "Obnoviť zoznam súborov"
+
+# src/preferences.c:401
+#~ msgid "_Float"
+#~ msgstr "_Plávajúce"
+
+# src/menu.c:1089
+#~ msgid "Float Controls"
+#~ msgstr "Plávajúce ovládanie"
+
+#~ msgid "Never"
+#~ msgstr "Nikdy"
+
+#~ msgid "If set"
+#~ msgstr "Ak je nastavené"
+
+#~ msgid "Always"
+#~ msgstr "Vždy"
+
+#~ msgid "Startup"
+#~ msgstr "Štart"
+
+#~ msgid "Restore folder on startup"
+#~ msgstr "Obnoviť priečinok pri štarte"
+
+# src/preferences.c:610
+#~ msgid "Cache thumbnails into .thumbnails"
+#~ msgstr "Kešovať náhľady do .thumbnails"
+
+#~ msgid "Faster jpeg thumbnailing (may reduce quality)"
+#~ msgstr "Rýchlejšie jpeg náhľady (môže znížiť kvalitu)"
+
+#~ msgid "Two pass zooming"
+#~ msgstr "Dvojprechodová zmena mierky"
+
+# src/preferences.c:812
+#~ msgid "Filtering"
+#~ msgstr "Filtrovanie"
+
+# src/preferences.c:927
+#~ msgid "#"
+#~ msgstr "#"
+
+# src/preferences.c:933
+#~ msgid "Command Line"
+#~ msgstr "Príkazový riadok"
+
+# src/menu.c:748
+#~ msgid "Properties"
+#~ msgstr "Vlastnosti"
+
+#~ msgid "What to show in properties dialog:"
+#~ msgstr "V dialógu vlastností sa zobrazí:"
+
+#~ msgid "Advanced"
+#~ msgstr "Pokročilé"
+
+#~ msgid "Always show image overlay at startup"
+#~ msgstr "Vždy pri štarte zobraziť prekrytie obrázku"
+
+#~ msgid ""
+#~ "Show \"Copy path\" menu item which write the path of selected files to "
+#~ "clipboard"
+#~ msgstr ""
+#~ "Zobraziť v ponuke položku \"Kopírovať cestu\" ktorá uloží cestu vybraných "
+#~ "súborov do schránky"
+
+#~ msgid "Store metadata and cache files in source image's directory"
+#~ msgstr ""
+#~ "Uložiť metadáta a súbory vyrovnávacej pamäte do zdrojového priečinka "
+#~ "obrázkov"
+
+#~ msgid "Store keywords and comments as XMP tags in image files"
+#~ msgstr ""
+#~ "Ukladať kľúčové slová a poznámky ako XMP značky do zdrojových obrázkov"
+
+#~ msgid "Image read buffer size (bytes):"
+#~ msgstr "Veľkosť vyrovnávacej pamäte pre načítanie obrázkov (v bajtoch):"
+
+# src/utilops.c:491
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s\n"
+#~ "Nemožno kopírovať súbor:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
+
+# src/utilops.c:387 src/utilops.c:495
+#~ msgid "Error moving file"
+#~ msgstr "Chyba pri presúvaní súboru"
+
+# src/utilops.c:496
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s\n"
+#~ "Nemožno presunúť súbor:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
+
+# src/filelist.c:820 src/utilops.c:1047
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to rename file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s\n"
+#~ "Nemožno premenovať súbor:\n"
+#~ "%s\n"
+#~ "na:\n"
+#~ "%s"
+
+# src/utilops.c:339 src/utilops.c:459 src/utilops.c:826 src/utilops.c:1032
+#~ msgid "Overwrite file?"
+#~ msgstr "Prepísať súbor?"
+
+# src/utilops.c:339 src/utilops.c:459 src/utilops.c:826 src/utilops.c:1032
+#~ msgid "Overwrite _all"
+#~ msgstr "Prepísať _všetky"
+
+# src/utilops.c:345
+#~ msgid "S_kip all"
+#~ msgstr "Pres_kočiť všetky"
+
+# src/utilops.c:345
+#~ msgid "_Skip"
+#~ msgstr "Pre_skočiť"
+
+# src/utilops.c:387 src/utilops.c:495
+#~ msgid "Existing file"
+#~ msgstr "Existujúci súbor"
+
+#~ msgid "New file"
+#~ msgstr "Nový súbor"
+
+# src/utilops.c:316
+#~ msgid "Source to copy matches destination"
+#~ msgstr "Zdroj pre kopírovanie sa zhoduje s cieľom"
+
+# src/utilops.c:317
+#~ msgid ""
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to itself."
+#~ msgstr ""
+#~ "Nemožno kopírovať súbor:\n"
+#~ "%s\n"
+#~ "do seba."
 
-# src/utilops.c:1144
-#: src/utilops.c:2748 src/utilops.c:2841
-#, c-format
-msgid ""
-"The folder:\n"
-"%s\n"
-"already exists."
-msgstr ""
-"Prieèinok:\n"
-"%s\n"
-"u¾ existuje."
+# src/utilops.c:321
+#~ msgid "Source to move matches destination"
+#~ msgstr "Zdroj pre presúvanie sa zhoduje s cieľom"
 
-# src/preferences.c:368
-#: src/utilops.c:2749 src/utilops.c:2842
-msgid "Folder exists"
-msgstr "Prieèinok existuje"
+# src/utilops.c:322
+#~ msgid ""
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to itself."
+#~ msgstr ""
+#~ "Nemožno presunúť súbor:\n"
+#~ "%s\n"
+#~ "do seba."
 
-# src/utilops.c:1150
-#: src/utilops.c:2754 src/utilops.c:2850
-#, c-format
-msgid ""
-"The path:\n"
-"%s\n"
-"already exists as a file."
-msgstr ""
-"Cesta:\n"
-"%s\n"
-"u¾ existuje ako súbor."
+# src/utilops.c:383
+#~ msgid ""
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s\n"
+#~ "during multiple file copy."
+#~ msgstr ""
+#~ "Nemožno kopírovať súbor:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s\n"
+#~ "počas viacnásobného kopírovania."
 
-# src/utilops.c:1211
-#: src/utilops.c:2812
-#, c-format
-msgid ""
-"Create folder in:\n"
-"%s\n"
-"named:"
-msgstr ""
-"Vytvori» prieèinok v:\n"
-"%s\n"
-"nazva» ho:"
+# src/utilops.c:388
+#~ msgid ""
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s\n"
+#~ "during multiple file move."
+#~ msgstr ""
+#~ "Nemožno presunúť súbor:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s\n"
+#~ "počas viacnásobného presúvania."
 
-# src/utilops.c:1090
-#: src/utilops.c:2851 src/utilops.c:2860
-msgid "Rename failed"
-msgstr "Premenovanie sa nepodarilo"
+# src/utilops.c:450
+#~ msgid "Source matches destination"
+#~ msgstr "Zdroj zodpovedá cieľu"
 
-#: src/utilops.c:2967
-#, fuzzy
-msgid "Location"
-msgstr "Umiestnenie:"
+# src/utilops.c:491
+#~ msgid ""
+#~ "Unable to copy file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nemožno kopírovať súbor:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
 
-# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
-#: src/utilops.c:3145
-#, fuzzy, c-format
-msgid ""
-"Unable to delete folder:\n"
-"\n"
-"%s"
-msgstr ""
-"Nemo¾no zmaza» súbor:\n"
-"%s"
+# src/utilops.c:496
+#~ msgid ""
+#~ "Unable to move file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nemožno presunúť súbor:\n"
+#~ "%s\n"
+#~ "do:\n"
+#~ "%s"
 
-#: src/utilops.c:3152
-#, c-format
-msgid ""
-"Removal of folder contents failed at this file:\n"
-"\n"
-"%s"
-msgstr ""
+# src/utilops.c:539
+#~ msgid "Invalid destination"
+#~ msgstr "Chybný cieľ"
 
-# src/collect-table.c:628 src/dupe.c:1393 src/dupe.c:1565
-#: src/utilops.c:3207 src/utilops.c:3291
-#, fuzzy
-msgid "Delete folder"
-msgstr "Vybra» prieèinok"
+# src/utilops.c:540
+#~ msgid ""
+#~ "When operating with multiple files, please select\n"
+#~ "a folder, not a file."
+#~ msgstr ""
+#~ "Keď narábate s viacerými súbormi, prosím vyberte\n"
+#~ "nejaký priečinok, nie súbor."
 
-#: src/utilops.c:3211
-#, c-format
-msgid ""
-"This will delete the symbolic link:\n"
-"\n"
-"%s\n"
-"\n"
-"The folder this link points to will not be deleted."
-msgstr ""
+# src/utilops.c:544
+#~ msgid "Please select an existing folder."
+#~ msgstr "Prosím vyberte nejaký existujúci priečinok."
 
-#: src/utilops.c:3215
-msgid "Delete symbolic link to folder?"
-msgstr ""
+# src/utilops.c:596
+#~ msgid "Copy multiple files"
+#~ msgstr "Kopírovať viacero súborov"
 
-# src/utilops.c:322
-#: src/utilops.c:3230
-#, fuzzy, c-format
-msgid ""
-"Unable to remove folder %s\n"
-"Permissions do not allow writing to the folder."
-msgstr "Nemo¾no vybra» starý súbor z ko¹a"
+# src/utilops.c:605
+#~ msgid "Move multiple files"
+#~ msgstr "Presunúť viacero súborov"
 
-# src/ui_pathsel.c:517 src/utilops.c:1158
-#: src/utilops.c:3242
-#, fuzzy, c-format
-msgid "Unable to list contents of folder %s"
-msgstr ""
-"Nemo¾no vytvori» prieèinok:\n"
-"%s"
+# src/utilops.c:980
+#~ msgid "File name:"
+#~ msgstr "Názov súboru:"
 
-# src/collect-dlg.c:59
-#: src/utilops.c:3256 src/utilops.c:3264
-#, fuzzy
-msgid "Folder contains subfolders"
-msgstr "Vrátane podprieèinkov"
+# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
+#~ msgid ""
+#~ "\n"
+#~ "Unable to delete file by external command:\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Nemožno odstrániť súbor externým príkazom:\n"
 
-#: src/utilops.c:3260
-#, c-format
-msgid ""
-"Unable to delete the folder:\n"
-"\n"
-"%s\n"
-"\n"
-"This folder contains subfolders which must be moved before it can be deleted."
-msgstr ""
+# src/utilops.c:663
+#~ msgid ""
+#~ "Unable to delete file:\n"
+#~ " %s\n"
+#~ " Continue multiple delete operation?"
+#~ msgstr ""
+#~ "Nemožno odstrániť súbor:\n"
+#~ " %s\n"
+#~ " Pokračovať s viacnásobnou operáciou mazania?"
 
-# src/preferences.c:368
-#: src/utilops.c:3268
-#, fuzzy
-msgid "Subfolders:"
-msgstr "prieèinok"
+#~ msgid "File %d of %d"
+#~ msgstr "Súbor %d z %d"
 
-#: src/utilops.c:3295
-#, c-format
-msgid ""
-"This will delete the folder:\n"
-"\n"
-"%s\n"
-"\n"
-"The contents of this folder will also be deleted."
-msgstr ""
+# src/utilops.c:942
+#~ msgid "Delete multiple files"
+#~ msgstr "Odstrániť viacero súborov"
 
-# src/ui_pathsel.c:398 src/utilops.c:760
-#: src/utilops.c:3299
-#, fuzzy
-msgid "Delete folder?"
-msgstr "Zmaza» súbor?"
+# src/dupe.c:67 src/dupe.c:1449
+#~ msgid "Review %d files"
+#~ msgstr "Prehľad %d súborov"
 
-# src/menu.c:776
-#: src/utilops.c:3303
-#, fuzzy
-msgid "Contents:"
-msgstr "Obsah"
+# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
+#~ msgid ""
+#~ "%s\n"
+#~ "Unable to delete file by external command:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s\n"
+#~ "Nemožno odstrániť súbor externým príkazom:\n"
+#~ "%s"
 
-# src/menu.c:768
-#: src/view_dir.c:30
-#, fuzzy
-msgid "_Tree"
-msgstr "S_trom"
+# src/ui_pathsel.c:398 src/utilops.c:760
+#~ msgid "Delete file?"
+#~ msgstr "Odstrániť súbor?"
 
-#: src/view_dir.c:502
-msgid "new_folder"
-msgstr "nový prieèinok"
+#~ msgid "Replace existing file by renaming new file."
+#~ msgstr "Prepísať existujúci súbor premenovaním nového súboru."
 
-#: src/view_dir.c:587
-msgid "_Up to parent"
-msgstr "O stupeò vy¹¹ie"
+# src/utilops.c:842
+#~ msgid ""
+#~ "Unable to rename file:\n"
+#~ "%s\n"
+#~ " to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nemožno premenovať súbor:\n"
+#~ "%s\n"
+#~ " na:\n"
+#~ "%s"
 
-# src/menu.c:879
-#: src/view_dir.c:592
-msgid "_Slideshow"
-msgstr "Prezentácia"
+#~ msgid ""
+#~ "Format must include at least one of the symbol characters '*' or '#'.\n"
+#~ msgstr "Formát musí obsahovať najmenej jeden zo znakov  '*' alebo '#'.\n"
 
-# src/menu.c:881
-#: src/view_dir.c:594
-msgid "Slideshow recursive"
-msgstr "Prezentácia rekurzívne"
+#~ msgid ""
+#~ "Can not auto rename with the selected\n"
+#~ "number set, one or more files exist that\n"
+#~ "match the resulting name list.\n"
+#~ msgstr ""
+#~ "Nemôžem automaticky premenovať s vybranou\n"
+#~ "číselnou sadou, pretože existujú nejaké súbory,\n"
+#~ "ktorých mená sa nachádzajú vo výslednom zozname.\n"
 
-# src/collect-table.c:644 src/menu.c:885
-#: src/view_dir.c:598
-msgid "Find _duplicates..."
-msgstr "Nájs» _duplikáty..."
+# src/ui_pathsel.c:313
+#~ msgid ""
+#~ "Failed to rename\n"
+#~ "%s\n"
+#~ "The number was %d."
+#~ msgstr ""
+#~ "Premenovanie sa nepodarilo\n"
+#~ "%s\n"
+#~ "Číslo bolo: %d."
 
-# src/menu.c:887
-#: src/view_dir.c:600
-msgid "Find duplicates recursive..."
-msgstr "Nájs» duplikáty rekurzívne..."
+# src/utilops.c:942
+#~ msgid "Rename multiple files"
+#~ msgstr "Premenovať viacero súborov"
 
-#: src/view_dir.c:605
-msgid "_New folder..."
-msgstr "_Nový prieèinok..."
+#~ msgid "Original Name"
+#~ msgstr "Pôvodný názov"
 
-# src/menu.c:753
-#: src/view_dir.c:619
-#, fuzzy
-msgid "_View as"
-msgstr "Zobrazi»"
+# src/filelist.c:820 src/utilops.c:1047
+#~ msgid ""
+#~ "Unable to rename file:\n"
+#~ "%s\n"
+#~ "to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nemožno premenovať súbor:\n"
+#~ "%s\n"
+#~ "na:\n"
+#~ "%s"
 
-# src/ui_pathsel.c:764
-#: src/view_dir.c:631
-#, fuzzy
-msgid "Show _hidden files"
-msgstr "Ukáza» skryté"
+# src/utilops.c:1144
+#~ msgid ""
+#~ "The folder:\n"
+#~ "%s\n"
+#~ "already exists."
+#~ msgstr ""
+#~ "Priečinok:\n"
+#~ "%s\n"
+#~ "už existuje."
 
-# src/menu.c:891 src/menu.c:920
-#: src/view_dir.c:634 src/view_file.c:606
-msgid "Re_fresh"
-msgstr "Obnovi»"
+# src/utilops.c:1150
+#~ msgid ""
+#~ "The path:\n"
+#~ "%s\n"
+#~ "already exists as a file."
+#~ msgstr ""
+#~ "Cesta:\n"
+#~ "%s\n"
+#~ "už existuje ako súbor."
 
-# src/menu.c:559
-#: src/view_file.c:588
-msgid "_Sort"
-msgstr "U_sporiada»"
+# src/utilops.c:1211
+#~ msgid ""
+#~ "Create folder in:\n"
+#~ "%s\n"
+#~ "named:"
+#~ msgstr ""
+#~ "Vytvoriť priečinok v:\n"
+#~ "%s\n"
+#~ "nazvať ho:"
 
-# src/dupe.c:1655 src/dupe.c:1944
-#: src/view_file.c:591
-msgid "View as _icons"
-msgstr "Zobrazi» ako _ikony"
+# src/ui_pathsel.c:343 src/utilops.c:675 src/utilops.c:727
+#~ msgid ""
+#~ "Unable to delete folder:\n"
+#~ "\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Nemožno odstrániť priečinok:\n"
+#~ "\n"
+#~ "%s"
 
-# src/preferences.c:603
-#: src/view_file.c:597
-msgid "Show _thumbnails"
-msgstr "Zobrazi» minia_túry"
+# src/menu.c:776
+#~ msgid "Contents:"
+#~ msgstr "Obsah:"
 
-# src/filelist.c:808
-#: src/view_file_list.c:390
-#, c-format
-msgid ""
-"Invalid file name:\n"
-"%s"
-msgstr ""
-"Nesprávne meno súboru:\n"
-"%s"
+#~ msgid "new_folder"
+#~ msgstr "nový_priečinok"
 
-#: src/view_file_list.c:1821
-msgid "SC"
-msgstr ""
+# src/menu.c:753
+#~ msgid "_View as"
+#~ msgstr "_Zobraziť ako"
 
-# src/menu.c:771
-#: src/window.c:226
-msgid "Help"
-msgstr "Pomoc"
+#~ msgid "SC"
+#~ msgstr "SC"
 
 # src/menu.c:1075
 #~ msgid "Change to folder:"
-#~ msgstr "Vstúpi» do adresára:"
+#~ msgstr "Vstúpiť do adresára:"
 
 # src/img-view.c:837 src/menu.c:1001
 #, fuzzy
 #~ msgid "Reset fullscreen info string"
-#~ msgstr "Celooobrazovkový mód"
+#~ msgstr "Celooobrazovkový mód"
 
 #, fuzzy
 #~ msgid ""
 #~ "This will reset the fullscreen info string to the default.\n"
 #~ "Continue?"
 #~ msgstr ""
-#~ "Chystám sa nastavi» filtre na prednastavené hodnoty.\n"
-#~ "Pokraèova»?"
+#~ "Chystám sa nastaviť filtre na prednastavené hodnoty.\n"
+#~ "Pokračovať?"
 
 # src/img-view.c:833 src/menu.c:1005
 #, fuzzy
 #~ msgid "Always show fullscreen info"
-#~ msgstr "Ukonèi» celoobrazovkový re¾im"
+#~ msgstr "UkonÄ\8diÅ¥ celoobrazovkový režim"
 
 # src/img-view.c:837 src/menu.c:1001
 #, fuzzy
 #~ msgid "Fullscreen info string"
-#~ msgstr "Celooobrazovkový mód"
+#~ msgstr "Celooobrazovkový mód"
 
 # src/menu.c:765
 #, fuzzy
 #~ msgid "List"
 #~ msgstr "Zoznam"
 
-# src/menu.c:761
-#~ msgid "View as _tree"
-#~ msgstr "Zobrazi» ako s_trom"
-
 # src/preferences.c:821
 #~ msgid "Show entries that begin with a dot"
-#~ msgstr "Zobrazi» polo¾ky ktoré zaèínajú bodkou"
+#~ msgstr "Zobraziť položky ktoré začínajú bodkou"
 
 # src/dupe.c:1968
 #~ msgid "Find duplicates - Geeqie"
-#~ msgstr "Nájs» duplikáty - Geeqie"
-
-# src/fullscreen.c:117
-#~ msgid "Geeqie full screen"
-#~ msgstr "Geeqie: celoobrazovkový re¾im"
+#~ msgstr "Nájsť duplikáty - Geeqie"
 
 # src/window.c:234
 #~ msgid "Geeqie Tools"
-#~ msgstr "Geeqie : Nástroje"
+#~ msgstr "Geeqie : Nástroje"
 
 # src/main.c:129
 #~ msgid "Help - Geeqie"
@@ -5238,14 +7083,10 @@ msgstr "Pomoc"
 #~ msgid "Geeqie - exit"
 #~ msgstr "Geeqie - koniec"
 
-# src/img-view.c:559 src/window.c:533
-#~ msgid "Quit Geeqie"
-#~ msgstr "Skonèi» Geeqie"
-
 # src/img-view.c:559 src/window.c:533
 #, fuzzy
 #~ msgid "Pan View - Geeqie"
-#~ msgstr "Tlaè - Geeqie"
+#~ msgstr "Tlač - Geeqie"
 
 # src/img-view.c:559 src/window.c:533
 #~ msgid "About - Geeqie"
@@ -5253,23 +7094,23 @@ msgstr "Pomoc"
 
 # src/img-view.c:559 src/window.c:533
 #~ msgid "Print - Geeqie"
-#~ msgstr "Tlaè - Geeqie"
+#~ msgstr "Tlač - Geeqie"
 
 # src/main.c:129
 #~ msgid "Copy - Geeqie"
-#~ msgstr "Kopírovanie - Geeqie"
+#~ msgstr "Kopírovanie - Geeqie"
 
 # src/main.c:129
 #~ msgid "Move - Geeqie"
-#~ msgstr "Presunú» - Geeqie"
+#~ msgstr "Presunúť - Geeqie"
 
 # src/utilops.c:707
 #~ msgid "Delete files - Geeqie"
-#~ msgstr "Mazanie súborov - Geeqie"
+#~ msgstr "Mazanie súborov - Geeqie"
 
 # src/ui_pathsel.c:398 src/utilops.c:760
 #~ msgid "Delete file - Geeqie"
-#~ msgstr "Zmaza» súbor - Geeqie"
+#~ msgstr "Zmazať súbor - Geeqie"
 
 # src/main.c:129
 #~ msgid "Rename - Geeqie"
@@ -5277,274 +7118,274 @@ msgstr "Pomoc"
 
 # src/main.c:129
 #~ msgid "New folder - Geeqie"
-#~ msgstr "Nový prieèinok - Geeqie"
+#~ msgstr "Nový priečinok - Geeqie"
 
 # src/menu.c:710
 #~ msgid "/File/tear1"
-#~ msgstr "/Súbor/tear1"
+#~ msgstr "/Súbor/tear1"
 
 # src/menu.c:711
 #~ msgid "/File/_New collection"
-#~ msgstr "/Súbor/_Nová zbierka"
+#~ msgstr "/Súbor/_Nová zbierka"
 
 # src/menu.c:712
 #~ msgid "/File/_Open collection..."
-#~ msgstr "/Súbor/_Otvori» zbierku"
+#~ msgstr "/Súbor/_Otvoriť zbierku"
 
 # src/menu.c:714
 #~ msgid "/File/sep1"
-#~ msgstr "/Súbor/sep1"
+#~ msgstr "/Súbor/sep1"
 
 # src/menu.c:721
 #, fuzzy
 #~ msgid "/File/_Search..."
-#~ msgstr "/Súbor/P_remenova»..."
+#~ msgstr "/Súbor/P_remenovať..."
 
 # src/menu.c:715
 #~ msgid "/File/_Find duplicates..."
-#~ msgstr "/Súbor/Nájs» duplikáty"
+#~ msgstr "/Súbor/Nájsť duplikáty"
 
 # src/menu.c:716
 #~ msgid "/File/sep2"
-#~ msgstr "/Súbor/sep2"
+#~ msgstr "/Súbor/sep2"
 
 # src/menu.c:721
 #, fuzzy
 #~ msgid "/File/_Print..."
-#~ msgstr "/Súbor/P_remenova»..."
+#~ msgstr "/Súbor/P_remenovať..."
 
 # src/menu.c:722
 #~ msgid "/File/N_ew folder..."
-#~ msgstr "/Súbor/Nový adresár..."
+#~ msgstr "/Súbor/Nový adresár..."
 
 # src/menu.c:718
 #~ msgid "/File/sep3"
-#~ msgstr "/Súbor/sep3"
+#~ msgstr "/Súbor/sep3"
 
 # src/menu.c:719
 #~ msgid "/File/_Copy..."
-#~ msgstr "/Súbor/K_opírova»..."
+#~ msgstr "/Súbor/K_opírovať..."
 
 # src/menu.c:720
 #~ msgid "/File/_Move..."
-#~ msgstr "/Súbor/_Presunú»..."
+#~ msgstr "/Súbor/_Presunúť..."
 
 # src/menu.c:721
 #~ msgid "/File/_Rename..."
-#~ msgstr "/Súbor/P_remenova»..."
+#~ msgstr "/Súbor/P_remenovať..."
 
 # src/menu.c:722
 #~ msgid "/File/_Delete..."
-#~ msgstr "/Súbor/_Vymaza»..."
+#~ msgstr "/Súbor/_Vymazať..."
 
 # src/menu.c:723
 #~ msgid "/File/sep4"
-#~ msgstr "/Súbor/sep4"
+#~ msgstr "/Súbor/sep4"
 
 # src/dupe.c:1415 src/dupe.c:1573 src/img-view.c:841
 #~ msgid "/File/C_lose window"
-#~ msgstr "/File/Zavrie» okno"
+#~ msgstr "/File/Zavrieť okno"
 
 # src/menu.c:724
 #, fuzzy
 #~ msgid "/File/_Quit"
-#~ msgstr "/Súbor/_Koniec"
+#~ msgstr "/Súbor/_Koniec"
 
 # src/menu.c:726
 #~ msgid "/_Edit"
-#~ msgstr "/_Upravi»"
+#~ msgstr "/_Upraviť"
 
 # src/menu.c:727
 #~ msgid "/Edit/tear1"
-#~ msgstr "/Upravi»/tear1"
+#~ msgstr "/Upraviť/tear1"
 
 # src/menu.c:728
 #~ msgid "/Edit/editor1"
-#~ msgstr "/Upravi»/editor1"
+#~ msgstr "/Upraviť/editor1"
 
 # src/menu.c:729
 #~ msgid "/Edit/editor2"
-#~ msgstr "/Upravi»/editor2"
+#~ msgstr "/Upraviť/editor2"
 
 # src/menu.c:730
 #~ msgid "/Edit/editor3"
-#~ msgstr "/Upravi»/editor3"
+#~ msgstr "/Upraviť/editor3"
 
 # src/menu.c:731
 #~ msgid "/Edit/editor4"
-#~ msgstr "/Upravi»/editor4"
+#~ msgstr "/Upraviť/editor4"
 
 # src/menu.c:732
 #~ msgid "/Edit/editor5"
-#~ msgstr "/Upravi»/editor5"
+#~ msgstr "/Upraviť/editor5"
 
 # src/menu.c:733
 #~ msgid "/Edit/editor6"
-#~ msgstr "/Upravi»/editor6"
+#~ msgstr "/Upraviť/editor6"
 
 # src/menu.c:734
 #~ msgid "/Edit/editor7"
-#~ msgstr "/Upravi»/editor7"
+#~ msgstr "/Upraviť/editor7"
 
 # src/menu.c:735
 #~ msgid "/Edit/editor8"
-#~ msgstr "/Upravi»/editor8"
+#~ msgstr "/Upraviť/editor8"
 
 # src/menu.c:728
 #~ msgid "/Edit/editor9"
-#~ msgstr "/Upravi»/editor1"
+#~ msgstr "/Upraviť/editor1"
 
 # src/menu.c:728
 #~ msgid "/Edit/editor0"
-#~ msgstr "/Upravi»/editor0"
+#~ msgstr "/Upraviť/editor0"
 
 # src/menu.c:736
 #~ msgid "/Edit/sep1"
-#~ msgstr "/Upravi»/sep1"
+#~ msgstr "/Upraviť/sep1"
 
 # src/menu.c:737
 #~ msgid "/Edit/_Adjust"
-#~ msgstr "/Upravi»/N_astavi»"
+#~ msgstr "/Upraviť/N_astaviť"
 
 # src/menu.c:748
 #~ msgid "/Edit/_Properties"
-#~ msgstr "/Upravi»/_Vlastnosti"
+#~ msgstr "/Upraviť/_Vlastnosti"
 
 # src/menu.c:738
 #~ msgid "/Edit/Adjust/tear1"
-#~ msgstr "/Upravi»/Nastavi»/tear1"
+#~ msgstr "/Upraviť/Nastaviť/tear1"
 
 # src/menu.c:739
 #~ msgid "/Edit/Adjust/_Rotate clockwise"
-#~ msgstr "/Upravi»/Nastavi»/Rotova» vp_ravo"
+#~ msgstr "/Upraviť/Nastaviť/Rotovať vp_ravo"
 
 # src/menu.c:740
 #~ msgid "/Edit/Adjust/Rotate _counterclockwise"
-#~ msgstr "/Upravi»/Nastavi»/Rotova» _vµavo"
+#~ msgstr "/Upraviť/Nastaviť/Rotovať _vľavo"
 
 # src/menu.c:741
 #~ msgid "/Edit/Adjust/Rotate 1_80"
-#~ msgstr "/Upravi»/Nastavi»/Rotova» 1_80"
+#~ msgstr "/Upraviť/Nastaviť/Rotovať 1_80"
 
 # src/menu.c:742
 #~ msgid "/Edit/Adjust/_Mirror"
-#~ msgstr "/Upravi»/Nastavi»/_Zrkadli»"
+#~ msgstr "/Upraviť/Nastaviť/_Zrkadliť"
 
 # src/menu.c:743
 #~ msgid "/Edit/Adjust/_Flip"
-#~ msgstr "/Upravi»/Nastavi»/_Preklopi»"
+#~ msgstr "/Upraviť/Nastaviť/_Preklopiť"
 
 # src/menu.c:744
 #~ msgid "/Edit/sep2"
-#~ msgstr "/Upravi»/sep2"
+#~ msgstr "/Upraviť/sep2"
 
 # src/menu.c:745
 #~ msgid "/Edit/Select _all"
-#~ msgstr "/Upravi»/Vybra» _v¹etko"
+#~ msgstr "/Upraviť/Vybrať _všetko"
 
 # src/menu.c:746
 #~ msgid "/Edit/Select _none"
-#~ msgstr "/Upravi»/Vybra» n_iè"
+#~ msgstr "/Upraviť/Vybrať n_ič"
 
 # src/menu.c:747
 #~ msgid "/Edit/sep3"
-#~ msgstr "/Upravi»/sep3"
+#~ msgstr "/Upraviť/sep3"
 
 # src/menu.c:748
 #~ msgid "/Edit/_Options..."
-#~ msgstr "/Upravi»/V_oµby..."
+#~ msgstr "/Upraviť/V_oľby..."
 
 # src/menu.c:750
 #~ msgid "/Edit/sep4"
-#~ msgstr "/Upravi»/sep4"
+#~ msgstr "/Upraviť/sep4"
 
 # src/menu.c:751
 #~ msgid "/Edit/Set as _wallpaper"
-#~ msgstr "/Upravi»/Nastavi» ako _pozadie plochy"
+#~ msgstr "/Upraviť/Nastaviť ako _pozadie plochy"
 
 # src/menu.c:753
 #~ msgid "/_View"
-#~ msgstr "/_Zobrazi»"
+#~ msgstr "/_Zobraziť"
 
 # src/menu.c:754
 #~ msgid "/View/tear1"
-#~ msgstr "/Zobrazi»/tear1"
+#~ msgstr "/Zobraziť/tear1"
 
 # src/menu.c:755
 #~ msgid "/View/Zoom _in"
-#~ msgstr "/Zobrazi»/Priblí¾i»"
+#~ msgstr "/Zobraziť/Priblížiť"
 
 # src/menu.c:756
 #~ msgid "/View/Zoom _out"
-#~ msgstr "/Zobrazi»/Oddiali»"
+#~ msgstr "/Zobraziť/Oddialiť"
 
 # src/menu.c:757
 #~ msgid "/View/Zoom _1:1"
-#~ msgstr "/Zobrazi»/Zobrazenie _1:1"
+#~ msgstr "/Zobraziť/Zobrazenie _1:1"
 
 # src/menu.c:759
 #~ msgid "/View/sep1"
-#~ msgstr "/Zobrazi»/sep1"
+#~ msgstr "/Zobraziť/sep1"
 
 # src/menu.c:762
 #~ msgid "/View/_Thumbnails"
-#~ msgstr "/Zobrazi»/M_iniatúry"
+#~ msgstr "/Zobraziť/M_iniatúry"
 
 # src/dupe.c:1655 src/dupe.c:1944
 #~ msgid "/View/I_cons"
-#~ msgstr "/Zobrazi»/Ikony"
+#~ msgstr "/Zobraziť/Ikony"
 
 # src/menu.c:764
 #~ msgid "/View/sep2"
-#~ msgstr "/Zobrazi»/sep2"
+#~ msgstr "/Zobraziť/sep2"
 
 # src/menu.c:761
 #~ msgid "/View/F_ull screen"
-#~ msgstr "/Zobrazi»/_Celá obrazovka"
+#~ msgstr "/Zobraziť/_Celá obrazovka"
 
 # src/menu.c:768
 #~ msgid "/View/sep3"
-#~ msgstr "/Zobrazi»/sep3"
+#~ msgstr "/Zobraziť/sep3"
 
 # src/menu.c:767
 #~ msgid "/View/_Hide file list"
-#~ msgstr "/Zobrazi»/S_kry» zoznam súborov"
+#~ msgstr "/Zobraziť/S_kryť zoznam súborov"
 
 # src/menu.c:759
 #~ msgid "/View/sep4"
-#~ msgstr "/Zobrazi»/sep1"
+#~ msgstr "/Zobraziť/sep1"
 
 # src/menu.c:755
 #~ msgid "/View/Sort _manager"
-#~ msgstr "/Zobrazi»/Správca triedenia"
+#~ msgstr "/Zobraziť/Správca triedenia"
 
 # src/menu.c:759
 #~ msgid "/View/sep5"
-#~ msgstr "/Zobrazi»/sep5"
+#~ msgstr "/Zobraziť/sep5"
 
 # src/menu.c:769
 #~ msgid "/View/Toggle _slideshow"
-#~ msgstr "/Zobrazi»/Prepnú» prezentáciu"
+#~ msgstr "/Zobraziť/Prepnúť prezentáciu"
 
 # src/menu.c:765
 #~ msgid "/View/_Refresh Lists"
-#~ msgstr "/Zobrazi»/_Obnovi» zoznamy"
+#~ msgstr "/Zobraziť/_Obnoviť zoznamy"
 
 # src/menu.c:772
 #~ msgid "/Help/tear1"
-#~ msgstr "/Pomocník/tear1"
+#~ msgstr "/Pomocník/tear1"
 
 # src/menu.c:775
 #~ msgid "/Help/sep1"
-#~ msgstr "/Pomocník/sep1"
+#~ msgstr "/Pomocník/sep1"
 
 # src/preferences.c:507
 #~ msgid "Geeqie configuration"
-#~ msgstr "Konfigurácia Geeqie"
+#~ msgstr "Konfigurácia Geeqie"
 
 # src/menu.c:749
 #~ msgid "/Edit/_Remove old thumbnails"
-#~ msgstr "/Upravi»/Odst_ráni» staré miniatúry"
+#~ msgstr "/Upraviť/Odst_rániť staré miniatúry"
 
 # src/dupe.c:1657 src/dupe.c:1945
 #, fuzzy
@@ -5553,31 +7394,31 @@ msgstr "Pomoc"
 
 # src/collect-dlg.c:167 src/collect.c:1052
 #~ msgid "Save"
-#~ msgstr "Ulo¾i»"
+#~ msgstr "Uložiť"
 
 # src/collect-dlg.c:68
 #~ msgid ""
 #~ "Overwrite collection file:\n"
 #~ "%s"
 #~ msgstr ""
-#~ "Prepísa» súbor zbierky:\n"
+#~ "Prepísať súbor zbierky:\n"
 #~ "%s"
 
 # src/collect-dlg.c:166
 #~ msgid "Save collection as:"
-#~ msgstr "Ulo¾i» zbierku ako:"
+#~ msgstr "Uložiť zbierku ako:"
 
 # src/collect-dlg.c:173
 #~ msgid "Open collection from:"
-#~ msgstr "Otvori» zbierku z:"
+#~ msgstr "Otvoriť zbierku z:"
 
 # src/collect-dlg.c:174
 #~ msgid "Open"
-#~ msgstr "Otvori»"
+#~ msgstr "Otvoriť"
 
 # src/collect-dlg.c:181
 #~ msgid "Append collection from:"
-#~ msgstr "Pripoji» zbierku z:"
+#~ msgstr "Pripojiť zbierku z:"
 
 # src/main.c:622
 #~ msgid "Exit"
@@ -5591,44 +7432,40 @@ msgstr "Pomoc"
 # src/collect-dlg.c:59
 #, fuzzy
 #~ msgid "Initial folder"
-#~ msgstr "Nesprávne meno súboru"
+#~ msgstr "Nesprávne meno súboru"
 
 # src/preferences.c:569
 #, fuzzy
 #~ msgid "On startup, change to this folder:"
-#~ msgstr "Pri ¹tarte nastavi» sa do adresára:"
+#~ msgstr "Pri štarte nastaviť sa do adresára:"
 
 # src/preferences.c:695 src/preferences.c:697
 #~ msgid "Zoom (scaling):"
-#~ msgstr "Priblí¾enie (zmena mierky):"
+#~ msgstr "Priblíženie (zmena mierky):"
 
 # src/preferences.c:805
 #~ msgid "Place dialogs under mouse"
-#~ msgstr "Umiestòova» dialógy pod ukazovateµ my¹i"
+#~ msgstr "Umiestňovať dialógy pod ukazovateľ myši"
 
 # src/preferences.c:825
 #~ msgid "Include files of type:"
-#~ msgstr "Zahrnú» súbory typu:"
-
-# src/collect-table.c:622 src/dupe.c:1410 src/dupe.c:1568
-#~ msgid "Remove"
-#~ msgstr "Vymaza»"
+#~ msgstr "Zahrnúť súbory typu:"
 
 #~ msgid "Add"
-#~ msgstr "Prida»"
+#~ msgstr "Pridať"
 
 # src/preferences.c:368
 #, fuzzy
 #~ msgid "Point size:"
-#~ msgstr "Veµkos» súboru:"
+#~ msgstr "Veľkosť súboru:"
 
 #, fuzzy
 #~ msgid "Width:"
-#~ msgstr "©írka"
+#~ msgstr "Šírka"
 
 #, fuzzy
 #~ msgid "Height:"
-#~ msgstr "Vý¹ka"
+#~ msgstr "Výška"
 
 # src/utilops.c:338
 #~ msgid ""
@@ -5637,18 +7474,18 @@ msgstr "Pomoc"
 #~ " with:\n"
 #~ " %s"
 #~ msgstr ""
-#~ "Prepísa» súbor:\n"
+#~ "Prepísať súbor:\n"
 #~ " %s\n"
-#~ " súborom:\n"
+#~ " súborom:\n"
 #~ " %s"
 
 # src/utilops.c:343
 #~ msgid "Yes"
-#~ msgstr "Áno"
+#~ msgstr "Áno"
 
 # src/utilops.c:344
 #~ msgid "Yes to all"
-#~ msgstr "Áno pre v¹etky"
+#~ msgstr "Áno pre všetky"
 
 # src/utilops.c:458
 #~ msgid ""
@@ -5657,9 +7494,9 @@ msgstr "Pomoc"
 #~ " with:\n"
 #~ "%s"
 #~ msgstr ""
-#~ "Prepísa» súbor:\n"
+#~ "Prepísať súbor:\n"
 #~ "%s\n"
-#~ " súborom:\n"
+#~ " súborom:\n"
 #~ "%s"
 
 # src/utilops.c:594
@@ -5668,7 +7505,7 @@ msgstr "Pomoc"
 #~ "%s\n"
 #~ "to:"
 #~ msgstr ""
-#~ "Kopírova» súbor:\n"
+#~ "Kopírovať súbor:\n"
 #~ "%s\n"
 #~ "do:"
 
@@ -5678,13 +7515,13 @@ msgstr "Pomoc"
 #~ "%s\n"
 #~ "to:"
 #~ msgstr ""
-#~ "Presunú» súbor:\n"
+#~ "Presunúť súbor:\n"
 #~ "%s\n"
 #~ "do:"
 
 # src/utilops.c:707
 #~ msgid "About to delete multiple files..."
-#~ msgstr "Pripravený na viacnásobné mazanie súborov..."
+#~ msgstr "Pripravený na viacnásobné mazanie súborov..."
 
 # src/utilops.c:825 src/utilops.c:1031
 #~ msgid ""
@@ -5693,9 +7530,9 @@ msgstr "Pomoc"
 #~ "by renaming:\n"
 #~ "%s"
 #~ msgstr ""
-#~ "Prepísa» súbor:\n"
+#~ "Prepísať súbor:\n"
 #~ "%s\n"
-#~ "s premenovaním:\n"
+#~ "s premenovaním:\n"
 #~ "%s"
 
 # src/utilops.c:989
@@ -5704,102 +7541,61 @@ msgstr "Pomoc"
 
 # src/utilops.c:1216
 #~ msgid "Create"
-#~ msgstr "Vytvori»"
-
-# src/preferences.c:559
-#~ msgid "Initial directory"
-#~ msgstr "Zaèiatoèný adresár"
+#~ msgstr "Vytvoriť"
 
 # src/ui_pathsel.c:517 src/utilops.c:1158
 #~ msgid ""
 #~ "Unable to create directory:\n"
 #~ "%s"
 #~ msgstr ""
-#~ "Nemo¾no vytvori» adresár:\n"
+#~ "Nemožno vytvoriť adresár:\n"
 #~ "%s"
 
 # src/ui_pathsel.c:518 src/utilops.c:1159
 #~ msgid "Error creating directory"
-#~ msgstr "Chyba vytvárania adresára"
+#~ msgstr "Chyba vytvárania adresára"
 
 # src/utilops.c:539
 #, fuzzy
 #~ msgid "Image details"
-#~ msgstr "Popis obrázku"
-
-# src/menu.c:769
-#, fuzzy
-#~ msgid "/View/Image _details"
-#~ msgstr "/Zobrazi»/Prepnú» prezentáciu"
-
-# src/collect-table.c:1820 src/dupe.c:2172
-#~ msgid "Add contents"
-#~ msgstr "Prida» obsah"
+#~ msgstr "Popis obrázku"
 
 # src/collect-table.c:1821 src/dupe.c:2173
 #~ msgid "Add contents recursive"
-#~ msgstr "Prida» obsah rekurzívne"
+#~ msgstr "Pridať obsah rekurzívne"
 
 # src/collect-table.c:1822 src/dupe.c:2174
 #~ msgid "Skip directories"
-#~ msgstr "Preskoèi» adresáre"
-
-# src/utilops.c:543
-#~ msgid "Invalid directory"
-#~ msgstr "Chybný adresár"
+#~ msgstr "Preskočiť adresáre"
 
 # src/utilops.c:591
 #~ msgid "Geeqie - copy"
-#~ msgstr "Geeqie - kopírovanie"
+#~ msgstr "Geeqie - kopírovanie"
 
 # src/utilops.c:600
 #~ msgid "Geeqie - move"
-#~ msgstr "Geeqie - presúvanie"
+#~ msgstr "Geeqie - presúvanie"
 
 # src/utilops.c:1145
 #~ msgid "Directory exists"
-#~ msgstr "Adresár existuje"
+#~ msgstr "Adresár existuje"
 
 # src/utilops.c:1212
 #~ msgid "Geeqie - new directory"
-#~ msgstr "Geeqie - nový adresár"
+#~ msgstr "Geeqie - nový adresár"
 
 #~ msgid "Misc."
-#~ msgstr "Rôzne"
+#~ msgstr "Rôzne"
 
 # src/menu.c:717
 #~ msgid "/File/Create _Dir..."
-#~ msgstr "/Súbor/Vytvori» _Adresár"
-
-# src/menu.c:492
-#~ msgid "Edit"
-#~ msgstr "Editova»"
+#~ msgstr "/Súbor/Vytvoriť _Adresár"
 
 # src/preferences.c:908
 #~ msgid "Insert file drops at pointer location"
-#~ msgstr "Vlo¾i» vybraté súbory na miesto ukazovateµa"
-
-# src/filelist.c:814
-#~ msgid "File named %s already exists."
-#~ msgstr "Súbor %s u¾ existuje."
+#~ msgstr "Vložiť vybraté súbory na miesto ukazovateľa"
 
 # src/utilops.c:989
 #, fuzzy
 #~ msgid "top"
 #~ msgstr "na:"
-
-# src/main.c:146 src/main.c:176
-#~ msgid "Geeqie running: %s\n"
-#~ msgstr "Geeqie spustení: %s\n"
-
-# src/main.c:555
-#~ msgid "Electric Eyes"
-#~ msgstr "Electric Eyes"
-
-# src/preferences.c:530
-#~ msgid "Apply"
-#~ msgstr "Pou¾i»"
-
-# src/preferences.c:888
-#~ msgid "format: [.foo;.bar]"
-#~ msgstr "formát: [.foo;.bar]"
index 1586e88..5808bc3 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: geeqie 1.x\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-29 14:22+0100\n"
-"PO-Revision-Date: 2011-01-13 19:58+0100\n"
+"POT-Creation-Date: 2011-01-14 16:16+0100\n"
+"PO-Revision-Date: 2011-02-14 16:11+0100\n"
 "Last-Translator: Tore Ericsson <tore.ericsson@telia.com>\n"
 "Language-Team: Swedish\n"
 "MIME-Version: 1.0\n"
@@ -41,23 +41,23 @@ msgstr "Importera metadata från Gqview"
 
 #: ../plugins/rotate/rotate.desktop.in.h:1
 msgid "Apply the orientation to image content"
-msgstr "Tillämpa orienteringen på bildinnehållet"
+msgstr "Välj _denna som bildens orientering"
 
 #: ../plugins/symlink/symlink.desktop.in.h:1
 msgid "Symlink"
-msgstr "Länka till..."
+msgstr "_Länka till..."
 
 #: ../plugins/ufraw/geeqie-ufraw.desktop.in.h:1
 msgid "UFRaw Batch"
-msgstr ""
+msgstr "UFRaw batch"
 
 #: ../plugins/ufraw/geeqie-ufraw-id.desktop.in.h:1
 msgid "Edit UFRaw ID file"
-msgstr ""
+msgstr "Redigera ID-filen till UFRaw"
 
 #: ../plugins/ufraw/geeqie-ufraw-recursive.desktop.in.h:1
 msgid "UFRaw Batch recursive"
-msgstr ""
+msgstr "UFRaw batch, rekursivt"
 
 #: ../src/advanced_exif.c:328
 #: ../src/cache_maint.c:1304
@@ -142,7 +142,7 @@ msgstr "GPS-karta"
 
 #: ../src/bar.c:297
 msgid "Move to _top"
-msgstr "Flytta övers_t"
+msgstr "Flytta _överst"
 
 #: ../src/bar.c:298
 #: ../src/ui_bookmark.c:405
@@ -152,11 +152,11 @@ msgstr "Flytta _upp"
 #: ../src/bar.c:299
 #: ../src/ui_bookmark.c:407
 msgid "Move _down"
-msgstr "Flytta _ner"
+msgstr "Flytta _ned"
 
 #: ../src/bar.c:300
 msgid "Move to _bottom"
-msgstr "Flytta _nederst"
+msgstr "Flytta n_ederst"
 
 #: ../src/bar.c:302
 msgid "Remove"
@@ -196,7 +196,7 @@ msgstr "Rubrik:"
 
 #: ../src/bar_exif.c:580
 msgid "Show only if set"
-msgstr ""
+msgstr "Visa endast om till"
 
 #: ../src/bar_exif.c:581
 msgid "Editable (supported only for XMP)"
@@ -265,17 +265,17 @@ msgstr "Kartcentrering"
 #: ../src/bar_histogram.c:250
 #: ../src/layout_util.c:1404
 msgid "Histogram on _Red"
-msgstr "Histogram,_rött"
+msgstr "Histogram, _rött"
 
 #: ../src/bar_histogram.c:251
 #: ../src/layout_util.c:1405
 msgid "Histogram on _Green"
-msgstr "Histogram,_grönt"
+msgstr "Histogram, _grönt"
 
 #: ../src/bar_histogram.c:252
 #: ../src/layout_util.c:1406
 msgid "Histogram on _Blue"
-msgstr "Histogram,_blått"
+msgstr "Histogram, _blått"
 
 #: ../src/bar_histogram.c:253
 #: ../src/layout_util.c:1407
@@ -285,16 +285,16 @@ msgstr "_Histogram, RGB"
 #: ../src/bar_histogram.c:254
 #: ../src/layout_util.c:1408
 msgid "Histogram on _Value"
-msgstr "Histogram,_värden"
+msgstr "Histogram, v_ärden"
 
 #: ../src/bar_histogram.c:258
 #: ../src/layout_util.c:1412
 msgid "Li_near Histogram"
-msgstr "Li_njärt histogram"
+msgstr "L_injärt histogram"
 
 #: ../src/bar_histogram.c:259
 msgid "L_og Histogram"
-msgstr "L_ogaritmiskt histogram"
+msgstr "_Logaritmiskt histogram"
 
 #: ../src/bar_keywords.c:414
 msgid "Add keywords to selected files"
@@ -370,17 +370,17 @@ msgstr "Lösgör \"%s\" från markören %s"
 #: ../src/bar_keywords.c:1226
 #: ../src/bar_keywords.c:1235
 msgid "Expand checked"
-msgstr ""
+msgstr "Expandera förkryssade"
 
 #: ../src/bar_keywords.c:1227
 #: ../src/bar_keywords.c:1236
 msgid "Collapse unchecked"
-msgstr ""
+msgstr "Vik ihop ej förkryssade"
 
 #: ../src/bar_keywords.c:1228
 #: ../src/bar_keywords.c:1237
 msgid "Hide unchecked"
-msgstr ""
+msgstr "Göm ej förkryssade"
 
 #: ../src/bar_keywords.c:1229
 msgid "Show all"
@@ -388,7 +388,7 @@ msgstr "Visa alla"
 
 #: ../src/bar_keywords.c:1232
 msgid "On any change"
-msgstr ""
+msgstr "Vid varje förändring"
 
 #: ../src/bar_sort.c:449
 #, c-format
@@ -397,13 +397,13 @@ msgid ""
 "%s\n"
 "already exists."
 msgstr ""
-"Albumet:\n"
+"Kollektionen:\n"
 "%s\n"
 "finns redan."
 
 #: ../src/bar_sort.c:450
 msgid "Collection exists"
-msgstr "Albumet finns"
+msgstr "Kollektionen finns"
 
 #: ../src/bar_sort.c:464
 #: ../src/collect.c:1098
@@ -413,7 +413,7 @@ msgid ""
 "Failed to save the collection:\n"
 "%s"
 msgstr ""
-"Kunde inte spara albumet:\n"
+"Kunde inte spara kollektionen:\n"
 "%s"
 
 #: ../src/bar_sort.c:465
@@ -429,7 +429,7 @@ msgstr "Lägg till bokmärke"
 
 #: ../src/bar_sort.c:504
 msgid "Add Collection"
-msgstr "Lägg till album"
+msgstr "Lägg till kollektion"
 
 #: ../src/bar_sort.c:521
 #: ../src/ui_bookmark.c:288
@@ -449,7 +449,7 @@ msgstr "Mappar"
 #: ../src/bar_sort.c:607
 #: ../src/options.c:140
 msgid "Collections"
-msgstr "Album"
+msgstr "Kolllektioner"
 
 #: ../src/bar_sort.c:615
 #: ../src/utilops.c:2124
@@ -579,11 +579,11 @@ msgstr "Plats: %s"
 
 #: ../src/cache_maint.c:1248
 msgid "Cache Maintenance"
-msgstr "Cache-hantering"
+msgstr "Cachehantering"
 
 #: ../src/cache_maint.c:1258
 msgid "Cache and Data Maintenance"
-msgstr "Cache- och Datahantering"
+msgstr "Underhåll av cachedata"
 
 #: ../src/cache_maint.c:1262
 msgid "Thumbnail cache"
@@ -598,12 +598,12 @@ msgstr "Städa"
 #: ../src/cache_maint.c:1271
 #: ../src/cache_maint.c:1288
 msgid "Remove orphaned or outdated thumbnails."
-msgstr "Ta bort övergivna eller föråldrade miniatyrbilder."
+msgstr "Ta bort övergivna eller föråldrade miniatyrbilder"
 
 #: ../src/cache_maint.c:1276
 #: ../src/cache_maint.c:1293
 msgid "Delete all cached thumbnails."
-msgstr "Radera alla cachade miniatyrbilder."
+msgstr "Radera alla cachade miniatyrbilder"
 
 #: ../src/cache_maint.c:1279
 msgid "Shared thumbnail cache"
@@ -615,11 +615,11 @@ msgstr "Skapa"
 
 #: ../src/cache_maint.c:1302
 msgid "Render thumbnails for a specific folder."
-msgstr "Skapa miniatyrbilder för en specifik mapp."
+msgstr "Skapa miniatyrbilder för en specifik mapp"
 
 #: ../src/cache_maint.c:1313
 msgid "Remove orphaned keywords and comments."
-msgstr "Ta bort övergivna nyckelord och kommentarer."
+msgstr "Ta bort övergivna nyckelord och kommentarer"
 
 #. When does this occur ??
 #: ../src/collect.c:366
@@ -642,15 +642,15 @@ msgstr "%s - Kollektion - %s"
 #: ../src/collect.c:1135
 #: ../src/collect.c:1139
 msgid "Close collection"
-msgstr "Stäng album"
+msgstr "Stäng kollektionen"
 
 #: ../src/collect.c:1140
 msgid ""
 "Collection has been modified.\n"
 "Save first?"
 msgstr ""
-"Albumet har ändrats.\n"
-"Spara först?"
+"Kollektionen är ändrad.\n"
+"Spara ändringen?"
 
 #: ../src/collect.c:1143
 msgid "_Discard"
@@ -665,7 +665,7 @@ msgid ""
 msgstr ""
 "Angiven sökväg:\n"
 "%s\n"
-"är en mapp, album är filer"
+"är en mapp, kollektioner är filer"
 
 #: ../src/collect-dlg.c:60
 msgid "Invalid filename"
@@ -704,15 +704,15 @@ msgstr "Kan inte öppna kollektionsfilen"
 
 #: ../src/collect-dlg.c:195
 msgid "Save collection"
-msgstr "Spara album"
+msgstr "Spara kollektionen"
 
 #: ../src/collect-dlg.c:202
 msgid "Open collection"
-msgstr "Öppna album"
+msgstr "Öppna kollektion"
 
 #: ../src/collect-dlg.c:210
 msgid "Append collection"
-msgstr "Komplettera album"
+msgstr "Lägg till i kollektionen"
 
 #: ../src/collect-dlg.c:211
 msgid "_Append"
@@ -720,15 +720,15 @@ msgstr "_Komplettera"
 
 #: ../src/collect-dlg.c:228
 msgid "Collection Files"
-msgstr "Albumfiler"
+msgstr "Kollektionsfiler"
 
 #: ../src/collect-dlg.c:245
 msgid "Collection empty"
-msgstr "Tomt album"
+msgstr "Tom kollektion"
 
 #: ../src/collect-dlg.c:246
 msgid "The current collection is empty, save aborted."
-msgstr "Detta album är tomt, försöket att spara avbröts."
+msgstr "Kollektionen är tom, kan inte sparas."
 
 #: ../src/collect-io.c:346
 #, c-format
@@ -741,7 +741,7 @@ msgid ""
 "error saving collection file: %s\n"
 "error: %s\n"
 msgstr ""
-"fel vid spara kollektionsfil: %s\n"
+"kunde inte spara kollektionsfil: %s\n"
 "fel: %s\n"
 
 #: ../src/collect-table.c:211
@@ -800,7 +800,7 @@ msgstr "Lägg till från fillista"
 
 #: ../src/collect-table.c:880
 msgid "Append from collection..."
-msgstr "Lägg till från album..."
+msgstr "Lägg till från kollektion..."
 
 #: ../src/collect-table.c:884
 msgid "_Selection"
@@ -846,7 +846,7 @@ msgstr "_Kopiera..."
 #: ../src/search.c:1023
 #: ../src/view_file.c:594
 msgid "_Move..."
-msgstr "Fl_ytta..."
+msgstr "_Flytta..."
 
 #: ../src/collect-table.c:906
 #: ../src/dupe.c:2275
@@ -858,7 +858,7 @@ msgstr "Fl_ytta..."
 #: ../src/view_dir.c:666
 #: ../src/view_file.c:596
 msgid "_Rename..."
-msgstr "_Namnändra..."
+msgstr "_Byt namn..."
 
 #: ../src/collect-table.c:908
 #: ../src/dupe.c:2277
@@ -901,16 +901,16 @@ msgstr "Visa _filnamnstext"
 
 #: ../src/collect-table.c:924
 msgid "_Save collection"
-msgstr "_Spara album"
+msgstr "_Spara kollektionen"
 
 #: ../src/collect-table.c:926
 msgid "Save collection _as..."
-msgstr "Spara album s_om..."
+msgstr "Spara kollektionen s_om..."
 
 #: ../src/collect-table.c:929
 #: ../src/layout_util.c:1278
 msgid "_Find duplicates..."
-msgstr "_Hitta dubletter..."
+msgstr "Hitta _dubletter..."
 
 #: ../src/collect-table.c:931
 #: ../src/dupe.c:2268
@@ -1024,7 +1024,7 @@ msgstr "new.desktop"
 
 #: ../src/desktop_file.c:453
 msgid "Editors"
-msgstr "Redigerare"
+msgstr "Textredigerare"
 
 #: ../src/desktop_file.c:524
 msgid "Hidden"
@@ -1091,7 +1091,7 @@ msgstr "Markera dubletter i grupp _2"
 #: ../src/dupe.c:2266
 #: ../src/search.c:1016
 msgid "Add to new collection"
-msgstr "Lägg till i nytt album"
+msgstr "Lägg till i ny kollektion"
 
 #: ../src/dupe.c:2284
 #: ../src/dupe.c:2571
@@ -1240,27 +1240,27 @@ msgstr "Ogiltigt redigeringskommando"
 
 #: ../src/editors.c:1354
 msgid "Editor template is empty."
-msgstr ""
+msgstr "Redigeringsmallen är tom"
 
 #: ../src/editors.c:1355
 msgid "Editor template has incorrect syntax."
-msgstr ""
+msgstr "Redigeringsmallen är felaktig"
 
 #: ../src/editors.c:1356
 msgid "Editor template uses incompatible macros."
-msgstr ""
+msgstr "Redigeringsmallen använder inkompatibla makron"
 
 #: ../src/editors.c:1357
 msgid "Can't find matching file type."
-msgstr "Kan inte hitta denna filtyp-"
+msgstr "Kan inte hitta denna filtyp"
 
 #: ../src/editors.c:1358
 msgid "Can't execute external editor."
-msgstr "Kan inte starta extern textredigerare."
+msgstr "Kan inte starta extern textredigerare"
 
 #: ../src/editors.c:1359
 msgid "External editor returned error status."
-msgstr "Extern textredigerare returnerar felstatus."
+msgstr "Extern textredigerare returnerar felstatus"
 
 #: ../src/editors.c:1360
 msgid "File was skipped."
@@ -1470,7 +1470,7 @@ msgstr "D50"
 
 #: ../src/exif.c:218
 msgid "ISO studio tungsten"
-msgstr ""
+msgstr "ISO studio-volfram"
 
 #: ../src/exif.c:226
 msgid "yes, not detected by strobe"
@@ -1486,19 +1486,19 @@ msgstr "okalibrerad"
 
 #: ../src/exif.c:239
 msgid "1 chip color area"
-msgstr ""
+msgstr "1 chip färgområde"
 
 #: ../src/exif.c:240
 msgid "2 chip color area"
-msgstr ""
+msgstr "2 chip färgområde"
 
 #: ../src/exif.c:241
 msgid "3 chip color area"
-msgstr ""
+msgstr "3 chip färgområde"
 
 #: ../src/exif.c:242
 msgid "color sequential area"
-msgstr ""
+msgstr "sekventiellt färgområde"
 
 #: ../src/exif.c:243
 msgid "trilinear"
@@ -1506,7 +1506,7 @@ msgstr "trilinjär"
 
 #: ../src/exif.c:244
 msgid "color sequential linear"
-msgstr ""
+msgstr "sekventiellt linjär färg"
 
 #: ../src/exif.c:249
 msgid "digital still camera"
@@ -1514,7 +1514,7 @@ msgstr "digital stillbildskamera"
 
 #: ../src/exif.c:254
 msgid "direct photo"
-msgstr ""
+msgstr "direkt fotografi"
 
 #: ../src/exif.c:260
 msgid "custom"
@@ -1524,11 +1524,11 @@ msgstr "egendefinierat"
 #: ../src/exif.c:272
 #: ../src/exif-common.c:375
 msgid "auto"
-msgstr "auto"
+msgstr "automatiskt"
 
 #: ../src/exif.c:267
 msgid "auto bracket"
-msgstr "1+exponering+3"
+msgstr "automatisk alternativexponering"
 
 #: ../src/exif.c:278
 msgid "standard"
@@ -1544,19 +1544,19 @@ msgstr "ingen"
 
 #: ../src/exif.c:287
 msgid "low gain up"
-msgstr "öka lågeffekt"
+msgstr "low gain up"
 
 #: ../src/exif.c:288
 msgid "high gain up"
-msgstr ""
+msgstr "high gain up"
 
 #: ../src/exif.c:289
 msgid "low gain down"
-msgstr "minska lågeffekt"
+msgstr "low gain down"
 
 #: ../src/exif.c:290
 msgid "high gain down"
-msgstr ""
+msgstr "high gain down"
 
 #: ../src/exif.c:296
 #: ../src/exif.c:310
@@ -1582,11 +1582,11 @@ msgstr "makro"
 
 #: ../src/exif.c:318
 msgid "close"
-msgstr "stäng"
+msgstr "nära"
 
 #: ../src/exif.c:319
 msgid "distant"
-msgstr "avlägsen"
+msgstr "avlägset"
 
 #: ../src/exif.c:329
 msgid "Image Width"
@@ -1598,7 +1598,7 @@ msgstr "Bildhöjd"
 
 #: ../src/exif.c:331
 msgid "Bits per Sample/Pixel"
-msgstr ""
+msgstr "Bits per punkt/pixel"
 
 #: ../src/exif.c:332
 msgid "Compression"
@@ -1638,19 +1638,19 @@ msgstr "Firmware"
 
 #: ../src/exif.c:342
 msgid "White point"
-msgstr ""
+msgstr "Vitpunkt"
 
 #: ../src/exif.c:343
 msgid "Primary chromaticities"
-msgstr ""
+msgstr "Primära kromaticiteter"
 
 #: ../src/exif.c:344
 msgid "YCbCy coefficients"
-msgstr ""
+msgstr "YCbCy-koefficienter"
 
 #: ../src/exif.c:345
 msgid "YCbCr positioning"
-msgstr ""
+msgstr "YCbCr-positionering"
 
 #: ../src/exif.c:346
 msgid "Black white reference"
@@ -1658,7 +1658,7 @@ msgstr "Svart-vit referens"
 
 #: ../src/exif.c:348
 msgid "SubIFD Exif offset"
-msgstr ""
+msgstr "SubIFD Exif-offset"
 
 #. subIFD follows
 #: ../src/exif.c:350
@@ -1667,7 +1667,7 @@ msgstr "Exponeringstid (sekunder)"
 
 #: ../src/exif.c:351
 msgid "FNumber"
-msgstr ""
+msgstr "FNumber"
 
 #: ../src/exif.c:352
 msgid "Exposure program"
@@ -1685,7 +1685,7 @@ msgstr "ISO-känslighet"
 
 #: ../src/exif.c:355
 msgid "Optoelectric conversion factor"
-msgstr ""
+msgstr "Optoelektrisk konverteringsfaktor"
 
 #: ../src/exif.c:356
 msgid "Exif version"
@@ -1733,7 +1733,7 @@ msgstr "Maximal bländare"
 #: ../src/exif.c:366
 #: ../src/exif-common.c:550
 msgid "Subject distance"
-msgstr "Avstånd till motiv"
+msgstr "Motivavstånd"
 
 #: ../src/exif.c:367
 msgid "Metering mode"
@@ -1767,19 +1767,19 @@ msgstr "Användarkommentar"
 
 #: ../src/exif.c:374
 msgid "Subsecond time"
-msgstr ""
+msgstr "Tid, delar av sekunder"
 
 #: ../src/exif.c:375
 msgid "Subsecond time original"
-msgstr "Originaltidpunkt"
+msgstr "Originaltid, delar av sekunder"
 
 #: ../src/exif.c:376
 msgid "Subsecond time digitized"
-msgstr "Digitaliseringstidpunkt"
+msgstr "Digitaliseringstid, delar av sekunder"
 
 #: ../src/exif.c:377
 msgid "FlashPix version"
-msgstr ""
+msgstr "FlashPix-version"
 
 #: ../src/exif.c:378
 msgid "Colorspace"
@@ -1800,7 +1800,7 @@ msgstr "Ljuddata"
 
 #: ../src/exif.c:383
 msgid "ExifR98 extension"
-msgstr ""
+msgstr "ExifR98-tillägg"
 
 #: ../src/exif.c:384
 msgid "Flash strength"
@@ -1808,7 +1808,7 @@ msgstr "Blixtstyrka"
 
 #: ../src/exif.c:385
 msgid "Spatial frequency response"
-msgstr ""
+msgstr "Spatiell frekvensrespons"
 
 #: ../src/exif.c:386
 msgid "X Pixel density"
@@ -1840,7 +1840,7 @@ msgstr "Scentyp"
 
 #: ../src/exif.c:394
 msgid "Color filter array pattern"
-msgstr ""
+msgstr "Färgfilter-vektormönster"
 
 #. tags a4xx were added for Exif 2.2 (not just these - some above, as well)
 #: ../src/exif.c:396
@@ -1857,7 +1857,7 @@ msgstr "Vitbalans"
 
 #: ../src/exif.c:399
 msgid "Digital zoom ratio"
-msgstr ""
+msgstr "Digital zoomning"
 
 #: ../src/exif.c:400
 msgid "Focal length (35mm)"
@@ -1865,11 +1865,11 @@ msgstr "Brännvidd (35 mm)"
 
 #: ../src/exif.c:401
 msgid "Scene capture type"
-msgstr ""
+msgstr "Sceninnehållstyp"
 
 #: ../src/exif.c:402
 msgid "Gain control"
-msgstr "Vinst(?)kontroll"
+msgstr "Förstärkningsinställning"
 
 #: ../src/exif.c:403
 msgid "Contrast"
@@ -1981,7 +1981,7 @@ msgstr "Fildatum"
 
 #: ../src/exif-common.c:558
 msgid "File mode"
-msgstr "Filtyp(?)"
+msgstr "Filtyp"
 
 #: ../src/filedata.c:91
 #, c-format
@@ -2073,7 +2073,7 @@ msgstr "Skärm"
 
 #: ../src/fullscreen.c:638
 msgid "Stay above other windows"
-msgstr "Stanna ovanför andra fönster"
+msgstr "Behåll fönstret överst"
 
 #: ../src/fullscreen.c:645
 msgid "Determined by Window Manager"
@@ -2176,12 +2176,12 @@ msgstr "Anpassa bild till fönster_storlek"
 #: ../src/layout_image.c:501
 #: ../src/layout_util.c:1306
 msgid "Set as _wallpaper"
-msgstr "Ställ in som skrivbords_underlag"
+msgstr "Använd som skrivbords_underlag"
 
 #: ../src/img-view.c:1282
 #: ../src/layout_image.c:508
 msgid "_Go to directory view"
-msgstr ""
+msgstr "_Gå till mappvy"
 
 #: ../src/img-view.c:1295
 #: ../src/layout_image.c:529
@@ -2273,15 +2273,15 @@ msgstr "Verktyg"
 
 #: ../src/layout.c:1873
 msgid "Window options and layout"
-msgstr "Fönsteralternativ och -layout"
+msgstr "Bildvisningsfönstret"
 
 #: ../src/layout.c:1932
 msgid "General options"
-msgstr "Allmänna valmöjligheter"
+msgstr "Allmänt"
 
 #: ../src/layout.c:1934
 msgid "Home path (empty to use your home directory)"
-msgstr "Startmapp (tomt = din egen hemmamapp)"
+msgstr "Startmapp (tomt = egen hemmamapp)"
 
 #: ../src/layout.c:1942
 msgid "Use current"
@@ -2289,7 +2289,7 @@ msgstr "Använd aktuell"
 
 #: ../src/layout.c:1945
 msgid "Show date in directories list view"
-msgstr ""
+msgstr "Visa datum i mapplistvyn"
 
 #: ../src/layout.c:1948
 msgid "Exit program when this window is closed"
@@ -2297,7 +2297,7 @@ msgstr "Avsluta programmet när det här fönstret stängs"
 
 #: ../src/layout.c:1951
 msgid "Start-up directory:"
-msgstr ""
+msgstr "Startmapp"
 
 #: ../src/layout.c:1953
 msgid "No change"
@@ -2336,7 +2336,7 @@ msgstr "Bild"
 
 #: ../src/layout_config.c:364
 msgid "(drag to change order)"
-msgstr "(dra-och-släpp för att byta ordning)"
+msgstr "Dra-och-släpp för att byta ordning!"
 
 #: ../src/layout_image.c:559
 msgid "Hide file _list"
@@ -2380,7 +2380,7 @@ msgstr "E_xterna redigerare"
 
 #: ../src/layout_util.c:1252
 msgid "P_references"
-msgstr "_Förval"
+msgstr "_Inställningar"
 
 #: ../src/layout_util.c:1254
 msgid "_Files and Folders"
@@ -2392,15 +2392,15 @@ msgstr "_Zooma"
 
 #: ../src/layout_util.c:1256
 msgid "_Color Management"
-msgstr "_Färghantering"
+msgstr "F_ärghantering"
 
 #: ../src/layout_util.c:1257
 msgid "_Connected Zoom"
-msgstr ""
+msgstr "_Zooma"
 
 #: ../src/layout_util.c:1258
 msgid "Spli_t"
-msgstr "_Dela"
+msgstr "Fönster_delning"
 
 #: ../src/layout_util.c:1259
 #: ../src/layout_util.c:1373
@@ -2413,7 +2413,7 @@ msgstr "_Hjälp"
 
 #: ../src/layout_util.c:1262
 msgid "_First Image"
-msgstr "_Första bilden"
+msgstr "till _första bilden"
 
 #: ../src/layout_util.c:1262
 msgid "First Image"
@@ -2423,7 +2423,7 @@ msgstr "Första bilden"
 #: ../src/layout_util.c:1264
 #: ../src/layout_util.c:1265
 msgid "_Previous Image"
-msgstr "Före_gående bild"
+msgstr "till före_gående bild"
 
 #: ../src/layout_util.c:1263
 #: ../src/layout_util.c:1264
@@ -2435,7 +2435,7 @@ msgstr "Föregående bild"
 #: ../src/layout_util.c:1267
 #: ../src/layout_util.c:1268
 msgid "_Next Image"
-msgstr "_Nästa bild"
+msgstr "till _nästa bild"
 
 #: ../src/layout_util.c:1266
 #: ../src/layout_util.c:1267
@@ -2445,7 +2445,7 @@ msgstr "Nästa bild"
 
 #: ../src/layout_util.c:1269
 msgid "_Last Image"
-msgstr "_Sista bilden"
+msgstr "till _sista bilden"
 
 #: ../src/layout_util.c:1269
 msgid "Last Image"
@@ -2453,15 +2453,15 @@ msgstr "Sista bilden"
 
 #: ../src/layout_util.c:1270
 msgid "_Back"
-msgstr "_Bakåt"
+msgstr "_tillbaka"
 
 #: ../src/layout_util.c:1270
 msgid "Back"
-msgstr "Bakåt"
+msgstr "Tillbaka"
 
 #: ../src/layout_util.c:1271
 msgid "_Home"
-msgstr "_Hem"
+msgstr "_hem"
 
 #: ../src/layout_util.c:1271
 #: ../src/options.c:136
@@ -2472,7 +2472,7 @@ msgstr "Hem"
 
 #: ../src/layout_util.c:1273
 msgid "New _window"
-msgstr "Nytt _fönster"
+msgstr "_Nytt fönster"
 
 #: ../src/layout_util.c:1273
 msgid "New window"
@@ -2480,7 +2480,7 @@ msgstr "Nytt fönster"
 
 #: ../src/layout_util.c:1274
 msgid "_New collection"
-msgstr "_Nytt album"
+msgstr "Ny k_ollektion"
 
 #: ../src/layout_util.c:1274
 msgid "New collection"
@@ -2488,7 +2488,7 @@ msgstr "Ny kollektion"
 
 #: ../src/layout_util.c:1275
 msgid "_Open collection..."
-msgstr "Öppna _album..."
+msgstr "_Öppna kollektion..."
 
 #: ../src/layout_util.c:1275
 msgid "Open collection..."
@@ -2496,19 +2496,19 @@ msgstr "Öppna kollektion..."
 
 #: ../src/layout_util.c:1276
 msgid "Open recen_t"
-msgstr "Öppna senas_te"
+msgstr "S_enaste kollektion"
 
 #: ../src/layout_util.c:1276
 msgid "Open recent"
-msgstr "Öppna senaste"
+msgstr "Öppna senaste kollektion"
 
 #: ../src/layout_util.c:1277
 msgid "_Search..."
-msgstr "_Sök..."
+msgstr "_Hitta..."
 
 #: ../src/layout_util.c:1277
 msgid "Search..."
-msgstr "Sök..."
+msgstr "Hitta..."
 
 #: ../src/layout_util.c:1278
 msgid "Find duplicates..."
@@ -2516,7 +2516,7 @@ msgstr "Sök dubletter..."
 
 #: ../src/layout_util.c:1279
 msgid "Pa_n view"
-msgstr "Pane_lvy"
+msgstr "_Panelvy"
 
 #: ../src/layout_util.c:1279
 msgid "Pan view"
@@ -2524,7 +2524,7 @@ msgstr "Panelvy"
 
 #: ../src/layout_util.c:1280
 msgid "_Print..."
-msgstr "_Skriv ut..."
+msgstr "Skriv _ut..."
 
 #: ../src/layout_util.c:1281
 msgid "N_ew folder..."
@@ -2544,7 +2544,7 @@ msgstr "Flytta..."
 
 #: ../src/layout_util.c:1284
 msgid "Rename..."
-msgstr "_Namnändra..."
+msgstr "Byt namn..."
 
 #: ../src/layout_util.c:1285
 #: ../src/layout_util.c:1286
@@ -2584,7 +2584,7 @@ msgstr "Stäng _fönstret"
 
 #: ../src/layout_util.c:1292
 msgid "_Quit"
-msgstr "A_vsluta"
+msgstr "_Avsluta"
 
 #: ../src/layout_util.c:1292
 msgid "Quit"
@@ -2602,7 +2602,7 @@ msgstr "Rotera medurs"
 #: ../src/layout_util.c:1294
 #: ../src/menu.c:221
 msgid "Rotate _counterclockwise"
-msgstr "Rotera mot_urs"
+msgstr "R_otera moturs"
 
 #: ../src/layout_util.c:1294
 msgid "Rotate counterclockwise"
@@ -2637,11 +2637,11 @@ msgstr "Spegla vertikalt"
 #: ../src/layout_util.c:1298
 #: ../src/menu.c:233
 msgid "_Original state"
-msgstr "_Ursprunglig inställning"
+msgstr "_Ursprunglig orientering"
 
 #: ../src/layout_util.c:1298
 msgid "Original state"
-msgstr "Ursprunglig inställning"
+msgstr "Ursprunglig orientering"
 
 #: ../src/layout_util.c:1299
 msgid "Select _all"
@@ -2653,7 +2653,7 @@ msgstr "Markera _ingen"
 
 #: ../src/layout_util.c:1301
 msgid "_Invert Selection"
-msgstr "_Invertera markeringar"
+msgstr "I_nvertera markeringar"
 
 #: ../src/layout_util.c:1301
 msgid "Invert Selection"
@@ -2661,15 +2661,15 @@ msgstr "Invertera markeringar"
 
 #: ../src/layout_util.c:1302
 msgid "P_references..."
-msgstr "In_ställningar..."
+msgstr "_Ställ in..."
 
 #: ../src/layout_util.c:1302
 msgid "Preferences..."
-msgstr "Inställningar..."
+msgstr "Ställ in..."
 
 #: ../src/layout_util.c:1303
 msgid "Configure _Editors..."
-msgstr "Konfigurera _textredigerare..."
+msgstr "_Konfigurera textredigerare..."
 
 #: ../src/layout_util.c:1303
 msgid "Configure Editors..."
@@ -2677,11 +2677,11 @@ msgstr "Konfigurera textredigerare..."
 
 #: ../src/layout_util.c:1304
 msgid "_Configure this window..."
-msgstr "_Konfigurera det här fönstret..."
+msgstr "_Bildvisningsfönstret..."
 
 #: ../src/layout_util.c:1304
 msgid "Configure this window..."
-msgstr "Konfigurera det här fönstret..."
+msgstr "Bildvisningsfönstret..."
 
 #: ../src/layout_util.c:1305
 msgid "_Thumbnail maintenance..."
@@ -2689,7 +2689,7 @@ msgstr "_Miniatyrbildsunderhåll..."
 
 #: ../src/layout_util.c:1305
 msgid "Thumbnail maintenance..."
-msgstr "_Miniatyrbildsunderhåll..."
+msgstr "Miniatyrbildsunderhåll..."
 
 #: ../src/layout_util.c:1306
 msgid "Set as wallpaper"
@@ -2793,7 +2793,7 @@ msgstr "Zooma 1:4"
 #: ../src/layout_util.c:1324
 #: ../src/layout_util.c:1325
 msgid "Connected Zoom in"
-msgstr ""
+msgstr "Zooma in"
 
 #: ../src/layout_util.c:1326
 #: ../src/layout_util.c:1327
@@ -2812,11 +2812,11 @@ msgstr "Ställ in fönsterpassning"
 
 #: ../src/layout_util.c:1332
 msgid "Connected Fit Horizontally"
-msgstr ""
+msgstr "Horisontell fönsterpassning"
 
 #: ../src/layout_util.c:1333
 msgid "Connected Fit Vertically"
-msgstr ""
+msgstr "Vertikal fönsterpassning"
 
 #: ../src/layout_util.c:1334
 msgid "Connected Zoom 2:1"
@@ -2868,7 +2868,7 @@ msgstr "Avsluta helskärmsläge"
 
 #: ../src/layout_util.c:1346
 msgid "_Cycle through overlay modes"
-msgstr "_Växla mellan overlay-alternativ"
+msgstr "Vä_xla mellan overlay-alternativ"
 
 #: ../src/layout_util.c:1346
 msgid "Cycle through Overlay modes"
@@ -2989,7 +2989,7 @@ msgstr "Visa pixelinformation"
 
 #: ../src/layout_util.c:1365
 msgid "_Float file list"
-msgstr "_Ta loss fillista"
+msgstr "Ta loss _fillista"
 
 #: ../src/layout_util.c:1365
 msgid "Float file list"
@@ -3005,11 +3005,11 @@ msgstr "Dölj verktygsrad"
 
 #: ../src/layout_util.c:1367
 msgid "_Info sidebar"
-msgstr "_Informationskolumnen"
+msgstr "_Informationskolumn"
 
 #: ../src/layout_util.c:1367
 msgid "Info sidebar"
-msgstr "Informationskolumnen"
+msgstr "Informationskolumn"
 
 #: ../src/layout_util.c:1368
 msgid "Sort _manager"
@@ -3045,11 +3045,11 @@ msgstr "Använd bildens profil"
 
 #: ../src/layout_util.c:1372
 msgid "Toggle _grayscale"
-msgstr "Växla _gråskala"
+msgstr "Växla _gråskala - färg"
 
 #: ../src/layout_util.c:1372
 msgid "Toggle grayscale"
-msgstr "Växla gråskala"
+msgstr "Växla gråskala - färg"
 
 #: ../src/layout_util.c:1373
 msgid "Image Overlay"
@@ -3057,7 +3057,7 @@ msgstr "Bildoverlay"
 
 #: ../src/layout_util.c:1374
 msgid "_Show Histogram"
-msgstr "Visa hi_stogram"
+msgstr "_Visa histogram"
 
 #: ../src/layout_util.c:1374
 msgid "Show Histogram"
@@ -3065,15 +3065,15 @@ msgstr "Visa histogram"
 
 #: ../src/layout_util.c:1378
 msgid "Image _List"
-msgstr "Bild_lista"
+msgstr "Fil_namnlista"
 
 #: ../src/layout_util.c:1378
 msgid "View Images as List"
-msgstr "Visa bildlista"
+msgstr "Visa filnamnlista"
 
 #: ../src/layout_util.c:1379
 msgid "I_cons"
-msgstr "I_koner"
+msgstr "_Ikoner"
 
 #: ../src/layout_util.c:1379
 msgid "View Images as Icons"
@@ -3097,7 +3097,7 @@ msgstr "Visa mappträd"
 
 #: ../src/layout_util.c:1388
 msgid "_Horizontal"
-msgstr "_Horisontellt"
+msgstr "_horisontellt"
 
 #: ../src/layout_util.c:1388
 msgid "Split Horizontal"
@@ -3113,7 +3113,7 @@ msgstr "Dela vertikalt"
 
 #: ../src/layout_util.c:1390
 msgid "_Quad"
-msgstr "_fyra bilder"
+msgstr "_fyra bilder"
 
 #: ../src/layout_util.c:1390
 msgid "Split Quad"
@@ -3121,11 +3121,11 @@ msgstr "Dela i fyra"
 
 #: ../src/layout_util.c:1391
 msgid "_Single"
-msgstr "_en bild"
+msgstr "_ingen (en bild)"
 
 #: ../src/layout_util.c:1391
 msgid "Split Single"
-msgstr "Dela en bild"
+msgstr "Dela inte (en bild)"
 
 #: ../src/layout_util.c:1395
 msgid "Input _0: sRGB"
@@ -3250,19 +3250,19 @@ msgstr "Växla märke %d"
 #: ../src/layout_util.c:1684
 #, c-format
 msgid "Se_lect mark %d"
-msgstr "Väl_j märke %d"
+msgstr "_Urval märke %d"
 
 #: ../src/layout_util.c:1684
 #: ../src/layout_util.c:1685
 #, c-format
 msgid "Select mark %d"
-msgstr "Välj märke %d"
+msgstr "Urval märke %d"
 
 #: ../src/layout_util.c:1685
 #: ../src/view_file.c:543
 #, c-format
 msgid "_Select mark %d"
-msgstr "_Välj märke %d"
+msgstr "_Urval märke %d"
 
 #: ../src/layout_util.c:1686
 #: ../src/view_file.c:544
@@ -3279,7 +3279,7 @@ msgstr "Lägg till märke %d"
 #: ../src/view_file.c:545
 #, c-format
 msgid "_Intersection with mark %d"
-msgstr "Skä_rning med märke %d"
+msgstr "_Skärning med märke %d"
 
 #: ../src/layout_util.c:1687
 #, c-format
@@ -3290,12 +3290,12 @@ msgstr "Skärning med märke %d"
 #: ../src/view_file.c:546
 #, c-format
 msgid "_Unselect mark %d"
-msgstr "Välj _bort märke %d"
+msgstr "_Bortval märke %d"
 
 #: ../src/layout_util.c:1688
 #, c-format
 msgid "Unselect mark %d"
-msgstr "Välj bort märke %d"
+msgstr "Bortval märke %d"
 
 #: ../src/layout_util.c:1689
 #, c-format
@@ -3322,6 +3322,8 @@ msgid ""
 "Image profile: %s\n"
 "Screen profile: %s"
 msgstr ""
+"Bildprofil: %s\n"
+"Skärmprofil: %s"
 
 #: ../src/layout_util.c:2278
 msgid "Click to enable color management"
@@ -3340,7 +3342,7 @@ msgstr "Input _%d: %s"
 #: ../src/lirc.c:197
 #, c-format
 msgid "disconnected from LIRC\n"
-msgstr ""
+msgstr "bortkopplad från LIRC\n"
 
 #: ../src/lirc.c:212
 #, c-format
@@ -3354,6 +3356,9 @@ msgid ""
 "please read the documentation of LIRC to \n"
 "know how to create a proper config file\n"
 msgstr ""
+"kan inte läsa LIRC-konfigureringsfilen;\n"
+"vänligen läs LIRC-dokumentationen för beskrivning \n"
+"av vad konfigureringsfiler ska innehålla\n"
 
 #: ../src/logwindow.c:76
 msgid "Log"
@@ -3390,11 +3395,11 @@ msgstr "  -s, --slideshow            starta i bildspelsläge\n"
 
 #: ../src/main.c:327
 msgid "  -l, --list                 open collection window for command line\n"
-msgstr "  -l, --list                 öppna albumfönster för angivna filer\n"
+msgstr "  -l, --list                 öppna kollektionsfönster för kommandorad\n"
 
 #: ../src/main.c:328
 msgid "      --geometry=GEOMETRY    set main window location\n"
-msgstr ""
+msgstr "      --geometry=GEOMETRY    välj huvudfönstrets placering\n"
 
 #: ../src/main.c:329
 msgid "  -r, --remote               send following commands to open window\n"
@@ -3438,6 +3443,8 @@ msgid ""
 "\n"
 "Use --remote-help for valid remote options.\n"
 msgstr ""
+"\n"
+"Använd  --remote-help  för gällande fjärralternativ\n"
 
 #: ../src/main.c:487
 #, c-format
@@ -3474,7 +3481,7 @@ msgstr "Avsluta %s"
 
 #: ../src/main.c:677
 msgid "Collections have been modified. Quit anyway?"
-msgstr "Album har ändrats. Avsluta ändå?"
+msgstr "Kollektionen är ändrad. Avsluta ändå?"
 
 #: ../src/main.c:878
 #: ../src/remote.c:601
@@ -3600,7 +3607,7 @@ msgstr "Hav"
 #: ../src/metadata.c:1484
 #: ../src/print.c:375
 msgid "Landscape"
-msgstr "Liggande"
+msgstr "Landskap"
 
 #: ../src/metadata.c:1485
 msgid "Art"
@@ -3638,7 +3645,7 @@ msgstr "Gata"
 
 #: ../src/metadata.c:1493
 msgid "Square"
-msgstr "Fyrkant"
+msgstr "Torg"
 
 #: ../src/metadata.c:1494
 msgid "Architecture"
@@ -3739,7 +3746,7 @@ msgstr "Makro"
 #: ../src/metadata.c:1520
 #: ../src/print.c:374
 msgid "Portrait"
-msgstr "Stående"
+msgstr "Porträtt"
 
 #: ../src/metadata.c:1521
 msgid "Black and White"
@@ -3762,7 +3769,7 @@ msgstr "%d bilder, %s"
 #: ../src/pan-view.c:482
 #, c-format
 msgid "The pan view does not support the folder \"%s\"."
-msgstr "Panelvyn kan inte visa mappen \"%s\"."
+msgstr "Panelvyn kan inte visa mappen \"%s\""
 
 #: ../src/pan-view.c:483
 msgid "Folder not supported"
@@ -3908,11 +3915,11 @@ msgstr "Panelvyprestanda"
 
 #: ../src/pan-view.c:2615
 msgid "Pan view performance may be poor."
-msgstr "Panelvyprestanda kan vara dåliga."
+msgstr "Panelvyprestanda kan vara dåliga"
 
 #: ../src/pan-view.c:2616
 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 "För att snabba upp miniatyrbildvisningen i panelvyn kan följade göras, menm märk att båda åtgärderna behövs för att någon förbättring ska märkas: "
+msgstr "För att snabba upp miniatyrbildvisningen i panelvyn kan följade göras, men märk att båda åtgärderna behövs för att någon förbättring ska märkas: "
 
 #: ../src/pan-view.c:2624
 #: ../src/preferences.c:1177
@@ -4217,6 +4224,15 @@ msgid ""
 "if there's no ISO information in the Exif data.\n"
 "If a line is empty, it is removed. This allows to add lines that totally disappear when no data is available.\n"
 msgstr ""
+"<i>%name%</i> visar bildens filnamn\n"
+"Mera: <i>%collection%</i> kollektion, <i>%number%</i> nr, <i>%total%</i> antal, <i>%date%</i> datum,\n"
+"<i>%size%</i> filstorlek, <i>%width%</i> bredd, <i>%height%</i> höjd, <i>%res%</i> upplösning\n"
+"För exif-data använd exif-namnet, ex. <i>%formatted.Camera%</i> formaterat kameranamn,\n"
+"<i>%Exif.Photo.DateTimeOriginal%</i> när originalbilden exponerades\n"
+"Att skriva <i>%formatted.Camera:20</i> betyder att texten begränsas till 20 tecken och 3 punkter markerar flera\n"
+"Om två eller fler förbinds med |-tecken visas de tillgängliga med en separator:\n"
+"<i>%formatted.ShutterSpeed%</i>|<i>%formatted.ISOSpeedRating%</i>|<i>%formatted.FocalLength%</i> blir t.ex. \"1/20s - 400 - 80 mm\" eller \"1/200 - 80 mm\" om ISO-information saknas\n"
+"Tomma rader ignoreras, så att de helt försvinner då ingen information finns\n"
 
 #: ../src/preferences.c:1396
 #: ../src/preferences.c:1569
@@ -4242,7 +4258,7 @@ msgstr "Avaktivera filfiltrering"
 
 #: ../src/preferences.c:1463
 msgid "Grouping sidecar extensions"
-msgstr ""
+msgstr "Grupperar 'sidecar'-tilläggen"
 
 #: ../src/preferences.c:1470
 msgid "File types"
@@ -4262,7 +4278,7 @@ msgstr "Skrivbar"
 
 #: ../src/preferences.c:1552
 msgid "Sidecar is allowed"
-msgstr ""
+msgstr "'Sidecar'-filer tillåtna"
 
 #: ../src/preferences.c:1598
 msgid "Metadata writing process"
@@ -4274,28 +4290,28 @@ msgstr "Varning: Geeqie är byggt utan Exiv2. Vissa funktioner saknas."
 
 #: ../src/preferences.c:1602
 msgid "Metadata are written in the following order. The process ends after first success."
-msgstr "Metadata skrivs i följande ordning. Processen avslutas så snart den lyckats."
+msgstr "Metadata skrivs i följande ordning. Processen avslutas så snart den lyckats:"
 
 #: ../src/preferences.c:1605
 msgid "1) Save metadata in image files, resp. sidecar files, according to the XMP standard"
-msgstr ""
+msgstr "1) Spara metadata i bildfiler respektive 'sidecar'-filer enligt XMP-standard"
 
 #: ../src/preferences.c:1611
 msgid "2) Save metadata in '.metadata' folder, local to image folder (non-standard)"
-msgstr ""
+msgstr "2) Spara metadata i '.metadata'-mapp lokalt med bildmappen (icke-standard)"
 
 #: ../src/preferences.c:1614
 #, c-format
 msgid "3) Save metadata in Geeqie private directory '%s'"
-msgstr ""
+msgstr "3) Spara metadata i den särskilda Geeqie-mappen '%s'"
 
 #: ../src/preferences.c:1619
 msgid "Step 1: Write to image files"
-msgstr ""
+msgstr "Steg 1: Skriv till bildfiler"
 
 #: ../src/preferences.c:1627
 msgid "Store metadata also in legacy IPTC tags (converted according to IPTC4XMP standard)"
-msgstr ""
+msgstr "Spara också metadata som traditionell IPTC (konverterat enligt IPCT4XMP-standard)"
 
 #: ../src/preferences.c:1630
 msgid "Warn if the image files are unwritable"
@@ -4307,11 +4323,11 @@ msgstr "Bekräfta skrivning till bildfiler"
 
 #: ../src/preferences.c:1636
 msgid "Step 2 and 3: write to Geeqie private files"
-msgstr ""
+msgstr "Steg 2 och 3: Skriv till särskilda Geeqie-filer"
 
 #: ../src/preferences.c:1641
 msgid "Use GQview legacy metadata format (supports only keywords and comments) instead of XMP"
-msgstr ""
+msgstr "Använd gamla GQview-metadata-formatet (endast nyckelord och kommentarer) i stället för XMP"
 
 #: ../src/preferences.c:1645
 #: ../src/preferences.c:1833
@@ -4320,7 +4336,7 @@ msgstr "Diverse"
 
 #: ../src/preferences.c:1646
 msgid "Write the same description tags (keywords, comment, etc.) to all grouped sidecars"
-msgstr ""
+msgstr "Skriv likadana beskrivningar (nyckelord, kommentarer, etc.) för alla 'sidecar'-grupper"
 
 #: ../src/preferences.c:1649
 msgid "Allow keywords to differ only in case"
@@ -4336,7 +4352,7 @@ msgstr "Automatspara inställningar"
 
 #: ../src/preferences.c:1660
 msgid "Write metadata after timeout"
-msgstr ""
+msgstr "Skriv metadata efter timeout"
 
 #: ../src/preferences.c:1666
 msgid "Timeout (seconds):"
@@ -4348,7 +4364,7 @@ msgstr "Skriver metadata vid bildbyte"
 
 #: ../src/preferences.c:1672
 msgid "Write metadata on directory change"
-msgstr ""
+msgstr "Skriv metadata vid mappbyte"
 
 #: ../src/preferences.c:1686
 msgid "Color management"
@@ -4386,7 +4402,7 @@ msgstr "Skärmprofil"
 
 #: ../src/preferences.c:1739
 msgid "Use system screen profile if available"
-msgstr ""
+msgstr "Använd systemegen bildskärmprofil då sådan finns"
 
 #: ../src/preferences.c:1744
 msgid "Screen:"
@@ -4444,11 +4460,11 @@ msgstr "Namnändring på plats"
 
 #: ../src/preferences.c:1820
 msgid "Open recent list maximum size"
-msgstr ""
+msgstr "Öppna senaste listans maximalstorlek"
 
 #: ../src/preferences.c:1823
 msgid "Drag'n drop icon size"
-msgstr ""
+msgstr "Drag-och-släpp ikonstorlek"
 
 #: ../src/preferences.c:1826
 msgid "Navigation"
@@ -4480,7 +4496,7 @@ msgstr "Tangentbord"
 
 #: ../src/preferences.c:1863
 msgid "Accelerators"
-msgstr ""
+msgstr "Snabbtangenter"
 
 #: ../src/preferences.c:1882
 msgid "Action"
@@ -4703,7 +4719,7 @@ msgstr "Misslyckades skriva till filen %s"
 #: ../src/print.c:1334
 #: ../src/print.c:1407
 msgid "SIGPIPE error writing to printer."
-msgstr "SIGPIPE-fel vid utskrift."
+msgstr "SIGPIPE-fel vid utskrift"
 
 #: ../src/print.c:1942
 #, c-format
@@ -4911,11 +4927,11 @@ msgstr "ladda konfigureringsfil"
 
 #: ../src/remote.c:655
 msgid "get list of sidecars of the given file"
-msgstr ""
+msgstr "få lista med 'sidecar'-filer till denna fil"
 
 #: ../src/remote.c:656
 msgid "get destination path for the given file"
-msgstr ""
+msgstr "få sökvägen till denna fil"
 
 #: ../src/remote.c:657
 msgid "open file"
@@ -5037,7 +5053,7 @@ msgstr "Sök:"
 
 #: ../src/search.c:2690
 msgid "Recurse"
-msgstr "Rekursera"
+msgstr "Rekursivt"
 
 #: ../src/search.c:2695
 msgid "File name"
@@ -5097,11 +5113,11 @@ msgstr "Kan inte skapa temp-fil"
 
 #: ../src/secure_save.c:405
 msgid "Cannot rename the file"
-msgstr "Filnamnändring omöjlig"
+msgstr "Kan inte byta namn på filen"
 
 #: ../src/secure_save.c:407
 msgid "File saving disabled by option"
-msgstr ""
+msgstr "Filen kan inte sparas (bortvalt)"
 
 #: ../src/secure_save.c:409
 msgid "Out of memory"
@@ -5113,7 +5129,7 @@ msgstr "Filem går ej att skriva"
 
 #: ../src/secure_save.c:415
 msgid "Secure file saving error"
-msgstr ""
+msgstr "Fel vid försök till säker filskrivning"
 
 #: ../src/thumb.c:396
 msgid "Thumbnail image in cache failed to load, trying to recreate.\n"
@@ -5153,7 +5169,7 @@ msgstr "Stäng av säker borttagning"
 
 #: ../src/trash.c:193
 msgid "Deletion by external command"
-msgstr ""
+msgstr "Borttagning med externkommando"
 
 #: ../src/trash.c:201
 #, c-format
@@ -5211,20 +5227,20 @@ msgstr "Ett eller fler filnamn har inte en gällande teckenkodning.\n"
 #: ../src/ui_fileops.c:95
 #, c-format
 msgid "Operations on, and display of these files with %s may not succeed.\n"
-msgstr ""
+msgstr "Risk för att filåtgärder inklusive visning av de här filerna inte fungerar med %s \n"
 
 #: ../src/ui_fileops.c:97
 msgid "If your filenames are not encoded in utf-8, try setting the environment variable G_BROKEN_FILENAMES=1\n"
-msgstr ""
+msgstr "Om filnamn inte är kodade i UTF-8: försök sätta miljövariabeln G_BROKEN_FILENAMES=1\n"
 
 #: ../src/ui_fileops.c:99
 #, c-format
 msgid "It appears G_BROKEN_FILENAMES is set to %s\n"
-msgstr ""
+msgstr "Verkar som G_BROKEN_FILENAMES har värdet %s\n"
 
 #: ../src/ui_fileops.c:101
 msgid "It appears G_BROKEN_FILENAMES is not set\n"
-msgstr ""
+msgstr "Verkar som G_BROKEN_FILENAMES ej har något värde\n"
 
 #: ../src/ui_fileops.c:103
 #, c-format
@@ -5241,7 +5257,7 @@ msgid ""
 "Preferred encoding appears to be UTF-8, however the file:\n"
 msgstr ""
 "\n"
-"Teckenkodningen ser ut att vara UTF-8, men filen:\n"
+"Gällande teckenkodning ser ut att vara UTF-8, men filen:\n"
 
 #: ../src/ui_fileops.c:109
 #: ../src/ui_fileops.c:112
@@ -5287,7 +5303,7 @@ msgstr "Misslyckades namnändra %s till %s."
 #: ../src/ui_pathsel.c:634
 #: ../src/ui_pathsel.c:642
 msgid "_Rename"
-msgstr "_Namnändra"
+msgstr "_Byt namn"
 
 #: ../src/ui_pathsel.c:636
 #: ../src/ui_pathsel.c:646
@@ -5357,6 +5373,9 @@ msgid ""
 "\n"
 "%s"
 msgstr ""
+"Borttagning av mappinnehållet stannade vid denna fil:\n"
+"\n"
+"%s"
 
 #: ../src/utilops.c:877
 #, c-format
@@ -5365,7 +5384,7 @@ msgid ""
 "Unable to start external command.\n"
 msgstr ""
 "%s\n"
-"Kan inte starta externkommando.\n"
+"Kan inte starta externkommandot\n"
 
 #: ../src/utilops.c:957
 #, c-format
@@ -5396,7 +5415,7 @@ msgstr "Filinformation"
 #: ../src/utilops.c:1387
 #: ../src/utilops.c:1485
 msgid "Sidecars"
-msgstr ""
+msgstr "'Sidecar'-filer"
 
 #: ../src/utilops.c:1389
 msgid "Write to file"
@@ -5404,7 +5423,7 @@ msgstr "Skriv till fil"
 
 #: ../src/utilops.c:1429
 msgid "Choose the destination folder."
-msgstr "Välj målmapp."
+msgstr "Välj målmapp"
 
 #: ../src/utilops.c:1487
 msgid "New name"
@@ -5449,7 +5468,7 @@ msgstr "Formatterad namnändring"
 
 #: ../src/utilops.c:1576
 msgid "Format (* = original name, ## = numbers)"
-msgstr ""
+msgstr "Format (* = originalnamn, ## = siffror)"
 
 #: ../src/utilops.c:1714
 msgid "Another operation in progress.\n"
@@ -5462,7 +5481,7 @@ msgstr "Fil: '%s'\n"
 
 #: ../src/utilops.c:1775
 msgid "with sidecar files:\n"
-msgstr ""
+msgstr "med 'sidecar'-filer:\n"
 
 #: ../src/utilops.c:1781
 #, c-format
@@ -5497,11 +5516,13 @@ msgid ""
 "The following metadata tags will be written to\n"
 "'%s'."
 msgstr ""
+"Följande metadata kommer att skrivas till\n"
+"'%s'"
 
 #: ../src/utilops.c:1880
 #, c-format
 msgid "The following metadata tags will be written to the image file itself."
-msgstr ""
+msgstr "Följande metadata kommer att skrivas till själva bildfilen"
 
 #: ../src/utilops.c:1986
 msgid "Delete files?"
@@ -5561,7 +5582,7 @@ msgstr "De här filerna kommer att kopieras"
 #: ../src/utilops.c:2170
 #: ../src/utilops.c:2636
 msgid "Rename"
-msgstr "Namnändra"
+msgstr "Byt namn"
 
 #: ../src/utilops.c:2171
 msgid "Rename files?"
@@ -5575,14 +5596,15 @@ msgstr "Detta ändrar namnen på följande filer"
 msgid "Can't run external editor"
 msgstr "Kan inte starta extern textredigerare"
 
+# Editor" must be wrong, better "Link"
 #: ../src/utilops.c:2258
 msgid "Editor"
-msgstr "Redigerare"
+msgstr "Länka"
 
-# "Run editor?" must be wrong!
+# "Run editor?" must be wrong, better "Create symlink?"
 #: ../src/utilops.c:2259
 msgid "Run editor?"
-msgstr "Länka till..."
+msgstr "Skapa länk (symlink)?"
 
 #: ../src/utilops.c:2262
 msgid "External command failed"
@@ -5661,8 +5683,8 @@ msgid ""
 "This will delete the folder.\n"
 "The contents of this folder will also be deleted."
 msgstr ""
-"Det här tar bort mappen.\n"
-"Mappens innehåll kommer också att tas bort."
+"Det här tar bort mappen\n"
+"Mappens innehåll kommer också att tas bort"
 
 #: ../src/utilops.c:2637
 msgid "Rename folder?"
@@ -5690,7 +5712,7 @@ msgstr "_Kopiera"
 
 #: ../src/view_dir.c:399
 msgid "_Move"
-msgstr "Fl_ytta"
+msgstr "_Flytta"
 
 #: ../src/view_dir.c:645
 msgid "_Up to parent"
similarity index 100%
rename from po/zh_CN.GB2312.po
rename to po/zh_CN.po
diff --git a/src/.cvsignore b/src/.cvsignore
deleted file mode 100644 (file)
index 1f1b8f7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-.deps
-Makefile.in
-Makefile
-gqview
index cbb9e8a..02cfeec 100644 (file)
@@ -8,6 +8,8 @@ AM_CFLAGS =                             \
        $(LIBCHAMPLAIN_CFLAGS)          \
        $(LIBCHAMPLAIN_GTK_CFLAGS)      \
        $(LUA_CFLAGS)                   \
+       $(CLUTTER_CFLAGS)               \
+       $(CLUTTER_GTK_CFLAGS)   \
        -I$(top_srcdir)                 \
        -I$(top_builddir)
 
@@ -19,6 +21,8 @@ AM_CXXFLAGS =                         \
        $(LIBCHAMPLAIN_CFLAGS)          \
        $(LIBCHAMPLAIN_GTK_CFLAGS)      \
        $(LUA_CFLAGS)                   \
+       $(CLUTTER_CFLAGS)               \
+       $(CLUTTER_GTK_CFLAGS)   \
        -I$(top_srcdir)                 \
        -I$(top_builddir)
 
@@ -211,6 +215,8 @@ geeqie_SOURCES = \
        pixbuf-renderer.h       \
        renderer-tiles.c        \
        renderer-tiles.h        \
+       renderer-clutter.c      \
+       renderer-clutter.h      \
        pixbuf_util.c   \
        pixbuf_util.h   \
        preferences.c   \
@@ -256,7 +262,7 @@ geeqie_SOURCES = \
        window.h        \
        lua.c
 
-geeqie_LDADD = $(GTK_LIBS) $(GLIB_LIBS) $(INTLLIBS) $(JPEG_LIBS) $(TIFF_LIBS) $(LCMS_LIBS) $(EXIV2_LIBS) $(LIBCHAMPLAIN_LIBS) $(LIBCHAMPLAIN_GTK_LIBS) $(LUA_LIBS)
+geeqie_LDADD = $(GTK_LIBS) $(GLIB_LIBS) $(INTLLIBS) $(JPEG_LIBS) $(TIFF_LIBS) $(LCMS_LIBS) $(EXIV2_LIBS) $(LIBCHAMPLAIN_LIBS) $(LIBCHAMPLAIN_GTK_LIBS) $(LUA_LIBS) $(CLUTTER_LIBS) $(CLUTTER_GTK_LIBS)
 
 EXTRA_DIST = \
        $(extra_SLIK)
index 182694f..ce63ef9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -85,11 +85,11 @@ static void advanced_exif_update(ExifWin *ew)
        ExifItem *item;
 
        exif = exif_read_fd(ew->fd);
-       
+
        gtk_widget_set_sensitive(ew->scrolled, !!exif);
 
        if (!exif) return;
-       
+
        exif_original = exif_get_original(exif);
 
        store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(ew->listview)));
@@ -114,7 +114,7 @@ static void advanced_exif_update(ExifWin *ew)
                g_free(text);
                elements = g_strdup_printf("%d", exif_item_get_elements(item));
                description = exif_item_get_description(item);
-               if (!description || *description == '\0') 
+               if (!description || *description == '\0')
                        {
                        g_free(description);
                        description = g_strdup(tag_name);
@@ -176,10 +176,10 @@ static void advanced_exif_dnd_get(GtkWidget *listview, GdkDragContext *context,
                                  guint time, gpointer data)
 {
        //ExifWin *ew = data;
-       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); 
+       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview));
        GtkTreeIter iter;
 
-       if (gtk_tree_selection_get_selected(sel, NULL, &iter)) 
+       if (gtk_tree_selection_get_selected(sel, NULL, &iter))
                {
                GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview));
                gchar *key;
@@ -196,10 +196,10 @@ static void advanced_exif_dnd_get(GtkWidget *listview, GdkDragContext *context,
 static void advanced_exif_dnd_begin(GtkWidget *listview, GdkDragContext *context, gpointer data)
 {
        //ExifWin *ew = data;
-       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); 
+       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview));
        GtkTreeIter iter;
 
-       if (gtk_tree_selection_get_selected(sel, NULL, &iter)) 
+       if (gtk_tree_selection_get_selected(sel, NULL, &iter))
                {
                GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview));
                gchar *key;
@@ -230,7 +230,7 @@ static void advanced_exif_add_column(GtkWidget *listview, const gchar *title, gi
                {
                gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
                }
-       
+
        gtk_tree_view_column_set_resizable(column, TRUE);
        gtk_tree_view_column_set_sort_column_id(column, n);
 
@@ -379,7 +379,7 @@ GtkWidget *advanced_exif_new(void)
        advanced_exif_add_column(ew->listview, _("Tag"), EXIF_ADVCOL_TAG, FALSE);
        advanced_exif_add_column(ew->listview, _("Format"), EXIF_ADVCOL_FORMAT, FALSE);
        advanced_exif_add_column(ew->listview, _("Elements"), EXIF_ADVCOL_ELEMENTS, FALSE);
-       
+
 
        gtk_drag_source_set(ew->listview,
                           GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
index b77f7c9..7cc6c58 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index afc1220..0250d4f 100644 (file)
--- a/src/bar.c
+++ b/src/bar.c
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
@@ -40,7 +40,7 @@ struct _KnownPanes
        const gchar *config;
 };
 
-static const gchar default_config_histogram[] = 
+static const gchar default_config_histogram[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -49,7 +49,7 @@ static const gchar default_config_histogram[] =
 "    </layout>"
 "</gq>";
 
-static const gchar default_config_title[] = 
+static const gchar default_config_title[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -58,7 +58,7 @@ static const gchar default_config_title[] =
 "    </layout>"
 "</gq>";
 
-static const gchar default_config_keywords[] = 
+static const gchar default_config_keywords[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -67,7 +67,7 @@ static const gchar default_config_keywords[] =
 "    </layout>"
 "</gq>";
 
-static const gchar default_config_comment[] = 
+static const gchar default_config_comment[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -76,7 +76,7 @@ static const gchar default_config_comment[] =
 "    </layout>"
 "</gq>";
 
-static const gchar default_config_exif[] = 
+static const gchar default_config_exif[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -102,7 +102,7 @@ static const gchar default_config_exif[] =
 "    </layout>"
 "</gq>";
 
-static const gchar default_config_file_info[] = 
+static const gchar default_config_file_info[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -115,7 +115,7 @@ static const gchar default_config_file_info[] =
 "    </layout>"
 "</gq>";
 
-static const gchar default_config_location[] = 
+static const gchar default_config_location[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -132,7 +132,7 @@ static const gchar default_config_location[] =
 "    </layout>"
 "</gq>";
 
-static const gchar default_config_copyright[] = 
+static const gchar default_config_copyright[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -147,7 +147,7 @@ static const gchar default_config_copyright[] =
 
 #ifdef HAVE_LIBCHAMPLAIN
 #ifdef HAVE_LIBCHAMPLAIN_GTK
-static const gchar default_config_gps[] = 
+static const gchar default_config_gps[] =
 "<gq>"
 "    <layout id = '_current_'>"
 "        <bar>"
@@ -202,9 +202,9 @@ static void bar_expander_move(GtkWidget *widget, gpointer data, gboolean up, gbo
        if (!expander) return;
        box = gtk_widget_get_ancestor(expander, GTK_TYPE_BOX);
        if (!box) return;
-       
+
        gtk_container_child_get(GTK_CONTAINER(box), expander, "position", &pos, NULL);
-       
+
        if (single_step)
                {
                pos = up ? (pos - 1) : (pos + 1);
@@ -214,7 +214,7 @@ static void bar_expander_move(GtkWidget *widget, gpointer data, gboolean up, gbo
                {
                pos = up ? 0 : -1;
                }
-       
+
        gtk_box_reorder_child(GTK_BOX(box), expander, pos);
 }
 
@@ -253,14 +253,14 @@ static void bar_expander_add_cb(GtkWidget *widget, gpointer data)
        const gchar *config;
 
        if (!id) return;
-       
+
        while (pane->id)
                {
                if (strcmp(pane->id, id) == 0) break;
                pane++;
                }
        if (!pane->id) return;
-       
+
        config = bar_pane_get_default_config(id);
        if (config) load_config_from_buf(config, strlen(config), FALSE);
 
@@ -276,20 +276,20 @@ static void bar_menu_popup(GtkWidget *widget)
        BarData *bd;
 
        bd = g_object_get_data(G_OBJECT(widget), "bar_data");
-       if (bd) 
+       if (bd)
                {
                expander = NULL;
-               bar = widget; 
+               bar = widget;
                }
        else
                {
                expander = widget;
-               bar = widget->parent;
+               bar = gtk_widget_get_parent(widget);
                while (bar && !g_object_get_data(G_OBJECT(bar), "bar_data"))
-                       bar = bar->parent;
+                       bar = gtk_widget_get_parent(bar);
                if (!bar) return;
                }
+
        menu = popup_menu_short_lived();
 
        if (expander)
@@ -310,20 +310,20 @@ static void bar_menu_popup(GtkWidget *widget)
                g_object_set_data(G_OBJECT(item), "pane_add_id", pane->id);
                pane++;
                }
-       
+
        gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, bar, 0, GDK_CURRENT_TIME);
 }
 
 
-static gboolean bar_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) 
-{ 
+static gboolean bar_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
        if (bevent->button == MOUSE_BUTTON_RIGHT)
                {
                bar_menu_popup(widget);
                return TRUE;
                }
        return FALSE;
-} 
+}
 
 
 static void bar_pane_set_fd_cb(GtkWidget *expander, gpointer data)
@@ -344,7 +344,7 @@ void bar_set_fd(GtkWidget *bar, FileData *fd)
        bd->fd = file_data_ref(fd);
 
        gtk_container_foreach(GTK_CONTAINER(bd->vbox), bar_pane_set_fd_cb, fd);
-       
+
        gtk_label_set_text(GTK_LABEL(bd->label_file_name), (bd->fd) ? bd->fd->name : "");
 
 }
@@ -371,19 +371,19 @@ gboolean bar_event(GtkWidget *bar, GdkEvent *event)
        BarData *bd;
        GList *list, *work;
        gboolean ret = FALSE;
-       
+
        bd = g_object_get_data(G_OBJECT(bar), "bar_data");
        if (!bd) return FALSE;
 
        list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
-       
+
        work = list;
        while (work)
                {
                GtkWidget *widget = gtk_bin_get_child(GTK_BIN(work->data));
                PaneData *pd = g_object_get_data(G_OBJECT(widget), "pane_data");
                if (!pd) continue;
-       
+
                if (pd->pane_event && pd->pane_event(widget, event))
                        {
                        ret = TRUE;
@@ -400,21 +400,21 @@ GtkWidget *bar_find_pane_by_id(GtkWidget *bar, PaneType type, const gchar *id)
        BarData *bd;
        GList *list, *work;
        GtkWidget *ret = NULL;
-       
+
        if (!id || !id[0]) return NULL;
-       
+
        bd = g_object_get_data(G_OBJECT(bar), "bar_data");
        if (!bd) return NULL;
 
        list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
-       
+
        work = list;
        while (work)
                {
                GtkWidget *widget = gtk_bin_get_child(GTK_BIN(work->data));
                PaneData *pd = g_object_get_data(G_OBJECT(widget), "pane_data");
                if (!pd) continue;
-       
+
                if (type == pd->type && strcmp(id, pd->id) == 0)
                        {
                        ret = widget;
@@ -430,12 +430,12 @@ void bar_clear(GtkWidget *bar)
 {
        BarData *bd;
        GList *list, *work;
-       
+
        bd = g_object_get_data(G_OBJECT(bar), "bar_data");
        if (!bd) return;
 
        list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
-       
+
        work = list;
        while (work)
                {
@@ -452,23 +452,19 @@ void bar_write_config(GtkWidget *bar, GString *outstr, gint indent)
        GList *list, *work;
 
        if (!bar) return;
-       
+
        bd = g_object_get_data(G_OBJECT(bar), "bar_data");
        if (!bd) return;
 
        WRITE_NL(); WRITE_STRING("<bar ");
-#if GTK_CHECK_VERSION(2,20,0)
        write_bool_option(outstr, indent, "enabled", gtk_widget_get_visible(bar));
-#else
-       write_bool_option(outstr, indent, "enabled", GTK_WIDGET_VISIBLE(bar));
-#endif
        write_uint_option(outstr, indent, "width", bd->width);
        WRITE_STRING(">");
-       
+
        indent++;
        WRITE_NL(); WRITE_STRING("<clear/>");
 
-       list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));     
+       list = gtk_container_get_children(GTK_CONTAINER(bd->vbox));
        work = list;
        while (work)
                {
@@ -493,11 +489,11 @@ void bar_update_expander(GtkWidget *pane)
 {
        PaneData *pd = g_object_get_data(G_OBJECT(pane), "pane_data");
        GtkWidget *expander;
-       
+
        if (!pd) return;
 
-       expander = pane->parent;
-       
+       expander = gtk_widget_get_parent(pane);
+
        gtk_expander_set_expanded(GTK_EXPANDER(expander), pd->expanded);
 }
 
@@ -506,25 +502,25 @@ void bar_add(GtkWidget *bar, GtkWidget *pane)
        GtkWidget *expander;
        BarData *bd = g_object_get_data(G_OBJECT(bar), "bar_data");
        PaneData *pd = g_object_get_data(G_OBJECT(pane), "pane_data");
-       
+
        if (!bd) return;
 
        pd->lw = bd->lw;
        pd->bar = bar;
-       
+
        expander = gtk_expander_new(NULL);
        if (pd && pd->title)
                {
                gtk_expander_set_label_widget(GTK_EXPANDER(expander), pd->title);
                gtk_widget_show(pd->title);
                }
-               
+
        gtk_box_pack_start(GTK_BOX(bd->vbox), expander, FALSE, TRUE, 0);
-       
-       g_signal_connect(expander, "button_release_event", G_CALLBACK(bar_menu_cb), bd); 
-       
+
+       g_signal_connect(expander, "button_release_event", G_CALLBACK(bar_menu_cb), bd);
+
        gtk_container_add(GTK_CONTAINER(expander), pane);
-       
+
        gtk_expander_set_expanded(GTK_EXPANDER(expander), pd->expanded);
 
        gtk_widget_show(expander);
@@ -537,7 +533,7 @@ void bar_populate_default(GtkWidget *bar)
 {
        const gchar *populate_id[] = {"histogram", "title", "keywords", "comment", "exif", NULL};
        const gchar **id = populate_id;
-       
+
        while (*id)
                {
                const gchar *config = bar_pane_get_default_config(*id);
@@ -549,14 +545,14 @@ void bar_populate_default(GtkWidget *bar)
 static void bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
 {
        BarData *bd = data;
-       
+
        bd->width = allocation->width;
 }
 
 gint bar_get_width(GtkWidget *bar)
 {
        BarData *bd;
-       
+
        bd = g_object_get_data(G_OBJECT(bar), "bar_data");
        if (!bd) return 0;
 
@@ -582,7 +578,7 @@ static void bar_destroy(GtkWidget *widget, gpointer data)
 }
 
 #ifdef HAVE_LIBCHAMPLAIN_GTK
-/* 
+/*
    FIXME: this is an ugly hack that works around this bug:
    https://bugzilla.gnome.org/show_bug.cgi?id=590692
    http://bugzilla.openedhand.com/show_bug.cgi?id=1751
@@ -605,7 +601,7 @@ GtkWidget *bar_new(LayoutWindow *lw)
        bd = g_new0(BarData, 1);
 
        bd->lw = lw;
-       
+
        bd->widget = gtk_vbox_new(FALSE, PREF_PAD_GAP);
        g_object_set_data(G_OBJECT(bd->widget), "bar_data", bd);
        g_signal_connect(G_OBJECT(bd->widget), "destroy",
@@ -614,7 +610,7 @@ GtkWidget *bar_new(LayoutWindow *lw)
        g_signal_connect(G_OBJECT(bd->widget), "size-allocate",
                         G_CALLBACK(bar_size_allocate), bd);
 
-       g_signal_connect(G_OBJECT(bd->widget), "button_release_event", G_CALLBACK(bar_menu_cb), bd); 
+       g_signal_connect(G_OBJECT(bd->widget), "button_release_event", G_CALLBACK(bar_menu_cb), bd);
 
        bd->width = SIDEBAR_DEFAULT_WIDTH;
        gtk_widget_set_size_request(bd->widget, bd->width, -1);
@@ -643,7 +639,7 @@ GtkWidget *bar_new(LayoutWindow *lw)
        gtk_viewport_set_shadow_type(GTK_VIEWPORT(gtk_bin_get_child(GTK_BIN(scrolled))), GTK_SHADOW_NONE);
 
 #ifdef HAVE_LIBCHAMPLAIN_GTK
-       g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(scrolled))), "unrealize", G_CALLBACK(bar_unrealize_clutter_fix_cb), NULL); 
+       g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(scrolled))), "unrealize", G_CALLBACK(bar_unrealize_clutter_fix_cb), NULL);
 #endif
 
        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_NONE);
@@ -664,13 +660,13 @@ GtkWidget *bar_update_from_config(GtkWidget *bar, const gchar **attribute_names,
 
                if (READ_BOOL_FULL("enabled", enabled)) continue;
                if (READ_INT_FULL("width", width)) continue;
-               
+
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
-       
+
        gtk_widget_set_size_request(bar, width, -1);
-       if (enabled) 
+       if (enabled)
                {
                gtk_widget_show(bar);
                }
@@ -700,7 +696,7 @@ GtkWidget *bar_pane_expander_title(const gchar *title)
 gboolean bar_pane_translate_title(PaneType type, const gchar *id, gchar **title)
 {
        const KnownPanes *pane = known_panes;
-       
+
        if (!title) return FALSE;
        while (pane->id)
                {
@@ -708,9 +704,9 @@ gboolean bar_pane_translate_title(PaneType type, const gchar *id, gchar **title)
                pane++;
                }
        if (!pane->id) return FALSE;
-       
+
        if (*title && **title && strcmp(pane->title, *title) != 0) return FALSE;
-       
+
        g_free(*title);
        *title = g_strdup(_(pane->title));
        return TRUE;
@@ -719,7 +715,7 @@ gboolean bar_pane_translate_title(PaneType type, const gchar *id, gchar **title)
 const gchar *bar_pane_get_default_config(const gchar *id)
 {
        const KnownPanes *pane = known_panes;
-       
+
        while (pane->id)
                {
                if (strcmp(pane->id, id) == 0) break;
@@ -728,5 +724,5 @@ const gchar *bar_pane_get_default_config(const gchar *id)
        if (!pane->id) return NULL;
        return pane->config;
 }
-       
+
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 1534d60..aa0600d 100644 (file)
--- a/src/bar.h
+++ b/src/bar.h
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
@@ -35,7 +35,7 @@ struct _PaneData {
        gboolean expanded;
        gchar *id;
        PaneType type;
-       
+
        /* filled in by bar */
        GtkWidget *bar;
        LayoutWindow *lw;
index 2b14125..447db43 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -60,16 +60,22 @@ static void bar_pane_comment_write(PaneCommentData *pcd)
 static void bar_pane_comment_update(PaneCommentData *pcd)
 {
        gchar *comment = NULL;
+       gchar *orig_comment = NULL;
+       gchar *comment_not_null;
        GtkTextBuffer *comment_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pcd->comment_view));
 
-       g_signal_handlers_block_by_func(comment_buffer, bar_pane_comment_changed, pcd);
-
+       orig_comment = text_widget_text_pull(pcd->comment_view);
        comment = metadata_read_string(pcd->fd, pcd->key, METADATA_PLAIN);
-       gtk_text_buffer_set_text(comment_buffer,
-                                (comment) ? comment : "", -1);
+       comment_not_null = (comment) ? comment : "";
+
+       if (strcmp(orig_comment, comment_not_null) != 0)
+               {
+               g_signal_handlers_block_by_func(comment_buffer, bar_pane_comment_changed, pcd);
+               gtk_text_buffer_set_text(comment_buffer, comment_not_null, -1);
+               g_signal_handlers_unblock_by_func(comment_buffer, bar_pane_comment_changed, pcd);
+               }
        g_free(comment);
-       
-       g_signal_handlers_unblock_by_func(comment_buffer, bar_pane_comment_changed, pcd);
+       g_free(orig_comment);
 
        gtk_widget_set_sensitive(pcd->comment_view, (pcd->fd != NULL));
 }
@@ -84,7 +90,7 @@ static void bar_pane_comment_set_selection(PaneCommentData *pcd, gboolean append
 
        list = layout_selection_list(pcd->pane.lw);
        list = file_data_process_groups_in_selection(list, FALSE, NULL);
-       
+
        work = list;
        while (work)
                {
@@ -141,11 +147,7 @@ static gint bar_pane_comment_event(GtkWidget *bar, GdkEvent *event)
        pcd = g_object_get_data(G_OBJECT(bar), "pane_data");
        if (!pcd) return FALSE;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_has_focus(pcd->comment_view)) return gtk_widget_event(pcd->comment_view, event);
-#else
-       if (GTK_WIDGET_HAS_FOCUS(pcd->comment_view)) return gtk_widget_event(pcd->comment_view, event);
-#endif
 
        return FALSE;
 }
@@ -162,14 +164,14 @@ static void bar_pane_comment_write_config(GtkWidget *pane, GString *outstr, gint
        write_char_option(outstr, indent, "title", gtk_label_get_text(GTK_LABEL(pcd->pane.title)));
        WRITE_BOOL(pcd->pane, expanded);
        WRITE_CHAR(*pcd, key);
-       WRITE_INT(*pcd, height); 
+       WRITE_INT(*pcd, height);
        WRITE_STRING("/>");
 }
 
 static void bar_pane_comment_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        PaneCommentData *pcd = data;
-       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pcd->fd) 
+       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pcd->fd)
                {
                DEBUG_1("Notify pane_comment: %s %04x", fd->path, type);
 
@@ -181,9 +183,7 @@ static void bar_pane_comment_changed(GtkTextBuffer *buffer, gpointer data)
 {
        PaneCommentData *pcd = data;
 
-       file_data_unregister_notify_func(bar_pane_comment_notify_cb, pcd);
        bar_pane_comment_write(pcd);
-       file_data_register_notify_func(bar_pane_comment_notify_cb, pcd, NOTIFY_PRIORITY_LOW);
 }
 
 
@@ -196,18 +196,6 @@ static void bar_pane_comment_populate_popup(GtkTextView *textview, GtkMenu *menu
        menu_item_add_stock(GTK_WIDGET(menu), _("Replace existing text in selected files"), GTK_STOCK_CONVERT, G_CALLBACK(bar_pane_comment_sel_replace_cb), data);
 }
 
-#if 0
-static void bar_pane_comment_close(GtkWidget *bar)
-{
-       PaneCommentData *pcd;
-
-       pcd = g_object_get_data(G_OBJECT(bar), "pane_data");
-       if (!pcd) return;
-
-       gtk_widget_destroy(pcd->comment_view);
-}
-#endif
-
 static void bar_pane_comment_destroy(GtkWidget *widget, gpointer data)
 {
        PaneCommentData *pcd = data;
@@ -230,7 +218,7 @@ static GtkWidget *bar_pane_comment_new(const gchar *id, const gchar *title, cons
        GtkTextBuffer *buffer;
 
        pcd = g_new0(PaneCommentData, 1);
-       
+
        pcd->pane.pane_set_fd = bar_pane_comment_set_fd;
        pcd->pane.pane_event = bar_pane_comment_event;
        pcd->pane.pane_write_config = bar_pane_comment_write_config;
@@ -239,17 +227,17 @@ static GtkWidget *bar_pane_comment_new(const gchar *id, const gchar *title, cons
        pcd->pane.type = PANE_COMMENT;
 
        pcd->pane.expanded = expanded;
-       
+
        pcd->key = g_strdup(key);
        pcd->height = height;
 
        scrolled = gtk_scrolled_window_new(NULL, NULL);
-       
+
        pcd->widget = scrolled;
        g_object_set_data(G_OBJECT(pcd->widget), "pane_data", pcd);
        g_signal_connect(G_OBJECT(pcd->widget), "destroy",
                         G_CALLBACK(bar_pane_comment_destroy), pcd);
-       
+
        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);
@@ -293,11 +281,11 @@ GtkWidget *bar_pane_comment_new_from_config(const gchar **attribute_names, const
                if (READ_BOOL_FULL("expanded", expanded)) continue;
                if (READ_INT_FULL("height", height)) continue;
                if (READ_CHAR_FULL("id", id)) continue;
-               
+
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
-       
+
        bar_pane_translate_title(PANE_COMMENT, id, &title);
        ret = bar_pane_comment_new(id, title, key, expanded, height);
        g_free(title);
@@ -325,7 +313,7 @@ void bar_pane_comment_update_from_config(GtkWidget *pane, const gchar **attribut
                if (READ_BOOL_FULL("expanded", pcd->pane.expanded)) continue;
                if (READ_INT_FULL("height", pcd->height)) continue;
                if (READ_CHAR_FULL("id", pcd->pane.id)) continue;
-               
+
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
index 7a33314..9da238a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
index b8234d7..4a3fce7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
@@ -54,8 +54,8 @@ struct _ExifEntry
 
        PaneExifData *ped;
 };
-       
-       
+
+
 struct _PaneExifData
 {
        PaneData pane;
@@ -64,10 +64,10 @@ struct _PaneExifData
        GtkSizeGroup *size_group;
 
        gint min_height;
-       
+
        gboolean all_hidden;
        gboolean show_all;
-       
+
        FileData *fd;
 };
 
@@ -143,7 +143,7 @@ static void bar_pane_exif_setup_entry_box(PaneExifData *ped, ExifEntry *ee)
 //             gtk_widget_set_size_request(ee->value_widget, 100, -1);
                gtk_misc_set_alignment(GTK_MISC(ee->value_widget), 0.0, 0.5);
                }
-               
+
        gtk_box_pack_start(GTK_BOX(ee->box), ee->value_widget, TRUE, TRUE, 1);
        gtk_widget_show(ee->value_widget);
 }
@@ -151,7 +151,7 @@ static void bar_pane_exif_setup_entry_box(PaneExifData *ped, ExifEntry *ee)
 static GtkWidget *bar_pane_exif_add_entry(PaneExifData *ped, const gchar *key, const gchar *title, gboolean if_set, gboolean editable)
 {
        ExifEntry *ee = g_new0(ExifEntry, 1);
-       
+
        ee->key = g_strdup(key);
        if (title && title[0])
                {
@@ -162,27 +162,27 @@ static GtkWidget *bar_pane_exif_add_entry(PaneExifData *ped, const gchar *key, c
                ee->title = exif_get_description_by_key(key);
                ee->auto_title = TRUE;
                }
-               
+
        ee->if_set = if_set;
        ee->editable = editable;
-       
+
        ee->ped = ped;
-       
+
        ee->ebox = gtk_event_box_new();
        g_object_set_data(G_OBJECT(ee->ebox), "entry_data", ee);
        g_signal_connect_after(G_OBJECT(ee->ebox), "destroy",
                               G_CALLBACK(bar_pane_exif_entry_destroy), ee);
-       
+
        gtk_box_pack_start(GTK_BOX(ped->vbox), ee->ebox, FALSE, FALSE, 0);
 
        bar_pane_exif_entry_dnd_init(ee->ebox);
        g_signal_connect(ee->ebox, "button_release_event", G_CALLBACK(bar_pane_exif_menu_cb), ped);
-       
+
        bar_pane_exif_setup_entry_box(ped, ee);
-        
+
        bar_pane_exif_entry_update_title(ee);
        bar_pane_exif_update(ped);
-       
+
        return ee->ebox;
 }
 
@@ -191,16 +191,16 @@ static void bar_pane_exif_reparent_entry(GtkWidget *entry, GtkWidget *pane)
        PaneExifData *ped = g_object_get_data(G_OBJECT(pane), "pane_data");
        PaneExifData *old_ped;
        ExifEntry *ee = g_object_get_data(G_OBJECT(entry), "entry_data");
-       
+
        if (!ped || !ee) return;
-       
+
        old_ped = ee->ped;
-       
+
        g_object_ref(entry);
-       
+
        gtk_size_group_remove_widget(old_ped->size_group, ee->title_label);
        gtk_container_remove(GTK_CONTAINER(old_ped->vbox), entry);
-       
+
        ee->ped = ped;
        gtk_size_group_add_widget(ped->size_group, ee->title_label);
        gtk_box_pack_start(GTK_BOX(ped->vbox), entry, FALSE, FALSE, 0);
@@ -219,7 +219,7 @@ static void bar_pane_exif_update_entry(PaneExifData *ped, GtkWidget *entry, gboo
 {
        gchar *text;
        ExifEntry *ee = g_object_get_data(G_OBJECT(entry), "entry_data");
-       
+
        if (!ee) return;
        text = metadata_read_string(ped->fd, ee->key, ee->editable ? METADATA_PLAIN : METADATA_FORMATTED);
 
@@ -245,9 +245,9 @@ static void bar_pane_exif_update_entry(PaneExifData *ped, GtkWidget *entry, gboo
                gtk_widget_show(entry);
                ped->all_hidden = FALSE;
                }
-               
+
        g_free(text);
-       
+
        if (update_title) bar_pane_exif_entry_update_title(ee);
 }
 
@@ -257,13 +257,13 @@ static void bar_pane_exif_update(PaneExifData *ped)
 
        ped->all_hidden = TRUE;
 
-       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));    
+       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));
        work = list;
        while (work)
                {
                GtkWidget *entry = work->data;
                work = work->next;
-               
+
                bar_pane_exif_update_entry(ped, entry, FALSE);
                }
        g_list_free(list);
@@ -293,7 +293,7 @@ gint bar_pane_exif_event(GtkWidget *bar, GdkEvent *event)
        ped = g_object_get_data(G_OBJECT(bar), "pane_data");
        if (!ped) return FALSE;
 
-       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));    
+       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));
        work = list;
        while (!ret && work)
                {
@@ -301,11 +301,7 @@ gint bar_pane_exif_event(GtkWidget *bar, GdkEvent *event)
                ExifEntry *ee = g_object_get_data(G_OBJECT(entry), "entry_data");
                work = work->next;
 
-#if GTK_CHECK_VERSION(2,20,0)
                if (ee->editable && gtk_widget_has_focus(ee->value_widget)) ret = gtk_widget_event(ee->value_widget, event);
-#else
-               if (ee->editable && GTK_WIDGET_HAS_FOCUS(ee->value_widget)) ret = gtk_widget_event(ee->value_widget, event);
-#endif
                }
        g_list_free(list);
        return ret;
@@ -314,7 +310,7 @@ gint bar_pane_exif_event(GtkWidget *bar, GdkEvent *event)
 static void bar_pane_exif_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        PaneExifData *ped = data;
-       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == ped->fd) 
+       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == ped->fd)
                {
                DEBUG_1("Notify pane_exif: %s %04x", fd->path, type);
                bar_pane_exif_update(ped);
@@ -350,7 +346,7 @@ static void bar_pane_exif_entry_dnd_get(GtkWidget *entry, GdkDragContext *contex
        switch (info)
                {
                case TARGET_APP_EXIF_ENTRY:
-                       gtk_selection_data_set(selection_data, selection_data->target,
+                       gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
                                               8, (gpointer) &entry, sizeof(entry));
                        break;
 
@@ -359,7 +355,7 @@ static void bar_pane_exif_entry_dnd_get(GtkWidget *entry, GdkDragContext *contex
                        gtk_selection_data_set_text(selection_data, ee->key, -1);
                        break;
                }
-       
+
 }
 
 static void bar_pane_exif_dnd_receive(GtkWidget *pane, GdkDragContext *context,
@@ -371,42 +367,41 @@ static void bar_pane_exif_dnd_receive(GtkWidget *pane, GdkDragContext *context,
        GList *work, *list;
        gint pos;
        GtkWidget *new_entry = NULL;
-       
+
        ped = g_object_get_data(G_OBJECT(pane), "pane_data");
        if (!ped) return;
 
        switch (info)
                {
                case TARGET_APP_EXIF_ENTRY:
-                       new_entry = *(gpointer *)selection_data->data;
-                       
-                       if (new_entry->parent && new_entry->parent != ped->vbox) bar_pane_exif_reparent_entry(new_entry, pane);
-                       
+                       new_entry = *(gpointer *)gtk_selection_data_get_data(selection_data);
+
+                       if (gtk_widget_get_parent(new_entry) && gtk_widget_get_parent(new_entry) != ped->vbox) bar_pane_exif_reparent_entry(new_entry, pane);
+
                        break;
                default:
                        /* FIXME: this needs a check for valid exif keys */
-                       new_entry = bar_pane_exif_add_entry(ped, (gchar *)selection_data->data, NULL, TRUE, FALSE);
+                       new_entry = bar_pane_exif_add_entry(ped, (gchar *)gtk_selection_data_get_data(selection_data), NULL, TRUE, FALSE);
                        break;
                }
 
-       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));    
+       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));
        work = list;
        pos = 0;
        while (work)
                {
                gint nx, ny;
                GtkWidget *entry = work->data;
+               GtkAllocation allocation;
                work = work->next;
-               
+
                if (entry == new_entry) continue;
-               
-#if GTK_CHECK_VERSION(2,20,0)
+
+               gtk_widget_get_allocation(entry, &allocation);
+
                if (gtk_widget_is_drawable(entry) &&
-#else
-               if (GTK_WIDGET_DRAWABLE(entry) && 
-#endif
                    gtk_widget_translate_coordinates(pane, entry, x, y, &nx, &ny) &&
-                   ny < entry->allocation.height / 2) break;
+                   ny < allocation.height / 2) break;
                pos++;
                }
        g_list_free(list);
@@ -417,7 +412,7 @@ static void bar_pane_exif_dnd_receive(GtkWidget *pane, GdkDragContext *context,
 static void bar_pane_exif_entry_dnd_begin(GtkWidget *entry, GdkDragContext *context, gpointer data)
 {
        ExifEntry *ee = g_object_get_data(G_OBJECT(entry), "entry_data");
-       
+
        if (!ee) return;
        dnd_set_drag_label(entry, context, ee->key);
 }
@@ -472,14 +467,14 @@ static void bar_pane_exif_edit_cancel_cb(GenericDialog *gd, gpointer data)
 static void bar_pane_exif_edit_ok_cb(GenericDialog *gd, gpointer data)
 {
        ConfDialogData *cdd = data;
-       
+
        /* either one or the other */
        PaneExifData *ped = g_object_get_data(G_OBJECT(cdd->widget), "pane_data");
        ExifEntry *ee = g_object_get_data(G_OBJECT(cdd->widget), "entry_data");
 
        if (ped)
                {
-               bar_pane_exif_add_entry(ped, 
+               bar_pane_exif_add_entry(ped,
                                        gtk_entry_get_text(GTK_ENTRY(cdd->key_entry)),
                                        gtk_entry_get_text(GTK_ENTRY(cdd->title_entry)),
                                        cdd->if_set, cdd->editable);
@@ -488,17 +483,17 @@ static void bar_pane_exif_edit_ok_cb(GenericDialog *gd, gpointer data)
        if (ee)
                {
                const gchar *title;
-               GtkWidget *pane = cdd->widget->parent;
-               
+               GtkWidget *pane = gtk_widget_get_parent(cdd->widget);
+
                while (pane)
                        {
                        ped = g_object_get_data(G_OBJECT(pane), "pane_data");
                        if (ped) break;
-                       pane = pane->parent;
+                       pane = gtk_widget_get_parent(pane);
                        }
-               
+
                if (!pane) return;
-               
+
                g_free(ee->key);
                ee->key = g_strdup(gtk_entry_get_text(GTK_ENTRY(cdd->key_entry)));
                title = gtk_entry_get_text(GTK_ENTRY(cdd->title_entry));
@@ -514,10 +509,10 @@ static void bar_pane_exif_edit_ok_cb(GenericDialog *gd, gpointer data)
                        ee->title = g_strdup(title);
                        ee->auto_title = FALSE;
                        }
-               
+
                ee->if_set = cdd->if_set;
                ee->editable = cdd->editable;
-               
+
                bar_pane_exif_setup_entry_box(ped, ee);
 
                bar_pane_exif_entry_update_title(ee);
@@ -536,13 +531,13 @@ static void bar_pane_exif_conf_dialog(GtkWidget *widget)
        ExifEntry *ee = g_object_get_data(G_OBJECT(widget), "entry_data");
 
        cdd = g_new0(ConfDialogData, 1);
-       
+
        cdd->widget = widget;
 
 
        cdd->if_set = ee ? ee->if_set : TRUE;
        cdd->editable = ee ? ee->editable : FALSE;
-       
+
        cdd->gd = gd = generic_dialog_new(ee ? _("Configure entry") : _("Add entry"), "exif_entry_edit",
                                widget, TRUE,
                                bar_pane_exif_edit_cancel_cb, cdd);
@@ -616,11 +611,11 @@ static void bar_pane_exif_menu_popup(GtkWidget *widget, PaneExifData *ped)
                /* for the entry */
                gchar *conf = g_strdup_printf(_("Configure \"%s\""), ee->title);
                gchar *del = g_strdup_printf(_("Remove \"%s\""), ee->title);
-               
+
                menu_item_add_stock(menu, conf, GTK_STOCK_EDIT, G_CALLBACK(bar_pane_exif_conf_dialog_cb), widget);
                menu_item_add_stock(menu, del, GTK_STOCK_DELETE, G_CALLBACK(bar_pane_exif_delete_entry_cb), widget);
                menu_item_add_divider(menu);
-               
+
                g_free(conf);
                g_free(del);
                }
@@ -628,12 +623,12 @@ static void bar_pane_exif_menu_popup(GtkWidget *widget, PaneExifData *ped)
        /* for the pane */
        menu_item_add_stock(menu, _("Add entry"), GTK_STOCK_ADD, G_CALLBACK(bar_pane_exif_conf_dialog_cb), ped->widget);
        menu_item_add_check(menu, _("Show hidden entries"), ped->show_all, G_CALLBACK(bar_pane_exif_toggle_show_all_cb), ped);
-       
+
        gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME);
 }
 
-static gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) 
-{ 
+static gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
        PaneExifData *ped = data;
        if (bevent->button == MOUSE_BUTTON_RIGHT)
                {
@@ -641,7 +636,7 @@ static gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent,
                return TRUE;
                }
        return FALSE;
-} 
+}
 
 
 
@@ -662,7 +657,7 @@ static void bar_pane_exif_write_config(GtkWidget *pane, GString *outstr, gint in
 {
        PaneExifData *ped;
        GList *work, *list;
-       
+
        ped = g_object_get_data(G_OBJECT(pane), "pane_data");
        if (!ped) return;
 
@@ -672,14 +667,14 @@ static void bar_pane_exif_write_config(GtkWidget *pane, GString *outstr, gint in
        WRITE_BOOL(ped->pane, expanded);
        WRITE_STRING(">");
        indent++;
-       
-       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));    
+
+       list = gtk_container_get_children(GTK_CONTAINER(ped->vbox));
        work = list;
        while (work)
                {
                GtkWidget *entry = work->data;
                work = work->next;
-               
+
                bar_pane_exif_entry_write_config(entry, outstr, indent);
                }
        g_list_free(list);
@@ -709,6 +704,7 @@ static void bar_pane_exif_destroy(GtkWidget *widget, gpointer data)
        g_free(ped);
 }
 
+#if !GTK_CHECK_VERSION(3,0,0)
 static void bar_pane_exif_size_request(GtkWidget *pane, GtkRequisition *requisition, gpointer data)
 {
        PaneExifData *ped = data;
@@ -717,11 +713,15 @@ static void bar_pane_exif_size_request(GtkWidget *pane, GtkRequisition *requisit
                requisition->height = ped->min_height;
                }
 }
+#endif
 
 static void bar_pane_exif_size_allocate(GtkWidget *pane, GtkAllocation *alloc, gpointer data)
 {
        PaneExifData *ped = data;
        ped->min_height = alloc->height;
+#if GTK_CHECK_VERSION(3,0,0)
+       gtk_widget_set_size_request(ped->widget, -1, ped->min_height);
+#endif
 }
 
 static GtkWidget *bar_pane_exif_new(const gchar *id, const gchar *title, gboolean expanded)
@@ -748,11 +748,15 @@ static GtkWidget *bar_pane_exif_new(const gchar *id, const gchar *title, gboolea
        g_object_set_data(G_OBJECT(ped->widget), "pane_data", ped);
        g_signal_connect_after(G_OBJECT(ped->widget), "destroy",
                               G_CALLBACK(bar_pane_exif_destroy), ped);
+#if GTK_CHECK_VERSION(3,0,0)
+       gtk_widget_set_size_request(ped->widget, -1, ped->min_height);
+#else
        g_signal_connect(G_OBJECT(ped->widget), "size-request",
                         G_CALLBACK(bar_pane_exif_size_request), ped);
+#endif
        g_signal_connect(G_OBJECT(ped->widget), "size-allocate",
                         G_CALLBACK(bar_pane_exif_size_allocate), ped);
-       
+
        bar_pane_exif_dnd_init(ped->widget);
        g_signal_connect(ped->widget, "button_release_event", G_CALLBACK(bar_pane_exif_menu_cb), ped);
 
@@ -781,7 +785,7 @@ GtkWidget *bar_pane_exif_new_from_config(const gchar **attribute_names, const gc
 
                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);
        g_free(title);
@@ -805,7 +809,7 @@ void bar_pane_exif_update_from_config(GtkWidget *pane, const gchar **attribute_n
                if (READ_CHAR_FULL("title", title)) continue;
                if (READ_BOOL_FULL("expanded", ped->pane.expanded)) continue;
                if (READ_CHAR_FULL("id", ped->pane.id)) continue;
-               
+
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
@@ -842,10 +846,10 @@ void bar_pane_exif_entry_add_from_config(GtkWidget *pane, const gchar **attribut
                if (READ_CHAR_FULL("title", title)) continue;
                if (READ_BOOL_FULL("if_set", if_set)) continue;
                if (READ_BOOL_FULL("editable", editable)) continue;
-               
+
                log_printf("unknown attribute %s = %s\n", option, value);
                }
-       
+
        if (key && key[0]) bar_pane_exif_add_entry(ped, key, title, if_set, editable);
 }
 
index 78b5c8a..e609431 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 2b03315..a8d08d2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Colin Clark
  *
@@ -45,13 +45,15 @@ struct _PaneGPSData
 {
        PaneData pane;
        GtkWidget *widget;
-       FileData *fd;
        gchar *map_source;
        gint height;
+       FileData *fd;
        ClutterActor *gps_view;
-       ChamplainLayer *icon_layer;
+       ChamplainMarkerLayer *icon_layer;
        GList *selection_list;
-       GPtrArray *marker_list;
+       GList *not_added;
+       ChamplainBoundingBox *bbox;
+       guint num_added;
        guint create_markers_id;
        GtkWidget *progress;
        GtkWidget *slider;
@@ -71,9 +73,9 @@ static void bar_pane_gps_thumb_done_cb(ThumbLoader *tl, gpointer data)
        fd = g_object_get_data(G_OBJECT(marker), "file_fd");
        if (fd->thumb_pixbuf != NULL)
                {
-               actor = clutter_texture_new();
-               gtk_clutter_texture_set_from_pixbuf(CLUTTER_TEXTURE(actor), fd->thumb_pixbuf, NULL);
-               champlain_marker_set_image(CHAMPLAIN_MARKER(marker), actor);
+               actor = gtk_clutter_texture_new();
+               gtk_clutter_texture_set_from_pixbuf(GTK_CLUTTER_TEXTURE(actor), fd->thumb_pixbuf, NULL);
+               champlain_label_set_image(CHAMPLAIN_LABEL(marker), actor);
                }
        thumb_loader_free(tl);
 }
@@ -106,14 +108,14 @@ static gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButton
 
                /* If the marker is showing a thumbnail, delete it
                 */
-               current_image = champlain_marker_get_image(CHAMPLAIN_MARKER(marker));
+               current_image = champlain_label_get_image(CHAMPLAIN_LABEL(marker));
                if (current_image != NULL)
                        {
                        clutter_actor_destroy(CLUTTER_ACTOR(current_image));
-                       champlain_marker_set_image(CHAMPLAIN_MARKER(marker), NULL);
+                       champlain_label_set_image(CHAMPLAIN_LABEL(marker), NULL);
                        }
-                       
-               current_text = g_strdup(champlain_marker_get_text(CHAMPLAIN_MARKER(marker)));
+
+               current_text = g_strdup(champlain_label_get_text(CHAMPLAIN_LABEL(marker)));
 
                /* If the marker is showing only the text character, replace it with a
                 * thumbnail and date and altitude
@@ -126,13 +128,13 @@ static gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButton
                         */
                         if (fd->thumb_pixbuf != NULL)
                                {
-                               actor = clutter_texture_new();
-                               gtk_clutter_texture_set_from_pixbuf(CLUTTER_TEXTURE(actor), fd->thumb_pixbuf, NULL);
-                               champlain_marker_set_image(CHAMPLAIN_MARKER(marker), actor);
+                               actor = gtk_clutter_texture_new();
+                               gtk_clutter_texture_set_from_pixbuf(GTK_CLUTTER_TEXTURE(actor), fd->thumb_pixbuf, NULL);
+                               champlain_label_set_image(CHAMPLAIN_LABEL(marker), actor);
                                }
                        else if (fd->pixbuf != NULL)
                                {
-                               actor = clutter_texture_new();
+                               actor = gtk_clutter_texture_new();
                                width = gdk_pixbuf_get_width (fd->pixbuf);
                                height = gdk_pixbuf_get_height (fd->pixbuf);
                                switch (fd->exif_orientation)
@@ -149,11 +151,11 @@ static gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButton
                                        default:
                                                rotate = GDK_PIXBUF_ROTATE_NONE;
                                        }
-                                                                               
-                                       gtk_clutter_texture_set_from_pixbuf(CLUTTER_TEXTURE(actor),
+
+                                       gtk_clutter_texture_set_from_pixbuf(GTK_CLUTTER_TEXTURE(actor),
                                                                                gdk_pixbuf_rotate_simple(gdk_pixbuf_scale_simple(fd->pixbuf, THUMB_SIZE, height * THUMB_SIZE / width,
                                                                                GDK_INTERP_NEAREST), rotate), NULL);
-                                       champlain_marker_set_image(CHAMPLAIN_MARKER(marker), actor);
+                                       champlain_label_set_image(CHAMPLAIN_LABEL(marker), actor);
                                }
                        else
                                {
@@ -165,7 +167,7 @@ static gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButton
                                                                                        marker);
                                thumb_loader_start(tl, fd);
                                }
-                               
+
                        text = g_string_new(fd->name);
                        g_string_append(text, "\n");
                        g_string_append(text, text_from_time(fd->date));
@@ -176,10 +178,10 @@ static gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButton
                                g_string_append(text, altitude);
                                }
 
-                       champlain_marker_set_text(CHAMPLAIN_MARKER(marker), text->str);
-                       champlain_marker_set_color(CHAMPLAIN_MARKER(marker), &thumb_colour);
-                       champlain_marker_set_text_color(CHAMPLAIN_MARKER(marker), &text_colour);
-                       champlain_marker_set_font_name(CHAMPLAIN_MARKER(marker), "sans 8");
+                       champlain_label_set_text(CHAMPLAIN_LABEL(marker), text->str);
+                       champlain_label_set_color(CHAMPLAIN_LABEL(marker), &thumb_colour);
+                       champlain_label_set_text_color(CHAMPLAIN_LABEL(marker), &text_colour);
+                       champlain_label_set_font_name(CHAMPLAIN_LABEL(marker), "sans 8");
 
                        g_free(altitude);
                        g_string_free(text, TRUE);
@@ -188,14 +190,14 @@ static gboolean bar_pane_gps_marker_keypress_cb(GtkWidget *widget, ClutterButton
                 */
                else
                        {
-                       champlain_marker_set_text(CHAMPLAIN_MARKER(marker), "i");
-                       champlain_marker_set_color(CHAMPLAIN_MARKER(marker), &marker_colour);
-                       champlain_marker_set_text_color(CHAMPLAIN_MARKER(marker), &marker_colour);
-                       champlain_marker_set_font_name(CHAMPLAIN_MARKER(marker), "courier 5");
+                       champlain_label_set_text(CHAMPLAIN_LABEL(marker), "i");
+                       champlain_label_set_color(CHAMPLAIN_LABEL(marker), &marker_colour);
+                       champlain_label_set_text_color(CHAMPLAIN_LABEL(marker), &marker_colour);
+                       champlain_label_set_font_name(CHAMPLAIN_LABEL(marker), "courier 5");
                        }
 
                g_free(current_text);
-               
+
                return TRUE;
                }
        return TRUE;
@@ -213,67 +215,57 @@ static gboolean bar_pane_gps_create_markers_cb(gpointer data)
        GString *message;
 
        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pgd->progress),
-                                                       (gdouble)(pgd->selection_count - g_list_length(pgd->selection_list)) /
+                                                       (gdouble)(pgd->selection_count - g_list_length(pgd->not_added)) /
                                                        (gdouble)pgd->selection_count);
-                                                       
+
        message = g_string_new("");
-       g_string_printf(message, "%i/%i", (pgd->selection_count - g_list_length(pgd->selection_list)),
+       g_string_printf(message, "%i/%i", (pgd->selection_count - g_list_length(pgd->not_added)),
                                                                                                                                                        pgd->selection_count);
        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pgd->progress), message->str);
        g_string_free(message, TRUE);
-       
-       work = pgd->selection_list;
-       while (work)
+
+       if(pgd->not_added)
                {
-               fd = work->data;
-               pgd->selection_list = g_list_remove(pgd->selection_list, work->data);
-               /* If the file has a parent, it must be a sidecar file. Do not process sidecar files
-               */
-               if (fd != NULL && fd->parent == NULL)
+               fd = pgd->not_added->data;
+               pgd->not_added = pgd->not_added->next;
+
+               latitude = metadata_read_GPS_coord(fd, "Xmp.exif.GPSLatitude", 1000);
+               longitude = metadata_read_GPS_coord(fd, "Xmp.exif.GPSLongitude", 1000);
+
+               if ((latitude != 1000) && (longitude != 1000))
                        {
-                       latitude = metadata_read_GPS_coord(fd, "Xmp.exif.GPSLatitude", 1000);
-                       longitude = metadata_read_GPS_coord(fd, "Xmp.exif.GPSLongitude", 1000);
+                       pgd->num_added++;
 
-                       if ((latitude != 1000) && (longitude != 1000))
-                               {
-                               marker = champlain_marker_new_with_text("i","courier 5", &marker_colour, &marker_colour);
+                       marker = champlain_label_new_with_text("i","courier 5", &marker_colour, &marker_colour);
 
-                               champlain_base_marker_set_position(CHAMPLAIN_BASE_MARKER(marker), latitude, longitude);
-                               clutter_container_add(CLUTTER_CONTAINER(pgd->icon_layer), marker, NULL);
-                               clutter_actor_set_reactive(marker, TRUE);
+                       champlain_location_set_location(CHAMPLAIN_LOCATION(marker), latitude, longitude);
+                       champlain_marker_layer_add_marker(pgd->icon_layer, CHAMPLAIN_MARKER(marker));
+                       clutter_actor_set_reactive(marker, TRUE);
 
-                               g_signal_connect(G_OBJECT(marker), "button_release_event",
-                                                                               G_CALLBACK(bar_pane_gps_marker_keypress_cb), pgd);
+                       g_signal_connect(G_OBJECT(marker), "button_release_event",
+                                       G_CALLBACK(bar_pane_gps_marker_keypress_cb), pgd);
 
-                               g_object_set_data(G_OBJECT(marker), "file_fd", fd);
+                       g_object_set_data(G_OBJECT(marker), "file_fd", fd);
 
-                               g_ptr_array_add(pgd->marker_list, marker);
-                               if (pgd->centre_map_checked)
-                                       {
-                                       g_ptr_array_add(pgd->marker_list, NULL);
-                                       champlain_view_ensure_markers_visible(CHAMPLAIN_VIEW(pgd->gps_view),
-                                                                                                       (void *)pgd->marker_list->pdata, FALSE);
-                                       g_ptr_array_remove(pgd->marker_list, NULL);
-                                       }
-                               }
+                       champlain_bounding_box_extend(pgd->bbox, latitude, longitude);
                        }
                return TRUE;
                }
-               
-       if (pgd->marker_list->len >= 1)
-               {
-               g_ptr_array_add(pgd->marker_list, NULL);
 
-               if (pgd->centre_map_checked)
+       if (pgd->centre_map_checked)
+               {
+               if (pgd->num_added == 1)
                        {
-                       champlain_view_ensure_markers_visible(CHAMPLAIN_VIEW(pgd->gps_view), (void *)pgd->marker_list->pdata, FALSE);
+                       champlain_bounding_box_get_center(pgd->bbox, &latitude, &longitude);
+                       champlain_view_go_to(CHAMPLAIN_VIEW(pgd->gps_view), latitude, longitude);
+                       }
+                else if (pgd->num_added > 1)
+                       {
+                       champlain_view_ensure_visible(CHAMPLAIN_VIEW(pgd->gps_view), pgd->bbox, TRUE);
                        }
                }
-
        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pgd->progress), 0);
        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pgd->progress), NULL);
-       g_list_free(pgd->selection_list);
-       g_ptr_array_free(pgd->marker_list, TRUE);
        pgd->create_markers_id = 0;
 
        return FALSE;
@@ -282,7 +274,6 @@ static gboolean bar_pane_gps_create_markers_cb(gpointer data)
 static void bar_pane_gps_update(PaneGPSData *pgd)
 {
        GList *list;
-       GList *work;
 
        /* The widget does not have a parent during bar_pane_gps_new, so calling gtk_widget_show_all there gives a
         * "Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed"
@@ -303,18 +294,13 @@ static void bar_pane_gps_update(PaneGPSData *pgd)
                else
                        {
                        return;
-                       }               
+                       }
                }
 
        /* Delete any markers currently displayed
         */
-       work = clutter_container_get_children(CLUTTER_CONTAINER(pgd->icon_layer));
-       while (work)
-               {
-               clutter_container_remove(CLUTTER_CONTAINER(pgd->icon_layer), work->data, NULL);
-               work = work->next;
-               }
-       g_list_free(work);
+
+       champlain_marker_layer_remove_all(pgd->icon_layer);
 
        if (!pgd->enable_markers_checked)
                {
@@ -325,19 +311,19 @@ static void bar_pane_gps_update(PaneGPSData *pgd)
         * a single, small text character the same colour as the marker background.
         * Use a background process in case the user selects a large number of files.
         */
+       filelist_free(pgd->selection_list);
+       if (pgd->bbox) champlain_bounding_box_free(pgd->bbox);
+
        list = layout_selection_list(pgd->pane.lw);
        list = file_data_process_groups_in_selection(list, FALSE, NULL);
 
-       if (list != NULL)
-               {
-               pgd->selection_list = g_list_copy(list);
-               pgd->marker_list = g_ptr_array_new();
-               pgd->selection_count = g_list_length(pgd->selection_list);
-               pgd->create_markers_id = g_idle_add(bar_pane_gps_create_markers_cb, pgd);
-               }
+       pgd->selection_list = list;
+       pgd->not_added = list;
 
-       g_list_free(list);
-       g_list_free(work);
+       pgd->bbox = champlain_bounding_box_new();
+       pgd->selection_count = g_list_length(pgd->selection_list);
+       pgd->create_markers_id = g_idle_add(bar_pane_gps_create_markers_cb, pgd);
+       pgd->num_added = 0;
 }
 
 void bar_pane_gps_set_map_source(PaneGPSData *pgd, const gchar *map_id)
@@ -351,10 +337,10 @@ void bar_pane_gps_set_map_source(PaneGPSData *pgd, const gchar *map_id)
        if (map_source != NULL)
                {
                g_object_set(G_OBJECT(pgd->gps_view), "map-source", map_source, NULL);
-               g_object_unref(map_factory);
+               //g_object_unref(map_source);
                }
 
-       g_object_unref(map_source);
+       g_object_unref(map_factory);
 }
 
 void bar_pane_gps_enable_markers_checked_toggle_cb(GtkWidget *menu_widget, gpointer data)
@@ -431,7 +417,7 @@ static gint bar_pane_gps_event(GtkWidget *bar, GdkEvent *event)
        pgd = g_object_get_data(G_OBJECT(bar), "pane_data");
        if (!pgd) return FALSE;
 
-       if (GTK_WIDGET_HAS_FOCUS(pgd->widget)) return gtk_widget_event(GTK_WIDGET(pgd->widget), event);
+       if (gtk_widget_has_focus(pgd->widget)) return gtk_widget_event(GTK_WIDGET(pgd->widget), event);
 
        return FALSE;
 }
@@ -525,7 +511,7 @@ static void bar_pane_gps_view_state_changed_cb(ChamplainView *view,
                {
                gtk_label_set_text(GTK_LABEL(pgd->state), message->str);
                }
-               
+
        gtk_widget_set_tooltip_text(GTK_WIDGET(pgd->slider), message->str);
        gtk_scale_button_set_value(GTK_SCALE_BUTTON(pgd->slider), (gdouble)zoom);
 
@@ -535,8 +521,9 @@ static void bar_pane_gps_view_state_changed_cb(ChamplainView *view,
 static void bar_pane_gps_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        PaneGPSData *pgd = data;
-       
-       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pgd->fd) 
+
+       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) &&
+           g_list_find(pgd->selection_list, fd))
                {
                bar_pane_gps_update(pgd);
                }
@@ -568,23 +555,27 @@ static GtkWidget *bar_pane_gps_menu(PaneGPSData *pgd)
        menu = popup_menu_short_lived();
 
        map_factory = champlain_map_source_factory_dup_default();
-       map_list = champlain_map_source_factory_dup_list(map_factory);
+       map_list = champlain_map_source_factory_get_registered(map_factory);
        current = bar_pane_gps_get_map_id(pgd);
 
        while (map_list)
                {
                map_desc = (ChamplainMapSourceDesc *)(map_list->data);
-               
-               menu_item_add_radio(menu, map_desc->name, map_desc->id, strcmp(map_desc->id, current) == 0, G_CALLBACK(bar_pane_gps_change_map_cb), pgd); 
-               
+
+               menu_item_add_radio(menu,
+                                   champlain_map_source_desc_get_name(map_desc),
+                                   (gpointer)champlain_map_source_desc_get_id(map_desc),
+                                   strcmp(champlain_map_source_desc_get_id(map_desc), current) == 0,
+                                   G_CALLBACK(bar_pane_gps_change_map_cb), pgd);
+
                map_list = g_slist_next(map_list);
                }
-               
+
        menu_item_add_divider(menu);
        menu_item_add_check(menu, _("Enable markers"), pgd->enable_markers_checked,
-                                                                                       G_CALLBACK(bar_pane_gps_enable_markers_checked_toggle_cb), pgd);
+                           G_CALLBACK(bar_pane_gps_enable_markers_checked_toggle_cb), pgd);
        map_centre = menu_item_add_check(menu, _("Centre map on marker"), pgd->centre_map_checked,
-                                                                                       G_CALLBACK(bar_pane_gps_centre_map_checked_toggle_cb), pgd);
+                                        G_CALLBACK(bar_pane_gps_centre_map_checked_toggle_cb), pgd);
        if (!pgd->enable_markers_checked)
                {
                gtk_widget_set_sensitive(map_centre, FALSE);
@@ -614,7 +605,7 @@ void bar_pane_gps_map_centreing(PaneGPSData *pgd)
                message = g_string_append(message, _("Move map centre to marker\n is enabled"));
                pgd->centre_map_checked = TRUE;
                }
-               
+
        dialog = gtk_message_dialog_new(NULL,
                                                          GTK_DIALOG_DESTROY_WITH_PARENT,
                                                          GTK_MESSAGE_INFO,
@@ -623,7 +614,7 @@ void bar_pane_gps_map_centreing(PaneGPSData *pgd)
        gtk_window_set_title(GTK_WINDOW(dialog), _("Map Centreing"));
        gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE);
        gtk_dialog_run(GTK_DIALOG(dialog));
-       
+
        gtk_widget_destroy(dialog);
        g_string_free(message, TRUE);
 }
@@ -660,6 +651,11 @@ static void bar_pane_gps_destroy(GtkWidget *widget, gpointer data)
 
        file_data_unregister_notify_func(bar_pane_gps_notify_cb, pgd);
 
+       g_idle_remove_by_data(pgd);
+
+       filelist_free(pgd->selection_list);
+       if (pgd->bbox) champlain_bounding_box_free(pgd->bbox);
+
        file_data_unref(pgd->fd);
        g_free(pgd->map_source);
        g_free(pgd->pane.id);
@@ -676,7 +672,7 @@ GtkWidget *bar_pane_gps_new(const gchar *id, const gchar *title, const gchar *ma
        GtkWidget *vbox, *frame;
        GtkWidget *gpswidget, *viewport;
        GtkWidget *status, *state, *progress, *slider;
-       ChamplainLayer *layer;
+       ChamplainMarkerLayer *layer;
        ChamplainView *view;
        const gchar *slider_list[] = {GTK_STOCK_ZOOM_IN, GTK_STOCK_ZOOM_OUT, NULL};
        const gchar **slider_icons = slider_list;
@@ -710,14 +706,14 @@ GtkWidget *bar_pane_gps_new(const gchar *id, const gchar *title, const gchar *ma
        progress = gtk_progress_bar_new();
        state = gtk_label_new("");
        gtk_label_set_justify(GTK_LABEL(state), GTK_JUSTIFY_CENTER);
-       
+
        gtk_box_pack_start(GTK_BOX(status), GTK_WIDGET(slider), FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(status), GTK_WIDGET(state), FALSE, FALSE, 5);
        gtk_box_pack_end(GTK_BOX(status), GTK_WIDGET(progress), FALSE, FALSE, 0);
        gtk_box_pack_end(GTK_BOX(vbox),GTK_WIDGET(status), FALSE, FALSE, 0);
-       
-       layer = champlain_layer_new();
-       champlain_view_add_layer(view, layer);
+
+       layer = champlain_marker_layer_new();
+       champlain_view_add_layer(view, CHAMPLAIN_LAYER(layer));
 
        pgd->icon_layer = layer;
        pgd->gps_view = CLUTTER_ACTOR(view);
@@ -727,14 +723,13 @@ GtkWidget *bar_pane_gps_new(const gchar *id, const gchar *title, const gchar *ma
        pgd->state = state;
 
        bar_pane_gps_set_map_source(pgd, map_id);
-       
-       g_object_set(G_OBJECT(view), "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC,
+
+       g_object_set(G_OBJECT(view), "kinetic-mode", TRUE,
                                     "zoom-level", zoom,
                                     "keep-center-on-resize", TRUE,
 /* This seems to be broken, https://bugzilla.gnome.org/show_bug.cgi?id=596419
                                     "decel-rate", 1.0,
 */
-                                    "show-license", TRUE,
                                     "zoom-on-double-click", FALSE,
                                     "max-zoom-level", 17,
                                     "min-zoom-level", 1,
@@ -759,7 +754,7 @@ GtkWidget *bar_pane_gps_new(const gchar *id, const gchar *title, const gchar *ma
        pgd->create_markers_id = 0;
        pgd->enable_markers_checked = TRUE;
        pgd->centre_map_checked = TRUE;
-       
+
        return pgd->widget;
 }
 
index 7d0a3b8..3047b9b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
index 6a07fd3..e3cbe9c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
@@ -59,13 +59,9 @@ static void bar_pane_histogram_update(PaneHistogramData *phd)
        if (!phd->histogram_width || !phd->histogram_height || !phd->fd) return;
 
        /* histmap_get is relatively expensive, run it only when we really need it
-          and with lower priority than pixbuf_renderer 
+          and with lower priority than pixbuf_renderer
           FIXME: this does not work for fullscreen*/
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_is_drawable(phd->drawing_area))
-#else
-       if (GTK_WIDGET_DRAWABLE(phd->drawing_area))
-#endif
                {
                if (!phd->idle_id)
                        {
@@ -85,18 +81,18 @@ static gboolean bar_pane_histogram_update_cb(gpointer data)
 
        phd->idle_id = 0;
        phd->need_update = FALSE;
-       
+
        gtk_widget_queue_draw_area(GTK_WIDGET(phd->drawing_area), 0, 0, phd->histogram_width, phd->histogram_height);
-       
+
        if (phd->fd == NULL) return FALSE;
        histmap = histmap_get(phd->fd);
-       
-       if (!histmap) 
+
+       if (!histmap)
                {
                histmap_start_idle(phd->fd);
                return FALSE;
                }
-       
+
        phd->pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, phd->histogram_width, phd->histogram_height);
        gdk_pixbuf_fill(phd->pixbuf, 0xffffffff);
        histogram_draw(phd->histogram, histmap, phd->pixbuf, 0, 0, phd->histogram_width, phd->histogram_height);
@@ -137,38 +133,53 @@ static void bar_pane_histogram_write_config(GtkWidget *pane, GString *outstr, gi
 static void bar_pane_histogram_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        PaneHistogramData *phd = data;
-       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_HISTMAP | NOTIFY_PIXBUF)) && fd == phd->fd) 
+       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_HISTMAP | NOTIFY_PIXBUF)) && fd == phd->fd)
                {
                DEBUG_1("Notify pane_histogram: %s %04x", fd->path, type);
                bar_pane_histogram_update(phd);
                }
 }
 
-static gboolean bar_pane_histogram_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+#if GTK_CHECK_VERSION(3,0,0)
+static gboolean bar_pane_histogram_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
 {
        PaneHistogramData *phd = data;
        if (!phd) return TRUE;
-       
+
        if (phd->need_update)
                {
                bar_pane_histogram_update(phd);
                }
-       
+
        if (!phd->pixbuf) return TRUE;
-       
-       gdk_draw_pixbuf(widget->window,
-#if GTK_CHECK_VERSION(2,20,0)
-                       widget->style->fg_gc[gtk_widget_get_state(widget)],
+
+       gdk_cairo_set_source_pixbuf(cr, phd->pixbuf, 0, 0);
+       cairo_paint (cr);
+
+       return TRUE;
+}
+
 #else
-                       widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-#endif
-                       phd->pixbuf,
-                       0, 0,
-                       0, 0,
-                       -1, -1,
-                       GDK_RGB_DITHER_NORMAL, 0, 0);
+static gboolean bar_pane_histogram_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+       PaneHistogramData *phd = data;
+       if (!phd) return TRUE;
+
+       if (phd->need_update)
+               {
+               bar_pane_histogram_update(phd);
+               }
+
+       if (!phd->pixbuf) return TRUE;
+
+       cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget));
+       gdk_cairo_set_source_pixbuf (cr, phd->pixbuf, 0, 0);
+       cairo_paint (cr);
+       cairo_destroy (cr);
+
        return TRUE;
 }
+#endif
 
 static void bar_pane_histogram_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
 {
@@ -179,22 +190,10 @@ static void bar_pane_histogram_size_cb(GtkWidget *widget, GtkAllocation *allocat
        bar_pane_histogram_update(phd);
 }
 
-#if 0
-static void bar_pane_histogram_close(GtkWidget *pane)
-{
-       PaneHistogramData *phd;
-
-       phd = g_object_get_data(G_OBJECT(pane), "pane_data");
-       if (!phd) return;
-
-       gtk_widget_destroy(phd->widget);
-}
-#endif
-
 static void bar_pane_histogram_destroy(GtkWidget *widget, gpointer data)
 {
        PaneHistogramData *phd = data;
-       
+
        if (phd->idle_id) g_source_remove(phd->idle_id);
        file_data_unregister_notify_func(bar_pane_histogram_notify_cb, phd);
 
@@ -226,7 +225,7 @@ static void bar_pane_histogram_popup_mode_cb(GtkWidget *widget, gpointer data)
 {
        PaneHistogramData *phd = data;
        gint logmode;
-       
+
        if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return;
 
        if (!phd) return;
@@ -252,9 +251,9 @@ static GtkWidget *bar_pane_histogram_menu(PaneHistogramData *phd)
        menu_item_add_radio(menu, _("Histogram on _Blue"),  GINT_TO_POINTER(HCHAN_B), (channel == HCHAN_B), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);
        menu_item_add_radio(menu, _("_Histogram on RGB"),   GINT_TO_POINTER(HCHAN_RGB), (channel == HCHAN_RGB), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);
        menu_item_add_radio(menu, _("Histogram on _Value"), GINT_TO_POINTER(HCHAN_MAX), (channel == HCHAN_MAX), G_CALLBACK(bar_pane_histogram_popup_channels_cb), phd);
-       
+
        menu_item_add_divider(menu);
-       
+
        menu_item_add_radio(menu, _("Li_near Histogram"), GINT_TO_POINTER(0), (mode == 0), G_CALLBACK(bar_pane_histogram_popup_mode_cb), phd);
        menu_item_add_radio(menu, _("L_og Histogram"),    GINT_TO_POINTER(1), (mode == 1), G_CALLBACK(bar_pane_histogram_popup_mode_cb), phd);
 
@@ -283,7 +282,7 @@ static GtkWidget *bar_pane_histogram_new(const gchar *id, const gchar *title, gi
        PaneHistogramData *phd;
 
        phd = g_new0(PaneHistogramData, 1);
-       
+
        phd->pane.pane_set_fd = bar_pane_histogram_set_fd;
        phd->pane.pane_write_config = bar_pane_histogram_write_config;
        phd->pane.title = bar_pane_expander_title(title);
@@ -291,7 +290,7 @@ static GtkWidget *bar_pane_histogram_new(const gchar *id, const gchar *title, gi
        phd->pane.type = PANE_HISTOGRAM;
 
        phd->pane.expanded = expanded;
-       
+
        phd->histogram = histogram_new();
 
        histogram_set_channel(phd->histogram, histogram_channel);
@@ -302,7 +301,7 @@ static GtkWidget *bar_pane_histogram_new(const gchar *id, const gchar *title, gi
        g_object_set_data(G_OBJECT(phd->widget), "pane_data", phd);
        g_signal_connect(G_OBJECT(phd->widget), "destroy",
                         G_CALLBACK(bar_pane_histogram_destroy), phd);
-       
+
 
        gtk_widget_set_size_request(GTK_WIDGET(phd->widget), -1, height);
 
@@ -310,9 +309,14 @@ static GtkWidget *bar_pane_histogram_new(const gchar *id, const gchar *title, gi
        g_signal_connect_after(G_OBJECT(phd->drawing_area), "size_allocate",
                                G_CALLBACK(bar_pane_histogram_size_cb), phd);
 
-       g_signal_connect(G_OBJECT(phd->drawing_area), "expose_event",  
+#if GTK_CHECK_VERSION(3,0,0)
+       g_signal_connect(G_OBJECT(phd->drawing_area), "draw",
+                        G_CALLBACK(bar_pane_histogram_draw_cb), phd);
+#else
+       g_signal_connect(G_OBJECT(phd->drawing_area), "expose_event",
                         G_CALLBACK(bar_pane_histogram_expose_event_cb), phd);
-                        
+#endif
+
        gtk_box_pack_start(GTK_BOX(phd->widget), phd->drawing_area, TRUE, TRUE, 0);
        gtk_widget_show(phd->drawing_area);
        gtk_widget_add_events(phd->drawing_area, GDK_BUTTON_PRESS_MASK);
@@ -349,7 +353,7 @@ GtkWidget *bar_pane_histogram_new_from_config(const gchar **attribute_names, con
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
-       
+
        bar_pane_translate_title(PANE_HISTOGRAM, id, &title);
        ret = bar_pane_histogram_new(id, title, height, expanded, histogram_channel, histogram_mode);
        g_free(title);
@@ -377,11 +381,11 @@ void bar_pane_histogram_update_from_config(GtkWidget *pane, const gchar **attrib
                if (READ_BOOL_FULL("expanded", phd->pane.expanded)) continue;
                if (READ_INT_FULL("histogram_channel", histogram_channel)) continue;
                if (READ_INT_FULL("histogram_mode", histogram_mode)) continue;
-               
+
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
-       
+
        histogram_set_channel(phd->histogram, histogram_channel);
        histogram_set_mode(phd->histogram, histogram_mode);
 
index 8fa04c7..3f835ac 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
index 926abd5..f58f348 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -110,7 +110,7 @@ struct _PaneKeywordsData
        gboolean collapse_unchecked;
        gboolean hide_unchecked;
 
-       guint idle_id; /* event source id */    
+       guint idle_id; /* event source id */
        FileData *fd;
        gchar *key;
 };
@@ -120,17 +120,15 @@ struct _ConfDialogData
 {
        PaneKeywordsData *pkd;
        GtkTreePath *click_tpath;
-       
+
        /* dialog parts */
        GenericDialog *gd;
        GtkWidget *edit_widget;
        gboolean is_keyword;
-       
+
        gboolean edit_existing;
 };
 
-//static GList *bar_list = NULL;
-
 
 static void bar_pane_keywords_write(PaneKeywordsData *pkd)
 {
@@ -151,7 +149,7 @@ gboolean bar_keyword_tree_expand_if_set_cb(GtkTreeModel *model, GtkTreePath *pat
        gboolean set;
 
        gtk_tree_model_get(model, iter, FILTER_KEYWORD_COLUMN_TOGGLE, &set, -1);
-       
+
        if (set && !gtk_tree_view_row_expanded(GTK_TREE_VIEW(pkd->keyword_treeview), path))
                {
                gtk_tree_view_expand_to_path(GTK_TREE_VIEW(pkd->keyword_treeview), path);
@@ -165,7 +163,7 @@ gboolean bar_keyword_tree_collapse_if_unset_cb(GtkTreeModel *model, GtkTreePath
        gboolean set;
 
        gtk_tree_model_get(model, iter, FILTER_KEYWORD_COLUMN_TOGGLE, &set, -1);
-       
+
        if (!set && gtk_tree_view_row_expanded(GTK_TREE_VIEW(pkd->keyword_treeview), path))
                {
                gtk_tree_view_collapse_row(GTK_TREE_VIEW(pkd->keyword_treeview), path);
@@ -194,39 +192,36 @@ static void bar_keyword_tree_sync(PaneKeywordsData *pkd)
        if (pkd->collapse_unchecked) gtk_tree_model_foreach(model, bar_keyword_tree_collapse_if_unset_cb, pkd);
 }
 
-#if 0
-static void bar_pane_keywords_keyword_update_all(void)
-{
-       GList *work;
-
-       work = bar_list;
-       while (work)
-               {
-               PaneKeywordsData *pkd;
-//             GList *keywords;
-
-               pkd = work->data;
-               work = work->next;
-
-               bar_keyword_tree_sync(pkd);
-               }
-}
-#endif
-
 static void bar_pane_keywords_update(PaneKeywordsData *pkd)
 {
        GList *keywords = NULL;
+       GList *orig_keywords = NULL;
+       GList *work1, *work2;
        GtkTextBuffer *keyword_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pkd->keyword_view));
 
-       g_signal_handlers_block_by_func(keyword_buffer, bar_pane_keywords_changed, pkd);
-
        keywords = metadata_read_list(pkd->fd, KEYWORD_KEY, METADATA_PLAIN);
-       keyword_list_push(pkd->keyword_view, keywords);
-       bar_keyword_tree_sync(pkd);
-       string_list_free(keywords);
-       
-       g_signal_handlers_unblock_by_func(keyword_buffer, bar_pane_keywords_changed, pkd);
+       orig_keywords = keyword_list_pull(pkd->keyword_view);
 
+       /* compare the lists */
+       work1 = keywords;
+       work2 = orig_keywords;
+
+       while (work1 && work2)
+               {
+               if (strcmp(work1->data, work2->data) != 0) break;
+               work1 = work1->next;
+               work2 = work2->next;
+               }
+
+       if (work1 || work2) /* lists differs */
+               {
+               g_signal_handlers_block_by_func(keyword_buffer, bar_pane_keywords_changed, pkd);
+               keyword_list_push(pkd->keyword_view, keywords);
+               bar_keyword_tree_sync(pkd);
+               g_signal_handlers_unblock_by_func(keyword_buffer, bar_pane_keywords_changed, pkd);
+               }
+       string_list_free(keywords);
+       string_list_free(orig_keywords);
 }
 
 void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd)
@@ -264,11 +259,7 @@ gint bar_pane_keywords_event(GtkWidget *bar, GdkEvent *event)
        pkd = g_object_get_data(G_OBJECT(bar), "pane_data");
        if (!pkd) return FALSE;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_has_focus(pkd->keyword_view)) return gtk_widget_event(pkd->keyword_view, event);
-#else
-       if (GTK_WIDGET_HAS_FOCUS(pkd->keyword_view)) return gtk_widget_event(pkd->keyword_view, event);
-#endif
 
        return FALSE;
 }
@@ -283,7 +274,7 @@ static void bar_pane_keywords_keyword_toggle(GtkCellRendererToggle *toggle, cons
        GList *list;
        GtkTreeIter child_iter;
        GtkTreeModel *keyword_tree;
-       
+
        GtkTextBuffer *keyword_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pkd->keyword_view));
 
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview));
@@ -300,11 +291,11 @@ static void bar_pane_keywords_keyword_toggle(GtkCellRendererToggle *toggle, cons
        gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter);
 
        list = keyword_list_pull(pkd->keyword_view);
-       if (active) 
+       if (active)
                keyword_tree_set(keyword_tree, &child_iter, &list);
        else
                keyword_tree_reset(keyword_tree, &child_iter, &list);
-       
+
        g_signal_handlers_block_by_func(keyword_buffer, bar_pane_keywords_changed, pkd);
        keyword_list_push(pkd->keyword_view, list);
        string_list_free(list);
@@ -312,10 +303,6 @@ static void bar_pane_keywords_keyword_toggle(GtkCellRendererToggle *toggle, cons
 
        /* call this just once in the end */
        bar_pane_keywords_changed(keyword_buffer, pkd);
-       /*
-         bar_pane_keywords_change calls bar_keyword_tree_sync, no need to do it again
-       bar_keyword_tree_sync(pkd);
-       */
 }
 
 void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GValue *value, gint column, gpointer data)
@@ -325,7 +312,7 @@ void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GVa
        GtkTreeIter child_iter;
 
        gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, iter);
-       
+
        memset(value, 0, sizeof (GValue));
 
        switch (column)
@@ -335,7 +322,7 @@ void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GVa
                        GList *keywords = keyword_list_pull(pkd->keyword_view);
                        gboolean set = keyword_tree_is_set(keyword_tree, &child_iter, keywords);
                        string_list_free(keywords);
-                       
+
                        g_value_init(value, G_TYPE_BOOLEAN);
                        g_value_set_boolean(value, set);
                        break;
@@ -357,7 +344,7 @@ void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GVa
 gboolean bar_pane_keywords_filter_visible(GtkTreeModel *keyword_tree, GtkTreeIter *iter, gpointer data)
 {
        GtkTreeModel *filter = data;
-       
+
        return !keyword_is_hidden_in(keyword_tree, iter, filter);
 }
 
@@ -371,7 +358,7 @@ static void bar_pane_keywords_set_selection(PaneKeywordsData *pkd, gboolean appe
 
        list = layout_selection_list(pkd->pane.lw);
        list = file_data_process_groups_in_selection(list, FALSE, NULL);
-       
+
        work = list;
        while (work)
                {
@@ -419,7 +406,7 @@ static void bar_pane_keywords_populate_popup_cb(GtkTextView *textview, GtkMenu *
 static void bar_pane_keywords_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        PaneKeywordsData *pkd = data;
-       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pkd->fd) 
+       if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pkd->fd)
                {
                DEBUG_1("Notify pane_keywords: %s %04x", fd->path, type);
                bar_pane_keywords_update(pkd);
@@ -430,10 +417,8 @@ static gboolean bar_pane_keywords_changed_idle_cb(gpointer data)
 {
        PaneKeywordsData *pkd = data;
 
-       file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd);
        bar_pane_keywords_write(pkd);
        bar_keyword_tree_sync(pkd);
-       file_data_register_notify_func(bar_pane_keywords_notify_cb, pkd, NOTIFY_PRIORITY_LOW);
        pkd->idle_id = 0;
        return FALSE;
 }
@@ -478,7 +463,7 @@ static void bar_pane_keywords_dnd_get(GtkWidget *tree_view, GdkDragContext *cont
        GtkTreeIter child_iter;
        GtkTreeModel *keyword_tree;
 
-       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); 
+       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
 
         if (!gtk_tree_selection_get_selected(sel, &model, &iter)) return;
 
@@ -490,7 +475,7 @@ static void bar_pane_keywords_dnd_get(GtkWidget *tree_view, GdkDragContext *cont
                case TARGET_APP_KEYWORD_PATH:
                        {
                        GList *path = keyword_tree_get_path(keyword_tree, &child_iter);
-                       gtk_selection_data_set(selection_data, selection_data->target,
+                       gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
                                               8, (gpointer) &path, sizeof(path));
                        break;
                        }
@@ -514,7 +499,7 @@ static void bar_pane_keywords_dnd_begin(GtkWidget *tree_view, GdkDragContext *co
        GtkTreeModel *keyword_tree;
        gchar *name;
 
-       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); 
+       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
 
         if (!gtk_tree_selection_get_selected(sel, &model, &iter)) return;
 
@@ -537,8 +522,8 @@ static gboolean bar_pane_keywords_dnd_can_move(GtkTreeModel *keyword_tree, GtkTr
 {
        gchar *src_name;
        GtkTreeIter parent;
-       
-       if (dest_kw_iter && keyword_same_parent(keyword_tree, src_kw_iter, dest_kw_iter)) 
+
+       if (dest_kw_iter && keyword_same_parent(keyword_tree, src_kw_iter, dest_kw_iter))
                {
                return TRUE; /* reordering of siblings is ok */
                }
@@ -611,13 +596,13 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                {
                case TARGET_APP_KEYWORD_PATH:
                        {
-                       GList *path = *(gpointer *)selection_data->data;
+                       GList *path = *(gpointer *)gtk_selection_data_get_data(selection_data);
                        src_valid = keyword_tree_get_iter(keyword_tree, &src_kw_iter, path);
                        string_list_free(path);
                        break;
                        }
                default:
-                       new_keywords = string_to_keywords_list((gchar *)selection_data->data);
+                       new_keywords = string_to_keywords_list((gchar *)gtk_selection_data_get_data(selection_data));
                        break;
                }
 
@@ -658,7 +643,7 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                                /* the keywords can't be added if the same name already exist */
                                return;
                                }
-                               
+
                        switch (pos)
                                {
                                case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
@@ -671,7 +656,7 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                                        break;
                                }
                        }
-                       
+
                }
        else
                {
@@ -687,13 +672,13 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                        }
                gtk_tree_store_append(GTK_TREE_STORE(keyword_tree), &new_kw_iter, NULL);
                }
-               
-               
+
+
        if (src_valid)
                {
                keyword_move_recursive(GTK_TREE_STORE(keyword_tree), &new_kw_iter, &src_kw_iter);
                }
-       
+
        work = new_keywords;
        while (work)
                {
@@ -726,19 +711,19 @@ static gint bar_pane_keywords_dnd_motion(GtkWidget *tree_view, GdkDragContext *c
                 gtk_tree_model_get_iter(model, &dest_iter, tpath);
                if (pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE && gtk_tree_model_iter_has_child(model, &dest_iter))
                        pos = GTK_TREE_VIEW_DROP_BEFORE;
-               
+
                if (pos == GTK_TREE_VIEW_DROP_INTO_OR_AFTER && gtk_tree_model_iter_has_child(model, &dest_iter))
                        pos = GTK_TREE_VIEW_DROP_AFTER;
                }
 
        gtk_tree_view_set_drag_dest_row(GTK_TREE_VIEW(tree_view), tpath, pos);
        gtk_tree_path_free(tpath);
-       
+
        if (tree_view == gtk_drag_get_source_widget(context))
                gdk_drag_status(context, GDK_ACTION_MOVE, time);
        else
                gdk_drag_status(context, GDK_ACTION_COPY, time);
-       
+
        return TRUE;
 }
 
@@ -769,14 +754,14 @@ static void bar_pane_keywords_edit_ok_cb(GenericDialog *gd, gpointer data)
 
        GtkTreeModel *keyword_tree;
        GtkTreeIter kw_iter;
-       
+
        gboolean have_dest = FALSE;
-       
+
        GList *keywords;
 
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview));
        keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
-       
+
         if (cdd->click_tpath)
                {
                GtkTreeIter iter;
@@ -786,11 +771,11 @@ static void bar_pane_keywords_edit_ok_cb(GenericDialog *gd, gpointer data)
                        have_dest = TRUE;
                        }
                }
-       
+
        if (cdd->edit_existing && !have_dest) return;
-       
+
        keywords = keyword_list_pull(cdd->edit_widget);
-       
+
        if (cdd->edit_existing)
                {
                if (keywords && keywords->data && /* there should be one keyword */
@@ -854,10 +839,10 @@ static void bar_pane_keywords_edit_dialog(PaneKeywordsData *pkd, gboolean edit_e
        GtkWidget *table;
        GtkWidget *group;
        GtkWidget *button;
-       
+
        gchar *name = NULL;
        gboolean is_keyword = TRUE;
-       
+
 
         if (edit_existing && pkd->click_tpath)
                {
@@ -875,9 +860,9 @@ static void bar_pane_keywords_edit_dialog(PaneKeywordsData *pkd, gboolean edit_e
                        return;
                        }
                }
-               
+
        if (edit_existing && !name) return;
-       
+
 
        cdd = g_new0(ConfDialogData, 1);
        cdd->pkd =pkd;
@@ -960,18 +945,13 @@ static void bar_pane_keywords_connect_mark_cb(GtkWidget *menu_widget, gpointer d
 
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview));
        keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
-       
+
         if (!pkd->click_tpath) return;
         if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return;
 
        gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &kw_iter, &iter);
 
-       file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd);
-
        meta_data_connect_mark_with_keyword(keyword_tree, &kw_iter, mark);
-
-       file_data_register_notify_func(bar_pane_keywords_notify_cb, pkd, NOTIFY_PRIORITY_LOW);
-//     bar_pane_keywords_update(pkd);
 }
 
 
@@ -991,7 +971,7 @@ static void bar_pane_keywords_delete_cb(GtkWidget *menu_widget, gpointer data)
 
         if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return;
        gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &kw_iter, &iter);
-       
+
        keyword_delete(GTK_TREE_STORE(keyword_tree), &kw_iter);
 }
 
@@ -1011,7 +991,7 @@ static void bar_pane_keywords_hide_cb(GtkWidget *menu_widget, gpointer data)
 
         if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return;
        gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &kw_iter, &iter);
-       
+
        keyword_hide_in(GTK_TREE_STORE(keyword_tree), &kw_iter, model);
 }
 
@@ -1028,7 +1008,7 @@ static void bar_pane_keywords_show_all_cb(GtkWidget *menu_widget, gpointer data)
        keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
 
        keyword_show_all_in(GTK_TREE_STORE(keyword_tree), model);
-       
+
        if (!pkd->collapse_unchecked) gtk_tree_view_expand_all(GTK_TREE_VIEW(pkd->keyword_treeview));
        bar_keyword_tree_sync(pkd);
 }
@@ -1058,7 +1038,7 @@ static void bar_pane_keywords_hide_unchecked_cb(GtkWidget *menu_widget, gpointer
 
        GtkTreeModel *keyword_tree;
        GList *keywords;
-       
+
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview));
        keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
 
@@ -1151,7 +1131,7 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk
        GtkWidget *item;
        GtkWidget *submenu;
         GtkTreeViewDropPosition pos;
-        
+
         if (pkd->click_tpath) gtk_tree_path_free(pkd->click_tpath);
         pkd->click_tpath = NULL;
        gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(pkd->keyword_treeview), x, y, &pkd->click_tpath, &pos);
@@ -1159,7 +1139,7 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk
        menu = popup_menu_short_lived();
 
        menu_item_add_stock(menu, _("Add keyword"), GTK_STOCK_EDIT, G_CALLBACK(bar_pane_keywords_add_dialog_cb), pkd);
-       
+
        menu_item_add_divider(menu);
 
        menu_item_add(menu, _("Add keyword to all selected images"), G_CALLBACK(bar_pane_keywords_add_to_selected_cb), pkd);
@@ -1172,20 +1152,20 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk
                gchar *text;
                gchar *mark;
                gint i;
-               
+
                GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview));
-               
+
                GtkTreeIter iter;
                 gtk_tree_model_get_iter(model, &iter, pkd->click_tpath);
                gchar *name;
-               
+
                gtk_tree_model_get(model, &iter, FILTER_KEYWORD_COLUMN_NAME, &name,
                                                 FILTER_KEYWORD_COLUMN_MARK, &mark, -1);
-               
+
                text = g_strdup_printf(_("Hide \"%s\""), name);
                menu_item_add_stock(menu, text, GTK_STOCK_EDIT, G_CALLBACK(bar_pane_keywords_hide_cb), pkd);
                g_free(text);
-               
+
                submenu = gtk_menu_new();
                for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
                        {
@@ -1208,7 +1188,7 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk
                menu_item_add_stock(menu, text, GTK_STOCK_DELETE, G_CALLBACK(bar_pane_keywords_delete_cb), pkd);
                g_free(text);
 
-               
+
                if (mark && mark[0])
                        {
                        text = g_strdup_printf(_("Disconnect \"%s\" from mark %s"), name, mark);
@@ -1240,8 +1220,8 @@ static void bar_pane_keywords_menu_popup(GtkWidget *widget, PaneKeywordsData *pk
 }
 
 
-static gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data) 
-{ 
+static gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
        PaneKeywordsData *pkd = data;
        if (bevent->button == MOUSE_BUTTON_RIGHT)
                {
@@ -1249,7 +1229,7 @@ static gboolean bar_pane_keywords_menu_cb(GtkWidget *widget, GdkEventButton *bev
                return TRUE;
                }
        return FALSE;
-} 
+}
 
 /*
  *-------------------------------------------------------------------
@@ -1263,7 +1243,7 @@ void bar_pane_keywords_close(GtkWidget *bar)
 
        pkd = g_object_get_data(G_OBJECT(bar), "pane_data");
        if (!pkd) return;
-       
+
        g_free(pkd->pane.id);
        gtk_widget_destroy(pkd->widget);
 }
@@ -1306,9 +1286,9 @@ static GtkWidget *bar_pane_keywords_new(const gchar *id, const gchar *title, con
        pkd->pane.expanded = expanded;
 
        pkd->key = g_strdup(key);
-       
+
        pkd->expand_checked = TRUE;
-       
+
        hbox = gtk_hbox_new(FALSE, PREF_PAD_GAP);
 
        pkd->widget = hbox;
@@ -1363,7 +1343,7 @@ static GtkWidget *bar_pane_keywords_new(const gchar *id, const gchar *title, con
 
        pkd->keyword_treeview = gtk_tree_view_new_with_model(store);
        g_object_unref(store);
-       
+
        gtk_widget_set_size_request(pkd->keyword_treeview, -1, 400);
 
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(pkd->keyword_treeview), FALSE);
@@ -1413,16 +1393,16 @@ static GtkWidget *bar_pane_keywords_new(const gchar *id, const gchar *title, con
                          GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP,
                          bar_pane_keywords_drop_types, n_keywords_drop_types,
                          GDK_ACTION_COPY | GDK_ACTION_MOVE);
-                         
+
        g_signal_connect(G_OBJECT(pkd->keyword_treeview), "drag_data_received",
                         G_CALLBACK(bar_pane_keywords_dnd_receive), pkd);
 
        g_signal_connect(G_OBJECT(pkd->keyword_treeview), "drag_motion",
                         G_CALLBACK(bar_pane_keywords_dnd_motion), pkd);
 
-       g_signal_connect(G_OBJECT(pkd->keyword_treeview), "button_release_event", 
+       g_signal_connect(G_OBJECT(pkd->keyword_treeview), "button_release_event",
                         G_CALLBACK(bar_pane_keywords_menu_cb), pkd);
-       
+
        gtk_container_add(GTK_CONTAINER(scrolled), pkd->keyword_treeview);
        gtk_widget_show(pkd->keyword_treeview);
 
@@ -1448,11 +1428,11 @@ GtkWidget *bar_pane_keywords_new_from_config(const gchar **attribute_names, cons
                if (READ_CHAR_FULL("title", title)) continue;
                if (READ_CHAR_FULL("key", key)) continue;
                if (READ_BOOL_FULL("expanded", expanded)) continue;
-               
+
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
-       
+
        bar_pane_translate_title(PANE_KEYWORDS, id, &title);
        ret = bar_pane_keywords_new(id, title, key, expanded);
        g_free(id);
@@ -1479,7 +1459,7 @@ void bar_pane_keywords_update_from_config(GtkWidget *pane, const gchar **attribu
                if (READ_CHAR_FULL("key", pkd->key)) continue;
                if (READ_BOOL_FULL("expanded", pkd->pane.expanded)) continue;
                if (READ_CHAR_FULL("id", pkd->pane.id)) continue;
-               
+
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
index d70313e..fab74fb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
index 5e284d6..15cda8c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -67,7 +67,7 @@ struct _SortData
        SortModeType mode;
        SortActionType action;
        gchar *filter_key;
-       
+
        SortSelectionType selection;
 
        GtkWidget *folder_group;
@@ -579,12 +579,12 @@ static GtkWidget *bar_sort_new(LayoutWindow *lw, SortActionType action,
        sd->lw = lw;
 
        sd->action = action;
-       
+
        if (sd->action == BAR_SORT_FILTER && (!filter_key || !filter_key[0]))
                {
                sd->action = BAR_SORT_COPY;
                }
-       
+
        sd->selection = selection;
        sd->undo_src = NULL;
        sd->undo_dest = NULL;
@@ -599,12 +599,12 @@ static GtkWidget *bar_sort_new(LayoutWindow *lw, SortActionType action,
        gtk_box_pack_start(GTK_BOX(sd->vbox), label, FALSE, FALSE, 0);
        gtk_widget_show(label);
 
-       combo = gtk_combo_box_new_text();
+       combo = gtk_combo_box_text_new();
        gtk_box_pack_start(GTK_BOX(sd->vbox), combo, FALSE, FALSE, 0);
        gtk_widget_show(combo);
 
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Folders"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Collections"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Folders"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Collections"));
 
        g_signal_connect(G_OBJECT(combo), "changed",
                         G_CALLBACK(bar_sort_mode_cb), sd);
@@ -630,9 +630,9 @@ static GtkWidget *bar_sort_new(LayoutWindow *lw, SortActionType action,
                gboolean select = FALSE;
 
                work = work->next;
-                       
+
                if (!editor_is_filter(editor->key)) continue;
-               
+
                key = g_strdup(editor->key);
                if (sd->action == BAR_SORT_FILTER && strcmp(key, filter_key) == 0)
                        {
@@ -640,7 +640,7 @@ static GtkWidget *bar_sort_new(LayoutWindow *lw, SortActionType action,
                        select = TRUE;
                        have_filter = TRUE;
                        }
-               
+
                button = pref_radiobutton_new(sd->folder_group, buttongrp,
                                              editor->name, select,
                                              G_CALLBACK(bar_sort_set_filter_cb), sd);
@@ -648,7 +648,7 @@ static GtkWidget *bar_sort_new(LayoutWindow *lw, SortActionType action,
                g_object_set_data_full(G_OBJECT(button), "filter_key", key, bar_sort_edit_button_free);
                }
        g_list_free(editors_list);
-       
+
        if (sd->action == BAR_SORT_FILTER && !have_filter) sd->action = BAR_SORT_COPY;
 
        sd->collection_group = pref_box_new(sd->vbox, FALSE, GTK_ORIENTATION_VERTICAL, 0);
@@ -683,7 +683,7 @@ static GtkWidget *bar_sort_new(LayoutWindow *lw, SortActionType action,
 GtkWidget *bar_sort_new_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values)
 {
        GtkWidget *bar;
-       
+
        gboolean enabled = TRUE;
        gint action = 0;
        gint mode = 0;
@@ -724,11 +724,7 @@ void bar_sort_write_config(GtkWidget *bar, GString *outstr, gint indent)
        if (!sd) return;
 
        WRITE_NL(); WRITE_STRING("<bar_sort ");
-#if GTK_CHECK_VERSION(2,20,0)
        write_bool_option(outstr, indent, "enabled", gtk_widget_get_visible(bar));
-#else
-       write_bool_option(outstr, indent, "enabled", GTK_WIDGET_VISIBLE(bar));
-#endif
        WRITE_INT(*sd, mode);
        WRITE_INT(*sd, action);
        WRITE_INT(*sd, selection);
index 780759e..88f7a5d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 1ada897..239cbed 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index ac3ab7b..e80488b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 8a99254..a3320b0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -129,7 +129,7 @@ static gboolean cache_sim_write_similarity(SecureSaveInfo *ssi, CacheData *cd)
                guint8 *avg_g = &cd->sim->avg_g[s];
                guint8 *avg_b = &cd->sim->avg_b[s];
                guint n = 0;
-                       
+
                for (x = 0; x < 32; x++)
                        {
                        buf[n++] = avg_r[x];
@@ -658,7 +658,7 @@ static gchar *cache_build_path_local(const gchar *source, const gchar *cache_loc
        path = g_build_filename(base, cache_local, name, NULL);
        g_free(name);
        g_free(base);
-       
+
        return path;
 }
 
index eb564b4..2a9267a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 743fcd9..2ac8a0d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -49,25 +49,6 @@ struct _CMData
  *-------------------------------------------------------------------
  */
 
-#if 0
-static gint extension_truncate(gchar *path, const gchar *ext)
-{
-       gint l;
-       gint el;
-
-       if (!path || !ext) return FALSE;
-
-       l = strlen(path);
-       el = strlen(ext);
-
-       if (l < el || strcmp(path + (l - el), ext) != 0) return FALSE;
-
-       path[l - el] = '\0';
-
-       return TRUE;
-}
-#endif
-
 static gchar *extension_find_dot(gchar *path)
 {
        gchar *dot = NULL;
@@ -256,11 +237,7 @@ static void cache_maintain_home_close_cb(GenericDialog *gd, gpointer data)
 {
        CMData *cm = data;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_get_sensitive(cm->button_close)) return;
-#else
-       if (!GTK_WIDGET_SENSITIVE(cm->button_close)) return;
-#endif
 
        cache_maintain_home_close(cm);
 }
@@ -338,7 +315,7 @@ void cache_maintain_home(gboolean metadata, gboolean clear, GtkWidget *parent)
        gtk_widget_show(hbox);
 
        cm->entry = gtk_entry_new();
-       GTK_WIDGET_UNSET_FLAGS(cm->entry, GTK_CAN_FOCUS);
+       gtk_widget_set_can_focus(cm->entry, FALSE);
        gtk_editable_set_editable(GTK_EDITABLE(cm->entry), FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), cm->entry, TRUE, TRUE, 0);
        gtk_widget_show(cm->entry);
@@ -352,160 +329,6 @@ void cache_maintain_home(gboolean metadata, gboolean clear, GtkWidget *parent)
        cm->idle_id = g_idle_add(cache_maintain_home_cb, cm);
 }
 
-#if 0
-/* This checks all files in ~/GQ_RC_DIR/thumbnails and
- * removes them if thay have no source counterpart.
- * (this assumes all cache files have an extension of 4 chars including '.')
- */
-gint cache_maintain_home_dir(const gchar *dir, gint recursive, gint clear)
-{
-       gchar *base;
-       gint base_length;
-       GList *dlist = NULL;
-       FileData *dir_fd;
-       GList *flist = NULL;
-       gboolean still_have_a_file = FALSE;
-
-       DEBUG_1("maintainance check: %s", dir);
-
-       base_length = strlen(homedir()) + strlen("/") + strlen(GQ_CACHE_RC_THUMB);
-       base = g_strconcat(homedir(), "/", GQ_CACHE_RC_THUMB, dir, NULL);
-       dir_fd = file_data_new_dir(base);
-       g_free(base);
-
-       if (filelist_read(dir_fd, &flist, &dlist))
-               {
-               GList *work;
-
-               work = dlist;
-               while (work)
-                       {
-                       FileData *fd = work->data;
-                       if (recursive && strlen(fd->path) > base_length &&
-                           !cache_maintain_home_dir(fd->path + base_length, recursive, clear))
-                               {
-                               DEBUG_1("Deleting thumb dir: %s", fd->path);
-                               if (!rmdir_utf8(fd->path))
-                                       {
-                                       log_printf("Unable to delete dir: %s\n", fd->path);
-                                       }
-                               }
-                       else
-                               {
-                               still_have_a_file = TRUE;
-                               }
-                       work = work->next;
-                       }
-
-               work = flist;
-               while (work)
-                       {
-                       FileData *fd = work->data;
-                       gchar *path = g_strdup(fd->path);
-                       gchar *dot;
-
-                       dot = extension_find_dot(path);
-
-                       if (dot) *dot = '\0';
-                       if (clear ||
-                           (strlen(path) > base_length && !isfile(path + base_length)) )
-                               {
-                               if (dot) *dot = '.';
-                               if (!unlink_file(path)) log_printf("failed to delete:%s\n", path);
-                               }
-                       else
-                               {
-                               still_have_a_file = TRUE;
-                               }
-                       g_free(path);
-
-                       work = work->next;
-                       }
-               }
-
-       filelist_free(dlist);
-       filelist_free(flist);
-       file_data_unref(dir_fd);
-
-       return still_have_a_file;
-}
-
-/* This checks relative caches in dir/.thumbnails and
- * removes them if they have no source counterpart.
- */
-gint cache_maintain_dir(FileData *dir_fd, gint recursive, gint clear)
-{
-       GList *list = NULL;
-       gchar *cachedir;
-       FileData *cachedir_fd;
-       gboolean still_have_a_file = FALSE;
-       GList *work;
-
-       cachedir = g_build_filename(dir, GQ_CACHE_LOCAL_THUMB, NULL);
-       cachedir_fd = file_data_new_dir(cachedir);
-       g_free(cachedir);
-
-       filelist_read(cachedir_fd, &list, NULL);
-       work = list;
-
-       while (work)
-               {
-               FileData *fd;
-               gchar *source;
-
-               fd = work->data;
-               work = work->next;
-
-               source = g_build_filename(dir->path, fd->name, NULL);
-
-               if (clear ||
-                   extension_truncate(source, GQ_CACHE_EXT_THUMB) ||
-                   extension_truncate(source, GQ_CACHE_EXT_SIM))
-                       {
-                       if (!clear && isfile(source))
-                               {
-                               still_have_a_file = TRUE;
-                               }
-                       else
-                               {
-                               if (!unlink_file(fd->path))
-                                       {
-                                       DEBUG_1("Failed to remove cache file %s", fd->path);
-                                       still_have_a_file = TRUE;
-                                       }
-                               }
-                       }
-               else
-                       {
-                       still_have_a_file = TRUE;
-                       }
-               g_free(source);
-               }
-
-       filelist_free(list);
-       file_data_unref(cachedir_fd);
-
-       if (recursive)
-               {
-               list = NULL;
-
-               filelist_read(dir_fd, NULL, &list);
-               work = list;
-               while (work)
-                       {
-                       FileData *fd = work->data;
-                       work = work->next;
-
-                       still_have_a_file |= cache_maintain_dir(fd->path, recursive, clear);
-                       }
-
-               filelist_free(list);
-               }
-
-       return still_have_a_file;
-}
-#endif
-
 static void cache_file_move(const gchar *src, const gchar *dest)
 {
        if (!dest || !src || !isfile(src)) return;
@@ -626,7 +449,7 @@ static void cache_maint_copied(FileData *fd)
 void cache_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
-       
+
        DEBUG_1("Notify cache_maint: %s %04x", fd->path, type);
        switch (fd->change->type)
                {
@@ -712,11 +535,7 @@ static void cache_manager_render_close_cb(GenericDialog *fd, gpointer data)
 {
        CleanData *cd = data;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_get_sensitive(cd->button_close)) return;
-#else
-       if (!GTK_WIDGET_SENSITIVE(cd->button_close)) return;
-#endif
 
        cache_manager_render_reset(cd);
        generic_dialog_close(cd->gd);
@@ -831,11 +650,7 @@ static void cache_manager_render_start_cb(GenericDialog *fd, gpointer data)
        CleanData *cd = data;
        gchar *path;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (cd->list || !gtk_widget_get_sensitive(cd->button_start)) return;
-#else
-       if (cd->list || !GTK_WIDGET_SENSITIVE(cd->button_start)) return;
-#endif
 
        path = remove_trailing_slash((gtk_entry_get_text(GTK_ENTRY(cd->entry))));
        parse_out_relatives(path);
@@ -910,7 +725,7 @@ static void cache_manager_render_dialog(GtkWidget *widget, const gchar *path)
        hbox = pref_box_new(cd->gd->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
 
        cd->progress = gtk_entry_new();
-       GTK_WIDGET_UNSET_FLAGS(cd->progress, GTK_CAN_FOCUS);
+       gtk_widget_set_can_focus(cd->progress, FALSE);
        gtk_editable_set_editable(GTK_EDITABLE(cd->progress), FALSE);
        gtk_entry_set_text(GTK_ENTRY(cd->progress), _("click start to begin"));
        gtk_box_pack_start(GTK_BOX(hbox), cd->progress, TRUE, TRUE, 0);
@@ -932,11 +747,7 @@ static void cache_manager_standard_clean_close_cb(GenericDialog *gd, gpointer da
 {
        CleanData *cd = data;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_get_sensitive(cd->button_close)) return;
-#else
-       if (!GTK_WIDGET_SENSITIVE(cd->button_close)) return;
-#endif
 
        generic_dialog_close(cd->gd);
 
@@ -1049,11 +860,7 @@ static void cache_manager_standard_clean_start_cb(GenericDialog *gd, gpointer da
        gchar *path;
        FileData *dir_fd;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (cd->list || !gtk_widget_get_sensitive(cd->button_start)) return;
-#else
-       if (cd->list || !GTK_WIDGET_SENSITIVE(cd->button_start)) return;
-#endif
 
        gtk_widget_set_sensitive(cd->button_start, FALSE);
        gtk_widget_set_sensitive(cd->button_stop, TRUE);
@@ -1225,7 +1032,7 @@ static GtkWidget *cache_manager_location_label(GtkWidget *group, const gchar *su
        label = pref_label_new(group, buf);
        g_free(buf);
        gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
-       
+
        return label;
 }
 
index e88f1ec..84a512b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
 
 
 void cache_maintain_home(gboolean metadata, gboolean clear, GtkWidget *parent);
-
-#if 0
-gint cache_maintain_home_dir(const gchar *dir, gint recursive, gint clear);
-gint cache_maintain_dir(const gchar *dir, gint recursive, gint clear);
-#endif
-
 void cache_notify_cb(FileData *fd, NotifyType type, gpointer data);
-
-
 void cache_manager_show(void);
 
 
index 00f4ede..9588f1b 100644 (file)
@@ -44,11 +44,19 @@ static void gqv_cell_renderer_icon_class_init(GQvCellRendererIconClass *class);
 static void gqv_cell_renderer_icon_finalize(GObject *object);
 static void gqv_cell_renderer_icon_get_size(GtkCellRenderer    *cell,
                                            GtkWidget           *widget,
-                                           GdkRectangle        *rectangle,
+                                           const GdkRectangle  *rectangle,
                                            gint                *x_offset,
                                            gint                *y_offset,
                                            gint                *width,
                                            gint                *height);
+#if GTK_CHECK_VERSION(3,0,0)
+static void gqv_cell_renderer_icon_render(GtkCellRenderer *cell,
+                                          cairo_t *cr,
+                                          GtkWidget *widget,
+                                          const GdkRectangle *background_area,
+                                          const GdkRectangle *cell_area,
+                                          GtkCellRendererState flags);
+#else
 static void gqv_cell_renderer_icon_render(GtkCellRenderer      *cell,
                                           GdkWindow            *window,
                                           GtkWidget            *widget,
@@ -56,13 +64,15 @@ static void gqv_cell_renderer_icon_render(GtkCellRenderer   *cell,
                                           GdkRectangle         *cell_area,
                                           GdkRectangle         *expose_area,
                                           GtkCellRendererState flags);
+#endif
+
 
-static gint gqv_cell_renderer_icon_activate(GtkCellRenderer      *cell,
+static gboolean gqv_cell_renderer_icon_activate(GtkCellRenderer      *cell,
                                            GdkEvent             *event,
                                            GtkWidget            *widget,
                                            const gchar          *path,
-                                           GdkRectangle         *background_area,
-                                           GdkRectangle         *cell_area,
+                                           const GdkRectangle   *background_area,
+                                           const GdkRectangle   *cell_area,
                                            GtkCellRendererState  flags);
 
 enum {
@@ -125,9 +135,8 @@ gqv_cell_renderer_icon_get_type(void)
 static void
 gqv_cell_renderer_icon_init(GQvCellRendererIcon *cellicon)
 {
-       GTK_CELL_RENDERER(cellicon)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE;
-       GTK_CELL_RENDERER(cellicon)->xpad = 2;
-       GTK_CELL_RENDERER(cellicon)->ypad = 2;
+       g_object_set(G_OBJECT(cellicon), "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, NULL);
+       gtk_cell_renderer_set_padding(GTK_CELL_RENDERER(cellicon), 2, 2);
 }
 
 static void
@@ -544,7 +553,7 @@ gqv_cell_renderer_icon_new(void)
 static void
 gqv_cell_renderer_icon_get_size(GtkCellRenderer *cell,
                                GtkWidget       *widget,
-                               GdkRectangle    *cell_area,
+                               const GdkRectangle      *cell_area,
                                gint            *x_offset,
                                gint            *y_offset,
                                gint            *width,
@@ -553,6 +562,11 @@ gqv_cell_renderer_icon_get_size(GtkCellRenderer *cell,
        GQvCellRendererIcon *cellicon = (GQvCellRendererIcon *) cell;
        gint calc_width;
        gint calc_height;
+       gint xpad, ypad;
+       gfloat xalign, yalign;
+
+       gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
+       gtk_cell_renderer_get_alignment(cell, &xalign, &yalign);
 
        if (cellicon->fixed_width > 0)
                {
@@ -591,8 +605,8 @@ gqv_cell_renderer_icon_get_size(GtkCellRenderer *cell,
                calc_width = MAX(calc_width, TOGGLE_SPACING * cellicon->num_marks);
                }
 
-       calc_width += (gint)cell->xpad * 2;
-       calc_height += (gint)cell->ypad * 2;
+       calc_width += xpad * 2;
+       calc_height += ypad * 2;
 
        if (x_offset) *x_offset = 0;
        if (y_offset) *y_offset = 0;
@@ -601,13 +615,13 @@ gqv_cell_renderer_icon_get_size(GtkCellRenderer *cell,
                {
                if (x_offset)
                        {
-                       *x_offset = (cell->xalign * (cell_area->width - calc_width - 2 * cell->xpad));
-                       *x_offset = MAX(*x_offset, 0) + cell->xpad;
+                       *x_offset = (xalign * (cell_area->width - calc_width - 2 * xpad));
+                       *x_offset = MAX(*x_offset, 0) + xpad;
                        }
                if (y_offset)
                        {
-                       *y_offset = (cell->yalign * (cell_area->height - calc_height - 2 * cell->ypad));
-                       *y_offset = MAX(*y_offset, 0) + cell->ypad;
+                       *y_offset = (yalign * (cell_area->height - calc_height - 2 * ypad));
+                       *y_offset = MAX(*y_offset, 0) + ypad;
                        }
                }
 
@@ -615,6 +629,17 @@ gqv_cell_renderer_icon_get_size(GtkCellRenderer *cell,
        if (height) *height = calc_height;
 }
 
+#if GTK_CHECK_VERSION(3,0,0)
+static void gqv_cell_renderer_icon_render(GtkCellRenderer *cell,
+                                          cairo_t *cr,
+                                          GtkWidget *widget,
+                                          const GdkRectangle *background_area,
+                                          const GdkRectangle *cell_area,
+                                          GtkCellRendererState flags)
+
+{
+       GtkStyleContext *context = gtk_widget_get_style_context(widget);
+#else
 static void
 gqv_cell_renderer_icon_render(GtkCellRenderer          *cell,
                              GdkWindow                 *window,
@@ -625,49 +650,51 @@ gqv_cell_renderer_icon_render(GtkCellRenderer             *cell,
                              GtkCellRendererState      flags)
 
 {
+       cairo_t *cr = gdk_cairo_create(window);
+#endif
        GQvCellRendererIcon *cellicon = (GQvCellRendererIcon *) cell;
        GdkPixbuf *pixbuf;
        const gchar *text;
        GdkRectangle cell_rect;
        GtkStateType state;
+       gint xpad, ypad;
+
 
        pixbuf = cellicon->pixbuf;
        text = cellicon->text;
 
        if (!pixbuf && !text) return;
 
+       gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
+
        gqv_cell_renderer_icon_get_size(cell, widget, cell_area,
                                        &cell_rect.x, &cell_rect.y,
                                        &cell_rect.width, &cell_rect.height);
 
-       cell_rect.x += cell->xpad;
-       cell_rect.y += cell->ypad;
-       cell_rect.width -= cell->xpad * 2;
-       cell_rect.height -= cell->ypad * 2;
+       cell_rect.x += xpad;
+       cell_rect.y += ypad;
+       cell_rect.width -= xpad * 2;
+       cell_rect.height -= ypad * 2;
 
        if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_has_focus(widget))
-#else
-               if (GTK_WIDGET_HAS_FOCUS(widget))
-#endif
                        state = GTK_STATE_SELECTED;
                else
                        state = GTK_STATE_ACTIVE;
                }
        else
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_state(widget) == GTK_STATE_INSENSITIVE)
-#else
-               if (GTK_WIDGET_STATE(widget) == GTK_STATE_INSENSITIVE)
-#endif
                        state = GTK_STATE_INSENSITIVE;
                else
                        state = GTK_STATE_NORMAL;
                }
 
+#if GTK_CHECK_VERSION(3,0,0)
+       gtk_style_context_set_state(context, state);
+#endif
+
        if (pixbuf)
                {
                GdkRectangle pix_rect;
@@ -680,28 +707,27 @@ gqv_cell_renderer_icon_render(GtkCellRenderer             *cell,
 
                if (cellicon->fixed_height > 0)
                        {
-                       pix_rect.y = cell_area->y + cell->ypad + (cellicon->fixed_height - pix_rect.height) / 2;
+                       pix_rect.y = cell_area->y + ypad + (cellicon->fixed_height - pix_rect.height) / 2;
                        }
                else
                        {
                        pix_rect.y = cell_area->y + cell_rect.y;
                        }
 
-               if (gdk_rectangle_intersect(cell_area, &pix_rect, &draw_rect) &&
-                   gdk_rectangle_intersect(expose_area, &draw_rect, &draw_rect))
+               if (gdk_rectangle_intersect(cell_area, &pix_rect, &draw_rect)
+#if !GTK_CHECK_VERSION(3,0,0)
+                   && gdk_rectangle_intersect(expose_area, &draw_rect, &draw_rect)
+#endif
+                  )
                        {
-                       gdk_draw_pixbuf(window,
-                                       widget->style->black_gc,
-                                       pixbuf,
-                                       /* pixbuf 0, 0 is at pix_rect.x, pix_rect.y */
-                                       draw_rect.x - pix_rect.x,
-                                       draw_rect.y - pix_rect.y,
+                       gdk_cairo_set_source_pixbuf(cr, pixbuf, pix_rect.x, pix_rect.y);
+                       cairo_rectangle (cr,
                                        draw_rect.x,
                                        draw_rect.y,
                                        draw_rect.width,
-                                       draw_rect.height,
-                                       GDK_RGB_DITHER_NORMAL,
-                                       0, 0);
+                                       draw_rect.height);
+
+                       cairo_fill (cr);
                        }
                }
 
@@ -711,31 +737,37 @@ gqv_cell_renderer_icon_render(GtkCellRenderer             *cell,
                PangoRectangle text_rect;
                GdkRectangle pix_rect;
                GdkRectangle draw_rect;
-
                layout = gqv_cell_renderer_icon_get_layout(cellicon, widget, TRUE);
                pango_layout_get_pixel_extents(layout, NULL, &text_rect);
 
                pix_rect.width = text_rect.width;
                pix_rect.height = text_rect.height;
-               pix_rect.x = cell_area->x + cell->xpad + (cell_rect.width - text_rect.width + 1) / 2;
-               pix_rect.y = cell_area->y + cell->ypad + (cell_rect.height - text_rect.height);
-               
+               pix_rect.x = cell_area->x + xpad + (cell_rect.width - text_rect.width + 1) / 2;
+               pix_rect.y = cell_area->y + ypad + (cell_rect.height - text_rect.height);
+
                if (cellicon->show_marks)
                        {
                        pix_rect.y -= TOGGLE_SPACING;
                        }
 
-               if (gdk_rectangle_intersect(cell_area, &pix_rect, &draw_rect) &&
-                   gdk_rectangle_intersect(expose_area, &draw_rect, &draw_rect))
+               if (gdk_rectangle_intersect(cell_area, &pix_rect, &draw_rect)
+#if !GTK_CHECK_VERSION(3,0,0)
+                   && gdk_rectangle_intersect(expose_area, &draw_rect, &draw_rect)
+#endif
+                   )
                        {
-                       gtk_paint_layout(widget->style, window,
+#if GTK_CHECK_VERSION(3,0,0)
+                       gtk_render_layout(context, cr, pix_rect.x - text_rect.x, pix_rect.y, layout);
+#else
+
+                       gtk_paint_layout(gtk_widget_get_style(widget), window,
                                         state, TRUE,
                                         cell_area, widget,
                                         "cellrenderertext",
                                         pix_rect.x - text_rect.x, pix_rect.y,
                                         layout);
+#endif
                        }
-
                g_object_unref(layout);
                }
 
@@ -747,46 +779,79 @@ gqv_cell_renderer_icon_render(GtkCellRenderer             *cell,
 
                pix_rect.width = TOGGLE_SPACING * cellicon->num_marks;
                pix_rect.height = TOGGLE_SPACING;
-               pix_rect.x = cell_area->x + cell->xpad + (cell_rect.width - pix_rect.width + 1) / 2 + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2;
-               pix_rect.y = cell_area->y + cell->ypad + (cell_rect.height - pix_rect.height) + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2;
-               
-               if (gdk_rectangle_intersect(cell_area, &pix_rect, &draw_rect) &&
-                   gdk_rectangle_intersect(expose_area, &draw_rect, &draw_rect))
+               pix_rect.x = cell_area->x + xpad + (cell_rect.width - pix_rect.width + 1) / 2 + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2;
+               pix_rect.y = cell_area->y + ypad + (cell_rect.height - pix_rect.height) + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2;
+
+               if (gdk_rectangle_intersect(cell_area, &pix_rect, &draw_rect)
+#if !GTK_CHECK_VERSION(3,0,0)
+                   && gdk_rectangle_intersect(expose_area, &draw_rect, &draw_rect)
+#endif
+                   )
                        {
                        for (i = 0; i < cellicon->num_marks; i++)
                                {
-                               gtk_paint_check(widget->style, window,
+#if GTK_CHECK_VERSION(3,0,0)
+                               state &= ~(GTK_STATE_FLAG_ACTIVE);
+
+                               if ((cellicon->marks & (1 << i)))
+                                       state |= GTK_STATE_FLAG_ACTIVE;
+
+                               cairo_save (cr);
+
+                               cairo_rectangle(cr,
+                                               pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+                                               pix_rect.y,
+                                               TOGGLE_WIDTH, TOGGLE_WIDTH);
+                               cairo_clip (cr);
+
+                               gtk_style_context_save(context);
+                               gtk_style_context_set_state(context, state);
+
+                               gtk_style_context_add_class(context, GTK_STYLE_CLASS_CHECK);
+
+                               gtk_render_check(context, cr,
+                                        pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
+                                        pix_rect.y,
+                                        TOGGLE_WIDTH, TOGGLE_WIDTH);
+                               gtk_style_context_restore(context);
+                               cairo_restore(cr);
+
+#else
+                               gtk_paint_check(gtk_widget_get_style(widget), window,
                                         state, (cellicon->marks & (1 << i)) ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
                                         cell_area, widget, "cellcheck",
                                         pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2,
                                         pix_rect.y,
                                         TOGGLE_WIDTH, TOGGLE_WIDTH);
+#endif
                                }
                        }
                 }
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (cellicon->focused && gtk_widget_has_focus(widget))
-#else
-       if (cellicon->focused && GTK_WIDGET_HAS_FOCUS(widget))
-#endif
                {
-               gtk_paint_focus(widget->style, window,
+#if GTK_CHECK_VERSION(3,0,0)
+#else
+               gtk_paint_focus(gtk_widget_get_style(widget), window,
                                state,
                                cell_area, widget,
                                "cellrendererfocus",
                                cell_area->x, cell_area->y,
                                cell_area->width, cell_area->height);
+#endif
                }
+#if !GTK_CHECK_VERSION(3,0,0)
+       cairo_destroy(cr);
+#endif
 }
 
-static gint
+static gboolean
 gqv_cell_renderer_icon_activate(GtkCellRenderer      *cell,
                                GdkEvent             *event,
                                GtkWidget            *widget,
                                const gchar          *path,
-                               GdkRectangle         *background_area,
-                               GdkRectangle         *cell_area,
+                               const GdkRectangle   *background_area,
+                               const GdkRectangle   *cell_area,
                                GtkCellRendererState  flags)
 {
        GQvCellRendererIcon *cellicon = (GQvCellRendererIcon *) cell;
@@ -800,23 +865,26 @@ gqv_cell_renderer_icon_activate(GtkCellRenderer      *cell,
                GdkRectangle rect;
                GdkRectangle cell_rect;
                gint i;
-               
+               gint xpad, ypad;
+
+               gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
+
                gqv_cell_renderer_icon_get_size(cell, widget, cell_area,
                                                &cell_rect.x, &cell_rect.y,
                                                &cell_rect.width, &cell_rect.height);
 
-               cell_rect.x += cell->xpad;
-               cell_rect.y += cell->ypad;
-               cell_rect.width -= cell->xpad * 2;
-               cell_rect.height -= cell->ypad * 2;
+               cell_rect.x += xpad;
+               cell_rect.y += ypad;
+               cell_rect.width -= xpad * 2;
+               cell_rect.height -= ypad * 2;
 
                rect.width = TOGGLE_WIDTH;
                rect.height = TOGGLE_WIDTH;
-               rect.y = cell_area->y + cell->ypad + (cell_rect.height - TOGGLE_SPACING) + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2;
+               rect.y = cell_area->y + ypad + (cell_rect.height - TOGGLE_SPACING) + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2;
                for (i = 0; i < cellicon->num_marks; i++)
                        {
-                       rect.x = cell_area->x + cell->xpad + (cell_rect.width - TOGGLE_SPACING * cellicon->num_marks + 1) / 2 + i * TOGGLE_SPACING;
-                       
+                       rect.x = cell_area->x + xpad + (cell_rect.width - TOGGLE_SPACING * cellicon->num_marks + 1) / 2 + i * TOGGLE_SPACING;
+
                        if (bevent->x >= rect.x && bevent->x < rect.x + rect.width &&
                            bevent->y >= rect.y && bevent->y < rect.y + rect.height)
                                {
index ce9411c..fca6889 100644 (file)
@@ -22,8 +22,6 @@
 #ifndef __GQV_CELL_RENDERER_ICON_H__
 #define __GQV_CELL_RENDERER_ICON_H__
 
-#include <gtk/gtkcellrenderer.h>
-
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
@@ -57,13 +55,13 @@ struct _GQvCellRendererIcon
        gboolean background_set;
 
        gint num_marks;
-       
+
        gboolean show_text;
        gboolean show_marks;
-       
+
        guint marks;
        guint toggled_mark;
-       
+
 };
 
 struct _GQvCellRendererIconClass
index 904e7b9..2194d77 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -234,21 +234,6 @@ static void collection_save_or_load_dialog(const gchar *path,
 
 void collection_dialog_save_as(gchar *path, CollectionData *cd)
 {
-#if 0
-       if (!cd->list)
-               {
-               GtkWidget *parent = NULL;
-               CollectWindow *cw;
-
-               cw = collection_window_find(cd);
-               if (cw) parent = cw->window;
-               file_util_warning_dialog(_("Collection empty"),
-                                        _("The current collection is empty, save aborted."),
-                                        GTK_STOCK_DIALOG_INFO, parent);
-               return;
-               }
-#endif
-
        if (!path) path = cd->path;
        if (!path) path = cd->name;
 
index fa96d2c..109c0e8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index a2f5ba3..1f6cf05 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -725,7 +725,7 @@ static void collect_manager_refresh(void)
 static void collect_manager_process_actions(gint max)
 {
        if (collection_manager_action_list) DEBUG_1("collection manager processing actions");
-       
+
        while (collection_manager_action_list != NULL && max > 0)
                {
                CollectManagerAction *action;
@@ -784,12 +784,11 @@ static void collect_manager_process_actions(gint max)
 static gboolean collect_manager_process_entry(CollectManagerEntry *entry)
 {
        CollectionData *cd;
-       gboolean success;
 
        if (entry->empty) return FALSE;
 
        cd = collection_new(entry->path);
-       success = collection_load_private(cd, entry->path, COLLECTION_LOAD_NONE);
+       (void) collection_load_private(cd, entry->path, COLLECTION_LOAD_NONE);
 
        collection_unref(cd);
 
@@ -935,7 +934,7 @@ void collect_manager_flush(void)
 void collect_manager_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
-       
+
        DEBUG_1("Notify collect_manager: %s %04x", fd->path, type);
        switch (fd->change->type)
                {
index 38ee6e6..ed4cc30 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 745eeca..c48c7ea 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -244,10 +244,12 @@ static void collection_table_update_extras(CollectTable *ct, gboolean loading, g
 
 static void collection_table_toggle_filenames(CollectTable *ct)
 {
+       GtkAllocation allocation;
        ct->show_text = !ct->show_text;
        options->show_icon_names = ct->show_text;
 
-       collection_table_populate_at_new_size(ct, ct->listview->allocation.width, ct->listview->allocation.height, TRUE);
+       gtk_widget_get_allocation(ct->listview, &allocation);
+       collection_table_populate_at_new_size(ct, allocation.width, allocation.height, TRUE);
 }
 
 static gint collection_table_get_icon_width(CollectTable *ct)
@@ -520,7 +522,7 @@ static void tip_show(CollectTable *ct)
 
        if (ct->tip_window) return;
 
-       gdk_window_get_pointer(ct->listview->window, &x, &y, NULL);
+       gdk_window_get_pointer(gtk_widget_get_window(ct->listview), &x, &y, NULL);
 
        ct->tip_info = collection_table_find_data_by_coord(ct, x, y, NULL);
        if (!ct->tip_info) return;
@@ -537,11 +539,7 @@ static void tip_show(CollectTable *ct)
 
        gdk_window_get_pointer(NULL, &x, &y, NULL);
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_get_realized(ct->tip_window)) gtk_widget_realize(ct->tip_window);
-#else
-       if (!GTK_WIDGET_REALIZED(ct->tip_window)) gtk_widget_realize(ct->tip_window);
-#endif
        gtk_window_move(GTK_WINDOW(ct->tip_window), x + 16, y + 16);
        gtk_widget_show(ct->tip_window);
 }
@@ -892,7 +890,7 @@ static GtkWidget *collection_table_popup_menu(CollectTable *ct, gboolean over_ic
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
        menu_item_add_divider(menu);
 
-       
+
        ct->editmenu_fd_list = collection_table_selection_get_list(ct);
        submenu_add_edit(menu, &item,
                        G_CALLBACK(collection_table_popup_edit_cb), ct, ct->editmenu_fd_list);
@@ -1103,7 +1101,7 @@ static gint page_height(CollectTable *ct)
        gint ret;
 
        adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(ct->listview));
-       page_size = (gint)adj->page_increment;
+       page_size = (gint)gtk_adjustment_get_page_increment(adj);
 
        row_height = options->thumbnails.max_height + THUMB_BORDER_PADDING * 2;
        if (ct->show_text) row_height += options->thumbnails.max_height / 3;
@@ -1142,33 +1140,33 @@ static gboolean collection_table_press_key_cb(GtkWidget *widget, GdkEventKey *ev
 
        switch (event->keyval)
                {
-               case GDK_Left: case GDK_KP_Left:
+               case GDK_KEY_Left: case GDK_KEY_KP_Left:
                        focus_col = -1;
                        break;
-               case GDK_Right: case GDK_KP_Right:
+               case GDK_KEY_Right: case GDK_KEY_KP_Right:
                        focus_col = 1;
                        break;
-               case GDK_Up: case GDK_KP_Up:
+               case GDK_KEY_Up: case GDK_KEY_KP_Up:
                        focus_row = -1;
                        break;
-               case GDK_Down: case GDK_KP_Down:
+               case GDK_KEY_Down: case GDK_KEY_KP_Down:
                        focus_row = 1;
                        break;
-               case GDK_Page_Up: case GDK_KP_Page_Up:
+               case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
                        focus_row = -page_height(ct);
                        break;
-               case GDK_Page_Down: case GDK_KP_Page_Down:
+               case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
                        focus_row = page_height(ct);
                        break;
-               case GDK_Home: case GDK_KP_Home:
+               case GDK_KEY_Home: case GDK_KEY_KP_Home:
                        focus_row = -ct->focus_row;
                        focus_col = -ct->focus_column;
                        break;
-               case GDK_End: case GDK_KP_End:
+               case GDK_KEY_End: case GDK_KEY_KP_End:
                        focus_row = ct->rows - 1 - ct->focus_row;
                        focus_col = ct->columns - 1 - ct->focus_column;
                        break;
-               case GDK_space:
+               case GDK_KEY_space:
                        info = collection_table_find_data(ct, ct->focus_row, ct->focus_column, NULL);
                        if (info)
                                {
@@ -1187,8 +1185,8 @@ static gboolean collection_table_press_key_cb(GtkWidget *widget, GdkEventKey *ev
                case 'T': case 't':
                        if (event->state & GDK_CONTROL_MASK) collection_table_toggle_filenames(ct);
                        break;
-               case GDK_Menu:
-               case GDK_F10:
+               case GDK_KEY_Menu:
+               case GDK_KEY_F10:
                        info = collection_table_find_data(ct, ct->focus_row, ct->focus_column, NULL);
                        ct->click_info = info;
 
@@ -1241,9 +1239,6 @@ static gboolean collection_table_press_key_cb(GtkWidget *widget, GdkEventKey *ev
 
        if (stop_signal)
                {
-#if 0
-               g_signal_stop_emission_by_name(GTK_OBJECT(widget), "key_press_event");
-#endif
                tip_unschedule(ct);
                }
 
@@ -1267,7 +1262,7 @@ static CollectInfo *collection_table_insert_find(CollectTable *ct, CollectInfo *
 
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(ct->listview));
 
-       if (!use_coord) gdk_window_get_pointer(ct->listview->window, &x, &y, NULL);
+       if (!use_coord) gdk_window_get_pointer(gtk_widget_get_window(ct->listview), &x, &y, NULL);
 
        if (source)
                {
@@ -1359,7 +1354,6 @@ static CollectInfo *collection_table_insert_point(CollectTable *ct, gint x, gint
 
 static void collection_table_insert_marker(CollectTable *ct, CollectInfo *info, gboolean enable)
 {
-       gint row, col;
        gboolean after = FALSE;
        GdkRectangle cell;
 
@@ -1376,26 +1370,14 @@ static void collection_table_insert_marker(CollectTable *ct, CollectInfo *info,
        /* this setting does not take into account (after), but since it is not really used... */
        ct->marker_info = info;
 
-       row = -1;
-       col = -1;
-
        if (!ct->marker_window)
                {
-               GdkWindow *parent;
+               GdkWindow *parent = gtk_tree_view_get_bin_window(GTK_TREE_VIEW(ct->listview));
                GdkWindowAttr attributes;
                gint attributes_mask;
-               GdkPixmap *pixmap;
-               GdkBitmap *mask;
-               GdkPixbuf *pb;
-               gint w, h;
-
-               parent = gtk_tree_view_get_bin_window(GTK_TREE_VIEW(ct->listview));
-
-               pb = gdk_pixbuf_new_from_xpm_data((const gchar **)marker_xpm);
-               gdk_pixbuf_render_pixmap_and_mask(pb, &pixmap, &mask, 128);
-               g_object_unref(pb);
-
-               gdk_drawable_get_size(pixmap, &w, &h);
+               GdkPixbuf *pb = gdk_pixbuf_new_from_xpm_data((const gchar **)marker_xpm);
+               gint w = gdk_pixbuf_get_width(pb);
+               gint h = gdk_pixbuf_get_height(pb);
 
                attributes.window_type = GDK_WINDOW_CHILD;
                attributes.wclass = GDK_INPUT_OUTPUT;
@@ -1405,11 +1387,34 @@ static void collection_table_insert_marker(CollectTable *ct, CollectInfo *info,
                attributes_mask = 0;
 
                ct->marker_window = gdk_window_new(parent, &attributes, attributes_mask);
+
+#if GTK_CHECK_VERSION(3,0,0)
+               cairo_region_t *mask;
+               cairo_pattern_t *pattern;
+               cairo_surface_t *img = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
+               cairo_t *cr = cairo_create(img);
+               gdk_cairo_set_source_pixbuf(cr, pb, 0, 0);
+               cairo_paint(cr);
+               pattern = cairo_pattern_create_for_surface(img);
+               mask = gdk_cairo_region_create_from_surface(img);
+               gdk_window_shape_combine_region(ct->marker_window, mask, 0, 0);
+               gdk_window_set_background_pattern(ct->marker_window, pattern);
+               cairo_region_destroy(mask);
+               cairo_pattern_destroy(pattern);
+               cairo_destroy(cr);
+               cairo_surface_destroy(img);
+#else
+               GdkPixmap *pixmap;
+               GdkBitmap *mask;
+               gdk_pixbuf_render_pixmap_and_mask(pb, &pixmap, &mask, 128);
+
                gdk_window_set_back_pixmap(ct->marker_window, pixmap, FALSE);
                gdk_window_shape_combine_mask(ct->marker_window, mask, 0, 0);
 
                g_object_unref(pixmap);
                if (mask) g_object_unref(mask);
+#endif
+               g_object_unref(pb);
                }
 
        if (info)
@@ -1417,7 +1422,8 @@ static void collection_table_insert_marker(CollectTable *ct, CollectInfo *info,
                gint x, y;
                gint w, h;
 
-               gdk_drawable_get_size(ct->marker_window, &w, &h);
+               w = gdk_window_get_width(ct->marker_window);
+               h = gdk_window_get_height(ct->marker_window);
 
                if (!after)
                        {
@@ -1431,7 +1437,9 @@ static void collection_table_insert_marker(CollectTable *ct, CollectInfo *info,
                y = cell.y + (cell.height / 2) - (h / 2);
 
                gdk_window_move(ct->marker_window, x, y);
+#if !GTK_CHECK_VERSION(3,0,0)
                gdk_window_clear(ct->marker_window);
+#endif
                if (!gdk_window_is_visible(ct->marker_window)) gdk_window_show(ct->marker_window);
                }
        else
@@ -1472,9 +1480,10 @@ static gboolean collection_table_auto_scroll_idle_cb(gpointer data)
 
        if (!ct->drop_idle_id) return FALSE;
 
-       window = ct->listview->window;
+       window = gtk_widget_get_window(ct->listview);
        gdk_window_get_pointer(window, &x, &y, NULL);
-       gdk_drawable_get_size(window, &w, &h);
+       w = gdk_window_get_width(window);
+       h = gdk_window_get_height(window);
        if (x >= 0 && x < w && y >= 0 && y < h)
                {
                collection_table_motion_update(ct, x, y, TRUE);
@@ -1554,11 +1563,7 @@ static gboolean collection_table_press_cb(GtkWidget *widget, GdkEventButton *bev
                                        layout_image_set_collection(NULL, ct->cd, info);
                                        }
                                }
-#if GTK_CHECK_VERSION(2,20,0)
                        else if (!gtk_widget_has_focus(ct->listview))
-#else
-                       else if (!GTK_WIDGET_HAS_FOCUS(ct->listview))
-#endif
                                {
                                gtk_widget_grab_focus(ct->listview);
                                }
@@ -1709,11 +1714,7 @@ static void collection_table_populate(CollectTable *ct, gboolean resize)
                        gtk_tree_view_column_set_visible(column, (i < ct->columns));
                        gtk_tree_view_column_set_fixed_width(column, thumb_width + (THUMB_BORDER_PADDING * 6));
 
-#if GTK_CHECK_VERSION(2,18,0)
                        list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
-#else
-                       list = gtk_tree_view_column_get_cell_renderers(column);
-#endif
                        cell = (list) ? list->data : NULL;
                        g_list_free(list);
 
@@ -1724,11 +1725,7 @@ static void collection_table_populate(CollectTable *ct, gboolean resize)
                                                             "show_text", ct->show_text, NULL);
                                }
                        }
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_realized(ct->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(ct->listview));
-#else
-               if (GTK_WIDGET_REALIZED(ct->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(ct->listview));
-#endif
                }
 
        row = -1;
@@ -2155,6 +2152,9 @@ static void collection_table_dnd_get(GtkWidget *widget, GdkDragContext *context,
                                uri_text = collection_info_list_to_dnd_data(ct->cd, list, &total);
                                g_list_free(list);
                                }
+                       gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
+                                               8, (guchar *)uri_text, total);
+                       g_free(uri_text);
                        break;
                case TARGET_URI_LIST:
                case TARGET_TEXT_PLAIN:
@@ -2169,14 +2169,10 @@ static void collection_table_dnd_get(GtkWidget *widget, GdkDragContext *context,
                                }
                        if (!list) return;
 
-                       uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN));
+                       uri_selection_data_set_uris_from_filelist(selection_data, list);
                        filelist_free(list);
                        break;
                }
-
-       gtk_selection_data_set(selection_data, selection_data->target,
-                              8, (guchar *)uri_text, total);
-       g_free(uri_text);
 }
 
 
@@ -2192,7 +2188,7 @@ static void collection_table_dnd_receive(GtkWidget *widget, GdkDragContext *cont
        CollectInfo *drop_info;
        GList *work;
 
-       DEBUG_1("%s", selection_data->data);
+       DEBUG_1("%s", gtk_selection_data_get_data(selection_data));
 
        collection_table_scroll(ct, FALSE);
        collection_table_insert_marker(ct, NULL, FALSE);
@@ -2202,7 +2198,7 @@ static void collection_table_dnd_receive(GtkWidget *widget, GdkDragContext *cont
        switch (info)
                {
                case TARGET_APP_COLLECTION_MEMBER:
-                       source = collection_from_dnd_data((gchar *)selection_data->data, &list, &info_list);
+                       source = collection_from_dnd_data((gchar *)gtk_selection_data_get_data(selection_data), &list, &info_list);
                        if (source)
                                {
                                if (source == ct->cd)
@@ -2226,7 +2222,7 @@ static void collection_table_dnd_receive(GtkWidget *widget, GdkDragContext *cont
                                else
                                        {
                                        /* it is a move/copy across collections */
-                                       if (context->action == GDK_ACTION_MOVE)
+                                       if (gdk_drag_context_get_selected_action(context) == GDK_ACTION_MOVE)
                                                {
                                                collection_remove_by_info_list(source, info_list);
                                                }
@@ -2235,7 +2231,7 @@ static void collection_table_dnd_receive(GtkWidget *widget, GdkDragContext *cont
                                }
                        break;
                case TARGET_URI_LIST:
-                       list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
+                       list = uri_filelist_from_gtk_selection_data(selection_data);
                        work = list;
                        while (work)
                                {
@@ -2376,9 +2372,6 @@ static void collection_table_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCel
 
        if (info && (info->flag_mask & SELECTION_PRELIGHT))
                {
-#if 0
-               shift_color(&color_fg, -1, 0);
-#endif
                shift_color(&color_bg, -1, 0);
                }
 
@@ -2445,7 +2438,7 @@ static void collection_table_destroy(GtkWidget *widget, gpointer data)
 
        if (ct->popup)
                {
-               g_signal_handlers_disconnect_matched(GTK_OBJECT(ct->popup), G_SIGNAL_MATCH_DATA,
+               g_signal_handlers_disconnect_matched(G_OBJECT(ct->popup), G_SIGNAL_MATCH_DATA,
                                                     0, 0, 0, NULL, ct);
                gtk_widget_destroy(ct->popup);
                }
@@ -2473,7 +2466,7 @@ CollectTable *collection_table_new(CollectionData *cd)
        gint i;
 
        ct = g_new0(CollectTable, 1);
-       
+
        ct->cd = cd;
        ct->show_text = options->show_icon_names;
 
index 1e0e98f..f6d120e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 634af17..c69155d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -102,14 +102,6 @@ gboolean collection_info_load_thumb(CollectInfo *ci)
 
        log_printf("collection_info_load_thumb not implemented!\n(because an instant thumb loader not implemented)");
        return FALSE;
-#if 0
-       if (create_thumbnail(ci->fd->path, &ci->pixmap, &ci->mask) < 0) return FALSE;
-
-       if (ci->pixmap) gdk_pixmap_ref(ci->pixmap);
-       if (ci->mask) gdk_bitmap_ref(ci->mask);
-
-       return TRUE;
-#endif
 }
 
 void collection_list_free(GList *list)
@@ -254,38 +246,6 @@ CollectInfo *collection_list_find_fd(GList *list, FileData *fd)
        return NULL;
 }
 
-#if 0
-static GList *collection_list_find_link(GList *list, gchar *path)
-{
-       GList *work = list;
-
-       while (work)
-               {
-               CollectInfo *ci = work->data;
-               if (strcmp(ci->fd->path, path) == 0) return work;
-               work = work->next;
-               }
-
-       return NULL;
-}
-
-static gint collection_list_find_index(GList *list, gchar *path)
-{
-       gint c = 0;
-       GList *work = list;
-
-       while (work)
-               {
-               CollectInfo *ci = work->data;
-               if (strcmp(ci->fd->path, path) == 0) return c;
-               work = work->next;
-               c++;
-               }
-
-       return -1;
-}
-#endif
-
 GList *collection_list_to_filelist(GList *list)
 {
        GList *filelist = NULL;
@@ -377,7 +337,7 @@ CollectionData *collection_new(const gchar *path)
 
 
        collection_list = g_list_append(collection_list, cd);
-       
+
        return cd;
 }
 
@@ -389,7 +349,7 @@ void collection_free(CollectionData *cd)
 
        collection_load_stop(cd);
        collection_list_free(cd->list);
-       
+
        file_data_unregister_notify_func(collection_notify_cb, cd);
 
        collection_list = g_list_remove(collection_list, cd);
@@ -446,15 +406,15 @@ CollectionData *collection_from_dnd_data(const gchar *data, GList **list, GList
        if (info_list) *info_list = NULL;
 
        if (strncmp(data, "COLLECTION:", 11) != 0) return NULL;
-       
+
        ptr = data + 11;
-               
+
        collection_number = atoi(ptr);
        cd = collection_from_number(collection_number);
        if (!cd) return NULL;
 
        if (!list && !info_list) return cd;
-       
+
        while (*ptr != '\0' && *ptr != '\n' ) ptr++;
        if (*ptr == '\0') return cd;
        ptr++;
@@ -463,7 +423,7 @@ CollectionData *collection_from_dnd_data(const gchar *data, GList **list, GList
                {
                guint item_number;
                CollectInfo *info;
-               
+
                item_number = (guint) atoi(ptr);
                while (*ptr != '\n' && *ptr != '\0') ptr++;
                if (*ptr == '\0')
@@ -477,7 +437,7 @@ CollectionData *collection_from_dnd_data(const gchar *data, GList **list, GList
                if (list) *list = g_list_append(*list, file_data_ref(info->fd));
                if (info_list) *info_list = g_list_append(*info_list, info);
                }
-       
+
        return cd;
 }
 
@@ -508,7 +468,7 @@ gchar *collection_info_list_to_dnd_data(CollectionData *cd, GList *list, gint *l
                work = work->next;
 
                if (item_number < 0) continue;
-               
+
                text = g_strdup_printf("%d\n", item_number);
                temp = g_list_prepend(temp, text);
                *length += strlen(text);
@@ -787,7 +747,7 @@ static void collection_notify_cb(FileData *fd, NotifyType type, gpointer data)
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
 
        DEBUG_1("Notify collection: %s %04x", fd->path, type);
-       
+
        switch (fd->change->type)
                {
                case FILEDATA_CHANGE_MOVE:
@@ -817,7 +777,6 @@ static gboolean collection_window_keypress(GtkWidget *widget, GdkEventKey *event
 {
        CollectWindow *cw = data;
        gboolean stop_signal = FALSE;
-       gint edit_val = -1;
        GList *list;
 
        if (event->state & GDK_CONTROL_MASK)
@@ -826,34 +785,15 @@ static gboolean collection_window_keypress(GtkWidget *widget, GdkEventKey *event
                switch (event->keyval)
                        {
                        case '1':
-                               edit_val = 0;
-                               break;
                        case '2':
-                               edit_val = 1;
-                               break;
                        case '3':
-                               edit_val = 2;
-                               break;
                        case '4':
-                               edit_val = 3;
-                               break;
                        case '5':
-                               edit_val = 4;
-                               break;
                        case '6':
-                               edit_val = 5;
-                               break;
                        case '7':
-                               edit_val = 6;
-                               break;
                        case '8':
-                               edit_val = 7;
-                               break;
                        case '9':
-                               edit_val = 8;
-                               break;
                        case '0':
-                               edit_val = 9;
                                break;
                        case 'A': case 'a':
                                if (event->state & GDK_SHIFT_MASK)
@@ -901,7 +841,7 @@ static gboolean collection_window_keypress(GtkWidget *widget, GdkEventKey *event
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Return: case GDK_KP_Enter:
+                       case GDK_KEY_Return: case GDK_KEY_KP_Enter:
                                layout_image_set_collection(NULL, cw->cd,
                                        collection_table_get_focus_info(cw->table));
                                break;
@@ -951,7 +891,7 @@ static gboolean collection_window_keypress(GtkWidget *widget, GdkEventKey *event
                                        collection_set_sort_method(cw->cd, SORT_PATH);
                                        }
                                break;
-                       case GDK_Delete: case GDK_KP_Delete:
+                       case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
                                list = g_list_copy(cw->table->selection);
                                if (list)
                                        {
@@ -979,12 +919,15 @@ static gboolean collection_window_keypress(GtkWidget *widget, GdkEventKey *event
 static void collection_window_get_geometry(CollectWindow *cw)
 {
        CollectionData *cd;
+       GdkWindow *window;
 
        if (!cw) return;
 
        cd = cw->cd;
-       gdk_window_get_position(cw->window->window, &cd->window_x, &cd->window_y);
-       gdk_drawable_get_size(cw->window->window, &cd->window_w, &cd->window_h);
+       window = gtk_widget_get_window(cw->window);
+       gdk_window_get_position(window, &cd->window_x, &cd->window_y);
+       cd->window_w = gdk_window_get_width(window);
+       cd->window_h = gdk_window_get_height(window);
        cd->window_read = TRUE;
 }
 
@@ -1043,13 +986,6 @@ static void collection_window_insert(CollectWindow *cw, CollectInfo *ci)
        if (!cw) return;
 }
 
-#if 0
-static void collection_window_move(CollectWindow *cw, CollectInfo *ci)
-{
-       if (!cw) return;
-}
-#endif
-
 static void collection_window_remove(CollectWindow *cw, CollectInfo *ci)
 {
        if (!cw) return;
index d7326d6..9e630c9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 44462a3..7788c7a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
 #ifdef HAVE_LCMS
 /*** color support enabled ***/
 
+#ifdef HAVE_LCMS2
+#include <lcms2.h>
+#else
 #include <lcms.h>
+#endif
 
 
 typedef struct _ColorManCache ColorManCache;
@@ -52,7 +56,9 @@ static void color_man_lib_init(void)
        if (init_done) return;
        init_done = TRUE;
 
+#ifndef HAVE_LCMS2
        cmsErrorAction(LCMS_ERROR_IGNORE);
+#endif
 }
 
 static cmsHPROFILE color_man_create_adobe_comp(void)
@@ -425,7 +431,14 @@ static gchar *color_man_get_profile_name(ColorManProfileType type, cmsHPROFILE p
                case COLOR_PROFILE_FILE:
                        if (profile)
                                {
+#ifdef HAVE_LCMS2
+                               cmsUInt8Number profileID[17];
+                               profileID[16] = '\0';
+                               cmsGetHeaderProfileID(profile, profileID);
+                               return g_strdup((gchar *) profileID);
+#else
                                return g_strdup(cmsTakeProductName(profile));
+#endif
                                }
                        return g_strdup(_("Custom profile"));
                        break;
@@ -441,7 +454,7 @@ gboolean color_man_get_status(ColorMan *cm, gchar **image_profile, gchar **scree
        if (!cm) return FALSE;
 
        cc = cm->profile;
-       
+
        if (image_profile) *image_profile = color_man_get_profile_name(cc->profile_in_type, cc->profile_in);
        if (screen_profile) *screen_profile = color_man_get_profile_name(cc->profile_out_type, cc->profile_out);
        return TRUE;
index 636642d..2082330 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 17a5d70..db67a98 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik / Laurent Monin
  *
 #include "main.h"
 #include "compat.h"
 
-/* gtk_radio_action_set_current_value() replacement for GTK+ < 2.10 */
-void radio_action_set_current_value(GtkRadioAction *action, gint current_value)
+#if !GTK_CHECK_VERSION(2,24,0)
+gint compat_gdk_window_get_width(GdkWindow *window)
 {
-#if GTK_CHECK_VERSION(2, 10, 0)
-       gtk_radio_action_set_current_value(action, current_value);
-#else
-       GSList *group;
-       gint value;
-
-       group = gtk_radio_action_get_group(action);
-       while (group)
-               {
-               action = GTK_RADIO_ACTION(group->data);
-               g_object_get(G_OBJECT(action), "value", &value, NULL);
-               if (value == current_value)
-                       {
-                       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), TRUE);
-                       return;
-                       }
-               group = g_slist_next(group);
-               }
-#endif
+       gint w, h;
+       gdk_drawable_get_size(window, &w, &h);
+       return w;
 }
 
-#if !GLIB_CHECK_VERSION(2, 14, 0)
-static void hash_table_add(gpointer key, gpointer value, gpointer user_data)
+gint compat_gdk_window_get_height(GdkWindow *window)
 {
-       GList **list = user_data;
-       *list = g_list_prepend(*list, key);
+       gint w, h;
+       gdk_drawable_get_size(window, &w, &h);
+       return h;
 }
 #endif
 
-GList* hash_table_get_keys(GHashTable *hash_table)
+#if !GTK_CHECK_VERSION(2,22,0)
+cairo_surface_t *compat_gdk_window_create_similar_surface (GdkWindow *window, cairo_content_t content, gint width, gint height)
 {
-#if GLIB_CHECK_VERSION(2, 14, 0)
-       return g_hash_table_get_keys(hash_table);
-#else
-       GList *list = NULL;
-       g_hash_table_foreach(hash_table, hash_table_add, &list);
-       return list;
-#endif
+       cairo_t *cr = gdk_cairo_create(window);
+       cairo_surface_t *ws = cairo_get_target(cr);
+       cairo_surface_t *ret = cairo_surface_create_similar(ws, content, width, height);
+       cairo_destroy(cr);
+       return ret;
 }
-
+#endif
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index b1cb9ee..80d667e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik / Laurent Monin
  *
 #ifndef COMPAT_H
 #define COMPAT_H
 
-void radio_action_set_current_value(GtkRadioAction *action, gint current_value);
-GList* hash_table_get_keys(GHashTable *hash_table);
-
-#if !GTK_CHECK_VERSION(2,12,0)
-#define gtk_widget_set_tooltip_text(widget, text) /* ignored */
-#endif
-
 
 /* Some systems (BSD,MacOsX,HP-UX,...) define MAP_ANON and not MAP_ANONYMOUS */
 #if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
@@ -28,6 +21,64 @@ GList* hash_table_get_keys(GHashTable *hash_table);
 #define        MAP_ANON        MAP_ANONYMOUS
 #endif
 
+#if !GTK_CHECK_VERSION(2,22,0)
+#define GDK_KEY_BackSpace      GDK_BackSpace
+#define GDK_KEY_Delete         GDK_Delete
+#define GDK_KEY_Down           GDK_Down
+#define GDK_KEY_End            GDK_End
+#define GDK_KEY_Escape         GDK_Escape
+#define GDK_KEY_F10            GDK_F10
+#define GDK_KEY_F11            GDK_F11
+#define GDK_KEY_Home           GDK_Home
+#define GDK_KEY_ISO_Left_Tab   GDK_ISO_Left_Tab
+#define GDK_KEY_KP_Add         GDK_KP_Add
+#define GDK_KEY_KP_Delete      GDK_KP_Delete
+#define GDK_KEY_KP_Divide      GDK_KP_Divide
+#define GDK_KEY_KP_Down                GDK_KP_Down
+#define GDK_KEY_KP_End         GDK_KP_End
+#define GDK_KEY_KP_Enter       GDK_KP_Enter
+#define GDK_KEY_KP_Home                GDK_KP_Home
+#define GDK_KEY_KP_Left                GDK_KP_Left
+#define GDK_KEY_KP_Multiply    GDK_KP_Multiply
+#define GDK_KEY_KP_Page_Down   GDK_KP_Page_Down
+#define GDK_KEY_KP_Page_Up     GDK_KP_Page_Up
+#define GDK_KEY_KP_Right       GDK_KP_Right
+#define GDK_KEY_KP_Subtract    GDK_KP_Subtract
+#define GDK_KEY_KP_Up          GDK_KP_Up
+#define GDK_KEY_Left           GDK_Left
+#define GDK_KEY_Menu           GDK_Menu
+#define GDK_KEY_Page_Down      GDK_Page_Down
+#define GDK_KEY_Page_Up                GDK_Page_Up
+#define GDK_KEY_plus           GDK_plus
+#define GDK_KEY_Return         GDK_Return
+#define GDK_KEY_Right          GDK_Right
+#define GDK_KEY_space          GDK_space
+#define GDK_KEY_Tab            GDK_Tab
+#define GDK_KEY_Up             GDK_Up
+#endif
+
+#if !GTK_CHECK_VERSION(2,24,0)
+#define gtk_combo_box_text_new gtk_combo_box_new_text
+#define gtk_combo_box_text_append_text gtk_combo_box_append_text
+#define gtk_combo_box_text_new_with_entry gtk_combo_box_entry_new_text
+#define gtk_combo_box_new_with_model_and_entry(model) gtk_combo_box_entry_new_with_model(model, FILTER_COLUMN_FILTER)
+#define GTK_COMBO_BOX_TEXT(combo) GTK_COMBO_BOX(combo)
+#define gdk_window_get_width(window) compat_gdk_window_get_width(window)
+#define gdk_window_get_height(window) compat_gdk_window_get_height(window)
+
+gint compat_gdk_window_get_width(GdkWindow *window);
+gint compat_gdk_window_get_height(GdkWindow *window);
+
+#endif
+
+#if !GTK_CHECK_VERSION(2,22,0)
+#define gdk_window_create_similar_surface(window, content, width, height) compat_gdk_window_create_similar_surface(window, content, width, height)
+cairo_surface_t *compat_gdk_window_create_similar_surface (GdkWindow *window, cairo_content_t content, gint width, gint height);
+
+#define gdk_drag_context_get_selected_action(context) ((context)->action)
+#define gdk_drag_context_get_suggested_action(context) ((context)->suggested_action)
+#define gdk_drag_context_get_actions(context) ((context)->actions)
+#endif
 
 #endif /* COMPAT_H */
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index ed12a6a..a7f2417 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik, Laurent Monin
  *
index a4f3189..ee694ee 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik, Laurent Monin
  *
index dee94a1..8bf2697 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
@@ -68,13 +68,13 @@ static gboolean editor_window_save(EditorWindow *ew)
        GError *error = NULL;
        gboolean ret = TRUE;
        const gchar *name = gtk_entry_get_text(GTK_ENTRY(ew->entry));
-       
-       if (!name || !name[0]) 
+
+       if (!name || !name[0])
                {
                file_util_warning_dialog(_("Can't save"), _("Please specify file name."), GTK_STOCK_DIALOG_ERROR, NULL);
                return FALSE;
                }
-       
+
        gtk_text_buffer_get_bounds(ew->buffer, &start, &end);
        text = gtk_text_buffer_get_text(ew->buffer, &start, &end, FALSE);
 
@@ -87,19 +87,19 @@ static gboolean editor_window_save(EditorWindow *ew)
                ret = FALSE;
                }
 
-       if (ret && !g_file_set_contents(path, text, -1, &error)) 
+       if (ret && !g_file_set_contents(path, text, -1, &error))
                {
                file_util_warning_dialog(_("Can't save"), error->message, GTK_STOCK_DIALOG_ERROR, NULL);
                g_error_free(error);
                ret = FALSE;
                }
-       
+
        g_free(path);
        g_free(dir);
        g_free(text);
        layout_editors_reload_start();
        /* idle function is not needed, everything should be cached */
-       layout_editors_reload_finish(); 
+       layout_editors_reload_finish();
        return ret;
 }
 
@@ -135,7 +135,7 @@ static void editor_window_save_cb(GtkWidget *widget, gpointer data)
 static void editor_window_text_modified_cb(GtkWidget *widget, gpointer data)
 {
        EditorWindow *ew = data;
-       
+
        if (gtk_text_buffer_get_modified(ew->buffer))
                {
                gtk_widget_set_sensitive(ew->save_button, TRUE);
@@ -158,7 +158,7 @@ static void editor_window_entry_changed_cb(GtkWidget *widget, gpointer data)
                {
                modified = strcmp(ew->desktop_name, content);
                }
-       
+
        gtk_widget_set_sensitive(ew->save_button, modified);
        ew->modified = modified;
 }
@@ -217,7 +217,7 @@ static void editor_window_new(const gchar *src_path, const gchar *desktop_name)
        ew->save_button = pref_button_new(NULL, GTK_STOCK_SAVE, NULL, FALSE,
                                 G_CALLBACK(editor_window_save_cb), ew);
        gtk_container_add(GTK_CONTAINER(button_hbox), ew->save_button);
-       GTK_WIDGET_SET_FLAGS(ew->save_button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(ew->save_button, TRUE);
        gtk_widget_set_sensitive(ew->save_button, FALSE);
        gtk_widget_show(ew->save_button);
        ct_button = ew->save_button;
@@ -225,7 +225,7 @@ static void editor_window_new(const gchar *src_path, const gchar *desktop_name)
        button = pref_button_new(NULL, GTK_STOCK_CLOSE, NULL, FALSE,
                                 G_CALLBACK(editor_window_close_cb), ew);
        gtk_container_add(GTK_CONTAINER(button_hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        if (!generic_dialog_get_alternative_button_order(ew->window))
@@ -297,7 +297,7 @@ static void editor_list_window_delete_dlg_ok_cb(GenericDialog *gd, gpointer data
                /* refresh list */
                layout_editors_reload_start();
                /* idle function is not needed, everything should be cached */
-               layout_editors_reload_finish(); 
+               layout_editors_reload_finish();
                }
 
        editor_list_window_delete_dlg_cancel(gd, data);
@@ -306,10 +306,10 @@ static void editor_list_window_delete_dlg_ok_cb(GenericDialog *gd, gpointer data
 static void editor_list_window_delete_cb(GtkWidget *widget, gpointer data)
 {
        EditorListWindow *ewl = data;
-       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ewl->view)); 
+       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ewl->view));
        GtkTreeIter iter;
 
-       if (gtk_tree_selection_get_selected(sel, NULL, &iter)) 
+       if (gtk_tree_selection_get_selected(sel, NULL, &iter))
                {
                GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(ewl->view));
                gchar *path;
@@ -325,7 +325,7 @@ static void editor_list_window_delete_cb(GtkWidget *widget, gpointer data)
                ewdl = g_new(EditorWindowDel_Data, 1);
                ewdl->ewl = ewl;
                ewdl->path = path;
-       
+
                if (ewl->gd)
                        {
                        GenericDialog *gd = ewl->gd;
@@ -351,10 +351,10 @@ static void editor_list_window_delete_cb(GtkWidget *widget, gpointer data)
 static void editor_list_window_edit_cb(GtkWidget *widget, gpointer data)
 {
        EditorListWindow *ewl = data;
-       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ewl->view)); 
+       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ewl->view));
        GtkTreeIter iter;
 
-       if (gtk_tree_selection_get_selected(sel, NULL, &iter)) 
+       if (gtk_tree_selection_get_selected(sel, NULL, &iter))
                {
                GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(ewl->view));
                gchar *path;
@@ -363,7 +363,7 @@ static void editor_list_window_edit_cb(GtkWidget *widget, gpointer data)
                gtk_tree_model_get(store, &iter,
                                   DESKTOP_FILE_COLUMN_PATH, &path,
                                   DESKTOP_FILE_COLUMN_KEY, &key, -1);
-               editor_window_new(path, key);   
+               editor_window_new(path, key);
                g_free(key);
                g_free(path);
                }
@@ -377,10 +377,10 @@ static void editor_list_window_new_cb(GtkWidget *widget, gpointer data)
 static void editor_list_window_selection_changed_cb(GtkWidget *widget, gpointer data)
 {
        EditorListWindow *ewl = data;
-       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ewl->view)); 
+       GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ewl->view));
        GtkTreeIter iter;
 
-       if (gtk_tree_selection_get_selected(sel, NULL, &iter)) 
+       if (gtk_tree_selection_get_selected(sel, NULL, &iter))
                {
                GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(ewl->view));
                gchar *path;
@@ -388,12 +388,12 @@ static void editor_list_window_selection_changed_cb(GtkWidget *widget, gpointer
                gtk_tree_model_get(store, &iter,
                                                   DESKTOP_FILE_COLUMN_PATH, &path,
                                                   -1);
-               
+
                gtk_widget_set_sensitive(ewl->delete_button, access_file(path, W_OK));
                gtk_widget_set_sensitive(ewl->edit_button, TRUE);
                g_free(path);
                }
-       
+
 }
 
 static gint editor_list_window_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
@@ -427,7 +427,7 @@ static gint editor_list_window_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkT
                        g_free(s2);
                        }
                        break;
-       
+
                default:
                                g_return_val_if_reached(0);
                }
@@ -449,7 +449,7 @@ static void editor_list_window_create(void)
        EditorListWindow *ewl;
 
        editor_list_window = ewl = g_new0(EditorListWindow, 1);
-       
+
        ewl->window = window_new(GTK_WINDOW_TOPLEVEL, "editors", PIXBUF_INLINE_ICON_CONFIG, NULL, _("Editors"));
        gtk_window_set_type_hint(GTK_WINDOW(ewl->window), GDK_WINDOW_TYPE_HINT_DIALOG);
        g_signal_connect(G_OBJECT(ewl->window), "delete_event",
@@ -472,13 +472,13 @@ static void editor_list_window_create(void)
        button = pref_button_new(NULL, GTK_STOCK_NEW, NULL, FALSE,
                                 G_CALLBACK(editor_list_window_new_cb), ewl);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        button = pref_button_new(NULL, GTK_STOCK_EDIT, NULL, FALSE,
                                 G_CALLBACK(editor_list_window_edit_cb), ewl);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_set_sensitive(button, FALSE);
        gtk_widget_show(button);
        ewl->edit_button = button;
@@ -486,7 +486,7 @@ static void editor_list_window_create(void)
        button = pref_button_new(NULL, GTK_STOCK_DELETE, NULL, FALSE,
                                 G_CALLBACK(editor_list_window_delete_cb), ewl);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_set_sensitive(button, FALSE);
        gtk_widget_show(button);
        ewl->delete_button = button;
@@ -494,7 +494,7 @@ static void editor_list_window_create(void)
        button = pref_button_new(NULL, GTK_STOCK_CLOSE, NULL, FALSE,
                                 G_CALLBACK(editor_list_window_close_cb), ewl);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        scrolled = gtk_scrolled_window_new(NULL, NULL);
@@ -528,7 +528,7 @@ static void editor_list_window_create(void)
        gtk_tree_view_column_add_attribute(column, renderer, "text", DESKTOP_FILE_COLUMN_HIDDEN);
        gtk_tree_view_append_column(GTK_TREE_VIEW(ewl->view), column);
        gtk_tree_view_column_set_sort_column_id(column, DESKTOP_FILE_COLUMN_HIDDEN);
-       gtk_tree_view_column_set_alignment(column, 0.5); 
+       gtk_tree_view_column_set_alignment(column, 0.5);
 
        column = gtk_tree_view_column_new();
        gtk_tree_view_column_set_title(column, _("Desktop file"));
index 09ff9da..5d69276 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
index 79a871e..5394d82 100644 (file)
--- a/src/dnd.c
+++ b/src/dnd.c
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -17,6 +17,7 @@
 #include "collect.h"
 #include "image.h"
 #include "ui_fileops.h"
+#include "pixbuf_util.h"
 
 
 GtkTargetEntry dnd_file_drag_types[] = {
@@ -72,6 +73,7 @@ static void pixbuf_draw_border(GdkPixbuf *pixbuf, gint w, gint h)
                }
 }
 
+/*
 static void pixbuf_draw_rect(GdkPixbuf *pixbuf, gint x, gint y, gint w, gint h, guint8 val)
 {
        gboolean alpha;
@@ -96,11 +98,9 @@ static void pixbuf_draw_rect(GdkPixbuf *pixbuf, gint x, gint y, gint w, gint h,
                        }
                }
 }
-
+*/
 void dnd_set_drag_icon(GtkWidget *widget, GdkDragContext *context, GdkPixbuf *pixbuf, gint items)
 {
-       GdkPixmap *pixmap;
-       GdkBitmap *mask;
        GdkPixbuf *dest;
        gint w, h;
        gint sw, sh;
@@ -148,24 +148,20 @@ void dnd_set_drag_icon(GtkWidget *widget, GdkDragContext *context, GdkPixbuf *pi
                lw = CLAMP(lw, 0, w - x - 1);
                lh = CLAMP(lh, 0, h - y - 1);
 
-               pixbuf_draw_rect(dest, x, y, lw, lh, 128);
+               pixbuf_draw_rect_fill(dest, x, y, lw, lh, 128, 128, 128, 255);
                }
 
-       gdk_pixbuf_render_pixmap_and_mask(dest, &pixmap, &mask, 128);
-       g_object_unref(dest);
-
        if (layout)
                {
-               gdk_draw_layout(pixmap, widget->style->black_gc, x+1, y+1, layout);
-               gdk_draw_layout(pixmap, widget->style->white_gc, x, y, layout);
+               pixbuf_draw_layout(dest, layout, NULL, x+1, y+1, 0, 0, 0, 255);
+               pixbuf_draw_layout(dest, layout, NULL, x, y, 255, 255, 255, 255);
 
                g_object_unref(G_OBJECT(layout));
                }
 
-       gtk_drag_set_icon_pixmap(context, gtk_widget_get_colormap(widget), pixmap, mask, -8, -6);
+       gtk_drag_set_icon_pixbuf(context, dest, -8, -6);
 
-       g_object_unref(pixmap);
-       if (mask) g_object_unref(mask);
+       g_object_unref(dest);
 }
 
 static void dnd_set_drag_label_end_cb(GtkWidget *widget, GdkDragContext *context, gpointer data)
index e8665f9..3733a74 100644 (file)
--- a/src/dnd.h
+++ b/src/dnd.h
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index e50b8df..5e57a62 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -217,7 +217,7 @@ static void widget_set_cursor(GtkWidget *widget, gint icon)
 {
        GdkCursor *cursor;
 
-       if (!widget->window) return;
+       if (!gtk_widget_get_window(widget)) return;
 
        if (icon == -1)
                {
@@ -228,7 +228,7 @@ static void widget_set_cursor(GtkWidget *widget, gint icon)
                cursor = gdk_cursor_new(icon);
                }
 
-       gdk_window_set_cursor(widget->window, cursor);
+       gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
 
        if (cursor) gdk_cursor_unref(cursor);
 }
@@ -1116,7 +1116,7 @@ static gboolean dupe_match(DupeItem *a, DupeItem *b, DupeMatchType mask, gdouble
 {
        *rank = 0.0;
 
-       if (a == b) return FALSE;
+       if (a->fd->path == b->fd->path) return FALSE;
 
        if (mask & DUPE_MATCH_PATH)
                {
@@ -2210,17 +2210,13 @@ static void dupe_menu_popup_destroy_cb(GtkWidget *widget, gpointer data)
        GList *editmenu_fd_list = data;
 
        filelist_free(editmenu_fd_list);
-}      
+}
 
 static GList *dupe_window_get_fd_list(DupeWindow *dw)
 {
        GList *list;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_has_focus(dw->second_listview))
-#else
-       if (GTK_WIDGET_HAS_FOCUS(dw->second_listview))
-#endif
                {
                list = dupe_listview_get_selection(dw, dw->second_listview);
                }
@@ -2257,7 +2253,7 @@ static GtkWidget *dupe_menu_popup_main(DupeWindow *dw, DupeItem *di)
        menu_item_add_sensitive(menu, _("Select group _2 duplicates"), (dw->dupes != NULL),
                                G_CALLBACK(dupe_menu_select_dupes_set2_cb), dw);
        menu_item_add_divider(menu);
-       
+
        editmenu_fd_list = dupe_window_get_fd_list(dw);
        g_signal_connect(G_OBJECT(menu), "destroy",
                         G_CALLBACK(dupe_menu_popup_destroy_cb), editmenu_fd_list);
@@ -2581,7 +2577,7 @@ static void dupe_second_set_toggle_cb(GtkWidget *widget, gpointer data)
 {
        DupeWindow *dw = data;
 
-       dw->second_set = GTK_TOGGLE_BUTTON(widget)->active;
+       dw->second_set = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
        if (dw->second_set)
                {
@@ -2773,11 +2769,7 @@ static void dupe_listview_set_height(GtkWidget *listview, gboolean thumb)
 
        gtk_tree_view_column_set_fixed_width(column, (thumb) ? options->thumbnails.max_width : 4);
 
-#if GTK_CHECK_VERSION(2,18,0)
        list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
-#else
-       list = gtk_tree_view_column_get_cell_renderers(column);
-#endif
        if (!list) return;
        cell = list->data;
        g_list_free(list);
@@ -2797,7 +2789,7 @@ static void dupe_window_show_thumb_cb(GtkWidget *widget, gpointer data)
 {
        DupeWindow *dw = data;
 
-       dw->show_thumbs = GTK_TOGGLE_BUTTON(widget)->active;
+       dw->show_thumbs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
        if (dw->show_thumbs)
                {
@@ -2864,11 +2856,7 @@ static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, g
        GList *slist;
        DupeItem *di = NULL;
 
-#if GTK_CHECK_VERSION(2,20,0)
        on_second = gtk_widget_has_focus(dw->second_listview);
-#else
-       on_second = GTK_WIDGET_HAS_FOCUS(dw->second_listview);
-#endif
 
        if (on_second)
                {
@@ -2899,42 +2887,21 @@ static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, g
 
        if (event->state & GDK_CONTROL_MASK)
                {
-               gint edit_val = -1;
-
                if (!on_second)
                        {
                        stop_signal = TRUE;
                        switch (event->keyval)
                                {
                                case '1':
-                                       edit_val = 0;
-                                       break;
                                case '2':
-                                       edit_val = 1;
-                                       break;
                                case '3':
-                                       edit_val = 2;
-                                       break;
                                case '4':
-                                       edit_val = 3;
-                                       break;
                                case '5':
-                                       edit_val = 4;
-                                       break;
                                case '6':
-                                       edit_val = 5;
-                                       break;
                                case '7':
-                                       edit_val = 6;
-                                       break;
                                case '8':
-                                       edit_val = 7;
-                                       break;
                                case '9':
-                                       edit_val = 8;
-                                       break;
                                case '0':
-                                       edit_val = 9;
                                        break;
                                case 'C': case 'c':
                                        file_util_copy(NULL, dupe_listview_get_selection(dw, listview),
@@ -2971,7 +2938,7 @@ static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, g
                                                gtk_tree_selection_select_all(selection);
                                                }
                                        break;
-                               case GDK_Delete: case GDK_KP_Delete:
+                               case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
                                        if (on_second)
                                                {
                                                dupe_second_clear(dw);
@@ -2997,25 +2964,19 @@ static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, g
                                        break;
                                }
                        }
-#if 0
-               if (edit_val >= 0)
-                       {
-                       dupe_window_edit_selected(dw, edit_val);
-                       }
-#endif
                }
        else
                {
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Return: case GDK_KP_Enter:
+                       case GDK_KEY_Return: case GDK_KEY_KP_Enter:
                                dupe_menu_view(dw, di, listview, FALSE);
                                break;
                        case 'V': case 'v':
                                dupe_menu_view(dw, di, listview, TRUE);
                                break;
-                       case GDK_Delete: case GDK_KP_Delete:
+                       case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
                                dupe_window_remove_selection(dw, listview);
                                break;
                        case 'C': case 'c':
@@ -3030,8 +2991,8 @@ static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, g
                        case '2':
                                dupe_listview_select_dupes(dw, FALSE);
                                break;
-                       case GDK_Menu:
-                       case GDK_F10:
+                       case GDK_KEY_Menu:
+                       case GDK_KEY_F10:
                                if (!on_second)
                                        {
                                        GtkWidget *menu;
@@ -3394,8 +3355,6 @@ static void dupe_dnd_data_set(GtkWidget *widget, GdkDragContext *context,
                              guint time, gpointer data)
 {
        DupeWindow *dw = data;
-       gchar *uri_text;
-       gint length;
        GList *list;
 
        switch (info)
@@ -3404,17 +3363,12 @@ static void dupe_dnd_data_set(GtkWidget *widget, GdkDragContext *context,
                case TARGET_TEXT_PLAIN:
                        list = dupe_listview_get_selection(dw, widget);
                        if (!list) return;
-                       uri_text = uri_text_from_filelist(list, &length, (info == TARGET_TEXT_PLAIN));
+                       uri_selection_data_set_uris_from_filelist(selection_data, list);
                        filelist_free(list);
                        break;
                default:
-                       uri_text = NULL;
                        break;
                }
-
-       if (uri_text) gtk_selection_data_set(selection_data, selection_data->target,
-                                            8, (guchar *)uri_text, length);
-       g_free(uri_text);
 }
 
 static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
@@ -3435,10 +3389,10 @@ static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
        switch (info)
                {
                case TARGET_APP_COLLECTION_MEMBER:
-                       collection_from_dnd_data((gchar *)selection_data->data, &list, NULL);
+                       collection_from_dnd_data((gchar *)gtk_selection_data_get_data(selection_data), &list, NULL);
                        break;
                case TARGET_URI_LIST:
-                       list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
+                       list = uri_filelist_from_gtk_selection_data(selection_data);
                        work = list;
                        while (work)
                                {
@@ -3572,7 +3526,7 @@ static void dupe_notify_cb(FileData *fd, NotifyType type, gpointer data)
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
 
        DEBUG_1("Notify dupe: %s %04x", fd->path, type);
-       
+
        switch (fd->change->type)
                {
                case FILEDATA_CHANGE_MOVE:
index 33a9bf3..f760c21 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index d617521..5931c05 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -81,7 +81,7 @@ gboolean editors_finished = FALSE;
 void editor_description_free(EditorDescription *editor)
 {
        if (!editor) return;
-       
+
        g_free(editor->key);
        g_free(editor->name);
        g_free(editor->icon);
@@ -97,7 +97,7 @@ void editor_description_free(EditorDescription *editor)
 static GList *editor_mime_types_to_extensions(gchar **mime_types)
 {
        /* FIXME: this should be rewritten to use the shared mime database, as soon as we switch to gio */
-       
+
        static const gchar *conv_table[][2] = {
                {"application/x-ufraw", ".ufraw"},
                {"image/*",             "*"},
@@ -109,7 +109,7 @@ static GList *editor_mime_types_to_extensions(gchar **mime_types)
                {"image/png",           ".png"},
                {"image/svg",           ".svg"},
                {"image/svg+xml",       ".svg"},
-               {"image/svg+xml-compressed",    ".svg"},        
+               {"image/svg+xml-compressed",    ".svg"},
                {"image/tiff",          ".tiff;.tif"},
                {"image/x-bmp",         ".bmp"},
                {"image/x-canon-crw",   ".crw"},
@@ -123,7 +123,7 @@ static GList *editor_mime_types_to_extensions(gchar **mime_types)
                {"image/x-pcx",         ".pcx"},
                {"image/xpm",           ".xpm"},
                {"image/x-png",         ".png"},
-               {"image/x-portable-anymap",     ".pam"},        
+               {"image/x-portable-anymap",     ".pam"},
                {"image/x-portable-bitmap",     ".pbm"},
                {"image/x-portable-graymap",    ".pgm"},
                {"image/x-portable-pixmap",     ".ppm"},
@@ -137,15 +137,15 @@ static GList *editor_mime_types_to_extensions(gchar **mime_types)
                {"image/x-x3f",         ".x3f"},
                {"application/x-ptoptimizer-script",    ".pto"},
                {NULL, NULL}};
-       
+
        gint i, j;
        GList *list = NULL;
-       
-       for (i = 0; mime_types[i]; i++) 
+
+       for (i = 0; mime_types[i]; i++)
                for (j = 0; conv_table[j][0]; j++)
                        if (strcmp(mime_types[i], conv_table[j][0]) == 0)
                                list = g_list_concat(list, filter_to_list(conv_table[j][1]));
-       
+
        return list;
 }
 
@@ -162,7 +162,7 @@ gboolean editor_read_desktop_file(const gchar *path)
        gboolean category_geeqie = FALSE;
 
        if (g_hash_table_lookup(editors, key)) return FALSE; /* the file found earlier wins */
-       
+
        key_file = g_key_file_new();
        if (!g_key_file_load_from_file(key_file, path, 0, NULL))
                {
@@ -179,9 +179,9 @@ gboolean editor_read_desktop_file(const gchar *path)
                return FALSE;
                }
        g_free(type);
-       
+
        editor = g_new0(EditorDescription, 1);
-       
+
        editor->key = g_strdup(key);
        editor->file = g_strdup(path);
 
@@ -198,14 +198,14 @@ gboolean editor_read_desktop_file(const gchar *path)
                {
                gboolean found = FALSE;
                gint i;
-               for (i = 0; categories[i]; i++) 
+               for (i = 0; categories[i]; i++)
                        {
                        /* IMHO "Graphics" is exactly the category that we are interested in, so this does not have to be configurable */
                        if (strcmp(categories[i], "Graphics") == 0)
                                {
                                found = TRUE;
                                }
-                       if (strcmp(categories[i], "X-Geeqie") == 0) 
+                       if (strcmp(categories[i], "X-Geeqie") == 0)
                                {
                                found = TRUE;
                                category_geeqie = TRUE;
@@ -225,7 +225,7 @@ gboolean editor_read_desktop_file(const gchar *path)
                {
                gboolean found = FALSE;
                gint i;
-               for (i = 0; only_show_in[i]; i++) 
+               for (i = 0; only_show_in[i]; i++)
                        if (strcmp(only_show_in[i], "X-Geeqie") == 0)
                                {
                                found = TRUE;
@@ -240,7 +240,7 @@ gboolean editor_read_desktop_file(const gchar *path)
                {
                gboolean found = FALSE;
                gint i;
-               for (i = 0; not_show_in[i]; i++) 
+               for (i = 0; not_show_in[i]; i++)
                        if (strcmp(not_show_in[i], "X-Geeqie") == 0)
                                {
                                found = TRUE;
@@ -249,8 +249,8 @@ gboolean editor_read_desktop_file(const gchar *path)
                if (found) editor->ignored = TRUE;
                g_strfreev(not_show_in);
                }
-               
-               
+
+
        try_exec = g_key_file_get_string(key_file, DESKTOP_GROUP, "TryExec", NULL);
        if (try_exec && !editor->hidden && !editor->ignored)
                {
@@ -260,27 +260,27 @@ gboolean editor_read_desktop_file(const gchar *path)
                g_free(try_exec);
                }
 
-       if (editor->ignored) 
+       if (editor->ignored)
                {
                /* ignored editors will be deleted, no need to parse the rest */
                g_key_file_free(key_file);
                return TRUE;
                }
-       
+
        editor->name = g_key_file_get_locale_string(key_file, DESKTOP_GROUP, "Name", NULL, NULL);
        editor->icon = g_key_file_get_string(key_file, DESKTOP_GROUP, "Icon", NULL);
-       
+
        /* Icon key can be either a full path (absolute with file name extension) or an icon name (without extension) */
        if (editor->icon && !g_path_is_absolute(editor->icon))
                {
                gchar *ext = strrchr(editor->icon, '.');
-               
-               if (ext && strlen(ext) == 4 && 
+
+               if (ext && strlen(ext) == 4 &&
                    (!strcmp(ext, ".png") || !strcmp(ext, ".xpm") || !strcmp(ext, ".svg")))
                        {
                        log_printf(_("Desktop file '%s' should not include extension in Icon key: '%s'\n"),
                                   editor->file, editor->icon);
-                       
+
                        // drop extension
                        *ext = '\0';
                        }
@@ -292,10 +292,10 @@ gboolean editor_read_desktop_file(const gchar *path)
                }
 
        editor->exec = g_key_file_get_string(key_file, DESKTOP_GROUP, "Exec", NULL);
-       
+
        editor->menu_path = g_key_file_get_string(key_file, DESKTOP_GROUP, "X-Geeqie-Menu-Path", NULL);
        if (!editor->menu_path) editor->menu_path = g_strdup("EditMenu/ExternalMenu");
-       
+
        editor->hotkey = g_key_file_get_string(key_file, DESKTOP_GROUP, "X-Geeqie-Hotkey", NULL);
 
        editor->comment = g_key_file_get_string(key_file, DESKTOP_GROUP, "Comment", NULL);
@@ -310,16 +310,16 @@ gboolean editor_read_desktop_file(const gchar *path)
                        {
                        editor->ext_list = editor_mime_types_to_extensions(mime_types);
                        g_strfreev(mime_types);
-                       if (!editor->ext_list) editor->hidden = TRUE; 
+                       if (!editor->ext_list) editor->hidden = TRUE;
                        }
                }
-               
+
        if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Keep-Fullscreen", NULL)) editor->flags |= EDITOR_KEEP_FS;
        if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Verbose", NULL)) editor->flags |= EDITOR_VERBOSE;
        if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Verbose-Multi", NULL)) editor->flags |= EDITOR_VERBOSE_MULTI;
        if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Filter", NULL)) editor->flags |= EDITOR_DEST;
        if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "Terminal", NULL)) editor->flags |= EDITOR_TERMINAL;
-       
+
        editor->flags |= editor_command_parse(editor, NULL, FALSE, NULL);
 
        if ((editor->flags & EDITOR_NO_PARAM) && !category_geeqie) editor->hidden = TRUE;
@@ -327,16 +327,16 @@ gboolean editor_read_desktop_file(const gchar *path)
        g_key_file_free(key_file);
 
        if (editor->ignored) return TRUE;
-       
+
        gtk_list_store_append(desktop_file_list, &iter);
-       gtk_list_store_set(desktop_file_list, &iter, 
+       gtk_list_store_set(desktop_file_list, &iter,
                           DESKTOP_FILE_COLUMN_KEY, key,
                           DESKTOP_FILE_COLUMN_NAME, editor->name,
                           DESKTOP_FILE_COLUMN_HIDDEN, editor->hidden ? _("yes") : _("no"),
                           DESKTOP_FILE_COLUMN_WRITABLE, access_file(path, W_OK),
                           DESKTOP_FILE_COLUMN_PATH, path, -1);
-       
-       return TRUE;    
+
+       return TRUE;
 }
 
 static gboolean editor_remove_desktop_file_cb(gpointer key, gpointer value, gpointer user_data)
@@ -357,7 +357,7 @@ void editor_table_clear(void)
                {
                gtk_list_store_clear(desktop_file_list);
                }
-       else 
+       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);
                }
@@ -386,14 +386,14 @@ static GList *editor_add_desktop_dir(GList *list, const gchar *path)
        while ((dir = readdir(dp)) != NULL)
                {
                gchar *namel = dir->d_name;
-               
+
                if (g_str_has_suffix(namel, ".desktop"))
                        {
                        gchar *name = path_to_utf8(namel);
                        gchar *dpath = g_build_filename(path, name, NULL);
                        list = g_list_prepend(list, dpath);
                        g_free(name);
-                       }       
+                       }
                }
        closedir(dp);
        return list;
@@ -407,19 +407,19 @@ GList *editor_get_desktop_files(void)
        gchar **split_dirs;
        gint i;
        GList *list = NULL;
-       
+
        xdg_data_dirs = getenv("XDG_DATA_DIRS");
        if (xdg_data_dirs && xdg_data_dirs[0])
                xdg_data_dirs = path_to_utf8(xdg_data_dirs);
        else
                xdg_data_dirs = g_strdup("/usr/share");
-       
+
        all_dirs = g_strconcat(get_rc_dir(), ":", GQ_APP_DIR, ":", xdg_data_home_get(), ":", xdg_data_dirs, NULL);
-       
+
        g_free(xdg_data_dirs);
 
        split_dirs = g_strsplit(all_dirs, ":", 0);
-       
+
        g_free(all_dirs);
 
        for (i = 0; split_dirs[i]; i++);
@@ -429,7 +429,7 @@ GList *editor_get_desktop_files(void)
                list = editor_add_desktop_dir(list, path);
                g_free(path);
                }
-               
+
        g_strfreev(split_dirs);
        return list;
 }
@@ -438,10 +438,10 @@ static void editor_list_add_cb(gpointer key, gpointer value, gpointer data)
 {
        GList **listp = data;
        EditorDescription *editor = value;
-       
-       /* do not show the special commands in any list, they are called explicitly */ 
+
+       /* do not show the special commands in any list, they are called explicitly */
        if (strcmp(editor->key, CMD_COPY) == 0 ||
-           strcmp(editor->key, CMD_MOVE) == 0 ||  
+           strcmp(editor->key, CMD_MOVE) == 0 ||
            strcmp(editor->key, CMD_RENAME) == 0 ||
            strcmp(editor->key, CMD_DELETE) == 0 ||
            strcmp(editor->key, CMD_FOLDER) == 0) return;
@@ -454,19 +454,19 @@ static gint editor_sort(gconstpointer a, gconstpointer b)
        const EditorDescription *ea = a;
        const EditorDescription *eb = b;
        gint ret;
-       
+
        ret = strcmp(ea->menu_path, eb->menu_path);
        if (ret != 0) return ret;
-       
+
        return g_utf8_collate(ea->name, eb->name);
 }
 
 GList *editor_list_get(void)
 {
        GList *editors_list = NULL;
-       
+
        if (!editors_finished) return NULL;
-       
+
        g_hash_table_foreach(editors, editor_list_add_cb, &editors_list);
        editors_list = g_list_sort(editors_list, editor_sort);
 
@@ -708,7 +708,7 @@ static gchar *editor_command_path_parse(const FileData *fd, gboolean consider_si
                g_free(pathl);
                pathl = NULL;
                }
-       
+
        DEBUG_2("editor_command_path_parse: return %s", pathl);
        return pathl;
 }
@@ -716,7 +716,7 @@ static gchar *editor_command_path_parse(const FileData *fd, gboolean consider_si
 static GString *append_quoted(GString *str, const char *s, gboolean single_quotes, gboolean double_quotes)
 {
        const char *p;
-       
+
        if (!single_quotes)
                {
                if (!double_quotes)
@@ -732,7 +732,7 @@ static GString *append_quoted(GString *str, const char *s, gboolean single_quote
                else
                        g_string_append_c(str, *p);
                }
-       
+
        if (!single_quotes)
                {
                if (!double_quotes)
@@ -764,7 +764,7 @@ EditorFlags editor_command_parse(const EditorDescription *editor, GList *list, g
                flags |= EDITOR_ERROR_EMPTY;
                goto err;
                }
-       
+
        p = editor->exec;
        /* skip leading whitespaces if any */
        while (g_ascii_isspace(*p)) p++;
@@ -832,7 +832,7 @@ EditorFlags editor_command_parse(const EditorDescription *editor, GList *list, g
                                                        /* just testing, check also the rest of the list (like with F and U)
                                                           any matching file is OK */
                                                        GList *work = list->next;
-                                                       
+
                                                        while (!pathl && work)
                                                                {
                                                                FileData *fd = work->data;
@@ -843,7 +843,7 @@ EditorFlags editor_command_parse(const EditorDescription *editor, GList *list, g
                                                                work = work->next;
                                                                }
                                                        }
-                                                       
+
                                                if (!pathl)
                                                        {
                                                        flags |= EDITOR_ERROR_NO_FILE;
@@ -993,7 +993,7 @@ static EditorFlags editor_command_one(const EditorDescription *editor, GList *li
                {
                ok = (options->shell.path && *options->shell.path);
                if (!ok) log_printf("ERROR: empty shell command\n");
-                       
+
                if (ok)
                        {
                        ok = (access(options->shell.path, X_OK) == 0);
@@ -1033,7 +1033,7 @@ static EditorFlags editor_command_one(const EditorDescription *editor, GList *li
                                      ed->vd ? &standard_output : NULL,
                                      ed->vd ? &standard_error : NULL,
                                      NULL);
-               
+
                g_free(working_directory);
 
                if (!ok) ed->flags |= EDITOR_ERROR_CANT_EXEC;
@@ -1117,7 +1117,7 @@ static EditorFlags editor_command_next_start(EditorData *ed)
 
                if (!error)
                        return 0;
-               
+
                /* command was not started, call the finish immediately */
                return editor_command_next_finish(ed, 0);
                }
@@ -1162,7 +1162,7 @@ static EditorFlags editor_command_next_finish(EditorData *ed, gint status)
                case EDITOR_CB_SKIP:
                        return editor_command_done(ed);
                }
-       
+
        return editor_command_next_start(ed);
 }
 
@@ -1249,7 +1249,7 @@ EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list, const
        EditorFlags error;
        EditorDescription *editor;
        if (!key) return EDITOR_ERROR_EMPTY;
-       
+
        editor = g_hash_table_lookup(editors, key);
 
        if (!editor) return EDITOR_ERROR_EMPTY;
@@ -1264,7 +1264,7 @@ EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list, const
        if (EDITOR_ERRORS(error))
                {
                gchar *text = g_strdup_printf(_("%s\n\"%s\""), editor_get_error_str(error), editor->file);
-               
+
                file_util_warning_dialog(_("Invalid editor command"), text, GTK_STOCK_DIALOG_ERROR, NULL);
                g_free(text);
                }
@@ -1304,7 +1304,7 @@ gboolean editor_window_flag_set(const gchar *key)
 {
        EditorDescription *editor;
        if (!key) return TRUE;
-       
+
        editor = g_hash_table_lookup(editors, key);
        if (!editor) return TRUE;
 
@@ -1315,7 +1315,7 @@ gboolean editor_is_filter(const gchar *key)
 {
        EditorDescription *editor;
        if (!key) return TRUE;
-       
+
        editor = g_hash_table_lookup(editors, key);
        if (!editor) return TRUE;
 
@@ -1326,7 +1326,7 @@ gboolean editor_no_param(const gchar *key)
 {
        EditorDescription *editor;
        if (!key) return FALSE;
-       
+
        editor = g_hash_table_lookup(editors, key);
        if (!editor) return FALSE;
 
@@ -1337,7 +1337,7 @@ gboolean editor_blocks_file(const gchar *key)
 {
        EditorDescription *editor;
        if (!key) return FALSE;
-       
+
        editor = g_hash_table_lookup(editors, key);
        if (!editor) return FALSE;
 
@@ -1346,7 +1346,7 @@ gboolean editor_blocks_file(const gchar *key)
           saved, for editing unrelated files.
           %f vs. %F seems to be a good heuristic to detect this kind of editors.
        */
-          
+
        return !(editor->flags & EDITOR_SINGLE_COMMAND);
 }
 
index f68a825..acb0674 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -42,7 +42,7 @@ struct _EditorDescription {
        gchar *name;            /* Name, localized name presented to user */
        gchar *icon;            /* Icon */
        gchar *exec;            /* Exec */
-       gchar *menu_path;       
+       gchar *menu_path;
        gchar *hotkey;
        GList *ext_list;
        gchar *file;
index fbc4199..12956de 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
 */
 
 #ifdef HAVE_LCMS
 /*** color support enabled ***/
 
-#ifdef HAVE_LCMS_LCMS_H
-  #include <lcms/lcms.h>
+#ifdef HAVE_LCMS2
+#include <lcms2.h>
 #else
-  #include <lcms.h>
+#include <lcms.h>
 #endif
 #endif
 
@@ -125,13 +125,13 @@ static gdouble get_crop_factor(ExifData *exif)
 static gboolean remove_suffix(gchar *str, const gchar *suffix, gint suffix_len)
 {
        gint str_len = strlen(str);
-       
+
        if (suffix_len < 0) suffix_len = strlen(suffix);
        if (str_len < suffix_len) return FALSE;
-       
+
        if (strcmp(str + str_len - suffix_len, suffix) != 0) return FALSE;
        str[str_len - suffix_len] = '\0';
-       
+
        return TRUE;
 }
 
@@ -161,7 +161,7 @@ static gchar *exif_build_formatted_Camera(ExifData *exif)
                gint i, j;
 
                g_strstrip(software);
-               
+
                /* remove superfluous spaces (pentax K100D) */
                for (i = 0, j = 0; software[i]; i++, j++)
                        {
@@ -413,6 +413,9 @@ static gchar *exif_build_formatted_Resolution(ExifData *exif)
 
 static gchar *exif_build_formatted_ColorProfile(ExifData *exif)
 {
+#ifdef HAVE_LCMS2
+       cmsUInt8Number profileID[17];
+#endif
        const gchar *name = "";
        const gchar *source = "";
        guchar *profile_data;
@@ -452,7 +455,13 @@ static gchar *exif_build_formatted_ColorProfile(ExifData *exif)
                        profile = cmsOpenProfileFromMem(profile_data, profile_len);
                        if (profile)
                                {
-                               name = cmsTakeProductName(profile);
+#ifdef HAVE_LCMS2
+                               profileID[16] = '\0';
+                               cmsGetHeaderProfileID(profile, profileID);
+                               name = (gchar *) profileID;
+#else
+                               name = (gchar *) cmsTakeProductName(profile);
+#endif
                                cmsCloseProfile(profile);
                                }
                        g_free(profile_data);
@@ -639,20 +648,21 @@ void exif_release_cb(FileData *fd)
 
 void exif_init_cache(void)
 {
-       assert(!exif_cache);
+       g_assert(!exif_cache);
        exif_cache = file_cache_new(exif_release_cb, 4);
 }
 
 ExifData *exif_read_fd(FileData *fd)
 {
        gchar *sidecar_path;
-       
+
        if (!exif_cache) exif_init_cache();
 
-       if (!fd || !is_readable_file(fd->path)) return NULL;
-       
+       if (!fd) return NULL;
+
        if (file_cache_get(exif_cache, fd)) return fd->exif;
-       
+       g_assert(fd->exif == NULL);
+
        /* CACHE_TYPE_XMP_METADATA file should exist only if the metadata are
         * not writable directly, thus it should contain the most up-to-date version */
        sidecar_path = NULL;
@@ -667,6 +677,7 @@ ExifData *exif_read_fd(FileData *fd)
        fd->exif = exif_read(fd->path, sidecar_path, fd->modified_xmp);
 
        g_free(sidecar_path);
+       file_cache_put(exif_cache, fd, 1);
        return fd->exif;
 }
 
@@ -675,8 +686,6 @@ void exif_free_fd(FileData *fd, ExifData *exif)
 {
        if (!fd) return;
        g_assert(fd->exif == exif);
-       
-       file_cache_put(exif_cache, fd, 1);
 }
 
 /* embedded icc in jpeg */
index a1230d6..2f75b50 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- *  Copyright (C) 2008 - 2010 The Geeqie Team
+ *  Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Support for Exif file format, originally written by Eric Swalens.
index fe0c64f..138284c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- *  Copyright (C) 2008 - 2010 The Geeqie Team
+ *  Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Support for Exif file format, originally written by Eric Swalens.
@@ -1281,11 +1281,6 @@ ExifData *exif_read(gchar *path, gchar *sidecar_path, GHashTable *modified_xmp)
 
        if (exif) exif->items = g_list_reverse(exif->items);
 
-#if 0
-       exif_write_data_list(exif, stdout, TRUE);
-       exif_write_data_list(exif, stdout, FALSE);
-#endif
-
        return exif;
 }
 
@@ -1604,12 +1599,12 @@ GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format
 {
        gchar *str;
        ExifItem *item;
-       
+
        if (!key) return NULL;
-       
+
        /* convert xmp key to exif key */
        if (strcmp(key, "Xmp.tiff.Orientation") == 0) key = "Exif.Image.Orientation";
-       
+
        if (format == METADATA_FORMATTED)
                {
                gchar *text;
@@ -1620,11 +1615,11 @@ GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format
 
        item = exif_get_item(exif, key);
        if (!item) return NULL;
-       
+
        str = exif_item_get_data_as_text_full(item, format);
-       
+
        if (!str) return NULL;
-       
+
        return g_list_append(NULL, str);
 }
 
@@ -1646,13 +1641,13 @@ guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width,
        guchar *map_data;
        size_t map_len;
        int fd;
-       
+
        if (!exif) return NULL;
        path = exif->path;
 
        fd = open(path, O_RDONLY);
-               
-               
+
+
        if (fd == -1)
                {
                return 0;
@@ -1683,7 +1678,7 @@ guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width,
                ud->ptr = map_data + offset;
                ud->map_data = map_data;
                ud->map_len = map_len;
-               
+
                exif_unmap_list = g_list_prepend(exif_unmap_list, ud);
                return ud->ptr;
                }
@@ -1696,7 +1691,7 @@ guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width,
 void exif_free_preview(guchar *buf)
 {
        GList *work = exif_unmap_list;
-       
+
        while (work)
                {
                UnmapData *ud = (UnmapData *)work->data;
index 5878a13..bfd350e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- *  Copyright (C) 2008 - 2010 The Geeqie Team
+ *  Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Support for Exif file format, originally written by Eric Swalens.
index 3cca8f8..b0f6560 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
index 4d9710f..aa77acb 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
@@ -32,6 +32,7 @@ struct _FileCacheEntry {
 };
 
 static void file_cache_notify_cb(FileData *fd, NotifyType type, gpointer data);
+static void file_cache_remove_fd(FileCacheData *fc, FileData *fd);
 
 FileCacheData *file_cache_new(FileCacheReleaseFunc release, gulong max_size)
 {
@@ -50,7 +51,7 @@ FileCacheData *file_cache_new(FileCacheReleaseFunc release, gulong max_size)
 gboolean file_cache_get(FileCacheData *fc, FileData *fd)
 {
        GList *work;
-       
+
        g_assert(fc && fd);
 
        work = fc->list;
@@ -66,10 +67,12 @@ gboolean file_cache_get(FileCacheData *fc, FileData *fd)
                        DEBUG_2("cache move to front: fc=%p %s", fc, fd->path);
                        fc->list = g_list_remove_link(fc->list, work);
                        fc->list = g_list_concat(work, fc->list);
-                       
-                       if (file_data_check_changed_files(fd)) /* this will eventually remove changed files from cache via file_cache_notify_cb */
+
+                       if (file_data_check_changed_files(fd)) {
+                               /* file has been changed, cance entry is no longer valid */
+                               file_cache_remove_fd(fc, fd);
                                return FALSE;
-                               
+                       }
                        if (debug_file_cache) file_cache_dump(fc);
                        return TRUE;
                        }
@@ -94,7 +97,7 @@ void file_cache_set_size(FileCacheData *fc, gulong size)
                prev = work->prev;
                fc->list = g_list_delete_link(fc->list, work);
                work = prev;
-               
+
                DEBUG_2("file changed - cache remove: fc=%p %s", fc, last_fe->fd->path);
                fc->size -= last_fe->size;
                fc->release(last_fe->fd);
@@ -108,14 +111,14 @@ void file_cache_put(FileCacheData *fc, FileData *fd, gulong size)
        FileCacheEntry *fe;
 
        if (file_cache_get(fc, fd)) return;
-       
+
        DEBUG_2("cache add: fc=%p %s", fc, fd->path);
        fe = g_new(FileCacheEntry, 1);
        fe->fd = file_data_ref(fd);
        fe->size = size;
        fc->list = g_list_prepend(fc->list, fe);
        fc->size += size;
-       
+
        file_cache_set_size(fc, fc->max_size);
 }
 
@@ -152,7 +155,7 @@ static void file_cache_remove_fd(FileCacheData *fc, FileData *fd)
                if (fe->fd == fd)
                        {
                        fc->list = g_list_delete_link(fc->list, current);
-               
+
                        DEBUG_1("cache remove: fc=%p %s", fc, fe->fd->path);
                        fc->size -= fe->size;
                        fc->release(fe->fd);
@@ -168,7 +171,7 @@ void file_cache_dump(FileCacheData *fc)
        gulong n = 0;
 
        DEBUG_1("cache dump: fc=%p max size:%ld size:%ld", fc, fc->max_size, fc->size);
-               
+
        while (work)
                {
                FileCacheEntry *fe = work->data;
index d5e46f8..22a5605 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
index 62e7749..4b7e70e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -22,6 +22,8 @@
 #include "trash.h"
 #include "histogram.h"
 
+#include "exif.h"
+
 #include <errno.h>
 
 static GHashTable *file_data_pool = NULL;
@@ -29,9 +31,11 @@ static GHashTable *file_data_planned_change_hash = NULL;
 
 static gint sidecar_file_priority(const gchar *extension);
 static void file_data_check_sidecars(const GList *basename_list);
-static FileData *file_data_disconnect_sidecar_file(FileData *target, FileData *sfd);
+static void file_data_disconnect_sidecar_file(FileData *target, FileData *sfd);
 
 
+static SortType filelist_sort_method = SORT_NONE;
+static gboolean filelist_sort_ascend = TRUE;
 
 /*
  *-----------------------------------------------------------------------------
@@ -135,7 +139,7 @@ const gchar *text_from_time(time_t t)
 
 /*
  *-----------------------------------------------------------------------------
- * changed files detection and notification 
+ * changed files detection and notification
  *-----------------------------------------------------------------------------
  */
 
@@ -143,7 +147,7 @@ void file_data_increment_version(FileData *fd)
 {
        fd->version++;
        fd->valid_marks = 0;
-       if (fd->parent) 
+       if (fd->parent)
                {
                fd->parent->version++;
                fd->parent->valid_marks = 0;
@@ -171,7 +175,7 @@ static gboolean file_data_check_changed_files_recursive(FileData *fd, struct sta
 {
        gboolean ret = FALSE;
        GList *work;
-       
+
        ret = file_data_check_changed_single_file(fd, st);
 
        work = fd->sidecar_files;
@@ -185,8 +189,12 @@ static gboolean file_data_check_changed_files_recursive(FileData *fd, struct sta
                        {
                        fd->size = 0;
                        fd->date = 0;
+                       file_data_ref(sfd);
                        file_data_disconnect_sidecar_file(fd, sfd);
                        ret = TRUE;
+                       file_data_increment_version(sfd);
+                       file_data_send_notification(sfd, NOTIFY_REREAD);
+                       file_data_unref(sfd);
                        continue;
                        }
 
@@ -200,7 +208,7 @@ gboolean file_data_check_changed_files(FileData *fd)
 {
        gboolean ret = FALSE;
        struct stat st;
-       
+
        if (fd->parent) fd = fd->parent;
 
        if (!stat_utf8(fd->path, &st))
@@ -213,22 +221,25 @@ gboolean file_data_check_changed_files(FileData *fd)
                ret = TRUE;
                fd->size = 0;
                fd->date = 0;
-               
+
                /* file_data_disconnect_sidecar_file might delete the file,
                   we have to keep the reference to prevent this */
                sidecars = filelist_copy(fd->sidecar_files);
+               file_data_ref(fd);
                work = sidecars;
                while (work)
                        {
                        sfd = work->data;
                        work = work->next;
-               
+
                        file_data_disconnect_sidecar_file(fd, sfd);
                        }
                file_data_check_sidecars(sidecars); /* this will group the sidecars back together */
                /* now we can release the sidecars */
                filelist_free(sidecars);
+               file_data_increment_version(fd);
                file_data_send_notification(fd, NOTIFY_REREAD);
+               file_data_unref(fd);
                }
        else
                {
@@ -240,26 +251,25 @@ gboolean file_data_check_changed_files(FileData *fd)
 
 /*
  *-----------------------------------------------------------------------------
- * file name, extension, sorting, ... 
+ * file name, extension, sorting, ...
  *-----------------------------------------------------------------------------
  */
 
 static void file_data_set_collate_keys(FileData *fd)
 {
        gchar *caseless_name;
+       gchar *valid_name;
 
-       caseless_name = g_utf8_casefold(fd->name, -1);
+       valid_name = g_filename_display_name(fd->name);
+       caseless_name = g_utf8_casefold(valid_name, -1);
 
        g_free(fd->collate_key_name);
        g_free(fd->collate_key_name_nocase);
 
-#if 0 && GLIB_CHECK_VERSION(2, 8, 0)
-       fd->collate_key_name = g_utf8_collate_key_for_filename(fd->name, -1);
-       fd->collate_key_name_nocase = g_utf8_collate_key_for_filename(caseless_name, -1);
-#else
-       fd->collate_key_name = g_utf8_collate_key(fd->name, -1);
+       fd->collate_key_name = g_utf8_collate_key(valid_name, -1);
        fd->collate_key_name_nocase = g_utf8_collate_key(caseless_name, -1);
-#endif
+
+       g_free(valid_name);
        g_free(caseless_name);
 }
 
@@ -319,7 +329,7 @@ static void file_data_set_path(FileData *fd, const gchar *path)
                {
                fd->extension = fd->name + strlen(fd->name);
                }
-               
+
        fd->sidecar_priority = sidecar_file_priority(fd->extension);
        file_data_set_collate_keys(fd);
 }
@@ -336,7 +346,7 @@ static FileData *file_data_new(const gchar *path_utf8, struct stat *st, gboolean
 
        DEBUG_2("file_data_new: '%s' %d", path_utf8, disable_sidecars);
 
-       if (S_ISDIR(st->st_mode)) disable_sidecars = TRUE; 
+       if (S_ISDIR(st->st_mode)) disable_sidecars = TRUE;
 
        if (!file_data_pool)
                file_data_pool = g_hash_table_new(g_str_hash, g_str_equal);
@@ -346,7 +356,7 @@ static FileData *file_data_new(const gchar *path_utf8, struct stat *st, gboolean
                {
                file_data_ref(fd);
                }
-               
+
        if (!fd && file_data_planned_change_hash)
                {
                fd = g_hash_table_lookup(file_data_planned_change_hash, path_utf8);
@@ -357,29 +367,29 @@ static FileData *file_data_new(const gchar *path_utf8, struct stat *st, gboolean
                        file_data_apply_ci(fd);
                        }
                }
-               
+
        if (fd)
                {
                gboolean changed;
-               
+
                if (disable_sidecars) file_data_disable_grouping(fd, TRUE);
-               
-               
+
+
                changed = file_data_check_changed_single_file(fd, st);
 
                DEBUG_2("file_data_pool hit: '%s' %s", fd->path, changed ? "(changed)" : "");
-               
+
                return fd;
                }
 
        fd = g_new0(FileData, 1);
-       
+
        fd->size = st->st_size;
        fd->date = st->st_mtime;
        fd->mode = st->st_mode;
        fd->ref = 1;
-       fd->magick = 0x12345678;
-       
+       fd->magick = FD_MAGICK;
+
        if (disable_sidecars) fd->disable_grouping = TRUE;
 
        file_data_set_path(fd, path_utf8); /* set path, name, collate_key_*, original_path */
@@ -396,6 +406,69 @@ static FileData *file_data_new_local(const gchar *path, struct stat *st, gboolea
        return ret;
 }
 
+void init_exif_time_data(GList *files)
+{
+       FileData *file;
+       DEBUG_1("%s init_exif_time_data: ...", get_exec_time());
+       while (files)
+               {
+               file = files->data;
+
+               if (file)
+                       file->exifdate = 0;
+
+               files = files->next;
+               }
+}
+
+void read_exif_time_data(FileData *file)
+{
+       if (file->exifdate > 0)
+               {
+               DEBUG_1("%s set_exif_time_data: Already exists for %s", get_exec_time(), file->path);
+               return;
+               }
+
+       file->exif = exif_read_fd(file);
+
+       if (file->exif)
+               {
+               gchar *tmp = exif_get_data_as_text(file->exif, "Exif.Photo.DateTimeOriginal");
+               DEBUG_2("%s set_exif_time_data: reading %p %s", get_exec_time(), file, file->path);
+
+               if (tmp)
+                       {
+                       struct tm time_str;
+                       uint year, month, day, hour, min, sec;
+
+                       sscanf(tmp, "%4d:%2d:%2d %2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec);
+                       time_str.tm_year  = year - 1900;
+                       time_str.tm_mon   = month - 1;
+                       time_str.tm_mday  = day;
+                       time_str.tm_hour  = hour;
+                       time_str.tm_min   = min;
+                       time_str.tm_sec   = sec;
+                       time_str.tm_isdst = 0;
+
+                       file->exifdate = mktime(&time_str);
+                       g_free(tmp);
+                       }
+               }
+}
+
+void set_exif_time_data(GList *files)
+{
+       DEBUG_1("%s set_exif_time_data: ...", get_exec_time());
+
+       while (files)
+               {
+               FileData *file = files->data;
+
+               read_exif_time_data(file);
+               files = files->next;
+               }
+}
+
 FileData *file_data_new_no_grouping(const gchar *path_utf8)
 {
        struct stat st;
@@ -421,7 +494,7 @@ FileData *file_data_new_dir(const gchar *path_utf8)
        else
                /* dir or non-existing yet */
                g_assert(S_ISDIR(st.st_mode));
-               
+
        return file_data_new(path_utf8, &st, TRUE);
 }
 
@@ -438,24 +511,26 @@ FileData *file_data_ref(FileData *fd)
 #endif
 {
        if (fd == NULL) return NULL;
+       if (fd->magick != FD_MAGICK)
 #ifdef DEBUG_FILEDATA
-       if (fd->magick != 0x12345678)
-               DEBUG_0("fd magick mismatch at %s:%d", file, line);
+               DEBUG_0("fd magick mismatch @ %s:%d  fd=%p", file, line, fd);
+#else
+               DEBUG_0("fd magick mismatch fd=%p", fd);
 #endif
-       g_assert(fd->magick == 0x12345678);
+       g_assert(fd->magick == FD_MAGICK);
        fd->ref++;
 
 #ifdef DEBUG_FILEDATA
-       DEBUG_2("file_data_ref (%d): '%s' @ %s:%d", fd->ref, fd->path, file, line);
+       DEBUG_2("file_data_ref fd=%p (%d): '%s' @ %s:%d", fd, fd->ref, fd->path, file, line);
 #else
-       DEBUG_2("file_data_ref (%d): '%s'", fd->ref, fd->path);
+       DEBUG_2("file_data_ref fd=%p (%d): '%s'", fd, fd->ref, fd->path);
 #endif
        return fd;
 }
 
 static void file_data_free(FileData *fd)
 {
-       g_assert(fd->magick == 0x12345678);
+       g_assert(fd->magick == FD_MAGICK);
        g_assert(fd->ref == 0);
 
        metadata_cache_free(fd);
@@ -467,7 +542,7 @@ static void file_data_free(FileData *fd)
        g_free(fd->collate_key_name_nocase);
        if (fd->thumb_pixbuf) g_object_unref(fd->thumb_pixbuf);
        histmap_free(fd->histmap);
-       
+
        g_assert(fd->sidecar_files == NULL); /* sidecar files must be freed before calling this */
 
        file_data_change_info_free(NULL, fd);
@@ -481,23 +556,25 @@ void file_data_unref(FileData *fd)
 #endif
 {
        if (fd == NULL) return;
+       if (fd->magick != FD_MAGICK)
 #ifdef DEBUG_FILEDATA
-       if (fd->magick != 0x12345678)
-               DEBUG_0("fd magick mismatch @ %s:%d", file, line);
+               DEBUG_0("fd magick mismatch @ %s:%d  fd=%p", file, line, fd);
+#else
+               DEBUG_0("fd magick mismatch fd=%p", fd);
 #endif
-       g_assert(fd->magick == 0x12345678);
-       
+       g_assert(fd->magick == FD_MAGICK);
+
        fd->ref--;
 #ifdef DEBUG_FILEDATA
-       DEBUG_2("file_data_unref (%d): '%s' @ %s:%d", fd->ref, fd->path, file, line);
+       DEBUG_2("file_data_unref fd=%p (%d): '%s' @ %s:%d", fd, fd->ref, fd->path, file, line);
 #else
-       DEBUG_2("file_data_unref (%d): '%s'", fd->ref, fd->path);
+       DEBUG_2("file_data_unref fd=%p (%d): '%s'", fd, fd->ref, fd->path);
 #endif
        if (fd->ref == 0)
                {
                GList *work;
                FileData *parent = fd->parent ? fd->parent : fd;
-               
+
                if (parent->ref > 0) return;
 
                work = parent->sidecar_files;
@@ -539,10 +616,10 @@ static gint file_data_sort_by_ext(gconstpointer a, gconstpointer b)
 {
        const FileData *fda = a;
        const FileData *fdb = b;
-       
+
        if (fda->sidecar_priority < fdb->sidecar_priority) return -1;
        if (fda->sidecar_priority > fdb->sidecar_priority) return 1;
-       
+
        return strcmp(fdb->extension, fda->extension);
 }
 
@@ -559,7 +636,7 @@ static gint sidecar_file_priority(const gchar *extension)
 
        while (work) {
                gchar *ext = work->data;
-               
+
                work = work->next;
                if (g_ascii_strcasecmp(extension, ext) == 0) return i;
                i++;
@@ -567,95 +644,143 @@ static gint sidecar_file_priority(const gchar *extension)
        return 0;
 }
 
-static FileData *file_data_add_sidecar_file(FileData *target, FileData *sfd)
+static void file_data_check_sidecars(const GList *basename_list)
 {
-       sfd->parent = target;
-       if (!g_list_find(target->sidecar_files, sfd))
-               target->sidecar_files = g_list_insert_sorted(target->sidecar_files, sfd, file_data_sort_by_ext);
-       file_data_increment_version(sfd); /* increments both sfd and target */
-       return target;
-}
+       /* basename_list contains the new group - first is the parent, then sorted sidecars */
+       /* all files in the list have ref count > 0 */
 
+       const GList *work;
+       GList *s_work, *new_sidecars;
+       FileData *parent_fd;
 
-static FileData *file_data_merge_sidecar_files(FileData *target, FileData *source)
-{
-       GList *work;
-       
-       file_data_add_sidecar_file(target, source);
+       if (!basename_list) return;
 
-       work = source->sidecar_files;
+
+       DEBUG_2("basename start");
+       work = basename_list;
        while (work)
                {
-               FileData *sfd = work->data;
-               file_data_add_sidecar_file(target, sfd);
+               FileData *fd = work->data;
                work = work->next;
-               }
-
-       g_list_free(source->sidecar_files);
-       source->sidecar_files = NULL;
+               g_assert(fd->magick == FD_MAGICK);
+               DEBUG_2("basename: %p %s", fd, fd->name);
+               if (fd->parent)
+                       {
+                       g_assert(fd->parent->magick == FD_MAGICK);
+                       DEBUG_2("                  parent: %p", fd->parent);
+                       }
+               s_work = fd->sidecar_files;
+               while (s_work)
+                       {
+                       FileData *sfd = s_work->data;
+                       s_work = s_work->next;
+                       g_assert(sfd->magick == FD_MAGICK);
+                       DEBUG_2("                  sidecar: %p %s", sfd, sfd->name);
+                       }
 
-       return target;
-}
+               g_assert(fd->parent == NULL || fd->sidecar_files == NULL);
+               }
 
-static void file_data_check_sidecars(const GList *basename_list)
-{
-       GList *work;
-       FileData *parent_fd;
-       if (!basename_list) return;
-       /* process the group list - the first one is the parent file, others are sidecars */
        parent_fd = basename_list->data;
+
+       /* check if the second and next entries of basename_list are already connected
+          as sidecars of the first entry (parent_fd) */
        work = basename_list->next;
-       while (work)
+       s_work = parent_fd->sidecar_files;
+
+       while (work && s_work)
                {
-               FileData *sfd = work->data;
+               if (work->data != s_work->data) break;
                work = work->next;
+               s_work = s_work->next;
+               }
 
-               file_data_merge_sidecar_files(parent_fd, sfd);
+       if (!work && !s_work)
+               {
+               DEBUG_2("basename no change");
+               return; /* no change in grouping */
                }
-               
-       /* there may be some sidecars that are already deleted - disconnect them */
-       work = parent_fd->sidecar_files;
+
+       /* we have to regroup it */
+
+       /* first, disconnect everything and send notification*/
+
+       work = basename_list;
        while (work)
                {
-               FileData *sfd = work->data;
+               FileData *fd = work->data;
                work = work->next;
-               
-               if (!g_list_find((GList *)basename_list, sfd)) 
+               g_assert(fd->parent == NULL || fd->sidecar_files == NULL);
+
+               if (fd->parent)
                        {
-                       printf("removing unknown %s: %s \n", parent_fd->path, sfd->path);
-                       file_data_disconnect_sidecar_file(parent_fd, sfd);
+                       FileData *old_parent = fd->parent;
+                       g_assert(old_parent->parent == NULL || old_parent->sidecar_files == NULL);
+                       file_data_ref(old_parent);
+                       file_data_disconnect_sidecar_file(old_parent, fd);
+                       file_data_send_notification(old_parent, NOTIFY_REREAD);
+                       file_data_unref(old_parent);
+                       }
+
+               while (fd->sidecar_files)
+                       {
+                       FileData *sfd = fd->sidecar_files->data;
+                       g_assert(sfd->parent == NULL || sfd->sidecar_files == NULL);
+                       file_data_ref(sfd);
+                       file_data_disconnect_sidecar_file(fd, sfd);
                        file_data_send_notification(sfd, NOTIFY_REREAD);
-                       file_data_send_notification(parent_fd, NOTIFY_REREAD);
+                       file_data_unref(sfd);
                        }
+               file_data_send_notification(fd, NOTIFY_GROUPING);
+
+               g_assert(fd->parent == NULL && fd->sidecar_files == NULL);
+               }
+
+       /* now we can form the new group */
+       work = basename_list->next;
+       new_sidecars = NULL;
+       while (work)
+               {
+               FileData *sfd = work->data;
+               g_assert(sfd->magick == FD_MAGICK);
+               g_assert(sfd->parent == NULL && sfd->sidecar_files == NULL);
+               sfd->parent = parent_fd;
+               new_sidecars = g_list_prepend(new_sidecars, sfd);
+               work = work->next;
                }
+       g_assert(parent_fd->sidecar_files == NULL);
+       parent_fd->sidecar_files = g_list_reverse(new_sidecars);
+       DEBUG_1("basename group changed for %s", parent_fd->path);
 }
 
-static FileData *file_data_disconnect_sidecar_file(FileData *target, FileData *sfd)
+
+static void file_data_disconnect_sidecar_file(FileData *target, FileData *sfd)
 {
-       sfd->parent = target;
+       g_assert(target->magick == FD_MAGICK);
+       g_assert(sfd->magick == FD_MAGICK);
        g_assert(g_list_find(target->sidecar_files, sfd));
-       
+
+       file_data_ref(target);
+       file_data_ref(sfd);
+
+       g_assert(sfd->parent == target);
+
        file_data_increment_version(sfd); /* increments both sfd and target */
 
        target->sidecar_files = g_list_remove(target->sidecar_files, sfd);
        sfd->parent = NULL;
 
-       if (sfd->ref == 0)
-               {
-               file_data_free(sfd);
-               return NULL;
-               }
-
-       return sfd;
+       file_data_unref(target);
+       file_data_unref(sfd);
 }
 
 /* disables / enables grouping for particular file, sends UPDATE notification */
 void file_data_disable_grouping(FileData *fd, gboolean disable)
 {
        if (!fd->disable_grouping == !disable) return;
-       
+
        fd->disable_grouping = !!disable;
-       
+
        if (disable)
                {
                if (fd->parent)
@@ -695,12 +820,12 @@ void file_data_disable_grouping(FileData *fd, gboolean disable)
 void file_data_disable_grouping_list(GList *fd_list, gboolean disable)
 {
        GList *work;
-       
+
        work = fd_list;
        while (work)
                {
                FileData *fd = work->data;
-               
+
                file_data_disable_grouping(fd, disable);
                work = work->next;
                }
@@ -714,9 +839,6 @@ void file_data_disable_grouping_list(GList *fd_list, gboolean disable)
  *-----------------------------------------------------------------------------
  */
 
-static SortType filelist_sort_method = SORT_NONE;
-static gboolean filelist_sort_ascend = TRUE;
-
 
 gint filelist_sort_compare_filedata(FileData *fa, FileData *fb)
 {
@@ -742,6 +864,11 @@ gint filelist_sort_compare_filedata(FileData *fa, FileData *fb)
                        if (fa->date > fb->date) return 1;
                        /* fall back to name */
                        break;
+               case SORT_EXIFTIME:
+                       if (fa->exifdate < fb->exifdate) return -1;
+                       if (fa->exifdate > fb->exifdate) return 1;
+                       /* fall back to name */
+                       break;
 #ifdef HAVE_STRVERSCMP
                case SORT_NUMBER:
                        ret = strverscmp(fa->name, fb->name);
@@ -758,9 +885,9 @@ gint filelist_sort_compare_filedata(FileData *fa, FileData *fb)
                ret = strcmp(fa->collate_key_name_nocase, fb->collate_key_name_nocase);
 
        if (ret != 0) return ret;
-       
-       /* do not return 0 unless the files are really the same 
-          file_data_pool ensures that original_path is unique 
+
+       /* do not return 0 unless the files are really the same
+          file_data_pool ensures that original_path is unique
        */
        return strcmp(fa->original_path, fb->original_path);
 }
@@ -793,6 +920,10 @@ GList *filelist_insert_sort_full(GList *list, gpointer data, SortType method, gb
 
 GList *filelist_sort(GList *list, SortType method, gboolean ascend)
 {
+       if (method == SORT_EXIFTIME)
+               {
+               set_exif_time_data(list);
+               }
        return filelist_sort_full(list, method, ascend, (GCompareFunc) filelist_sort_file_cb);
 }
 
@@ -819,44 +950,19 @@ static GList * file_data_basename_hash_insert(GHashTable *basename_hash, FileDat
        gchar *basename = g_strndup(fd->path, fd->extension - fd->path);
 
        list = g_hash_table_lookup(basename_hash, basename);
-       
+
        if (!g_list_find(list, fd))
                {
                list = g_list_insert_sorted(list, file_data_ref(fd), file_data_sort_by_ext);
                g_hash_table_insert(basename_hash, basename, list);
                }
-       else 
+       else
                {
                g_free(basename);
                }
        return list;
 }
 
-#if 0
-static void file_data_basename_hash_remove(GHashTable *basename_hash, FileData *fd)
-{
-       GList *list;
-       gchar *basename = g_strndup(fd->path, fd->extension - fd->path);
-       
-       list = g_hash_table_lookup(basename_hash, basename);
-       
-       if (!g_list_find(list, fd)) return;
-       
-       list = g_list_remove(list, fd);
-       file_data_unref(fd);
-       
-       if (list)
-               {
-               g_hash_table_insert(basename_hash, basename, list);
-               }
-       else 
-               {
-               g_hash_table_remove(basename_hash, basename);
-               g_free(basename);
-               }
-}
-#endif
-
 static void file_data_basename_hash_remove_list(gpointer key, gpointer value, gpointer data)
 {
        filelist_free((GList *)value);
@@ -864,7 +970,7 @@ static void file_data_basename_hash_remove_list(gpointer key, gpointer value, gp
 
 static void file_data_basename_hash_free(GHashTable *basename_hash)
 {
-       g_hash_table_foreach(basename_hash, file_data_basename_hash_remove_list, NULL); 
+       g_hash_table_foreach(basename_hash, file_data_basename_hash_remove_list, NULL);
        g_hash_table_destroy(basename_hash);
 }
 
@@ -882,7 +988,7 @@ static GList *filelist_filter_out_sidecars(GList *flist)
        while (work)
                {
                FileData *fd = work->data;
-       
+
                work = work->next;
                if (fd->parent) /* remove fd's that are children */
                        file_data_unref(fd);
@@ -976,7 +1082,7 @@ static gboolean filelist_read_real(const gchar *dir_path, GList **files, GList *
                                        {
                                        FileData *fd = file_data_new_local(filepath, &ent_sbuf, FALSE);
                                        flist = g_list_prepend(flist, fd);
-                                       if (fd->sidecar_priority && !fd->disable_grouping) 
+                                       if (fd->sidecar_priority && !fd->disable_grouping)
                                                {
                                                file_data_basename_hash_insert(basename_hash, fd);
                                                }
@@ -994,18 +1100,22 @@ static gboolean filelist_read_real(const gchar *dir_path, GList **files, GList *
                }
 
        closedir(dp);
-       
+
        g_free(pathl);
 
        if (dirs) *dirs = dlist;
-       if (files) 
+
+       if (files)
                {
-               g_hash_table_foreach(basename_hash, file_data_basename_hash_to_sidecars, NULL); 
+               g_hash_table_foreach(basename_hash, file_data_basename_hash_to_sidecars, NULL);
 
                *files = filelist_filter_out_sidecars(flist);
                }
        if (basename_hash) file_data_basename_hash_free(basename_hash);
 
+       // Call a separate function to initialize the exif datestamps for the found files..
+       if (files) init_exif_time_data(*files);
+
        return TRUE;
 }
 
@@ -1034,15 +1144,15 @@ FileData *file_data_new_group(const gchar *path_utf8)
 
        if (S_ISDIR(st.st_mode))
                return file_data_new(path_utf8, &st, TRUE);
-       
+
        dir = remove_level_from_path(path_utf8);
-       
+
        filelist_read_real(dir, &files, NULL, TRUE);
-       
+
        fd = g_hash_table_lookup(file_data_pool, path_utf8);
        g_assert(fd);
        file_data_ref(fd);
-       
+
        filelist_free(files);
        g_free(dir);
        return fd;
@@ -1139,12 +1249,12 @@ GList *filelist_filter(GList *list, gboolean is_dir_list)
                                                       strcmp(name, GQ_CACHE_LOCAL_METADATA) == 0)) )
                        {
                        GList *link = work;
-                       
+
                        list = g_list_remove_link(list, link);
                        file_data_unref(fd);
                        g_list_free(link);
                        }
-       
+
                work = work->next;
                }
 
@@ -1246,9 +1356,9 @@ gchar *file_data_get_sidecar_path(FileData *fd, gboolean existing_only)
 {
        gchar *sidecar_path = NULL;
        GList *work;
-       
+
        if (!file_data_can_write_sidecar(fd)) return NULL;
-       
+
        work = fd->parent ? fd->parent->sidecar_files : fd->sidecar_files;
        while (work)
                {
@@ -1260,7 +1370,7 @@ gchar *file_data_get_sidecar_path(FileData *fd, gboolean existing_only)
                        break;
                        }
                }
-       
+
        if (!existing_only && !sidecar_path)
                {
                gchar *base = g_strndup(fd->path, fd->extension - fd->path);
@@ -1283,17 +1393,17 @@ static GDestroyNotify file_data_destroy_mark_func[FILEDATA_MARKS_SIZE];
 gboolean file_data_get_mark(FileData *fd, gint n)
 {
        gboolean valid = (fd->valid_marks & (1 << n));
-       
-       if (file_data_get_mark_func[n] && !valid) 
+
+       if (file_data_get_mark_func[n] && !valid)
                {
                guint old = fd->marks;
                gboolean value = (file_data_get_mark_func[n])(fd, n, file_data_mark_func_data[n]);
-               
-               if (!value != !(fd->marks & (1 << n))) 
+
+               if (!value != !(fd->marks & (1 << n)))
                        {
                        fd->marks = fd->marks ^ (1 << n);
                        }
-               
+
                fd->valid_marks |= (1 << n);
                if (old && !fd->marks) /* keep files with non-zero marks in memory */
                        {
@@ -1319,16 +1429,16 @@ void file_data_set_mark(FileData *fd, gint n, gboolean value)
 {
        guint old;
        if (!value == !file_data_get_mark(fd, n)) return;
-       
-       if (file_data_set_mark_func[n]) 
+
+       if (file_data_set_mark_func[n])
                {
                (file_data_set_mark_func[n])(fd, n, value, file_data_mark_func_data[n]);
                }
-       
+
        old = fd->marks;
 
        fd->marks = fd->marks ^ (1 << n);
-       
+
        if (old && !fd->marks) /* keep files with non-zero marks in memory */
                {
                file_data_unref(fd);
@@ -1337,7 +1447,7 @@ void file_data_set_mark(FileData *fd, gint n, gboolean value)
                {
                file_data_ref(fd);
                }
-       
+
        file_data_increment_version(fd);
        file_data_send_notification(fd, NOTIFY_MARKS);
 }
@@ -1381,9 +1491,9 @@ static void file_data_notify_mark_func(gpointer key, gpointer value, gpointer us
 gboolean file_data_register_mark_func(gint n, FileDataGetMarkFunc get_mark_func, FileDataSetMarkFunc set_mark_func, gpointer data, GDestroyNotify notify)
 {
        if (n < 0 || n >= FILEDATA_MARKS_SIZE) return FALSE;
-       
+
        if (file_data_destroy_mark_func[n]) (file_data_destroy_mark_func[n])(file_data_mark_func_data[n]);
-               
+
        file_data_get_mark_func[n] = get_mark_func;
         file_data_set_mark_func[n] = set_mark_func;
         file_data_mark_func_data[n] = data;
@@ -1489,7 +1599,7 @@ gboolean file_data_add_ci(FileData *fd, FileDataChangeType type, const gchar *sr
                fdci->dest = g_strdup(dest);
 
        fd->change = fdci;
-       
+
        return TRUE;
 }
 
@@ -1521,7 +1631,7 @@ void file_data_free_ci(FileData *fd)
        if (!fdci) return;
 
        file_data_planned_change_remove(fd);
-       
+
        if (fdci->regroup_when_finished) file_data_disable_grouping(fd, FALSE);
 
        g_free(fdci->source);
@@ -1544,40 +1654,40 @@ static gboolean file_data_sc_add_ci(FileData *fd, FileDataChangeType type)
        GList *work;
 
        if (fd->parent) fd = fd->parent;
-       
+
        if (fd->change) return FALSE;
-       
+
        work = fd->sidecar_files;
        while (work)
                {
                FileData *sfd = work->data;
-               
+
                if (sfd->change) return FALSE;
                work = work->next;
                }
 
        file_data_add_ci(fd, type, NULL, NULL);
-       
+
        work = fd->sidecar_files;
        while (work)
                {
                FileData *sfd = work->data;
-               
+
                file_data_add_ci(sfd, type, NULL, NULL);
                work = work->next;
                }
-               
+
        return TRUE;
 }
 
 static gboolean file_data_sc_check_ci(FileData *fd, FileDataChangeType type)
 {
        GList *work;
-       
+
        if (fd->parent) fd = fd->parent;
-       
+
        if (!fd->change || fd->change->type != type) return FALSE;
-       
+
        work = fd->sidecar_files;
        while (work)
                {
@@ -1634,14 +1744,14 @@ void file_data_sc_free_ci(FileData *fd)
        GList *work;
 
        if (fd->parent) fd = fd->parent;
-       
+
        file_data_free_ci(fd);
-       
+
        work = fd->sidecar_files;
        while (work)
                {
                FileData *sfd = work->data;
-       
+
                file_data_free_ci(sfd);
                work = work->next;
                }
@@ -1656,7 +1766,7 @@ gboolean file_data_sc_add_ci_delete_list(GList *fd_list)
        while (work)
                {
                FileData *fd = work->data;
-       
+
                if (!file_data_sc_add_ci_delete(fd)) ret = FALSE;
                work = work->next;
                }
@@ -1667,12 +1777,12 @@ gboolean file_data_sc_add_ci_delete_list(GList *fd_list)
 static void file_data_sc_revert_ci_list(GList *fd_list)
 {
        GList *work;
-       
+
        work = fd_list;
        while (work)
                {
                FileData *fd = work->data;
-               
+
                file_data_sc_free_ci(fd);
                work = work->prev;
                }
@@ -1681,12 +1791,12 @@ static void file_data_sc_revert_ci_list(GList *fd_list)
 static gboolean file_data_sc_add_ci_list_call_func(GList *fd_list, const gchar *dest, gboolean (*func)(FileData *, const gchar *))
 {
        GList *work;
-       
+
        work = fd_list;
        while (work)
                {
                FileData *fd = work->data;
-               
+
                if (!func(fd, dest))
                        {
                        file_data_sc_revert_ci_list(work->prev);
@@ -1694,7 +1804,7 @@ static gboolean file_data_sc_add_ci_list_call_func(GList *fd_list, const gchar *
                        }
                work = work->next;
                }
-       
+
        return TRUE;
 }
 
@@ -1727,7 +1837,7 @@ gboolean file_data_add_ci_write_metadata_list(GList *fd_list)
        while (work)
                {
                FileData *fd = work->data;
-       
+
                if (!file_data_add_ci_write_metadata(fd)) ret = FALSE;
                work = work->next;
                }
@@ -1738,12 +1848,12 @@ gboolean file_data_add_ci_write_metadata_list(GList *fd_list)
 void file_data_free_ci_list(GList *fd_list)
 {
        GList *work;
-       
+
        work = fd_list;
        while (work)
                {
                FileData *fd = work->data;
-               
+
                file_data_free_ci(fd);
                work = work->next;
                }
@@ -1752,12 +1862,12 @@ void file_data_free_ci_list(GList *fd_list)
 void file_data_sc_free_ci_list(GList *fd_list)
 {
        GList *work;
-       
+
        work = fd_list;
        while (work)
                {
                FileData *fd = work->data;
-               
+
                file_data_sc_free_ci(fd);
                work = work->next;
                }
@@ -1771,14 +1881,14 @@ void file_data_sc_free_ci_list(GList *fd_list)
 static void file_data_update_planned_change_hash(FileData *fd, const gchar *old_path, gchar *new_path)
 {
        FileDataChangeType type = fd->change->type;
-       
+
        if (type == FILEDATA_CHANGE_MOVE || type == FILEDATA_CHANGE_RENAME)
                {
                FileData *ofd;
-               
+
                if (!file_data_planned_change_hash)
                        file_data_planned_change_hash = g_hash_table_new(g_str_hash, g_str_equal);
-               
+
                if (old_path && g_hash_table_lookup(file_data_planned_change_hash, old_path) == fd)
                        {
                        DEBUG_1("planned change: removing %s -> %s", old_path, fd->path);
@@ -1795,7 +1905,7 @@ static void file_data_update_planned_change_hash(FileData *fd, const gchar *old_
                                g_hash_table_remove(file_data_planned_change_hash, new_path);
                                file_data_unref(ofd);
                                }
-                       
+
                        DEBUG_1("planned change: inserting %s -> %s", new_path, fd->path);
                        file_data_ref(fd);
                        g_hash_table_insert(file_data_planned_change_hash, new_path, fd);
@@ -1817,10 +1927,10 @@ static void file_data_update_ci_dest_preserve_ext(FileData *fd, const gchar *des
        const gchar *extension = extension_from_path(fd->change->source);
        gchar *base = remove_extension_from_path(dest_path);
        gchar *old_path = fd->change->dest;
-       
+
        fd->change->dest = g_strconcat(base, extension, NULL);
        file_data_update_planned_change_hash(fd, old_path, fd->change->dest);
-       
+
        g_free(old_path);
        g_free(base);
 }
@@ -1829,9 +1939,9 @@ static void file_data_sc_update_ci(FileData *fd, const gchar *dest_path)
 {
        GList *work;
        gchar *dest_path_full = NULL;
-       
+
        if (fd->parent) fd = fd->parent;
-       
+
        if (!dest_path)
                {
                dest_path = fd->path;
@@ -1839,7 +1949,7 @@ static void file_data_sc_update_ci(FileData *fd, const gchar *dest_path)
        else if (!strchr(dest_path, G_DIR_SEPARATOR)) /* we got only filename, not a full path */
                {
                gchar *dir = remove_level_from_path(fd->path);
-               
+
                dest_path_full = g_build_filename(dir, dest_path, NULL);
                g_free(dir);
                dest_path = dest_path_full;
@@ -1849,18 +1959,18 @@ static void file_data_sc_update_ci(FileData *fd, const gchar *dest_path)
                dest_path_full = g_build_filename(dest_path, fd->name, NULL);
                dest_path = dest_path_full;
                }
-               
+
        file_data_update_ci_dest(fd, dest_path);
-       
+
        work = fd->sidecar_files;
        while (work)
                {
                FileData *sfd = work->data;
-               
+
                file_data_update_ci_dest_preserve_ext(sfd, dest_path);
                work = work->next;
                }
-       
+
        g_free(dest_path_full);
 }
 
@@ -1875,7 +1985,7 @@ gboolean file_data_sc_update_ci_copy(FileData *fd, const gchar *dest_path)
 {
        return file_data_sc_check_update_ci(fd, dest_path, FILEDATA_CHANGE_COPY);
 }
-       
+
 gboolean file_data_sc_update_ci_move(FileData *fd, const gchar *dest_path)
 {
        return file_data_sc_check_update_ci(fd, dest_path, FILEDATA_CHANGE_MOVE);
@@ -1897,16 +2007,16 @@ static gboolean file_data_sc_update_ci_list_call_func(GList *fd_list,
 {
        GList *work;
        gboolean ret = TRUE;
-       
+
        work = fd_list;
        while (work)
                {
                FileData *fd = work->data;
-               
+
                if (!func(fd, dest)) ret = FALSE;
                work = work->next;
                }
-       
+
        return ret;
 }
 
@@ -1935,7 +2045,7 @@ gint file_data_verify_ci(FileData *fd)
 {
        gint ret = CHANGE_OK;
        gchar *dir;
-       
+
        if (!fd->change)
                {
                DEBUG_1("Change checked: no change info: %s", fd->path);
@@ -1949,9 +2059,9 @@ gint file_data_verify_ci(FileData *fd)
                DEBUG_1("Change checked: file does not exist: %s", fd->path);
                return ret;
                }
-               
+
        dir = remove_level_from_path(fd->path);
-       
+
        if (fd->change->type != FILEDATA_CHANGE_DELETE &&
            fd->change->type != FILEDATA_CHANGE_MOVE && /* the unsaved metadata should survive move and rename operations */
            fd->change->type != FILEDATA_CHANGE_RENAME &&
@@ -1961,7 +2071,7 @@ gint file_data_verify_ci(FileData *fd)
                ret |= CHANGE_WARN_UNSAVED_META;
                DEBUG_1("Change checked: unsaved metadata: %s", fd->path);
                }
-       
+
        if (fd->change->type != FILEDATA_CHANGE_DELETE &&
            fd->change->type != FILEDATA_CHANGE_WRITE_METADATA &&
            !access_file(fd->path, R_OK))
@@ -1992,10 +2102,10 @@ gint file_data_verify_ci(FileData *fd)
                /* determine destination file */
                gboolean have_dest = FALSE;
                gchar *dest_dir = NULL;
-               
+
                if (options->metadata.save_in_image_file)
                        {
-                       if (file_data_can_write_directly(fd)) 
+                       if (file_data_can_write_directly(fd))
                                {
                                /* we can write the file directly */
                                if (access_file(fd->path, W_OK))
@@ -2011,7 +2121,7 @@ gint file_data_verify_ci(FileData *fd)
                                                }
                                        }
                                }
-                       else if (file_data_can_write_sidecar(fd)) 
+                       else if (file_data_can_write_sidecar(fd))
                                {
                                /* we can write sidecar */
                                gchar *sidecar = file_data_get_sidecar_path(fd, FALSE);
@@ -2031,7 +2141,7 @@ gint file_data_verify_ci(FileData *fd)
                                g_free(sidecar);
                                }
                        }
-               
+
                if (!have_dest)
                        {
                        /* write private metadata file under ~/.geeqie */
@@ -2045,7 +2155,7 @@ gint file_data_verify_ci(FileData *fd)
                        metadata_path = cache_find_location(CACHE_TYPE_XMP_METADATA, fd->path);
 #endif
                        if (!metadata_path) metadata_path = cache_find_location(CACHE_TYPE_METADATA, fd->path);
-                       
+
                        if (metadata_path && !access_file(metadata_path, W_OK))
                                {
                                g_free(metadata_path);
@@ -2060,7 +2170,7 @@ gint file_data_verify_ci(FileData *fd)
                                if (recursive_mkdir_if_not_exists(dest_dir, mode))
                                        {
                                        gchar *filename = g_strconcat(fd->name, options->metadata.save_legacy_format ? GQ_CACHE_EXT_METADATA : GQ_CACHE_EXT_XMP_METADATA, NULL);
-                       
+
                                        metadata_path = g_build_filename(dest_dir, filename, NULL);
                                        g_free(filename);
                                        }
@@ -2079,12 +2189,12 @@ gint file_data_verify_ci(FileData *fd)
                        }
                g_free(dest_dir);
                }
-               
+
        if (fd->change->dest && fd->change->type != FILEDATA_CHANGE_WRITE_METADATA)
                {
                gboolean same;
                gchar *dest_dir;
-                       
+
                same = (strcmp(fd->path, fd->change->dest) == 0);
 
                if (!same)
@@ -2116,7 +2226,7 @@ gint file_data_verify_ci(FileData *fd)
                        }
                else if (!access_file(dest_dir, W_OK))
                        {
-                       ret |= CHANGE_NO_WRITE_PERM_DEST_DIR;
+                       ret |= CHANGE_WARN_NO_WRITE_PERM_DEST_DIR;
                        DEBUG_1("Change checked: destination dir is readonly: %s -> %s", fd->path, fd->change->dest);
                        }
                else if (!same)
@@ -2143,7 +2253,7 @@ gint file_data_verify_ci(FileData *fd)
 
                g_free(dest_dir);
                }
-               
+
        fd->change->error = ret;
        if (ret == 0) DEBUG_1("Change checked: OK: %s", fd->path);
 
@@ -2193,7 +2303,7 @@ gchar *file_data_get_error_string(gint error)
                g_string_append(result, _("destination can't be overwritten"));
                }
 
-       if (error & CHANGE_NO_WRITE_PERM_DEST_DIR)
+       if (error & CHANGE_WARN_NO_WRITE_PERM_DEST_DIR)
                {
                if (result->len > 0) g_string_append(result, ", ");
                g_string_append(result, _("destination directory is not writable"));
@@ -2228,7 +2338,7 @@ gchar *file_data_get_error_string(gint error)
                if (result->len > 0) g_string_append(result, ", ");
                g_string_append(result, _("destination already exists and will be overwritten"));
                }
-               
+
        if (error & CHANGE_WARN_SAME)
                {
                if (result->len > 0) g_string_append(result, ", ");
@@ -2258,9 +2368,9 @@ gint file_data_verify_ci_list(GList *list, gchar **desc, gboolean with_sidecars)
        gint num;
        gint *errors;
        gint i;
-       
+
        if (!list) return 0;
-       
+
        num = g_list_length(list);
        errors = g_new(int, num);
        work = list;
@@ -2272,21 +2382,21 @@ gint file_data_verify_ci_list(GList *list, gchar **desc, gboolean with_sidecars)
 
                fd = work->data;
                work = work->next;
-                       
+
                error = with_sidecars ? file_data_sc_verify_ci(fd) : file_data_verify_ci(fd);
                all_errors |= error;
                common_errors &= error;
-               
+
                errors[i] = error;
-               
+
                i++;
                }
-       
+
        if (desc && all_errors)
                {
                GList *work;
                GString *result = g_string_new("");
-               
+
                if (common_errors)
                        {
                        gchar *str = file_data_get_error_string(common_errors);
@@ -2294,7 +2404,7 @@ gint file_data_verify_ci_list(GList *list, gchar **desc, gboolean with_sidecars)
                        g_string_append(result, "\n");
                        g_free(str);
                        }
-               
+
                work = list;
                i = 0;
                while (work)
@@ -2304,9 +2414,9 @@ gint file_data_verify_ci_list(GList *list, gchar **desc, gboolean with_sidecars)
 
                        fd = work->data;
                        work = work->next;
-                       
+
                        error = errors[i] & ~common_errors;
-                       
+
                        if (error)
                                {
                                gchar *str = file_data_get_error_string(error);
@@ -2383,20 +2493,20 @@ gboolean file_data_sc_perform_ci(FileData *fd)
        GList *work;
        gboolean ret = TRUE;
        FileDataChangeType type = fd->change->type;
-       
+
        if (!file_data_sc_check_ci(fd, type)) return FALSE;
 
        work = fd->sidecar_files;
        while (work)
                {
                FileData *sfd = work->data;
-               
+
                if (!file_data_perform_ci(sfd)) ret = FALSE;
                work = work->next;
                }
-       
+
        if (!file_data_perform_ci(fd)) ret = FALSE;
-       
+
        return ret;
 }
 
@@ -2413,7 +2523,7 @@ gboolean file_data_apply_ci(FileData *fd)
                {
                DEBUG_1("planned change: applying %s -> %s", fd->change->dest, fd->path);
                file_data_planned_change_remove(fd);
-               
+
                if (g_hash_table_lookup(file_data_pool, fd->change->dest))
                        {
                        /* this change overwrites another file which is already known to other modules
@@ -2430,7 +2540,7 @@ gboolean file_data_apply_ci(FileData *fd)
                }
        file_data_increment_version(fd);
        file_data_send_notification(fd, NOTIFY_CHANGE);
-       
+
        return TRUE;
 }
 
@@ -2438,20 +2548,20 @@ gboolean file_data_sc_apply_ci(FileData *fd)
 {
        GList *work;
        FileDataChangeType type = fd->change->type;
-       
+
        if (!file_data_sc_check_ci(fd, type)) return FALSE;
 
        work = fd->sidecar_files;
        while (work)
                {
                FileData *sfd = work->data;
-               
+
                file_data_apply_ci(sfd);
                work = work->next;
                }
-       
+
        file_data_apply_ci(fd);
-       
+
        return TRUE;
 }
 
@@ -2460,7 +2570,7 @@ static gboolean file_data_list_contains_whole_group(GList *list, FileData *fd)
        GList *work;
        if (fd->parent) fd = fd->parent;
        if (!g_list_find(list, fd)) return FALSE;
-       
+
        work = fd->sidecar_files;
        while (work)
                {
@@ -2470,29 +2580,6 @@ static gboolean file_data_list_contains_whole_group(GList *list, FileData *fd)
        return TRUE;
 }
 
-#if 0
-static gboolean file_data_list_dump(GList *list)
-{
-       GList *work, *work2;
-
-       work = list;
-       while (work)
-               {
-               FileData *fd = work->data;
-               printf("%s\n", fd->name);
-               work2 = fd->sidecar_files;
-               while (work2)
-                       {
-                       FileData *fd = work2->data;
-                       printf("       %s\n", fd->name);
-                       work2 = work2->next;
-                       }
-               work = work->next;
-               }
-       return TRUE;
-}
-#endif
-
 GList *file_data_process_groups_in_selection(GList *list, gboolean ungroup, GList **ungrouped_list)
 {
        GList *out = NULL;
@@ -2505,33 +2592,33 @@ GList *file_data_process_groups_in_selection(GList *list, gboolean ungroup, GLis
                        {
                        FileData *fd = work->data;
                        work = work->next;
-               
-                       if (!file_data_list_contains_whole_group(list, fd)) 
+
+                       if (!file_data_list_contains_whole_group(list, fd))
                                {
                                file_data_disable_grouping(fd, TRUE);
-                               if (ungrouped_list) 
+                               if (ungrouped_list)
                                        {
                                        *ungrouped_list = g_list_prepend(*ungrouped_list, file_data_ref(fd));
                                        }
                                }
                        }
                }
-       
-       /* remove sidecars from the list, 
+
+       /* remove sidecars from the list,
           they can be still acessed via main_fd->sidecar_files */
        work = list;
        while (work)
                {
                FileData *fd = work->data;
                work = work->next;
-               
+
                if (!fd->parent ||
                    (!ungroup && !file_data_list_contains_whole_group(list, fd)))
                        {
                        out = g_list_prepend(out, file_data_ref(fd));
                        }
                }
-               
+
        filelist_free(list);
        out = g_list_reverse(out);
 
@@ -2577,11 +2664,11 @@ gboolean file_data_register_notify_func(FileDataNotifyFunc func, gpointer data,
 {
        NotifyData *nd;
        GList *work = notify_func_list;
-       
+
        while (work)
                {
                NotifyData *nd = (NotifyData *)work->data;
-       
+
                if (nd->func == func && nd->data == data)
                        {
                        g_warning("Notify func already registered");
@@ -2589,7 +2676,7 @@ gboolean file_data_register_notify_func(FileDataNotifyFunc func, gpointer data,
                        }
                work = work->next;
                }
-       
+
        nd = g_new(NotifyData, 1);
        nd->func = func;
        nd->data = data;
@@ -2597,18 +2684,18 @@ gboolean file_data_register_notify_func(FileDataNotifyFunc func, gpointer data,
 
        notify_func_list = g_list_insert_sorted(notify_func_list, nd, file_data_notify_sort);
        DEBUG_2("Notify func registered: %p", nd);
-       
+
        return TRUE;
 }
 
 gboolean file_data_unregister_notify_func(FileDataNotifyFunc func, gpointer data)
 {
        GList *work = notify_func_list;
-       
+
        while (work)
                {
                NotifyData *nd = (NotifyData *)work->data;
-       
+
                if (nd->func == func && nd->data == data)
                        {
                        notify_func_list = g_list_delete_link(notify_func_list, work);
@@ -2631,7 +2718,7 @@ void file_data_send_notification(FileData *fd, NotifyType type)
        while (work)
                {
                NotifyData *nd = (NotifyData *)work->data;
-               
+
                nd->func(fd, type, nd->data);
                work = work->next;
                }
@@ -2645,7 +2732,7 @@ static void realtime_monitor_check_cb(gpointer key, gpointer value, gpointer dat
        FileData *fd = key;
 
        file_data_check_changed_files(fd);
-       
+
        DEBUG_1("monitor %s", fd->path);
 }
 
@@ -2659,24 +2746,24 @@ static gboolean realtime_monitor_cb(gpointer data)
 gboolean file_data_register_real_time_monitor(FileData *fd)
 {
        gint count;
-       
+
        file_data_ref(fd);
-       
+
        if (!file_data_monitor_pool)
                file_data_monitor_pool = g_hash_table_new(g_direct_hash, g_direct_equal);
-       
+
        count = GPOINTER_TO_INT(g_hash_table_lookup(file_data_monitor_pool, fd));
 
        DEBUG_1("Register realtime %d %s", count, fd->path);
-       
+
        count++;
        g_hash_table_insert(file_data_monitor_pool, fd, GINT_TO_POINTER(count));
-       
+
        if (!realtime_monitor_id)
                {
                realtime_monitor_id = g_timeout_add(5000, realtime_monitor_cb, NULL);
                }
-       
+
        return TRUE;
 }
 
@@ -2685,29 +2772,29 @@ gboolean file_data_unregister_real_time_monitor(FileData *fd)
        gint count;
 
        g_assert(file_data_monitor_pool);
-       
+
        count = GPOINTER_TO_INT(g_hash_table_lookup(file_data_monitor_pool, fd));
-       
+
        DEBUG_1("Unregister realtime %d %s", count, fd->path);
-       
+
        g_assert(count > 0);
-       
+
        count--;
-       
+
        if (count == 0)
                g_hash_table_remove(file_data_monitor_pool, fd);
        else
                g_hash_table_insert(file_data_monitor_pool, fd, GINT_TO_POINTER(count));
 
        file_data_unref(fd);
-       
+
        if (g_hash_table_size(file_data_monitor_pool) == 0)
                {
                g_source_remove(realtime_monitor_id);
                realtime_monitor_id = 0;
                return FALSE;
                }
-       
+
        return TRUE;
 }
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 8e5e867..558b592 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -18,6 +18,8 @@
 #define DEBUG_FILEDATA
 #endif
 
+#define FD_MAGICK 0x12345678u
+
 gchar *text_from_size(gint64 size);
 gchar *text_from_size_abrev(gint64 size);
 const gchar *text_from_time(time_t t);
index 23612d8..64224be 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -38,7 +38,7 @@ static GList *file_sidecar_list = NULL; /* files with allowed sidecar */
 
 
 static FilterEntry *filter_entry_new(const gchar *key, const gchar *description,
-                                    const gchar *extensions, FileFormatClass file_class, 
+                                    const gchar *extensions, FileFormatClass file_class,
                                     gboolean writable, gboolean allow_sidecar, gboolean enabled)
 {
        FilterEntry *fe;
@@ -140,7 +140,7 @@ static void filter_add_if_missing(const gchar *key, const gchar *description, co
                        {
                        if (fe->file_class == FORMAT_CLASS_UNKNOWN)
                                fe->file_class = file_class;    /* for compatibility */
-                               
+
                        if (fe->writable && fe->allow_sidecar)
                                {
                                fe->writable = writable;
@@ -188,14 +188,14 @@ void filter_add_defaults(void)
                work = work->next;
 
                name = gdk_pixbuf_format_get_name(format);
-               
-               if (strcmp(name, "Digital camera RAW") == 0) 
+
+               if (strcmp(name, "Digital camera RAW") == 0)
                        {
                        DEBUG_1("Skipped '%s' from loader", name);
                        g_free(name);
                        continue;
                        }
-               
+
                desc = gdk_pixbuf_format_get_description(format);
                extensions = gdk_pixbuf_format_get_extensions(format);
 
@@ -238,11 +238,11 @@ void filter_add_defaults(void)
        filter_add_if_missing("ico", "Icon file", ".ico;.cur", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
        filter_add_if_missing("ras", "Raster", ".ras", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
        filter_add_if_missing("svg", "Scalable Vector Graphics", ".svg", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
-       
+
        /* special formats for stereo */
        filter_add_if_missing("jps", "Stereo side-by-side jpeg", ".jps", FORMAT_CLASS_IMAGE, TRUE, FALSE, TRUE);
        filter_add_if_missing("mpo", "Stereo multi-image jpeg", ".mpo", FORMAT_CLASS_IMAGE, FALSE, TRUE, TRUE);
-       
+
        /* non-image files that might be desirable to show */
        filter_add_if_missing("xmp", "XMP sidecar", ".xmp", FORMAT_CLASS_META, TRUE, FALSE, TRUE);
        filter_add_if_missing("gqv", GQ_APPNAME " image collection", GQ_COLLECTION_EXT, FORMAT_CLASS_META, FALSE, FALSE, TRUE);
@@ -267,6 +267,8 @@ void filter_add_defaults(void)
        filter_add_if_missing("r3d", "Red raw format", ".r3d", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
        filter_add_if_missing("3fr", "Hasselblad raw format", ".3fr", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
        filter_add_if_missing("erf", "Epson raw format", ".erf", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
+       filter_add_if_missing("srw", "Samsung raw format", ".srw", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
+       filter_add_if_missing("rw2", "Panasonic raw format", ".rw2", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
 }
 
 GList *filter_to_list(const gchar *extensions)
@@ -290,15 +292,15 @@ GList *filter_to_list(const gchar *extensions)
                        p++;
                        l++;
                        }
-               
+
                ext = g_strndup(b, l);
-               
+
                if (g_ascii_strcasecmp(ext, "%image") == 0) file_class = FORMAT_CLASS_IMAGE;
                else if (g_ascii_strcasecmp(ext, "%raw") == 0) file_class = FORMAT_CLASS_RAWIMAGE;
                else if (g_ascii_strcasecmp(ext, "%meta") == 0) file_class = FORMAT_CLASS_META;
                else if (g_ascii_strcasecmp(ext, "%unknown") == 0) file_class = FORMAT_CLASS_UNKNOWN;
-               
-               if (file_class == -1) 
+
+               if (file_class == -1)
                        {
                        list = g_list_append(list, ext);
                        }
@@ -307,7 +309,7 @@ GList *filter_to_list(const gchar *extensions)
                        list = g_list_concat(list, string_list_copy(file_class_extension_list[file_class]));
                        g_free(ext);
                        }
-                       
+
                if (*p == ';') p++;
                }
 
@@ -318,15 +320,15 @@ static gint filter_sort_ext_len_cb(gconstpointer a, gconstpointer b)
 {
        gchar *sa = (gchar *)a;
        gchar *sb = (gchar *)b;
-       
+
        gint len_a = strlen(sa);
        gint len_b = strlen(sb);
-       
+
        if (len_a > len_b) return -1;
        if (len_a < len_b) return 1;
        return 0;
 }
+
 
 void filter_rebuild(void)
 {
@@ -372,7 +374,7 @@ void filter_rebuild(void)
                                {
                                log_printf("WARNING: invalid file class %d\n", fe->file_class);
                                }
-                               
+
                        if (fe->writable)
                                {
                                ext = filter_to_list(fe->extensions);
@@ -384,7 +386,7 @@ void filter_rebuild(void)
                                ext = filter_to_list(fe->extensions);
                                if (ext) file_sidecar_list = g_list_concat(file_sidecar_list, ext);
                                }
-                       
+
                        }
                }
 
@@ -497,7 +499,7 @@ void filter_load_file_type(const gchar **attribute_names, const gchar **attribut
                log_printf("unknown attribute %s = %s\n", option, value);
                }
        if (fe.file_class >= FILE_FORMAT_CLASSES) fe.file_class = FORMAT_CLASS_UNKNOWN;
-       
+
        if (fe.key && fe.key[0] != 0)
                {
                old_fe = filter_get_by_key(fe.key);
index caa723b..e277454 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 0ff7484..93a3ee3 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * This software is released under the GNU General Public License (GNU GPL).
  * Please read the included file COPYING for more information.
@@ -466,62 +466,6 @@ static ExifMarker CanonSet2[] = {
 EXIF_MARKER_LIST_END
 };
 
-#if 0
-
-static ExifTextList CanonCustomEnable[] = {
-       { 0,    "off" },
-       { 1,    "on" },
-       EXIF_TEXT_LIST_END
-};
-
-static ExifTextList CanonCustomEnableInvert[] = {
-       { 0,    "on" },
-       { 1,    "off" },
-       EXIF_TEXT_LIST_END
-};
-
-static ExifTextList CanonCustomExposureLevel[] = {
-       { 0,    "1/2 stop" },
-       { 1,    "1/3 stop" },
-       EXIF_TEXT_LIST_END
-};
-
-static ExifTextList CanonCustomAVShutterSpeed[] = {
-       { 0,    "auto" },
-       { 1,    "1/200 (fixed)" },
-       EXIF_TEXT_LIST_END
-};
-
-static ExifTextList CanonCustomShutterCurtainSync[] = {
-       { 0,    "1st" },
-       { 1,    "2nd" },
-       EXIF_TEXT_LIST_END
-};
-
-static ExifMarker CanonCustom[] = {
-{ 1,   EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.NoiseReduction", "Noise reduction",  CanonCustomEnable },
-/*{ 2, EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncShutter",
-                                               "Shutter/Auto exposure button function",CanonCustomBTNShutter }, */
-{ 3,   EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.MirrorLockup", "Mirror lockup",      CanonCustomEnable },
-{ 4,   EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.TvAvExposureLevel",
-                                                       "Tv/Av and exposure level",     CanonCustomExposureLevel },
-{ 5,   EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.AFAssistLight", "AF assist light",   CanonCustomEnableInvert },
-{ 6,   EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.AvShutterSpeed",
-                                                       "Shutter speed in Av mode",     CanonCustomAVShutterSpeed },
-/*{ 7, EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.AutoBracket",
-                               "Auto-Exposure bracketting sequence/auto cancellation", CanonCustom }, */
-{ 8,   EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.ShutterSync", "Shutter sync",        CanonCustomShutterCurtainSync },
-/* { 9,        EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncAF",  "AF button function",   CanonCustom }, */
-{ 10,  EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.FillFlashReduction",
-                                                       "Fill flash auto reduction",    CanonCustomEnableInvert },
-/*{ 11,        EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncMenu",
-                                                       "Menu button function",         CanonCustom }, */
-/*{ 12,        EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.BtnFuncSet", "Set button function",  CanonCustom }, */
-{ 13,  EXIF_FORMAT_SHORT_UNSIGNED, 1,  "MkN.Canon.SensorCleaning", "Sensor cleaning",  CanonCustomEnable },
-EXIF_MARKER_LIST_END
-};
-
-#endif
 
 static ExifMarker CanonExifMarkersList[] = {
        { 1,    EXIF_FORMAT_SHORT_UNSIGNED, -1, "MkN.Canon.Settings1",          NULL, NULL },
@@ -557,49 +501,6 @@ static void canon_mknote_parse_settings(ExifData *exif,
                }
 }
 
-#if 0
-static void canon_mknote_parse_convert(ExifData *exif)
-{
-       gint value;
-       ExifItem *result;
-
-       /* seems we need more than only this value for distance */
-       if (exif_get_integer(exif, "MkN.Canon.SubjectDistance", &value))
-               {
-               static ExifMarker marker= { 0x9206, EXIF_FORMAT_RATIONAL_UNSIGNED, 1,
-                                           "SubjectDistance", "Subject distance", NULL };
-               ExifItem *item;
-               ExifRational *rational;
-
-               item = exif_item_new(marker.format, marker.tag, 1, &marker);
-               rational = item->data;
-               rational->num = value;
-               rational->den = 100;
-
-               exif->items = g_list_prepend(exif->items, item);
-               }
-
-       result = exif_get_item(exif, "MkN.Canon.SerialNumber");
-       if (result && result->format == EXIF_FORMAT_LONG_UNSIGNED && result->data_len == 4)
-               {
-               static ExifMarker marker= { 12, EXIF_FORMAT_STRING, -1,
-                                           "SerialNumber", "Camera serial number", NULL };
-               ExifItem *item;
-               gchar *text;
-               gint l;
-               guint32 n;
-
-               n = (guint32)((guint32 *)(result->data))[0];
-               text = g_strdup_printf("%04X%05d", n & 0xffff0000 >> 8, n & 0x0000ffff);
-               l = strlen(text) + 1;
-               item = exif_item_new(marker.format, marker.tag, l, &marker);
-               memcpy(item->data, text, l);
-               g_free(text);
-
-               exif->items = g_list_prepend(exif->items, item);
-               }
-}
-#endif
 
 gboolean format_canon_makernote(ExifData *exif, guchar *tiff, guint offset,
                                guint size, ExifByteOrder bo)
@@ -623,10 +524,6 @@ gboolean format_canon_makernote(ExifData *exif, guchar *tiff, guint offset,
                canon_mknote_parse_settings(exif, item->data, item->data_len, bo, CanonSet2);
                }
 
-#if 0
-       canon_mknote_parse_convert(exif);
-#endif
-
        return TRUE;
 }
 
index 9e27cf6..cd39a5b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * This software is released under the GNU General Public License (GNU GPL).
  * Please read the included file COPYING for more information.
index c61229c..b57babd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Original version 2005 Lars Ellenberg, base on dcraw by David coffin.
@@ -144,14 +144,6 @@ static ExifTextList FujiTagNoYes[]= {
        EXIF_TEXT_LIST_END
 };
 
-#if 0
-static ExifTextList FujiTag[]= {
-       { ,     "" },
-       { ,     "" },
-       EXIF_TEXT_LIST_END
-};
-#endif
-
 
 static ExifMarker FujiExifMarkersList[] = {
 { 0x1000,      EXIF_FORMAT_STRING, 8,          "Fuji.Quality",         "Quality",      NULL },
index 82f7f5d..41d4d57 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Original version 2005 Lars Ellenberg, base on dcraw by David coffin.
index 7c0a9df..2b60ee5 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Raw NEF jpeg extraction based on nefextract.c by Joseph Heled,
@@ -221,14 +221,6 @@ static ExifTextList NikonTagConverter[]= {
        EXIF_TEXT_LIST_END
 };
 
-#if 0
-static ExifTextList NikonTag[]= {
-       { ,     "" },
-       { ,     "" },
-       EXIF_TEXT_LIST_END
-};
-#endif
-
 static ExifMarker NikonExifMarkersList1[] = {
 { 0x0002, EXIF_FORMAT_STRING, 6,               "Nikon.unknown",        NULL,           NULL },
 { 0x0003, EXIF_FORMAT_SHORT_UNSIGNED, 1,       "Nikon.Quality",        "Quality",      NikonTagQuality },
@@ -282,17 +274,6 @@ static ExifTextList NikonTag2FlashUsed[]= {
        EXIF_TEXT_LIST_END
 };
 
-#if 0
-static ExifTextList NikonTagi2Saturation[]= {
-       { -3,   "black and white" },
-       { -2,   "-2" },
-       { -1,   "-1" },
-       { 0,    "normal" },
-       { 1,    "+1" },
-       { 2,    "+2" },
-       EXIF_TEXT_LIST_END
-};
-#endif
 
 static ExifMarker NikonExifMarkersList2[] = {
 { 0x0002, EXIF_FORMAT_SHORT_UNSIGNED, 2,       "Nikon.ISOSpeed",       "ISO speed",    NULL },
index 47f2047..438de56 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * This software is released under the GNU General Public License (GNU GPL).
  * Please read the included file COPYING for more information.
index 23fb73b..e943ada 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * This software is released under the GNU General Public License (GNU GPL).
  * Please read the included file COPYING for more information.
@@ -205,14 +205,6 @@ static ExifTextList OlympusTagContrast[]= {
        EXIF_TEXT_LIST_END
 };
 
-#if 0
-static ExifTextList OlympusTag[]= {
-       { ,     "" },
-       { ,     "" },
-       EXIF_TEXT_LIST_END
-};
-#endif
-
 
 static ExifMarker OlympusExifMarkersList[] = {
 { 0x0001, EXIF_FORMAT_LONG_UNSIGNED, -1, "Konica/MinoltaSettings", "Konica / Minolta settings", NULL },
index 26afc80..834e4e8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * This software is released under the GNU General Public License (GNU GPL).
  * Please read the included file COPYING for more information.
index fdd9d62..cc5b719 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Original version 2005 Lars Ellenberg, base on dcraw by David coffin.
index b77548f..78e79bd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  *  Authors:
  *    Original version 2005 Lars Ellenberg, base on dcraw by David coffin.
index faecc72..6094651 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -37,36 +37,28 @@ enum {
 
 static void clear_mouse_cursor(GtkWidget *widget, gint state)
 {
-       if (!widget->window) return;
+       GdkWindow *window = gtk_widget_get_window(widget);
+       if (!window) return;
 
        if (state & FULLSCREEN_CURSOR_BUSY)
                {
                GdkCursor *cursor;
 
                cursor = gdk_cursor_new(GDK_WATCH);
-               gdk_window_set_cursor(widget->window, cursor);
+               gdk_window_set_cursor(window, cursor);
                gdk_cursor_unref(cursor);
                }
        else if (state & FULLSCREEN_CURSOR_NORMAL)
                {
-               gdk_window_set_cursor(widget->window, NULL);
+               gdk_window_set_cursor(window, NULL);
                }
        else
                {
                GdkCursor *cursor;
-               GdkPixmap *p;
-
-               p = gdk_bitmap_create_from_data(widget->window, "\0\0\0", 1, 1);
-
-               cursor = gdk_cursor_new_from_pixmap(p, p,
-                                                   &widget->style->fg[GTK_STATE_ACTIVE],
-                                                   &widget->style->bg[GTK_STATE_ACTIVE],
-                                                   0, 0);
-
-               gdk_window_set_cursor(widget->window, cursor);
 
+               cursor = gdk_cursor_new(GDK_BLANK_CURSOR);
+               gdk_window_set_cursor(window, cursor);
                gdk_cursor_unref(cursor);
-               g_object_unref(p);
                }
 }
 
@@ -219,10 +211,10 @@ FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
 {
        FullScreenData *fs;
        GdkScreen *screen;
-       gboolean same;
        gint x, y;
        gint w, h;
        GdkGeometry geometry;
+       GdkWindow *gdkwin;
 
        if (!window || !imd) return NULL;
 
@@ -238,7 +230,7 @@ FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
 
        DEBUG_1("full screen requests screen %d", options->fullscreen.screen);
        fullscreen_prefs_get_geometry(options->fullscreen.screen, window, &x, &y, &w, &h,
-                                     &screen, &same);
+                                     &screen, &fs->same_region);
 
        fs->window = window_new(GTK_WINDOW_TOPLEVEL, "fullscreen", NULL, NULL, _("Full screen"));
 
@@ -252,15 +244,14 @@ FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
                 */
                gtk_window_fullscreen(GTK_WINDOW(fs->window));
                }
-       else if (options->fullscreen.above)
+       else
                {
-               /* request to be above other windows */
-               gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE);
+               gtk_window_set_screen(GTK_WINDOW(fs->window), screen);
+               if (options->fullscreen.above)
+                       gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE);
                }
 
        gtk_window_set_resizable(GTK_WINDOW(fs->window), FALSE);
-
-       gtk_window_set_screen(GTK_WINDOW(fs->window), screen);
        gtk_container_set_border_width(GTK_CONTAINER(fs->window), 0);
        g_signal_connect(G_OBJECT(fs->window), "delete_event",
                         G_CALLBACK(fullscreen_delete_cb), fs);
@@ -287,6 +278,11 @@ FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
        gtk_window_set_default_size(GTK_WINDOW(fs->window), w, h);
        gtk_window_move(GTK_WINDOW(fs->window), x, y);
 
+       gtk_widget_realize(fs->window);
+       gdkwin = gtk_widget_get_window(fs->window);
+       if (gdkwin != NULL)
+               gdk_window_set_override_redirect(gdkwin, TRUE);
+
        fs->imd = image_new(FALSE);
 
        gtk_container_add(GTK_CONTAINER(fs->window), fs->imd->widget);
@@ -294,7 +290,7 @@ FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
        image_background_set_color_from_options(fs->imd, TRUE);
        image_set_delay_flip(fs->imd, options->fullscreen.clean_flip);
        image_auto_refresh_enable(fs->imd, fs->normal_imd->auto_refresh);
-       
+
        if (options->fullscreen.clean_flip)
                {
                image_set_update_func(fs->imd, fullscreen_image_update_cb, fs);
@@ -303,7 +299,16 @@ FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
 
        gtk_widget_show(fs->imd->widget);
 
-       image_change_from_image(fs->imd, fs->normal_imd);
+       if (fs->same_region)
+               {
+               DEBUG_0("Original vindow is not visible, enabling std. fullscreen mode");
+               image_move_from_image(fs->imd, fs->normal_imd);
+               }
+       else
+               {
+               DEBUG_0("Original vindow is still visible, enabling presentation fullscreen mode");
+               image_copy_from_image(fs->imd, fs->normal_imd);
+               }
 
        if (options->stereo.enable_fsmode) {
                image_stereo_set(fs->imd, options->stereo.fsmode);
@@ -322,10 +327,13 @@ FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
        /* hide normal window
         * FIXME: properly restore this window on show
         */
+       if (fs->same_region)
+               {
 #ifdef HIDE_WINDOW_IN_FULLSCREEN
-       gtk_widget_hide(fs->normal_window);
+               gtk_widget_hide(fs->normal_window);
 #endif
-       image_change_fd(fs->normal_imd, NULL, image_zoom_get(fs->normal_imd));
+               image_change_fd(fs->normal_imd, NULL, image_zoom_get(fs->normal_imd));
+               }
 
        return fs;
 }
@@ -340,15 +348,19 @@ void fullscreen_stop(FullScreenData *fs)
        fullscreen_busy_mouse_disable(fs);
        gdk_keyboard_ungrab(GDK_CURRENT_TIME);
 
-       image_change_from_image(fs->normal_imd, fs->imd);
-
-       if (options->stereo.enable_fsmode) {
-               image_stereo_set(fs->normal_imd, options->stereo.mode);
-       }
-
+       if (fs->same_region)
+               {
+               image_move_from_image(fs->normal_imd, fs->imd);
 #ifdef HIDE_WINDOW_IN_FULLSCREEN
-       gtk_widget_show(fs->normal_window);
+               gtk_widget_show(fs->normal_window);
 #endif
+               if (options->stereo.enable_fsmode)
+                       {
+                       image_stereo_set(fs->normal_imd, options->stereo.mode);
+                       }
+               }
+
+
        if (fs->stop_func) fs->stop_func(fs, fs->stop_data);
 
        gtk_widget_destroy(fs->window);
@@ -402,7 +414,11 @@ GList *fullscreen_prefs_list(void)
                        else
                                {
                                gdk_screen_get_monitor_geometry(screen, j, &rect);
-                               subname = g_strdup_printf("%s %d", _("Monitor"), j + 1);
+                               subname = gdk_screen_get_monitor_plug_name(screen, j);
+                               if (subname == NULL)
+                                       {
+                                       subname = g_strdup_printf("%s %d", _("Monitor"), j + 1);
+                                       }
                                }
 
                        sd = g_new0(ScreenData, 1);
@@ -510,13 +526,13 @@ void fullscreen_prefs_get_geometry(gint screen, GtkWidget *widget, gint *x, gint
                if (height) *height = sd->height;
 
                if (dest_screen) *dest_screen = screen;
-               if (same_region) *same_region = (!widget || !widget->window ||
+               if (same_region) *same_region = (!widget || !gtk_widget_get_window(widget) ||
                                        (screen == gtk_widget_get_screen(widget) &&
                                        (sd->number%100 == 0 ||
-                                        sd->number%100 == gdk_screen_get_monitor_at_window(screen, widget->window)+1)));
+                                        sd->number%100 == gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(widget))+1)));
 
                }
-       else if (screen != 1 || !widget || !widget->window)
+       else if (screen != 1 || !widget || !gtk_widget_get_window(widget))
                {
                GdkScreen *screen;
 
@@ -544,7 +560,7 @@ void fullscreen_prefs_get_geometry(gint screen, GtkWidget *widget, gint *x, gint
                GdkRectangle rect;
 
                screen = gtk_widget_get_screen(widget);
-               monitor = gdk_screen_get_monitor_at_window(screen, widget->window);
+               monitor = gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(widget));
 
                gdk_screen_get_monitor_geometry(screen, monitor, &rect);
 
@@ -566,10 +582,10 @@ gint fullscreen_prefs_find_screen_for_widget(GtkWidget *widget)
        gint monitor;
        gint n;
 
-       if (!widget || !widget->window) return 0;
+       if (!widget || !gtk_widget_get_window(widget)) return 0;
 
        screen = gtk_widget_get_screen(widget);
-       monitor = gdk_screen_get_monitor_at_window(screen, widget->window);
+       monitor = gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(widget));
 
        n = (gdk_screen_get_number(screen)+1) * 100 + monitor + 1;
 
index c0fd14c..f673850 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index b543726..c11b689 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  * based on a patch by Uwe Ohse
@@ -31,7 +31,7 @@ struct _HistMap {
        gulong g[HISTMAP_SIZE];
        gulong b[HISTMAP_SIZE];
        gulong max[HISTMAP_SIZE];
-       
+
        guint idle_id; /* event source id */
        GdkPixbuf *pixbuf;
        gint y;
@@ -104,7 +104,7 @@ gint histogram_toggle_mode(Histogram *histogram)
 const gchar *histogram_label(Histogram *histogram)
 {
        const gchar *t1 = "";
-       
+
        if (!histogram) return NULL;
 
        if (histogram->histogram_mode)
@@ -147,13 +147,13 @@ static gboolean histmap_read(HistMap *histmap, gboolean whole)
        gint w, h, i, j, srs, has_alpha, step, end_line;
        guchar *s_pix;
        GdkPixbuf *imgpixbuf = histmap->pixbuf;
-       
+
        w = gdk_pixbuf_get_width(imgpixbuf);
        h = gdk_pixbuf_get_height(imgpixbuf);
        srs = gdk_pixbuf_get_rowstride(imgpixbuf);
        s_pix = gdk_pixbuf_get_pixels(imgpixbuf);
        has_alpha = gdk_pixbuf_get_has_alpha(imgpixbuf);
-       
+
        if (whole)
                {
                end_line = h;
@@ -174,7 +174,7 @@ static gboolean histmap_read(HistMap *histmap, gboolean whole)
                        guint max = sp[0];
                        if (sp[1] > max) max = sp[1];
                        if (sp[2] > max) max = sp[2];
-               
+
                        histmap->r[sp[0]]++;
                        histmap->g[sp[1]]++;
                        histmap->b[sp[2]]++;
@@ -184,13 +184,13 @@ static gboolean histmap_read(HistMap *histmap, gboolean whole)
                        }
                }
        histmap->y = end_line;
-       return end_line >= h;   
+       return end_line >= h;
 }
 
 const HistMap *histmap_get(FileData *fd)
 {
        if (fd->histmap && !fd->histmap->idle_id) return fd->histmap; /* histmap exists and is finished */
-       
+
        return NULL;
 }
 
@@ -226,7 +226,7 @@ static void histogram_vgrid(Histogram *histogram, GdkPixbuf *pixbuf, gint x, gin
 {
        guint i;
        float add;
-       
+
        if (histogram->vgrid == 0) return;
 
        add = width / (float)histogram->vgrid;
@@ -247,7 +247,7 @@ static void histogram_hgrid(Histogram *histogram, GdkPixbuf *pixbuf, gint x, gin
 {
        guint i;
        float add;
-       
+
        if (histogram->hgrid == 0) return;
 
        add = height / (float)histogram->hgrid;
@@ -255,7 +255,7 @@ static void histogram_hgrid(Histogram *histogram, GdkPixbuf *pixbuf, gint x, gin
        for (i = 1; i < histogram->hgrid; i++)
                {
                gint ypos = y + (int)(i * add + 0.5);
-       
+
                pixbuf_draw_line(pixbuf, x, y, width, height, x, ypos, x + width, ypos,
                                 histogram->grid_color.R,
                                 histogram->grid_color.G,
@@ -272,9 +272,9 @@ gboolean histogram_draw(Histogram *histogram, const HistMap *histmap, GdkPixbuf
        gdouble logmax;
        gint combine = (HISTMAP_SIZE - 1) / width + 1;
        gint ypos = y + height;
-       
+
        if (!histogram || !histmap) return FALSE;
-       
+
        /* Draw the grid */
        histogram_vgrid(histogram, pixbuf, x, y, width, height);
        histogram_hgrid(histogram, pixbuf, x, y, width, height);
@@ -312,15 +312,15 @@ gboolean histogram_draw(Histogram *histogram, const HistMap *histmap, GdkPixbuf
                        v[2] += histmap->b[p];
                        v[3] += histmap->max[p];
                        }
-       
+
                for (j = 0; combine > 1 && j < 4; j++)
                        v[j] /= combine;
-               
+
                num_chan = (histogram->histogram_channel == HCHAN_RGB) ? 3 : 1;
                for (j = 0; j < num_chan; j++)
                        {
                        gint chanmax;
-                       if (histogram->histogram_channel == HCHAN_RGB) 
+                       if (histogram->histogram_channel == HCHAN_RGB)
                                {
                                chanmax = HCHAN_R;
                                if (v[HCHAN_G] > v[HCHAN_R]) chanmax = HCHAN_G;
@@ -330,7 +330,7 @@ gboolean histogram_draw(Histogram *histogram, const HistMap *histmap, GdkPixbuf
                                {
                                chanmax = histogram->histogram_channel;
                                }
-                       
+
                                {
                                gulong pt;
                                gint r = rplus;
@@ -357,7 +357,7 @@ gboolean histogram_draw(Histogram *histogram, const HistMap *histmap, GdkPixbuf
                                        case HCHAN_B:   r = 0;          g = 0;  break;
                                        case HCHAN_MAX: r = 0;  b = 0;  g = 0;  break;
                                        }
-                               
+
                                if (v[chanmax] == 0)
                                        pt = 0;
                                else if (histogram->histogram_mode)
index 6ee6bbe..bd13c82 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  * based on a patch by Uwe Ohse
index 9178b76..fb4c7ed 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: John Ellis, Vladimir Nadvornik, Laurent Monin
  *
index 8ae10a0..34ffc20 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis, Vladimir Nadvornik, Laurent Monin
  *
diff --git a/src/icons/.cvsignore b/src/icons/.cvsignore
deleted file mode 100644 (file)
index 3dda729..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
diff --git a/src/icons/svg/.cvsignore b/src/icons/svg/.cvsignore
deleted file mode 100644 (file)
index 3dda729..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
index aaec9f9..1af4285 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -52,7 +52,7 @@ static void image_loader_stop(ImageLoader *il);
 GType image_loader_get_type(void)
 {
        static GType type = 0;
-       if (type == 0) 
+       if (type == 0)
                {
                static const GTypeInfo info = {
                        sizeof(ImageLoaderClass),
@@ -185,12 +185,12 @@ static void image_loader_finalize(GObject *object)
                il->idle_done_id = 0;
                }
 
-       while (g_source_remove_by_user_data(il)) 
+       while (g_source_remove_by_user_data(il))
                {
                DEBUG_2("pending signals detected");
                }
-       
-       while (il->area_param_list) 
+
+       while (il->area_param_list)
                {
                DEBUG_1("pending area_ready signals detected");
                while (g_source_remove_by_user_data(il->area_param_list->data)) {}
@@ -198,14 +198,14 @@ static void image_loader_finalize(GObject *object)
                il->area_param_list = g_list_delete_link(il->area_param_list, il->area_param_list);
                }
 
-       while (il->area_param_delayed_list) 
+       while (il->area_param_delayed_list)
                {
                g_free(il->area_param_delayed_list->data);
                il->area_param_delayed_list = g_list_delete_link(il->area_param_delayed_list, il->area_param_delayed_list);
                }
 
        if (il->pixbuf) g_object_unref(il->pixbuf);
-       
+
        if (il->error) g_error_free(il->error);
 
        file_data_unref(il->fd);
@@ -229,9 +229,9 @@ ImageLoader *image_loader_new(FileData *fd)
        if (!fd) return NULL;
 
        il = (ImageLoader *) g_object_new(TYPE_IMAGE_LOADER, NULL);
-       
+
        il->fd = file_data_ref(fd);
-       
+
        return il;
 }
 
@@ -252,12 +252,18 @@ static gboolean image_loader_emit_area_ready_cb(gpointer data)
 {
        ImageLoaderAreaParam *par = data;
        ImageLoader *il = par->il;
-       g_signal_emit(il, signals[SIGNAL_AREA_READY], 0, par->x, par->y, par->w, par->h);
+       guint x, y, w, h;
        g_mutex_lock(il->data_mutex);
        il->area_param_list = g_list_remove(il->area_param_list, par);
+       x = par->x;
+       y = par->y;
+       w = par->w;
+       h = par->h;
        g_free(par);
        g_mutex_unlock(il->data_mutex);
-       
+
+       g_signal_emit(il, signals[SIGNAL_AREA_READY], 0, x, y, w, h);
+
        return FALSE;
 }
 
@@ -319,19 +325,63 @@ static void image_loader_emit_size(ImageLoader *il)
        g_idle_add_full(G_PRIORITY_HIGH, image_loader_emit_size_cb, il, NULL);
 }
 
-/* this function expects that il->data_mutex is locked by caller */
-static void image_loader_emit_area_ready(ImageLoader *il, guint x, guint y, guint w, guint h)
+static ImageLoaderAreaParam *image_loader_queue_area_ready(ImageLoader *il, GList **list, guint x, guint y, guint w, guint h)
 {
+       if (*list)
+               {
+               ImageLoaderAreaParam *prev_par = (*list)->data;
+               if (prev_par->x == x && prev_par->w == w &&
+                   prev_par->y + prev_par->h == y)
+                       {
+                       /* we can merge the notifications */
+                       prev_par->h += h;
+                       return NULL;
+                       }
+               if (prev_par->x == x && prev_par->w == w &&
+                   y + h == prev_par->y)
+                       {
+                       /* we can merge the notifications */
+                       prev_par->h += h;
+                       prev_par->y = y;
+                       return NULL;
+                       }
+               if (prev_par->y == y && prev_par->h == h &&
+                   prev_par->x + prev_par->w == x)
+                       {
+                       /* we can merge the notifications */
+                       prev_par->w += w;
+                       return NULL;
+                       }
+               if (prev_par->y == y && prev_par->h == h &&
+                   x + w == prev_par->x)
+                       {
+                       /* we can merge the notifications */
+                       prev_par->w += w;
+                       prev_par->x = x;
+                       return NULL;
+                       }
+               }
+
        ImageLoaderAreaParam *par = g_new0(ImageLoaderAreaParam, 1);
        par->il = il;
        par->x = x;
        par->y = y;
        par->w = w;
        par->h = h;
-       
-       il->area_param_list = g_list_prepend(il->area_param_list, par);
-       
-       g_idle_add_full(G_PRIORITY_HIGH, image_loader_emit_area_ready_cb, par, NULL);
+
+       *list = g_list_prepend(*list, par);
+       return par;
+}
+
+/* this function expects that il->data_mutex is locked by caller */
+static void image_loader_emit_area_ready(ImageLoader *il, guint x, guint y, guint w, guint h)
+{
+       ImageLoaderAreaParam *par = image_loader_queue_area_ready(il, &il->area_param_list, x, y, w, h);
+
+       if (par)
+               {
+               g_idle_add_full(G_PRIORITY_HIGH, image_loader_emit_area_ready_cb, par, NULL);
+               }
 }
 
 /**************************************************************************************/
@@ -340,14 +390,7 @@ static void image_loader_emit_area_ready(ImageLoader *il, guint x, guint y, guin
 /* this function expects that il->data_mutex is locked by caller */
 static void image_loader_queue_delayed_area_ready(ImageLoader *il, guint x, guint y, guint w, guint h)
 {
-       ImageLoaderAreaParam *par = g_new0(ImageLoaderAreaParam, 1);
-       par->il = il;
-       par->x = x;
-       par->y = y;
-       par->w = w;
-       par->h = h;
-       
-       il->area_param_delayed_list = g_list_prepend(il->area_param_delayed_list, par);
+       image_loader_queue_area_ready(il, &il->area_param_delayed_list, x, y, w, h);
 }
 
 
@@ -368,10 +411,10 @@ static gboolean image_loader_get_stopping(ImageLoader *il)
 static void image_loader_sync_pixbuf(ImageLoader *il)
 {
        GdkPixbuf *pb;
-       
+
        g_mutex_lock(il->data_mutex);
-       
-       if (!il->loader) 
+
+       if (!il->loader)
                {
                g_mutex_unlock(il->data_mutex);
                return;
@@ -418,7 +461,7 @@ static void image_loader_area_updated_cb(gpointer loader,
                image_loader_queue_delayed_area_ready(il, x, y, w, h);
        else
                image_loader_emit_area_ready(il, x, y, w, h);
-       
+
        if (il->stopping) il->backend.abort(il->loader);
 
        g_mutex_unlock(il->data_mutex);
@@ -430,9 +473,9 @@ static void image_loader_area_prepared_cb(gpointer loader, gpointer data)
        GdkPixbuf *pb;
        guchar *pix;
        size_t h, rs;
-       
-       /* a workaround for 
-          http://bugzilla.gnome.org/show_bug.cgi?id=547669 
+
+       /* a workaround for
+          http://bugzilla.gnome.org/show_bug.cgi?id=547669
           http://bugzilla.gnome.org/show_bug.cgi?id=589334
        */
        gchar *format = il->backend.get_format_name(loader);
@@ -442,15 +485,15 @@ static void image_loader_area_prepared_cb(gpointer loader, gpointer data)
                g_free(format);
                return;
                }
-       
+
        g_free(format);
 
        pb = il->backend.get_pixbuf(loader);
-       
+
        h = gdk_pixbuf_get_height(pb);
        rs = gdk_pixbuf_get_rowstride(pb);
        pix = gdk_pixbuf_get_pixels(pb);
-       
+
        memset(pix, 0, rs * h); /*this should be faster than pixbuf_fill */
 
 }
@@ -466,7 +509,7 @@ static void image_loader_size_cb(gpointer loader,
        g_mutex_lock(il->data_mutex);
        il->actual_width = width;
        il->actual_height = height;
-       if (il->requested_width < 1 || il->requested_height < 1) 
+       if (il->requested_width < 1 || il->requested_height < 1)
                {
                g_mutex_unlock(il->data_mutex);
                image_loader_emit_size(il);
@@ -619,14 +662,14 @@ static gboolean image_loader_continue(ImageLoader *il)
 static gboolean image_loader_begin(ImageLoader *il)
 {
        gssize b;
-       
+
        if (il->pixbuf) return FALSE;
 
        b = MIN(il->read_buffer_size, il->bytes_total - il->bytes_read);
        if (b < 1) return FALSE;
 
        image_loader_setup_loader(il);
-       
+
        g_assert(il->bytes_read == 0);
        if (il->backend.load) {
                b = il->bytes_total;
@@ -707,12 +750,12 @@ static gboolean image_loader_setup_source(ImageLoader *il)
                exif_free_fd(il->fd, exif);
                }
 
-       
+
        if (!il->mapped_file)
                {
                /* normal file */
                gint load_fd;
-       
+
                pathl = path_from_utf8(il->fd->path);
                load_fd = open(pathl, O_RDONLY | O_NONBLOCK);
                g_free(pathl);
@@ -727,7 +770,7 @@ static gboolean image_loader_setup_source(ImageLoader *il)
                        close(load_fd);
                        return FALSE;
                        }
-               
+
                il->mapped_file = mmap(0, il->bytes_total, PROT_READ|PROT_WRITE, MAP_PRIVATE, load_fd, 0);
                close(load_fd);
                if (il->mapped_file == MAP_FAILED)
@@ -737,14 +780,14 @@ static gboolean image_loader_setup_source(ImageLoader *il)
                        }
                il->preview = FALSE;
                }
-               
+
        return TRUE;
 }
 
 static void image_loader_stop_source(ImageLoader *il)
 {
        if (!il) return;
-       
+
        if (il->mapped_file)
                {
                if (il->preview)
@@ -768,7 +811,7 @@ static void image_loader_stop(ImageLoader *il)
                g_source_remove(il->idle_id);
                il->idle_id = 0;
                }
-               
+
        if (il->thread)
                {
                /* stop loader in the other thread */
@@ -780,7 +823,7 @@ static void image_loader_stop(ImageLoader *il)
 
        image_loader_stop_loader(il);
        image_loader_stop_source(il);
-       
+
 }
 
 void image_loader_delay_area_ready(ImageLoader *il, gboolean enable)
@@ -801,7 +844,7 @@ void image_loader_delay_area_ready(ImageLoader *il, gboolean enable)
                        {
                        ImageLoaderAreaParam *par = work->data;
                        work = work->next;
-                       
+
                        g_signal_emit(il, signals[SIGNAL_AREA_READY], 0, par->x, par->y, par->w, par->h);
                        g_free(par);
                        }
@@ -827,12 +870,12 @@ static gboolean image_loader_idle_cb(gpointer data)
                {
                ret = image_loader_continue(il);
                }
-       
+
        if (!ret)
                {
                image_loader_stop_source(il);
                }
-       
+
        return ret;
 }
 
@@ -840,13 +883,13 @@ static gboolean image_loader_idle_cb(gpointer data)
 static gboolean image_loader_start_idle(ImageLoader *il)
 {
        gboolean ret;
-       
+
        if (!il) return FALSE;
 
        if (!il->fd) return FALSE;
 
        if (!image_loader_setup_source(il)) return FALSE;
-       
+
        ret = image_loader_begin(il);
 
        if (ret && !il->done) il->idle_id = g_idle_add_full(il->idle_priority, image_loader_idle_cb, il, NULL);
@@ -882,7 +925,7 @@ static void image_loader_thread_leave_high(void)
 static void image_loader_thread_wait_high(void)
 {
        g_mutex_lock(image_loader_prio_mutex);
-       while (image_loader_prio_num) 
+       while (image_loader_prio_num)
                {
                g_cond_wait(image_loader_prio_cond, image_loader_prio_mutex);
                }
@@ -896,8 +939,8 @@ static void image_loader_thread_run(gpointer data, gpointer user_data)
        ImageLoader *il = data;
        gboolean cont;
        gboolean err;
-       
-       if (il->idle_priority > G_PRIORITY_DEFAULT_IDLE) 
+
+       if (il->idle_priority > G_PRIORITY_DEFAULT_IDLE)
                {
                /* low prio, wait untill high prio tasks finishes */
                image_loader_thread_wait_high();
@@ -907,24 +950,24 @@ static void image_loader_thread_run(gpointer data, gpointer user_data)
                /* high prio */
                image_loader_thread_enter_high();
                }
-       
+
        err = !image_loader_begin(il);
-       
+
        if (err)
                {
-               /* 
-               loader failed, we have to send signal 
+               /*
+               loader failed, we have to send signal
                (idle mode returns the image_loader_begin return value directly)
                (success is always reported indirectly from image_loader_begin)
                */
                image_loader_emit_error(il);
                }
-       
+
        cont = !err;
-       
+
        while (cont && !image_loader_get_is_done(il) && !image_loader_get_stopping(il))
                {
-               if (il->idle_priority > G_PRIORITY_DEFAULT_IDLE) 
+               if (il->idle_priority > G_PRIORITY_DEFAULT_IDLE)
                        {
                        /* low prio, wait untill high prio tasks finishes */
                        image_loader_thread_wait_high();
@@ -933,7 +976,7 @@ static void image_loader_thread_run(gpointer data, gpointer user_data)
                }
        image_loader_stop_loader(il);
 
-       if (il->idle_priority <= G_PRIORITY_DEFAULT_IDLE) 
+       if (il->idle_priority <= G_PRIORITY_DEFAULT_IDLE)
                {
                /* high prio */
                image_loader_thread_leave_high();
@@ -954,10 +997,10 @@ static gboolean image_loader_start_thread(ImageLoader *il)
        if (!il->fd) return FALSE;
 
        il->thread = TRUE;
-       
+
        if (!image_loader_setup_source(il)) return FALSE;
 
-        if (!image_loader_thread_pool) 
+        if (!image_loader_thread_pool)
                {
                image_loader_thread_pool = g_thread_pool_new(image_loader_thread_run, NULL, -1, FALSE, NULL);
                image_loader_prio_cond = g_cond_new();
@@ -968,7 +1011,7 @@ static gboolean image_loader_start_thread(ImageLoader *il)
 
        g_thread_pool_push(image_loader_thread_pool, il, NULL);
        DEBUG_1("Thread pool num threads: %d", g_thread_pool_get_num_threads(image_loader_thread_pool));
-               
+
        return TRUE;
 }
 #endif /* HAVE_GTHREAD */
@@ -997,7 +1040,7 @@ GdkPixbuf *image_loader_get_pixbuf(ImageLoader *il)
 {
        GdkPixbuf *ret;
        if (!il) return NULL;
-       
+
        g_mutex_lock(il->data_mutex);
        ret = il->pixbuf;
        g_mutex_unlock(il->data_mutex);
@@ -1053,9 +1096,9 @@ gdouble image_loader_get_percent(ImageLoader *il)
 {
        gdouble ret;
        if (!il) return 0.0;
-       
+
        g_mutex_lock(il->data_mutex);
-       if (il->bytes_total == 0) 
+       if (il->bytes_total == 0)
                {
                ret = 0.0;
                }
index c2e9f18..d9b6f7d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -53,7 +53,7 @@ typedef struct _ImageLoaderClass ImageLoaderClass;
 struct _ImageLoader
 {
        GObject parent;
-       
+
        /*< private >*/
        GdkPixbuf *pixbuf;
        FileData *fd;
@@ -83,9 +83,9 @@ struct _ImageLoader
        guint idle_done_id; /* event source id */
        GList *area_param_list;
        GList *area_param_delayed_list;
-       
+
        gboolean delay_area_ready;
-       
+
        GMutex *data_mutex;
        gboolean stopping;
        gboolean can_destroy;
@@ -99,7 +99,7 @@ struct _ImageLoader
 
 struct _ImageLoaderClass {
        GObjectClass parent;
-       
+
        /* class members */
        void (*area_ready)(ImageLoader *, guint x, guint y, guint w, guint h, gpointer);
        void (*error)(ImageLoader *, gpointer);
index 13e94f4..10d8284 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -45,7 +45,7 @@ struct _OverlayStateData {
        OsdShowFlags show;
 
        gint ovl_info;
-       
+
        gint x;
        gint y;
 
@@ -227,13 +227,13 @@ static gchar *keywords_to_string(FileData *fd)
                        {
                        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);
@@ -306,7 +306,7 @@ static gchar *image_osd_mkinfo(const gchar *str, ImageWindow *imd, GHashTable *v
 
                if (extrapos)
                        extra = g_strndup(extrapos, end - extrapos);
-                                       
+
                name = g_strndup(start+1, (trunc ? trunc : end)-start-1);
                pos = start - new->str;
                data = NULL;
@@ -336,14 +336,14 @@ static gchar *image_osd_mkinfo(const gchar *str, ImageWindow *imd, GHashTable *v
                        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 */
@@ -378,7 +378,7 @@ static gchar *image_osd_mkinfo(const gchar *str, ImageWindow *imd, GHashTable *v
                                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] == '\\')
@@ -489,9 +489,8 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
        PangoLayout *layout;
        const gchar *name;
        gchar *text;
-       GdkPixbuf *imgpixbuf = NULL;
        gboolean with_hist;
-       const HistMap *histmap;
+       const HistMap *histmap = NULL;
        ImageWindow *imd = osd->imd;
        FileData *fd = image_get_fd(imd);
 
@@ -550,20 +549,20 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
                                t = 1;
                                n = 1;
                                }
-       
+
                        if (n < 1) n = 1;
                        if (t < 1) t = 1;
-       
+
                        osd_template_insert(vars, "collection", NULL, OSDT_NONE);
                        }
-               
+
                osd_template_insert(vars, "number", g_strdup_printf("%d", n), OSDT_NO_DUP);
                osd_template_insert(vars, "total", g_strdup_printf("%d", t), OSDT_NO_DUP);
                osd_template_insert(vars, "name", (gchar *) name, OSDT_NONE);
                osd_template_insert(vars, "date", imd->image_fd ? ((gchar *) text_from_time(imd->image_fd->date)) : "", OSDT_NONE);
                osd_template_insert(vars, "size", imd->image_fd ? (text_from_size_abrev(imd->image_fd->size)) : g_strdup(""), OSDT_FREE);
                osd_template_insert(vars, "zoom", image_zoom_get_as_text(imd), OSDT_FREE);
-       
+
                if (!imd->unknown)
                        {
                        gint w, h;
@@ -575,15 +574,13 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
                                {
                                w = gdk_pixbuf_get_width(load_pixbuf);
                                h = gdk_pixbuf_get_height(load_pixbuf);
-                               imgpixbuf = load_pixbuf;
                                }
                        else
                                {
                                image_get_image_size(imd, &w, &h);
-                               imgpixbuf = (PIXBUF_RENDERER(imd->pr))->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);
@@ -607,14 +604,14 @@ static GdkPixbuf *image_osd_info_render(OverlayStateData *osd)
        if (with_hist)
                {
                histmap = histmap_get(imd->image_fd);
-               if (!histmap) 
+               if (!histmap)
                        {
                        histmap_start_idle(imd->image_fd);
                        with_hist = FALSE;
                        }
                }
-       
-       
+
+
        {
                gint active_marks = 0;
                gint mark;
@@ -777,13 +774,6 @@ static void image_overlay_set(ImageWindow *imd, gint id, GdkPixbuf *pixbuf, gint
        pixbuf_renderer_overlay_set((PixbufRenderer *)imd->pr, id, pixbuf, x, y);
 }
 
-#if 0 /* unused for now */
-static gint image_overlay_get(ImageWindow *imd, gint id, GdkPixbuf **pixbuf, gint *x, gint *y)
-{
-       return pixbuf_renderer_overlay_get((PixbufRenderer *)imd->pr, id, pixbuf, x, y);
-}
-#endif
-
 static void image_overlay_remove(ImageWindow *imd, gint id)
 {
        pixbuf_renderer_overlay_remove((PixbufRenderer *)imd->pr, id);
@@ -878,7 +868,7 @@ static gboolean image_osd_update_cb(gpointer data)
 
        if (osd->show & OSD_SHOW_INFO)
                {
-               /* redraw when the image was changed, 
+               /* redraw when the image was changed,
                   with histogram we have to redraw also when loading is finished */
                if (osd->changed_states & IMAGE_STATE_IMAGE ||
                    (osd->changed_states & IMAGE_STATE_LOADING && osd->show & OSD_SHOW_HISTOGRAM) ||
@@ -907,7 +897,7 @@ static gboolean image_osd_update_cb(gpointer data)
                {
                if (osd->changed_states & IMAGE_STATE_IMAGE)
                        image_osd_icons_reset_time(osd);
-       
+
                if (osd->changed_states & IMAGE_STATE_COLOR_ADJ)
                        {
                        osd->icon_time[IMAGE_OSD_COLOR] = IMAGE_OSD_DEFAULT_DURATION + 1;
@@ -1049,15 +1039,6 @@ static void image_osd_free(OverlayStateData *osd)
        g_free(osd);
 }
 
-#if 0
-static void image_osd_remove(ImageWindow *imd)
-{
-       OverlayStateData *osd = image_get_osd_data(imd);
-
-       if (osd) image_osd_free(osd);
-}
-#endif
-
 static void image_osd_destroy_cb(GtkWidget *widget, gpointer data)
 {
        OverlayStateData *osd = data;
@@ -1077,7 +1058,7 @@ static void image_osd_enable(ImageWindow *imd, OsdShowFlags show)
                osd->show = OSD_SHOW_NOTHING;
                osd->x = options->image_overlay.x;
                osd->y = options->image_overlay.y;
-               
+
                osd->histogram = histogram_new();
 
                osd->destroy_id = g_signal_connect(G_OBJECT(imd->pr), "destroy",
@@ -1122,13 +1103,13 @@ void image_osd_copy_status(ImageWindow *src, ImageWindow *dest)
 {
        Histogram *h_src, *h_dest;
        image_osd_set(dest, image_osd_get(src));
-       
+
        h_src = image_osd_get_histogram(src);
        h_dest = image_osd_get_histogram(dest);
-       
+
        h_dest->histogram_mode = h_src->histogram_mode;
        h_dest->histogram_channel = h_src->histogram_channel;
-       
+
 }
 
 /* duration:
index 72f8935..bfcb526 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 5c4355a..12fe8fe 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -220,7 +220,7 @@ static gboolean image_post_process_color(ImageWindow *imd, gint start_row, gbool
            imd->color_profile_input <  COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS)
                {
                const gchar *file = options->color_profile.input_file[imd->color_profile_input - COLOR_PROFILE_FILE];
-       
+
                if (!is_readable_file(file)) return FALSE;
 
                input_type = COLOR_PROFILE_FILE;
@@ -259,7 +259,7 @@ static gboolean image_post_process_color(ImageWindow *imd, gint start_row, gbool
        imd->color_profile_from_image = COLOR_PROFILE_NONE;
 
        exif = exif_read_fd(imd->image_fd);
-               
+
        if (exif)
                {
                profile = exif_get_color_profile(exif, &profile_len);
@@ -320,7 +320,7 @@ static gboolean image_post_process_color(ImageWindow *imd, gint start_row, gbool
 
                exif_free_fd(imd->image_fd, exif);
                }
-       
+
 
        if (profile)
                {
@@ -345,19 +345,16 @@ static gboolean image_post_process_color(ImageWindow *imd, gint start_row, gbool
                        }
 
                imd->cm = (gpointer)cm;
-#if 0
-               if (run_in_bg) color_man_start_bg(imd->cm, image_post_process_color_cb, imd);
-#endif
                }
 
        image_update_util(imd);
-       
+
        if (screen_profile)
                {
                g_free(screen_profile);
                screen_profile = NULL;
                }
-       
+
        return !!cm;
 }
 
@@ -512,7 +509,7 @@ static void image_read_ahead_start(ImageWindow *imd)
        DEBUG_1("%s read ahead started for :%s", get_exec_time(), imd->read_ahead_fd->path);
 
        imd->read_ahead_il = image_loader_new(imd->read_ahead_fd);
-       
+
        image_loader_delay_area_ready(imd->read_ahead_il, TRUE); /* we will need the area_ready signals later */
 
        g_signal_connect(G_OBJECT(imd->read_ahead_il), "error", (GCallback)image_read_ahead_error_cb, imd);
@@ -576,7 +573,7 @@ static gint image_cache_get(ImageWindow *imd)
                g_assert(imd->image_fd->pixbuf);
                image_change_pixbuf(imd, imd->image_fd->pixbuf, image_zoom_get(imd), FALSE);
                }
-       
+
 //     file_cache_dump(image_get_cache());
        return success;
 }
@@ -791,7 +788,7 @@ static gboolean image_load_begin(ImageWindow *imd, FileData *fd)
                {
                image_change_pixbuf(imd, image_loader_get_pixbuf(imd->il), image_zoom_get(imd), TRUE);
                }
-*/     
+*/
        return TRUE;
 }
 
@@ -835,7 +832,7 @@ static void image_change_complete(ImageWindow *imd, gdouble zoom)
                if (is_readable_file(imd->image_fd->path))
                        {
                        PixbufRenderer *pr;
-       
+
                        pr = PIXBUF_RENDERER(imd->pr);
                        pr->zoom = zoom;        /* store the zoom, needed by the loader */
 
@@ -848,7 +845,7 @@ static void image_change_complete(ImageWindow *imd, gdouble zoom)
                if (imd->unknown == TRUE)
                        {
                        GdkPixbuf *pixbuf;
-       
+
                        pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
                        image_change_pixbuf(imd, pixbuf, zoom, FALSE);
                        g_object_unref(pixbuf);
@@ -887,48 +884,10 @@ static void image_change_real(ImageWindow *imd, FileData *fd,
  *-------------------------------------------------------------------
  */
 
-static void image_focus_paint(ImageWindow *imd, gboolean has_focus, GdkRectangle *area)
-{
-       GtkWidget *widget;
-
-       widget = imd->widget;
-       if (!widget->window) return;
-
-       if (has_focus)
-               {
-               gtk_paint_focus(widget->style, widget->window, GTK_STATE_ACTIVE,
-                               area, widget, "image_window",
-                               widget->allocation.x, widget->allocation.y,
-                               widget->allocation.width - 1, widget->allocation.height - 1);
-               }
-       else
-               {
-               gtk_paint_shadow(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN,
-                                area, widget, "image_window",
-                                widget->allocation.x, widget->allocation.y,
-                                widget->allocation.width - 1, widget->allocation.height - 1);
-               }
-}
-
-static gboolean image_focus_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data)
-{
-       ImageWindow *imd = data;
-
-#if GTK_CHECK_VERSION(2,20,0)
-       image_focus_paint(imd, gtk_widget_has_focus(widget), &event->area);
-#else
-       image_focus_paint(imd, GTK_WIDGET_HAS_FOCUS(widget), &event->area);
-#endif
-       return TRUE;
-}
-
 static gboolean image_focus_in_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data)
 {
        ImageWindow *imd = data;
 
-       GTK_WIDGET_SET_FLAGS(imd->widget, GTK_HAS_FOCUS);
-       image_focus_paint(imd, TRUE, NULL);
-
        if (imd->func_focus_in)
                {
                imd->func_focus_in(imd, imd->data_focus_in);
@@ -937,16 +896,6 @@ static gboolean image_focus_in_cb(GtkWidget *widget, GdkEventFocus *event, gpoin
        return TRUE;
 }
 
-static gboolean image_focus_out_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data)
-{
-       ImageWindow *imd = data;
-
-       GTK_WIDGET_UNSET_FLAGS(imd->widget, GTK_HAS_FOCUS);
-       image_focus_paint(imd, FALSE, NULL);
-
-       return TRUE;
-}
-
 static gboolean image_scroll_cb(GtkWidget *widget, GdkEventScroll *event, gpointer data)
 {
        ImageWindow *imd = data;
@@ -1109,8 +1058,8 @@ void image_change_pixbuf(ImageWindow *imd, GdkPixbuf *pixbuf, gdouble zoom, gboo
        /* read_exif and similar functions can actually notice that the file has changed and trigger
           a notification that removes the pixbuf from cache and unrefs it. Therefore we must ref it
           here before it is taken over by the renderer. */
-       if (pixbuf) g_object_ref(pixbuf); 
-       
+       if (pixbuf) g_object_ref(pixbuf);
+
        if (imd->image_fd)
                {
                if (imd->image_fd->user_orientation)
@@ -1200,7 +1149,7 @@ static void image_loader_sync_read_ahead_data(ImageLoader *il, gpointer old_data
 }
 
 static void image_loader_sync_data(ImageLoader *il, gpointer old_data, gpointer data)
-{              
+{
        if (g_signal_handlers_disconnect_by_func(G_OBJECT(il), (GCallback)image_load_area_cb, old_data))
                g_signal_connect(G_OBJECT(il), "area_ready", (GCallback)image_load_area_cb, data);
 
@@ -1214,7 +1163,7 @@ static void image_loader_sync_data(ImageLoader *il, gpointer old_data, gpointer
 /* this is more like a move function
  * it moves most data from source to imd
  */
-void image_change_from_image(ImageWindow *imd, ImageWindow *source)
+void image_move_from_image(ImageWindow *imd, ImageWindow *source)
 {
        if (imd == source) return;
 
@@ -1240,6 +1189,47 @@ void image_change_from_image(ImageWindow *imd, ImageWindow *source)
                source->delay_alter_type = ALTER_NONE;
                }
 
+       imd->color_profile_enable = source->color_profile_enable;
+       imd->color_profile_input = source->color_profile_input;
+       imd->color_profile_use_image = source->color_profile_use_image;
+       color_man_free((ColorMan *)imd->cm);
+       imd->cm = NULL;
+
+       file_data_unref(imd->read_ahead_fd);
+       source->read_ahead_fd = NULL;
+
+       imd->orientation = source->orientation;
+       imd->desaturate = source->desaturate;
+
+       imd->user_stereo = source->user_stereo;
+
+       pixbuf_renderer_move(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr));
+
+       if (imd->cm || imd->desaturate)
+               pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, image_post_process_tile_color_cb, (gpointer) imd, (imd->cm != NULL) );
+       else
+               pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, NULL, NULL, TRUE);
+
+}
+
+/* this is  a copy function
+ * source stays unchanged
+ */
+void image_copy_from_image(ImageWindow *imd, ImageWindow *source)
+{
+       if (imd == source) return;
+
+       imd->unknown = source->unknown;
+
+       imd->collection = source->collection;
+       imd->collection_info = source->collection_info;
+
+       image_loader_free(imd->il);
+       imd->il = NULL;
+
+       image_set_fd(imd, image_get_fd(source));
+
+
        imd->color_profile_enable = source->color_profile_enable;
        imd->color_profile_input = source->color_profile_input;
        imd->color_profile_use_image = source->color_profile_use_image;
@@ -1275,7 +1265,7 @@ void image_change_from_image(ImageWindow *imd, ImageWindow *source)
 
        imd->user_stereo = source->user_stereo;
 
-       pixbuf_renderer_move(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr));
+       pixbuf_renderer_copy(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr));
 
        if (imd->cm || imd->desaturate)
                pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, image_post_process_tile_color_cb, (gpointer) imd, (imd->cm != NULL) );
@@ -1284,6 +1274,7 @@ void image_change_from_image(ImageWindow *imd, ImageWindow *source)
 
 }
 
+
 /* manipulation */
 
 void image_area_changed(ImageWindow *imd, gint x, gint y, gint width, gint height)
@@ -1444,7 +1435,7 @@ gint image_stereo_get(ImageWindow *imd)
 
 void image_stereo_set(ImageWindow *imd, gint stereo_mode)
 {
-       DEBUG_1("Setting stereo mode %04x for imd %p", stereo_mode, imd);  
+       DEBUG_1("Setting stereo mode %04x for imd %p", stereo_mode, imd);
        pixbuf_renderer_stereo_set((PixbufRenderer *)imd->pr, stereo_mode);
 }
 
@@ -1497,8 +1488,8 @@ static void image_notify_cb(FileData *fd, NotifyType type, gpointer data)
 
        if ((type & NOTIFY_REREAD) && fd == imd->image_fd)
                {
-               /* there is no need to reload on NOTIFY_CHANGE, 
-                  modified files should be detacted anyway and NOTIFY_REREAD should be recieved 
+               /* there is no need to reload on NOTIFY_CHANGE,
+                  modified files should be detacted anyway and NOTIFY_REREAD should be recieved
                   or they are removed from the filelist completely on "move" and "delete"
                */
                DEBUG_1("Notify image: %s %04x", fd->path, type);
@@ -1589,7 +1580,7 @@ gboolean image_color_profile_get_status(ImageWindow *imd, gchar **image_profile,
 {
        ColorMan *cm;
        if (!imd) return FALSE;
-       
+
        cm = imd->cm;
        if (!cm) return FALSE;
        return color_man_get_status(cm, image_profile, screen_profile);
@@ -1619,6 +1610,7 @@ void image_set_delay_flip(ImageWindow *imd, gboolean delay)
 
 void image_to_root_window(ImageWindow *imd, gboolean scaled)
 {
+#if !GTK_CHECK_VERSION(3,0,0)
        GdkScreen *screen;
        GdkWindow *rootwindow;
        GdkPixmap *pixmap;
@@ -1633,7 +1625,7 @@ void image_to_root_window(ImageWindow *imd, gboolean scaled)
 
        screen = gtk_widget_get_screen(imd->widget);
        rootwindow = gdk_screen_get_root_window(screen);
-       if (gdk_drawable_get_visual(rootwindow) != gdk_visual_get_system()) return;
+       if (gdk_window_get_visual(rootwindow) != gdk_visual_get_system()) return;
 
        if (scaled)
                {
@@ -1654,12 +1646,13 @@ void image_to_root_window(ImageWindow *imd, gboolean scaled)
        g_object_unref(pixmap);
 
        gdk_flush();
+#endif
 }
 
 void image_select(ImageWindow *imd, gboolean select)
 {
        if (!imd->has_frame) return;
-       
+
        if (select)
                {
                gtk_widget_set_state(imd->widget, GTK_STATE_SELECTED);
@@ -1672,7 +1665,7 @@ void image_select(ImageWindow *imd, gboolean select)
 void image_set_selectable(ImageWindow *imd, gboolean selectable)
 {
        if (!imd->has_frame) return;
-       
+
        gtk_frame_set_shadow_type(GTK_FRAME(imd->frame), GTK_SHADOW_NONE);
        gtk_container_set_border_width(GTK_CONTAINER(imd->frame), selectable ? 4 : 0);
 }
@@ -1701,7 +1694,6 @@ static void image_options_set(ImageWindow *imd)
        g_object_set(G_OBJECT(imd->pr), "zoom_quality", options->image.zoom_quality,
                                        "zoom_2pass", options->image.zoom_2pass,
                                        "zoom_expand", options->image.zoom_to_fit_allow_expand,
-                                       "dither_quality", options->image.dither_quality,
                                        "scroll_reset", options->image.scroll_reset_method,
                                        "cache_display", options->image.tile_cache_max,
                                        "window_fit", (imd->top_window_sync && options->image.fit_window_to_image),
@@ -1713,10 +1705,10 @@ static void image_options_set(ImageWindow *imd)
                                        NULL);
 
        pixbuf_renderer_set_parent((PixbufRenderer *)imd->pr, (GtkWindow *)imd->top_window);
-       
+
        image_stereo_set(imd, options->stereo.mode);
-       pixbuf_renderer_stereo_fixed_set((PixbufRenderer *)imd->pr, 
-                                       options->stereo.fixed_w, options->stereo.fixed_h, 
+       pixbuf_renderer_stereo_fixed_set((PixbufRenderer *)imd->pr,
+                                       options->stereo.fixed_w, options->stereo.fixed_h,
                                        options->stereo.fixed_x1, options->stereo.fixed_y1,
                                        options->stereo.fixed_x2, options->stereo.fixed_y2);
 }
@@ -1762,27 +1754,74 @@ static void image_free(ImageWindow *imd)
        g_free(imd);
 }
 
-static void image_destroy_cb(GtkObject *widget, gpointer data)
+static void image_destroy_cb(GtkWidget *widget, gpointer data)
 {
        ImageWindow *imd = data;
        image_free(imd);
 }
+#if GTK_CHECK_VERSION(3,0,0)
+gboolean selectable_frame_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
+{
+       GtkAllocation allocation;
+       gtk_widget_get_allocation(widget, &allocation);
+       gtk_paint_flat_box(gtk_widget_get_style(widget),
+                          cr,
+                          gtk_widget_get_state(widget),
+                          gtk_frame_get_shadow_type(GTK_FRAME(widget)),
+                          widget,
+                          NULL,
+                          allocation.x + 3, allocation.y + 3,
+                          allocation.width - 6, allocation.height - 6);
+
+       if (gtk_widget_has_focus(widget))
+               {
+               gtk_paint_focus(gtk_widget_get_style(widget), cr, GTK_STATE_ACTIVE,
+                               widget, "image_window",
+                               allocation.x, allocation.y,
+                               allocation.width - 1, allocation.height - 1);
+               }
+       else
+               {
+               gtk_paint_shadow(gtk_widget_get_style(widget), cr, GTK_STATE_NORMAL, GTK_SHADOW_IN,
+                                widget, "image_window",
+                                allocation.x, allocation.y,
+                                allocation.width - 1, allocation.height - 1);
+               }
+       return FALSE;
+}
 
+#else
 gboolean selectable_frame_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
 {
-       gtk_paint_flat_box(widget->style,
-                          widget->window,
-                          widget->state,
-                          (GTK_FRAME(widget))->shadow_type,
+       GtkAllocation allocation;
+       gtk_widget_get_allocation(widget, &allocation);
+       gtk_paint_flat_box(gtk_widget_get_style(widget),
+                          gtk_widget_get_window(widget),
+                          gtk_widget_get_state(widget),
+                          gtk_frame_get_shadow_type(GTK_FRAME(widget)),
                           NULL,
                           widget,
                           NULL,
-                          widget->allocation.x + 3, widget->allocation.y + 3,
-                          widget->allocation.width - 6, widget->allocation.height - 6);
-
+                          allocation.x + 3, allocation.y + 3,
+                          allocation.width - 6, allocation.height - 6);
 
+       if (gtk_widget_has_focus(widget))
+               {
+               gtk_paint_focus(gtk_widget_get_style(widget), gtk_widget_get_window(widget), GTK_STATE_ACTIVE,
+                               &event->area, widget, "image_window",
+                               allocation.x, allocation.y,
+                               allocation.width - 1, allocation.height - 1);
+               }
+       else
+               {
+               gtk_paint_shadow(gtk_widget_get_style(widget), gtk_widget_get_window(widget), GTK_STATE_NORMAL, GTK_SHADOW_IN,
+                                &event->area, widget, "image_window",
+                                allocation.x, allocation.y,
+                                allocation.width - 1, allocation.height - 1);
+               }
        return FALSE;
 }
+#endif
 
 
 void image_set_frame(ImageWindow *imd, gboolean frame)
@@ -1796,62 +1835,39 @@ void image_set_frame(ImageWindow *imd, gboolean frame)
        if (frame)
                {
                imd->frame = gtk_frame_new(NULL);
-#if GTK_CHECK_VERSION(2,12,0)
                g_object_ref(imd->pr);
-#else
-               gtk_widget_ref(imd->pr);
-#endif
                if (imd->has_frame != -1) gtk_container_remove(GTK_CONTAINER(imd->widget), imd->pr);
                gtk_container_add(GTK_CONTAINER(imd->frame), imd->pr);
 
-#if GTK_CHECK_VERSION(2,12,0)
                g_object_unref(imd->pr);
+               gtk_widget_set_can_focus(imd->frame, TRUE);
+               gtk_widget_set_app_paintable(imd->frame, TRUE);
+
+#if GTK_CHECK_VERSION(3,0,0)
+               g_signal_connect(G_OBJECT(imd->frame), "draw",
+                                G_CALLBACK(selectable_frame_draw_cb), NULL);
 #else
-               gtk_widget_unref(imd->pr);
-#endif
                g_signal_connect(G_OBJECT(imd->frame), "expose_event",
-                                G_CALLBACK(selectable_frame_expose_cb), NULL);
-
-               GTK_WIDGET_SET_FLAGS(imd->frame, GTK_CAN_FOCUS);
+                                G_CALLBACK(selectable_frame_expose_cb), NULL);
+#endif
                g_signal_connect(G_OBJECT(imd->frame), "focus_in_event",
                                 G_CALLBACK(image_focus_in_cb), imd);
-               g_signal_connect(G_OBJECT(imd->frame), "focus_out_event",
-                                G_CALLBACK(image_focus_out_cb), imd);
-
-               g_signal_connect_after(G_OBJECT(imd->frame), "expose_event",
-                                      G_CALLBACK(image_focus_expose), imd);
 
-#if GTK_CHECK_VERSION(2,14,0)
                gtk_box_pack_start(GTK_BOX(imd->widget), imd->frame, TRUE, TRUE, 0);
-#else
-               gtk_box_pack_start_defaults(GTK_BOX(imd->widget), imd->frame);
-#endif
                gtk_widget_show(imd->frame);
                }
        else
                {
-#if GTK_CHECK_VERSION(2,12,0)
                g_object_ref(imd->pr);
-#else
-               gtk_widget_ref(imd->pr);
-#endif
                if (imd->frame)
                        {
                        gtk_container_remove(GTK_CONTAINER(imd->frame), imd->pr);
                        gtk_widget_destroy(imd->frame);
                        imd->frame = NULL;
                        }
-#if GTK_CHECK_VERSION(2,14,0)
                gtk_box_pack_start(GTK_BOX(imd->widget), imd->pr, TRUE, TRUE, 0);
-#else
-               gtk_box_pack_start_defaults(GTK_BOX(imd->widget), imd->pr);
-#endif
 
-#if GTK_CHECK_VERSION(2,12,0)
                g_object_unref(imd->pr);
-#else
-               gtk_widget_unref(imd->pr);
-#endif
                }
 
        gtk_widget_show(imd->pr);
index 5c4837f..9f7c7c4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -63,7 +63,8 @@ void image_change_fd(ImageWindow *imd, FileData *fd, gdouble zoom);
 void image_change_pixbuf(ImageWindow *imd, GdkPixbuf *pixbuf, gdouble zoom, gboolean lazy);
 void image_change_from_collection(ImageWindow *imd, CollectionData *cd, CollectInfo *info, gdouble zoom);
 CollectionData *image_get_collection(ImageWindow *imd, CollectInfo **info);
-void image_change_from_image(ImageWindow *imd, ImageWindow *source);
+void image_copy_from_image(ImageWindow *imd, ImageWindow *source);
+void image_move_from_image(ImageWindow *imd, ImageWindow *source);
 
 gboolean image_get_image_size(ImageWindow *imd, gint *width, gint *height);
 GdkPixbuf *image_get_pixbuf(ImageWindow *imd);
index ec817d9..1b8a927 100644 (file)
@@ -27,7 +27,7 @@ static gchar** image_loader_gdk_get_format_mime_types(gpointer loader)
 static gpointer image_loader_gdk_new(ImageLoaderBackendCbAreaUpdated area_updated_cb, ImageLoaderBackendCbSize size_cb, ImageLoaderBackendCbAreaPrepared area_prepared_cb, gpointer data)
 {
         GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
-        
+
        g_signal_connect(G_OBJECT(loader), "area_updated", G_CALLBACK(area_updated_cb), data);
        g_signal_connect(G_OBJECT(loader), "size_prepared", G_CALLBACK(size_cb), data);
        g_signal_connect(G_OBJECT(loader), "area_prepared", G_CALLBACK(area_prepared_cb), data);
@@ -53,10 +53,10 @@ void image_loader_backend_set_default(ImageLoaderBackend *funcs)
        funcs->close = (ImageLoaderBackendFuncClose) gdk_pixbuf_loader_close;
        funcs->abort = image_loader_gdk_abort;
        funcs->free = image_loader_gdk_free;
-       
+
        funcs->get_format_name = image_loader_gdk_get_format_name;
        funcs->get_format_mime_types = image_loader_gdk_get_format_mime_types;
 }
 
 
-
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 7ae9f55..8a32d00 100644 (file)
@@ -17,3 +17,4 @@ void image_loader_backend_set_default(ImageLoaderBackend *funcs);
 
 #endif
 
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index b1a4098..4fbbd29 100644 (file)
@@ -14,7 +14,7 @@
  *
  * Copyright (C) 1999 Michael Zucchi
  * Copyright (C) 1999 The Free Software Foundation
- * 
+ *
  * Progressive loading code Copyright (C) 1999 Red Hat, Inc.
  *
  * Authors: Michael Zucchi <zucchi@zedzone.mmc.com.au>
@@ -55,16 +55,16 @@ struct _ImageLoaderJpeg {
        ImageLoaderBackendCbAreaUpdated area_updated_cb;
        ImageLoaderBackendCbSize size_cb;
        ImageLoaderBackendCbAreaPrepared area_prepared_cb;
-       
+
        gpointer data;
-       
+
        GdkPixbuf *pixbuf;
        guint requested_width;
        guint requested_height;
-       
+
        gboolean abort;
        gboolean stereo;
-       
+
 };
 
 /* error handler data */
@@ -77,7 +77,7 @@ struct error_handler_data {
 /* explode gray image data from jpeg library into rgb components in pixbuf */
 static void
 explode_gray_into_buf (struct jpeg_decompress_struct *cinfo,
-                      guchar **lines) 
+                      guchar **lines)
 {
        gint i, j;
        guint w;
@@ -92,7 +92,7 @@ explode_gray_into_buf (struct jpeg_decompress_struct *cinfo,
        w = cinfo->output_width;
        for (i = cinfo->rec_outbuf_height - 1; i >= 0; i--) {
                guchar *from, *to;
-               
+
                from = lines[i] + w - 1;
                to = lines[i] + (w - 1) * 3;
                for (j = w - 1; j >= 0; j--) {
@@ -108,7 +108,7 @@ explode_gray_into_buf (struct jpeg_decompress_struct *cinfo,
 
 static void
 convert_cmyk_to_rgb (struct jpeg_decompress_struct *cinfo,
-                    guchar **lines) 
+                    guchar **lines)
 {
        gint i, j;
 
@@ -118,7 +118,7 @@ convert_cmyk_to_rgb (struct jpeg_decompress_struct *cinfo,
 
        for (i = cinfo->rec_outbuf_height - 1; i >= 0; i--) {
                guchar *p;
-               
+
                p = lines[i];
                for (j = 0; j < cinfo->output_width; j++) {
                        int c, m, y, k;
@@ -146,7 +146,7 @@ convert_cmyk_to_rgb (struct jpeg_decompress_struct *cinfo,
 static gpointer image_loader_jpeg_new(ImageLoaderBackendCbAreaUpdated area_updated_cb, ImageLoaderBackendCbSize size_cb, ImageLoaderBackendCbAreaPrepared area_prepared_cb, gpointer data)
 {
         ImageLoaderJpeg *loader = g_new0(ImageLoaderJpeg, 1);
-        
+
        loader->area_updated_cb = area_updated_cb;
        loader->size_cb = size_cb;
        loader->area_prepared_cb = area_prepared_cb;
@@ -159,9 +159,9 @@ fatal_error_handler (j_common_ptr cinfo)
 {
        struct error_handler_data *errmgr;
         char buffer[JMSG_LENGTH_MAX];
-        
+
        errmgr = (struct error_handler_data *) cinfo->err;
-        
+
         /* Create the message */
         (* cinfo->err->format_message) (cinfo, buffer);
 
@@ -171,13 +171,13 @@ fatal_error_handler (j_common_ptr cinfo)
         if (errmgr->error && *errmgr->error == NULL) {
                 g_set_error (errmgr->error,
                              GDK_PIXBUF_ERROR,
-                             cinfo->err->msg_code == JERR_OUT_OF_MEMORY 
-                            ? GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY 
+                             cinfo->err->msg_code == JERR_OUT_OF_MEMORY
+                            ? GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY
                             : GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
                              _("Error interpreting JPEG image file (%s)"),
                              buffer);
         }
-        
+
        siglongjmp (errmgr->setjmp_buffer, 1);
 
         g_assert_not_reached ();
@@ -199,7 +199,7 @@ void image_loader_jpeg_read_scanline(struct jpeg_decompress_struct *cinfo, gucha
        gint i;
 
        lptr = lines;
-       for (i = 0; i < cinfo->rec_outbuf_height; i++) 
+       for (i = 0; i < cinfo->rec_outbuf_height; i++)
                {
                *lptr++ = *dptr;
                *dptr += rowstride;
@@ -207,7 +207,7 @@ void image_loader_jpeg_read_scanline(struct jpeg_decompress_struct *cinfo, gucha
 
        jpeg_read_scanlines (cinfo, lines, cinfo->rec_outbuf_height);
 
-       switch (cinfo->out_color_space) 
+       switch (cinfo->out_color_space)
                {
                    case JCS_GRAYSCALE:
                      explode_gray_into_buf (cinfo, lines);
@@ -238,7 +238,7 @@ static void skip_input_data (j_decompress_ptr cinfo, long num_bytes)
                {
                ERREXIT(cinfo, JERR_INPUT_EOF);
                }
-       else if (num_bytes > 0) 
+       else if (num_bytes > 0)
                {
                src->next_input_byte += (size_t) num_bytes;
                src->bytes_in_buffer -= (size_t) num_bytes;
@@ -249,7 +249,7 @@ static void set_mem_src (j_decompress_ptr cinfo, void* buffer, long nbytes)
 {
        struct jpeg_source_mgr* src;
 
-       if (cinfo->src == NULL) 
+       if (cinfo->src == NULL)
                {   /* first time for this JPEG object? */
                cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) (
                                        (j_common_ptr) cinfo, JPOOL_PERMANENT,
@@ -278,7 +278,7 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
        guint stereo_length = 0;
 
        struct error_handler_data jerr;
-       
+
        lj->stereo = FALSE;
 
        MPOData *mpo = jpeg_get_mpo_data(buf, count);
@@ -287,7 +287,7 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
                guint i;
                gint idx1 = -1, idx2 = -1;
                guint num2 = 1;
-               
+
                for (i = 0; i < mpo->num_images; i++)
                        {
                        if (mpo->images[i].type_code == 0x20002)
@@ -303,7 +303,7 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
                                        }
                                }
                        }
-                       
+
                if (idx1 >= 0 && idx2 >= 0)
                        {
                        lj->stereo = TRUE;
@@ -324,7 +324,7 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
         jerr.error = error;
 
 
-       if (setjmp(jerr.setjmp_buffer)) 
+       if (setjmp(jerr.setjmp_buffer))
                {
                /* If we get here, the JPEG code has signaled an error.
                 * We need to clean up the JPEG object, close the input file, and return.
@@ -333,22 +333,22 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
                if (lj->stereo) jpeg_destroy_decompress(&cinfo2);
                return FALSE;
                }
-       
+
        jpeg_create_decompress(&cinfo);
 
        set_mem_src(&cinfo, (unsigned char *)buf, count);
 
 
        jpeg_read_header(&cinfo, TRUE);
-       
+
        if (lj->stereo)
                {
                jpeg_create_decompress(&cinfo2);
                set_mem_src(&cinfo2, stereo_buf2, stereo_length);
                jpeg_read_header(&cinfo2, TRUE);
-               
+
                if (cinfo.image_width != cinfo2.image_width ||
-                   cinfo.image_height != cinfo2.image_height) 
+                   cinfo.image_height != cinfo2.image_height)
                        {
                        DEBUG_1("stereo data with different size");
                        jpeg_destroy_decompress(&cinfo2);
@@ -356,12 +356,12 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
                        }
                }
 
-                   
+
 
        lj->requested_width = lj->stereo ? cinfo.image_width * 2: cinfo.image_width;
        lj->requested_height = cinfo.image_height;
        lj->size_cb(loader, lj->requested_width, lj->requested_height, lj->data);
-                       
+
        cinfo.scale_num = 1;
        for (cinfo.scale_denom = 2; cinfo.scale_denom <= 8; cinfo.scale_denom *= 2) {
                jpeg_calc_output_dimensions(&cinfo);
@@ -378,29 +378,29 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
                jpeg_calc_output_dimensions(&cinfo2);
                jpeg_start_decompress(&cinfo2);
                }
-               
+
 
        jpeg_start_decompress(&cinfo);
-       
+
 
        if (lj->stereo)
                {
                if (cinfo.output_width != cinfo2.output_width ||
                    cinfo.output_height != cinfo2.output_height ||
-                   cinfo.out_color_components != cinfo2.out_color_components) 
+                   cinfo.out_color_components != cinfo2.out_color_components)
                        {
                        DEBUG_1("stereo data with different output size");
                        jpeg_destroy_decompress(&cinfo2);
                        lj->stereo = FALSE;
                        }
                }
-       
-       
-       lj->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, 
-                                    cinfo.out_color_components == 4 ? TRUE : FALSE, 
+
+
+       lj->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+                                    cinfo.out_color_components == 4 ? TRUE : FALSE,
                                     8, lj->stereo ? cinfo.output_width * 2: cinfo.output_width, cinfo.output_height);
 
-       if (!lj->pixbuf) 
+       if (!lj->pixbuf)
                {
                jpeg_destroy_decompress (&cinfo);
                if (lj->stereo) jpeg_destroy_decompress (&cinfo2);
@@ -412,9 +412,9 @@ static gboolean image_loader_jpeg_load (gpointer loader, const guchar *buf, gsiz
        rowstride = gdk_pixbuf_get_rowstride(lj->pixbuf);
        dptr = gdk_pixbuf_get_pixels(lj->pixbuf);
        dptr2 = gdk_pixbuf_get_pixels(lj->pixbuf) + ((cinfo.out_color_components == 4) ? 4 * cinfo.output_width : 3 * cinfo.output_width);
-       
 
-       while (cinfo.output_scanline < cinfo.output_height && !lj->abort) 
+
+       while (cinfo.output_scanline < cinfo.output_height && !lj->abort)
                {
                guint scanline = cinfo.output_scanline;
                image_loader_jpeg_read_scanline(&cinfo, &dptr, rowstride);
@@ -490,11 +490,14 @@ void image_loader_backend_set_jpeg(ImageLoaderBackend *funcs)
        funcs->close = image_loader_jpeg_close;
        funcs->abort = image_loader_jpeg_abort;
        funcs->free = image_loader_jpeg_free;
-       
+
        funcs->get_format_name = image_loader_jpeg_get_format_name;
        funcs->get_format_mime_types = image_loader_jpeg_get_format_mime_types;
 }
 
 
 
-#endif
\ No newline at end of file
+#endif
+
+
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index b8df45e..43acdc9 100644 (file)
@@ -19,3 +19,4 @@ void image_loader_backend_set_jpeg(ImageLoaderBackend *funcs);
 
 #endif
 
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index d32899c..07e6786 100644 (file)
@@ -50,13 +50,13 @@ struct _ImageLoaderTiff {
        ImageLoaderBackendCbAreaUpdated area_updated_cb;
        ImageLoaderBackendCbSize size_cb;
        ImageLoaderBackendCbAreaPrepared area_prepared_cb;
-       
+
        gpointer data;
 
        GdkPixbuf *pixbuf;
        guint requested_width;
        guint requested_height;
-       
+
        gboolean abort;
 
        const guchar *buffer;
@@ -72,72 +72,73 @@ static void free_buffer (guchar *pixels, gpointer data)
 static tsize_t
 tiff_load_read (thandle_t handle, tdata_t buf, tsize_t size)
 {
-        ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
-        
-        if (context->pos + size > context->used)
-                return 0;
-        
-        memcpy (buf, context->buffer + context->pos, size);
-        context->pos += size;
-        return size;
+       ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
+
+       if (context->pos + size > context->used)
+               return 0;
+
+       memcpy (buf, context->buffer + context->pos, size);
+       context->pos += size;
+       return size;
 }
 
 static tsize_t
 tiff_load_write (thandle_t handle, tdata_t buf, tsize_t size)
 {
-        return -1;
+       return -1;
 }
 
 static toff_t
 tiff_load_seek (thandle_t handle, toff_t offset, int whence)
 {
-        ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
-        
-        switch (whence) {
-        case SEEK_SET:
-                if (offset > context->used)
-                        return -1;
-                context->pos = offset;
-                break;
-        case SEEK_CUR:
-                if (offset + context->pos >= context->used)
-                        return -1;
-                context->pos += offset;
-                break;
-        case SEEK_END:
-                if (offset + context->used > context->used)
-                        return -1;
-                context->pos = context->used + offset;
-                break;
-        default:
-                return -1;
-        }
-        return context->pos;
+       ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
+
+       switch (whence)
+               {
+               case SEEK_SET:
+                       if (offset > context->used)
+                               return -1;
+                       context->pos = offset;
+                       break;
+               case SEEK_CUR:
+                       if (offset + context->pos >= context->used)
+                               return -1;
+                       context->pos += offset;
+                       break;
+               case SEEK_END:
+                       if (offset + context->used > context->used)
+                               return -1;
+                       context->pos = context->used + offset;
+                       break;
+               default:
+                       return -1;
+               }
+
+       return context->pos;
 }
 
 static int
 tiff_load_close (thandle_t context)
 {
-        return 0;
+       return 0;
 }
 
 static toff_t
 tiff_load_size (thandle_t handle)
 {
-        ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
-        
-        return context->used;
+       ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
+       return context->used;
 }
 
 static int
 tiff_load_map_file (thandle_t handle, tdata_t *buf, toff_t *size)
 {
-        ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
-        
-        *buf = (tdata_t *) context->buffer;
-        *size = context->used;
-        
-        return 0;
+       ImageLoaderTiff *context = (ImageLoaderTiff *)handle;
+
+       *buf = (tdata_t *) context->buffer;
+       *size = context->used;
+
+       return 0;
 }
 
 static void
@@ -149,11 +150,9 @@ static gboolean image_loader_tiff_load (gpointer loader, const guchar *buf, gsiz
 {
        ImageLoaderTiff *lt = (ImageLoaderTiff *) loader;
 
-        TIFF *tiff;
+       TIFF *tiff;
        guchar *pixels = NULL;
        gint width, height, rowstride, bytes;
-       uint16 orientation = 0;
-       uint16 transform = 0;
        uint32 rowsperstrip;
 
        lt->buffer = buf;
@@ -162,119 +161,91 @@ static gboolean image_loader_tiff_load (gpointer loader, const guchar *buf, gsiz
 
        TIFFSetWarningHandler(NULL);
 
-        tiff = TIFFClientOpen ("libtiff-geeqie", "r", lt, 
-                               tiff_load_read, tiff_load_write, 
-                               tiff_load_seek, tiff_load_close, 
-                               tiff_load_size, 
-                               tiff_load_map_file, tiff_load_unmap_file);
-        if (!tiff) 
-               {
-               DEBUG_1("Failed to open TIFF image");
-               return FALSE;
-               }
-
+       tiff = TIFFClientOpen ( "libtiff-geeqie", "r", lt,
+                                                       tiff_load_read, tiff_load_write,
+                                                       tiff_load_seek, tiff_load_close,
+                                                       tiff_load_size,
+                                                       tiff_load_map_file, tiff_load_unmap_file);
+       if (!tiff)
+               {
+               DEBUG_1("Failed to open TIFF image");
+               return FALSE;
+               }
 
 
-       if (!TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width)) {
+       if (!TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width))
+               {
                DEBUG_1("Could not get image width (bad TIFF file)");
                TIFFClose(tiff);
-                return FALSE;
-        }
-        
-        if (!TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height)) {
-               DEBUG_1("Could not get image height (bad TIFF file)");
+               return FALSE;
+               }
+
+       if (!TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height))
+               {
+               DEBUG_1("Could not get image height (bad TIFF file)");
                TIFFClose(tiff);
-                return FALSE;
-        }
+               return FALSE;
+               }
 
-        if (width <= 0 || height <= 0) {
-               DEBUG_1("Width or height of TIFF image is zero");
+       if (width <= 0 || height <= 0)
+               {
+               DEBUG_1("Width or height of TIFF image is zero");
                TIFFClose(tiff);
-                return FALSE;                
-        }
-        
-        rowstride = width * 4;
-        if (rowstride / 4 != width) { /* overflow */
-               DEBUG_1("Dimensions of TIFF image too large");
+               return FALSE;
+               }
+
+       rowstride = width * 4;
+       if (rowstride / 4 != width)
+               { /* overflow */
+               DEBUG_1("Dimensions of TIFF image too large");
                TIFFClose(tiff);
-                return FALSE;                
-        }
-        
-        bytes = height * rowstride;
-        if (bytes / rowstride != height) { /* overflow */
-               DEBUG_1("Dimensions of TIFF image too large");
+               return FALSE;
+               }
+
+       bytes = height * rowstride;
+       if (bytes / rowstride != height)
+               { /* overflow */
+               DEBUG_1("Dimensions of TIFF image too large");
                TIFFClose(tiff);
-                return FALSE;                
-        }
+               return FALSE;
+               }
 
        lt->requested_width = width;
        lt->requested_height = height;
        lt->size_cb(loader, lt->requested_width, lt->requested_height, lt->data);
 
-        pixels = g_try_malloc (bytes);
+       pixels = g_try_malloc (bytes);
 
-        if (!pixels) {
-               DEBUG_1("Insufficient memory to open TIFF file");
-               TIFFClose(tiff);
-                return FALSE;
-        }
-
-       lt->pixbuf = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, TRUE, 8, 
-                                           width, height, rowstride,
-                                           free_buffer, NULL);
-        if (!lt->pixbuf) {
-                g_free (pixels);
-                DEBUG_1("Insufficient memory to open TIFF file");
+       if (!pixels)
+               {
+               DEBUG_1("Insufficient memory to open TIFF file");
                TIFFClose(tiff);
-                return FALSE;
-        }
-
-       /* Set the "orientation" key associated with this image. libtiff 
-          orientation handling is odd, so further processing is required
-          by higher-level functions based on this tag. If the embedded
-          orientation tag is 1-4, libtiff flips/mirrors the image as
-          required, and no client processing is required - so we report 
-          no orientation. Orientations 5-8 require rotations which would 
-          swap the width and height of the image. libtiff does not do this. 
-          Instead it interprets orientations 5-8 the same as 1-4. 
-          See http://bugzilla.remotesensing.org/show_bug.cgi?id=1548.
-          To correct for this, the client must apply the transform normally
-          used for orientation 5 to both orientations 5 and 7, and apply
-          the transform normally used for orientation 7 for both
-          orientations 6 and 8. Then everythings works out OK! */
-       
-       TIFFGetField (tiff, TIFFTAG_ORIENTATION, &orientation);
-
-       switch (orientation) {
-               case 5:
-               case 7:
-                       transform = 5;
-                       break;
-               case 6:
-               case 8:
-                       transform = 7;
-                       break;
-               default:
-                       transform = 0;
-                       break;
-       }
+               return FALSE;
+               }
 
+       lt->pixbuf = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, TRUE, 8,
+                                                                                  width, height, rowstride,
+                                                                                  free_buffer, NULL);
+       if (!lt->pixbuf)
+               {
+               g_free (pixels);
+               DEBUG_1("Insufficient memory to open TIFF file");
+               TIFFClose(tiff);
+               return FALSE;
+               }
 
        lt->area_prepared_cb(loader, lt->data);
 
-
-
-       if( TIFFGetField(tiff, TIFFTAG_ROWSPERSTRIP, &rowsperstrip) ) 
+       if (TIFFGetField(tiff, TIFFTAG_ROWSPERSTRIP, &rowsperstrip))
                {
                /* read by strip */
                int row;
                guchar *wrk_line = (guchar *)g_malloc(width * sizeof (uint32));
 
-
-               for( row = 0; row < height; row += rowsperstrip )
+               for (row = 0; row < height; row += rowsperstrip)
                        {
                        int rows_to_write, i_row;
-                       
+
                        if (lt->abort) {
                                break;
                        }
@@ -287,28 +258,26 @@ static gboolean image_loader_tiff_load (gpointer loader, const guchar *buf, gsiz
                        /*
                         * Figure out the number of scanlines actually in this strip.
                        */
-                       if( row + (int)rowsperstrip > height )
+                       if (row + (int)rowsperstrip > height)
                                rows_to_write = height - row;
                        else
                                rows_to_write = rowsperstrip;
 
-
-
                        /*
                         * For some reason the TIFFReadRGBAStrip() function chooses the
                         * lower left corner as the origin.  Vertically mirror scanlines.
                         */
-                       for( i_row = 0; i_row < rows_to_write / 2; i_row++ )
+                       for (i_row = 0; i_row < rows_to_write / 2; i_row++)
                                {
                                guchar *top_line, *bottom_line;
 
                                top_line = pixels + (row + i_row) * rowstride;
-                               bottom_line = pixels + (row + rows_to_write - i_row - 1) * rowstride; 
+                               bottom_line = pixels + (row + rows_to_write - i_row - 1) * rowstride;
 
                                memcpy(wrk_line, top_line, 4*width);
                                memcpy(top_line, bottom_line, 4*width);
                                memcpy(bottom_line, wrk_line, 4*width);
-                       }
+                               }
                        lt->area_updated_cb(loader, 0, row, width, rows_to_write, lt->data);
                        }
                g_free(wrk_line);
@@ -316,28 +285,31 @@ static gboolean image_loader_tiff_load (gpointer loader, const guchar *buf, gsiz
        else
                {
                /* fallback, tiled tiff */
-               if (!TIFFReadRGBAImageOriented (tiff, width, height, (uint32 *)pixels, ORIENTATION_TOPLEFT, 1)) 
+               if (!TIFFReadRGBAImageOriented (tiff, width, height, (uint32 *)pixels, ORIENTATION_TOPLEFT, 1))
                        {
                        TIFFClose(tiff);
                        return FALSE;
                        }
 
 #if G_BYTE_ORDER == G_BIG_ENDIAN
-               /* Turns out that the packing used by TIFFRGBAImage depends on 
-                * the host byte order... 
-                */ 
-               while (pixels < pixbuf->pixels + bytes) 
+               /* Turns out that the packing used by TIFFRGBAImage depends on
+                * the host byte order...
+                */
+               {
+               guchar *ptr = pixels;
+               while (ptr < pixels + bytes)
                        {
-                       uint32 pixel = *(uint32 *)pixels;
+                       uint32 pixel = *(uint32 *)ptr;
                        int r = TIFFGetR(pixel);
                        int g = TIFFGetG(pixel);
                        int b = TIFFGetB(pixel);
                        int a = TIFFGetA(pixel);
-                       *pixels++ = r;
-                       *pixels++ = g;
-                       *pixels++ = b;
-                       *pixels++ = a;
+                       *ptr++ = r;
+                       *ptr++ = g;
+                       *ptr++ = b;
+                       *ptr++ = a;
                        }
+               }
 #endif
 
                lt->area_updated_cb(loader, 0, 0, width, height, lt->data);
@@ -350,8 +322,8 @@ static gboolean image_loader_tiff_load (gpointer loader, const guchar *buf, gsiz
 
 static gpointer image_loader_tiff_new(ImageLoaderBackendCbAreaUpdated area_updated_cb, ImageLoaderBackendCbSize size_cb, ImageLoaderBackendCbAreaPrepared area_prepared_cb, gpointer data)
 {
-        ImageLoaderTiff *loader = g_new0(ImageLoaderTiff, 1);
-        
+       ImageLoaderTiff *loader = g_new0(ImageLoaderTiff, 1);
+
        loader->area_updated_cb = area_updated_cb;
        loader->size_cb = size_cb;
        loader->area_prepared_cb = area_prepared_cb;
@@ -412,11 +384,12 @@ void image_loader_backend_set_tiff(ImageLoaderBackend *funcs)
        funcs->close = image_loader_tiff_close;
        funcs->abort = image_loader_tiff_abort;
        funcs->free = image_loader_tiff_free;
-       
+
        funcs->get_format_name = image_loader_tiff_get_format_name;
        funcs->get_format_mime_types = image_loader_tiff_get_format_mime_types;
 }
 
 
 
-#endif
\ No newline at end of file
+#endif
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 59898fc..e1e7e21 100644 (file)
@@ -19,3 +19,4 @@ void image_loader_backend_set_tiff(ImageLoaderBackend *funcs);
 
 #endif
 
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 06ec9c1..2577669 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -322,7 +322,7 @@ static void view_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *p
        ImageWindow *imd;
 
        imd = view_window_active_image(vw);
-       gdk_window_get_origin(imd->pr->window, x, y);
+       gdk_window_get_origin(gtk_widget_get_window(imd->pr), x, y);
        popup_menu_position_clamp(menu, x, y, 0);
 }
 
@@ -340,16 +340,16 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event,
        stop_signal = TRUE;
        switch (event->keyval)
                {
-               case GDK_Left: case GDK_KP_Left:
+               case GDK_KEY_Left: case GDK_KEY_KP_Left:
                        x -= 1;
                        break;
-               case GDK_Right: case GDK_KP_Right:
+               case GDK_KEY_Right: case GDK_KEY_KP_Right:
                        x += 1;
                        break;
-               case GDK_Up: case GDK_KP_Up:
+               case GDK_KEY_Up: case GDK_KEY_KP_Up:
                        y -= 1;
                        break;
-               case GDK_Down: case GDK_KP_Down:
+               case GDK_KEY_Down: case GDK_KEY_KP_Down:
                        y += 1;
                        break;
                default:
@@ -373,40 +373,19 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event,
 
        if (event->state & GDK_CONTROL_MASK)
                {
-               gint n = -1;
-
                stop_signal = TRUE;
                switch (event->keyval)
                        {
                        case '1':
-                               n = 0;
-                               break;
                        case '2':
-                               n = 1;
-                               break;
                        case '3':
-                               n = 2;
-                               break;
                        case '4':
-                               n = 3;
-                               break;
                        case '5':
-                               n = 4;
-                               break;
                        case '6':
-                               n = 5;
-                               break;
                        case '7':
-                               n = 6;
-                               break;
                        case '8':
-                               n = 7;
-                               break;
                        case '9':
-                               n = 8;
-                               break;
                        case '0':
-                               n = 9;
                                break;
                        case 'C': case 'c':
                                file_util_copy(image_get_fd(imd), NULL, NULL, imd->widget);
@@ -467,32 +446,32 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event,
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Page_Up: case GDK_KP_Page_Up:
-                       case GDK_BackSpace:
+                       case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
+                       case GDK_KEY_BackSpace:
                        case 'B': case 'b':
                                view_step_prev(vw);
                                break;
-                       case GDK_Page_Down: case GDK_KP_Page_Down:
-                       case GDK_space:
+                       case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
+                       case GDK_KEY_space:
                        case 'N': case 'n':
                                view_step_next(vw);
                                break;
-                       case GDK_Home: case GDK_KP_Home:
+                       case GDK_KEY_Home: case GDK_KEY_KP_Home:
                                view_step_to_end(vw, FALSE);
                                break;
-                       case GDK_End: case GDK_KP_End:
+                       case GDK_KEY_End: case GDK_KEY_KP_End:
                                view_step_to_end(vw, TRUE);
                                break;
-                       case '+': case '=': case GDK_KP_Add:
+                       case '+': case '=': case GDK_KEY_KP_Add:
                                image_zoom_adjust(imd, get_zoom_increment());
                                break;
-                       case '-': case GDK_KP_Subtract:
+                       case '-': case GDK_KEY_KP_Subtract:
                                image_zoom_adjust(imd, -get_zoom_increment());
                                break;
-                       case 'X': case 'x': case GDK_KP_Multiply:
+                       case 'X': case 'x': case GDK_KEY_KP_Multiply:
                                image_zoom_set(imd, 0.0);
                                break;
-                       case 'Z': case 'z': case GDK_KP_Divide: case '1':
+                       case 'Z': case 'z': case GDK_KEY_KP_Divide: case '1':
                                image_zoom_set(imd, 1.0);
                                break;
                        case '2':
@@ -537,7 +516,7 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event,
                                break;
                        case 'F': case 'f':
                        case 'V': case 'v':
-                       case GDK_F11:
+                       case GDK_KEY_F11:
                                view_fullscreen_toggle(vw, FALSE);
                                break;
                        case 'I': case 'i':
@@ -549,13 +528,13 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event,
                        case '[':
                                image_alter_orientation(imd, ALTER_ROTATE_90_CC);
                                break;
-                       case GDK_Delete: case GDK_KP_Delete:
+                       case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
                                if (options->file_ops.enable_delete_key)
                                        {
                                        file_util_delete(image_get_fd(imd), NULL, imd->widget);
                                        }
                                break;
-                       case GDK_Escape:
+                       case GDK_KEY_Escape:
                                if (vw->fs)
                                        {
                                        view_fullscreen_toggle(vw, TRUE);
@@ -565,8 +544,8 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event,
                                        view_window_close(vw);
                                        }
                                break;
-                       case GDK_Menu:
-                       case GDK_F10:
+                       case GDK_KEY_Menu:
+                       case GDK_KEY_F10:
                                menu = view_popup_menu(vw);
                                gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
                                               view_window_menu_pos_cb, vw, 0, GDK_CURRENT_TIME);
@@ -684,7 +663,7 @@ static void view_fullscreen_toggle(ViewWindow *vw, gboolean force_off)
                {
                if (image_osd_get(vw->imd) & OSD_SHOW_INFO)
                        image_osd_set(vw->imd, image_osd_get(vw->fs->imd));
-               
+
                fullscreen_stop(vw->fs);
                }
        else
@@ -710,7 +689,7 @@ static void view_overlay_toggle(ViewWindow *vw)
        ImageWindow *imd;
 
        imd = view_window_active_image(vw);
-       
+
        image_osd_toggle(imd);
 }
 
@@ -1000,7 +979,7 @@ void view_window_colors_update(void)
                {
                ViewWindow *vw = work->data;
                work = work->next;
-               
+
                image_background_set_color_from_options(vw->imd, !!vw->fs);
                }
 }
@@ -1246,7 +1225,7 @@ static void view_popup_menu_destroy_cb(GtkWidget *widget, gpointer data)
        GList *editmenu_fd_list = data;
 
        filelist_free(editmenu_fd_list);
-}              
+}
 
 static GList *view_window_get_fd_list(ViewWindow *vw)
 {
@@ -1258,7 +1237,7 @@ static GList *view_window_get_fd_list(ViewWindow *vw)
                FileData *fd = image_get_fd(imd);
                if (fd) list = g_list_append(NULL, file_data_ref(fd));
                }
-       
+
        return list;
 }
 
@@ -1487,7 +1466,7 @@ static void view_window_get_dnd_data(GtkWidget *widget, GdkDragContext *context,
                        {
                        GList *work;
 
-                       list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
+                       list = uri_filelist_from_gtk_selection_data(selection_data);
 
                        work = list;
                        while (work)
@@ -1510,7 +1489,7 @@ static void view_window_get_dnd_data(GtkWidget *widget, GdkDragContext *context,
                        }
                else
                        {
-                       source = collection_from_dnd_data((gchar *)selection_data->data, &list, &info_list);
+                       source = collection_from_dnd_data((gchar *)gtk_selection_data_get_data(selection_data), &list, &info_list);
                        }
 
                if (list)
@@ -1556,34 +1535,15 @@ static void view_window_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
 
        if (fd)
                {
-               gchar *text = NULL;
-               gint len;
-               gboolean plain_text;
                GList *list;
 
-               switch (info)
-                       {
-                       case TARGET_URI_LIST:
-                               plain_text = FALSE;
-                               break;
-                       case TARGET_TEXT_PLAIN:
-                       default:
-                               plain_text = TRUE;
-                               break;
-                       }
                list = g_list_append(NULL, fd);
-               text = uri_text_from_filelist(list, &len, plain_text);
+               uri_selection_data_set_uris_from_filelist(selection_data, list);
                g_list_free(list);
-               if (text)
-                       {
-                       gtk_selection_data_set(selection_data, selection_data->target,
-                                              8, (guchar *)text, len);
-                       g_free(text);
-                       }
                }
        else
                {
-               gtk_selection_data_set(selection_data, selection_data->target,
+               gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
                                       8, NULL, 0);
                }
 }
@@ -1700,7 +1660,7 @@ static void view_window_notify_cb(FileData *fd, NotifyType type, gpointer data)
        ViewWindow *vw = data;
 
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
-       
+
        DEBUG_1("Notify view_window: %s %04x", fd->path, type);
 
        switch (fd->change->type)
index f6670f8..56101df 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 990ec4b..b4a5051 100644 (file)
  * This software comes with no warranty of any kind, use at your own risk!
  */
 
-#include "main.h" 
+#include "main.h"
 #include "jpeg_parser.h"
 
-gboolean jpeg_segment_find(guchar *data, guint size,
+gboolean jpeg_segment_find(const guchar *data, guint size,
                            guchar app_marker, const gchar *magic, guint magic_len,
                            guint *seg_offset, guint *seg_length)
 {
@@ -64,7 +64,7 @@ typedef enum {
 
 
 
-guint16 tiff_byte_get_int16(guchar *f, TiffByteOrder bo)
+guint16 tiff_byte_get_int16(const guchar *f, TiffByteOrder bo)
 {
        guint16 align_buf;
 
@@ -76,7 +76,7 @@ guint16 tiff_byte_get_int16(guchar *f, TiffByteOrder bo)
                return GUINT16_FROM_BE(align_buf);
 }
 
-guint32 tiff_byte_get_int32(guchar *f, TiffByteOrder bo)
+guint32 tiff_byte_get_int32(const guchar *f, TiffByteOrder bo)
 {
        guint32 align_buf;
 
@@ -120,7 +120,7 @@ void tiff_byte_put_int32(guchar *f, guint32 n, TiffByteOrder bo)
        memcpy(f, &align_buf, sizeof(guint32));
 }
 
-gint tiff_directory_offset(guchar *data, const guint len,
+gint tiff_directory_offset(const guchar *data, const guint len,
                                guint *offset, TiffByteOrder *bo)
 {
        if (len < 8) return FALSE;
@@ -148,12 +148,12 @@ gint tiff_directory_offset(guchar *data, const guint len,
        return (*offset < len);
 }
 
-typedef gint (* FuncParseIFDEntry)(guchar *tiff, guint offset,
+typedef gint (* FuncParseIFDEntry)(const guchar *tiff, guint offset,
                                 guint size, TiffByteOrder bo,
                                 gpointer data);
 
 
-gint tiff_parse_IFD_table(guchar *tiff, guint offset,
+gint tiff_parse_IFD_table(const guchar *tiff, guint offset,
                          guint size, TiffByteOrder bo,
                          guint *next_offset,
                          FuncParseIFDEntry parse_entry, gpointer data)
@@ -175,14 +175,14 @@ gint tiff_parse_IFD_table(guchar *tiff, guint offset,
                {
                parse_entry(tiff, offset + i * TIFF_TIFD_SIZE, size, bo, data);
                }
-       
+
        next = tiff_byte_get_int32(tiff + offset + count * TIFF_TIFD_SIZE, bo);
        if (next_offset) *next_offset = next;
-       
+
        return 0;
 }
 
-static gint mpo_parse_Index_IFD_entry(guchar *tiff, guint offset,
+static gint mpo_parse_Index_IFD_entry(const guchar *tiff, guint offset,
                                 guint size, TiffByteOrder bo,
                                 gpointer data)
 {
@@ -201,16 +201,16 @@ static gint mpo_parse_Index_IFD_entry(guchar *tiff, guint offset,
        data_val = tiff_byte_get_int32(tiff + offset + TIFF_TIFD_OFFSET_DATA, bo);
        DEBUG_1("   tag %x format %x count %x data_val %x", tag, format, count, data_val);
 
-        if (tag == 0xb000)
-               {
-               mpo->version = data_val;
+       if (tag == 0xb000)
+               {
+               mpo->version = data_val;
                DEBUG_1("    mpo version %x", mpo->version);
-               }
-        else if (tag == 0xb001)
-               {
-               mpo->num_images = data_val;
+               }
+       else if (tag == 0xb001)
+               {
+               mpo->num_images = data_val;
                DEBUG_1("    num images %x", mpo->num_images);
-               }
+               }
        else if (tag == 0xb002)
                {
                guint i;
@@ -224,9 +224,9 @@ static gint mpo_parse_Index_IFD_entry(guchar *tiff, guint offset,
                        {
                        return -1;
                        }
-               
+
                mpo->images = g_new0(MPOEntry, mpo->num_images);
-                       
+
                for (i = 0; i < mpo->num_images; i++) {
                        guint image_attr = tiff_byte_get_int32(tiff + data_offset + i * 16, bo);
                        mpo->images[i].type_code = image_attr & 0xffffff;
@@ -237,16 +237,16 @@ static gint mpo_parse_Index_IFD_entry(guchar *tiff, guint offset,
                        mpo->images[i].offset = tiff_byte_get_int32(tiff + data_offset + i * 16 + 8, bo);
                        mpo->images[i].dep1 = tiff_byte_get_int16(tiff + data_offset + i * 16 + 12, bo);
                        mpo->images[i].dep2 = tiff_byte_get_int16(tiff + data_offset + i * 16 + 14, bo);
-                       
-                       if (i == 0) 
+
+                       if (i == 0)
                                {
                                mpo->images[i].offset = 0;
                                }
                        else
                                {
-                               mpo->images[i].offset += mpo->mpo_offset;
-                               }
-                               
+                               mpo->images[i].offset += mpo->mpo_offset;
+                               }
+
                        DEBUG_1("   image %x %x %x", image_attr, mpo->images[i].length, mpo->images[i].offset);
                        }
                }
@@ -254,7 +254,7 @@ static gint mpo_parse_Index_IFD_entry(guchar *tiff, guint offset,
        return 0;
 }
 
-static gint mpo_parse_Attributes_IFD_entry(guchar *tiff, guint offset,
+static gint mpo_parse_Attributes_IFD_entry(const guchar *tiff, guint offset,
                                 guint size, TiffByteOrder bo,
                                 gpointer data)
 {
@@ -262,8 +262,6 @@ static gint mpo_parse_Attributes_IFD_entry(guchar *tiff, guint offset,
        guint format;
        guint count;
        guint data_val;
-       guint data_offset;
-       guint data_length;
 
        MPOEntry *mpe = data;
 
@@ -273,19 +271,19 @@ static gint mpo_parse_Attributes_IFD_entry(guchar *tiff, guint offset,
        data_val = tiff_byte_get_int32(tiff + offset + TIFF_TIFD_OFFSET_DATA, bo);
        DEBUG_1("   tag %x format %x count %x data_val %x", tag, format, count, data_val);
 
-        switch (tag) 
-               {
-               case 0xb000: 
-                       mpe->MPFVersion = data_val;
+       switch (tag)
+               {
+               case 0xb000:
+                       mpe->MPFVersion = data_val;
                        DEBUG_1("    mpo version %x", data_val);
-                       break;
-               case 0xb101: 
-                       mpe->MPIndividualNum = data_val;
+                       break;
+               case 0xb101:
+                       mpe->MPIndividualNum = data_val;
                        DEBUG_1("    Individual Image Number %x", mpe->MPIndividualNum);
-                       break;
-               case 0xb201: 
-                       mpe->PanOrientation = data_val;
-                       break;
+                       break;
+               case 0xb201:
+                       mpe->PanOrientation = data_val;
+                       break;
 /*
 
 FIXME:
@@ -301,16 +299,16 @@ Vertical Axis Distance AxisDistance_Y 45577 B209 SRATIONAL 1
 Collimation Axis Distance AxisDistance_Z 45578 B20A SRATIONAL 1
 Yaw Angle YawAngle 45579 B20B SRATIONAL 1
 Pitch Angle PitchAngle 45580 B20C SRATIONAL 1
-Roll Angle RollAngle 45581 B20D 
-  */           
-               default: 
+Roll Angle RollAngle 45581 B20D
+  */
+               default:
                        break;
                }
 
        return 0;
 }
 
-MPOData *jpeg_get_mpo_data(guchar *data, guint size)
+MPOData *jpeg_get_mpo_data(const guchar *data, guint size)
 {
        guint seg_offset;
        guint seg_size;
@@ -322,19 +320,19 @@ MPOData *jpeg_get_mpo_data(guchar *data, guint size)
                MPOData *mpo;
                guint i;
 
-               DEBUG_1("mpo signature found at %x", seg_offset); 
+               DEBUG_1("mpo signature found at %x", seg_offset);
                seg_offset += 4;
                seg_size -= 4;
-               
+
                if (!tiff_directory_offset(data + seg_offset, seg_size, &offset, &bo)) return NULL;
 
                mpo = g_new0(MPOData, 1);
                mpo->mpo_offset = seg_offset;
-               
+
                tiff_parse_IFD_table(data + seg_offset,  offset , seg_size, bo, &next_offset, mpo_parse_Index_IFD_entry, (gpointer)mpo);
                if (!mpo->images) mpo->num_images = 0;
-               
-       
+
+
                for (i = 0; i < mpo->num_images; i++)
                        {
                        if (mpo->images[i].offset + mpo->images[i].length > size)
@@ -344,10 +342,10 @@ MPOData *jpeg_get_mpo_data(guchar *data, guint size)
                                break;
                                }
                        }
-               
+
                for (i = 0; i < mpo->num_images; i++)
                        {
-                       if (i == 0) 
+                       if (i == 0)
                                {
                                offset = next_offset;
                                }
@@ -358,10 +356,10 @@ MPOData *jpeg_get_mpo_data(guchar *data, guint size)
                                        DEBUG_1("MPO image %d: MPO signature not found", i);
                                        continue;
                                        }
-                               
+
                                seg_offset += 4;
                                seg_size -= 4;
-                               if (!tiff_directory_offset(data + mpo->images[i].offset + seg_offset, seg_size, &offset, &bo)) 
+                               if (!tiff_directory_offset(data + mpo->images[i].offset + seg_offset, seg_size, &offset, &bo))
                                        {
                                        DEBUG_1("MPO image %d: invalid directory offset", i);
                                        continue;
@@ -370,7 +368,7 @@ MPOData *jpeg_get_mpo_data(guchar *data, guint size)
                                }
                        tiff_parse_IFD_table(data + mpo->images[i].offset + seg_offset,  offset , seg_size, bo, NULL, mpo_parse_Attributes_IFD_entry, (gpointer)&mpo->images[i]);
                        }
-               
+
                return mpo;
                }
        return NULL;
@@ -383,4 +381,7 @@ void jpeg_mpo_data_free(MPOData *mpo)
                if (mpo->images) g_free(mpo->images);
                g_free(mpo);
                }
-}
\ No newline at end of file
+}
+
+
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index f7d0a6e..d96e8f8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik
  *
@@ -31,7 +31,7 @@
        NNN.: the data in this segment
  */
 
-gboolean jpeg_segment_find(guchar *data, guint size,
+gboolean jpeg_segment_find(const guchar *data, guint size,
                            guchar app_marker, const gchar *magic, guint magic_len,
                            guint *seg_offset, guint *seg_length);
 
@@ -50,11 +50,11 @@ struct _MPOEntry {
        guint dep2;
 
        guint MPFVersion;
-       guint MPIndividualNum;  
-       guint PanOrientation;   
-       double PanOverlap_H;    
-       double PanOverlap_V;    
-       guint BaseViewpointNum; 
+       guint MPIndividualNum;
+       guint PanOrientation;
+       double PanOverlap_H;
+       double PanOverlap_V;
+       guint BaseViewpointNum;
        double ConvergenceAngle;
        double BaselineLength;
        double VerticalDivergence;
@@ -76,7 +76,9 @@ struct _MPOData {
        MPOEntry *images;
 };
 
-MPOData* jpeg_get_mpo_data(guchar *data, guint size);
+MPOData* jpeg_get_mpo_data(const guchar *data, guint size);
 void jpeg_mpo_data_free(MPOData *mpo);
 
-#endif
\ No newline at end of file
+#endif
+
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 64d514f..649ee67 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -118,7 +118,7 @@ LayoutWindow *layout_find_by_layout_id(const gchar *id)
        GList *work;
 
        if (!id || !id[0]) return NULL;
-       
+
        if (strcmp(id, LAYOUT_ID_CURRENT) == 0)
                {
                if (current_lw) return current_lw;
@@ -144,16 +144,16 @@ static void layout_set_unique_id(LayoutWindow *lw)
        char id[10];
        gint i;
        if (lw->options.id && lw->options.id[0]) return; /* id is already set */
-       
+
        g_free(lw->options.id);
        lw->options.id = NULL;
-       
+
        if (!layout_find_by_layout_id("main"))
                {
                lw->options.id = g_strdup("main");
                return;
                }
-       
+
        i = 1;
        while (TRUE)
                {
@@ -203,7 +203,7 @@ static void layout_path_entry_tab_cb(const gchar *path, gpointer data)
 
        buf = g_strdup(path);
        parse_out_relatives(buf);
-       
+
        if (isdir(buf))
                {
                if ((!lw->dir_fd || strcmp(lw->dir_fd->path, buf) != 0) && layout_set_path(lw, buf))
@@ -225,7 +225,7 @@ static void layout_path_entry_tab_cb(const gchar *path, gpointer data)
                        }
                g_free(base);
                }
-               
+
        g_free(buf);
 }
 
@@ -284,7 +284,7 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw)
        gtk_box_pack_start(GTK_BOX(box), tabcomp, FALSE, FALSE, 0);
        gtk_widget_show(tabcomp);
 
-       g_signal_connect(G_OBJECT(lw->path_entry->parent), "changed",
+       g_signal_connect(G_OBJECT(gtk_widget_get_parent(lw->path_entry)), "changed",
                         G_CALLBACK(layout_path_entry_changed_cb), lw);
 
        lw->vd = vd_new(lw->options.dir_view_type, lw->dir_fd);
@@ -332,11 +332,7 @@ static void layout_sort_menu_ascend_cb(GtkWidget *widget, gpointer data)
 static void layout_sort_menu_hide_cb(GtkWidget *widget, gpointer data)
 {
        /* destroy the menu */
-#if GTK_CHECK_VERSION(2,12,0)
        g_object_unref(widget);
-#else
-       gtk_widget_unref(GTK_WIDGET(widget));
-#endif
 }
 
 static void layout_sort_button_press_cb(GtkWidget *widget, gpointer data)
@@ -417,9 +413,9 @@ void layout_status_update_info(LayoutWindow *lw, const gchar *text)
                {
                guint n;
                gint64 n_bytes = 0;
-       
+
                n = layout_list_count(lw, &n_bytes);
-               
+
                if (n)
                        {
                        guint s;
@@ -441,11 +437,11 @@ void layout_status_update_info(LayoutWindow *lw, const gchar *text)
                                {
                                ss = "";
                                }
-       
+
                        s = layout_selection_count(lw, &s_bytes);
-       
+
                        layout_bars_new_selection(lw, s);
-       
+
                        if (s > 0)
                                {
                                gchar *b = text_from_size_abrev(n_bytes);
@@ -464,9 +460,9 @@ void layout_status_update_info(LayoutWindow *lw, const gchar *text)
                                {
                                buf = g_strdup_printf(_("%d files%s"), n, ss);
                                }
-       
+
                        text = buf;
-       
+
                        image_osd_update(lw->image);
                        }
                else
@@ -474,7 +470,7 @@ void layout_status_update_info(LayoutWindow *lw, const gchar *text)
                        text = "";
                        }
        }
-       
+
        if (lw->info_status) gtk_label_set_text(GTK_LABEL(lw->info_status), text);
        g_free(buf);
 }
@@ -482,11 +478,12 @@ void layout_status_update_info(LayoutWindow *lw, const gchar *text)
 void layout_status_update_image(LayoutWindow *lw)
 {
        guint64 n;
-       
+
        if (!layout_valid(&lw) || !lw->image) return;
+       if (!lw->info_zoom || !lw->info_details) return; /*called from layout_style_set */
 
        n = layout_list_count(lw, NULL);
-       
+
        if (!n)
                {
                gtk_label_set_text(GTK_LABEL(lw->info_zoom), "");
@@ -517,16 +514,16 @@ void layout_status_update_image(LayoutWindow *lw)
                else
                        {
                        gint width, height;
-       
+
                        image_get_image_size(lw->image, &width, &height);
                        text = g_strdup_printf(_("( %d x %d ) %s bytes"),
                                               width, height, b);
                        }
 
                g_signal_emit_by_name (lw->image->pr, "update-pixel");
-               
+
                g_free(b);
-               
+
                gtk_label_set_text(GTK_LABEL(lw->info_details), text);
                g_free(text);
                }
@@ -614,7 +611,7 @@ static void layout_status_setup(LayoutWindow *lw, GtkWidget *box, gboolean small
                }
        lw->info_details = layout_status_label(NULL, hbox, TRUE, 0, TRUE);
        toolbar = layout_actions_toolbar(lw, TOOLBAR_STATUS);
-       
+
        toolbar_frame = gtk_frame_new(NULL);
        gtk_frame_set_shadow_type(GTK_FRAME(toolbar_frame), GTK_SHADOW_IN);
        gtk_container_add(GTK_CONTAINER(toolbar_frame), toolbar);
@@ -672,7 +669,7 @@ static GtkWidget *layout_list_new(LayoutWindow *lw)
        vf_set_thumb_status_func(lw->vf, layout_list_thumb_cb, lw);
 
        vf_marks_set(lw->vf, lw->options.show_marks);
-       
+
        layout_list_sync_thumb(lw);
 
        return lw->vf->widget;
@@ -686,9 +683,6 @@ static void layout_list_sync_marks(LayoutWindow *lw)
 static void layout_list_scroll_to_subpart(LayoutWindow *lw, const gchar *needle)
 {
        if (!lw) return;
-#if 0
-       if (lw->vf) vf_scroll_to_subpart(lw->vf, needle);
-#endif
 }
 
 GList *layout_list(LayoutWindow *lw)
@@ -850,7 +844,7 @@ gboolean layout_set_path(LayoutWindow *lw, const gchar *path)
        gboolean ret;
 
        if (!path) return FALSE;
-       
+
        fd = file_data_new_group(path);
        ret = layout_set_fd(lw, fd);
        file_data_unref(fd);
@@ -913,7 +907,7 @@ gboolean layout_set_fd(LayoutWindow *lw, FileData *fd)
        if (lw->path_entry) tab_completion_append_to_history(lw->path_entry, lw->dir_fd->path);
        layout_sync_path(lw);
        layout_list_sync_sort(lw);
-       
+
        if (have_file)
                {
                gint row;
@@ -1007,7 +1001,7 @@ void layout_sort_set(LayoutWindow *lw, SortType type, gboolean ascend)
        lw->sort_method = type;
        lw->sort_ascend = ascend;
 
-       if (lw->info_sort) gtk_label_set_text(GTK_LABEL(GTK_BIN(lw->info_sort)->child),
+       if (lw->info_sort) gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(lw->info_sort))),
                                              sort_type_get_text(type));
        layout_list_sync_sort(lw);
 }
@@ -1024,30 +1018,48 @@ gboolean layout_sort_get(LayoutWindow *lw, SortType *type, gboolean *ascend)
 
 gboolean layout_geometry_get(LayoutWindow *lw, gint *x, gint *y, gint *w, gint *h)
 {
+       GdkWindow *window;
        if (!layout_valid(&lw)) return FALSE;
 
-       gdk_window_get_root_origin(lw->window->window, x, y);
-       gdk_drawable_get_size(lw->window->window, w, h);
+       window = gtk_widget_get_window(lw->window);
+       gdk_window_get_root_origin(window, x, y);
+       *w = gdk_window_get_width(window);
+       *h = gdk_window_get_height(window);
 
        return TRUE;
 }
 
 gboolean layout_geometry_get_dividers(LayoutWindow *lw, gint *h, gint *v)
 {
+       GtkAllocation h_allocation;
+       GtkAllocation v_allocation;
+
        if (!layout_valid(&lw)) return FALSE;
 
-       if (lw->h_pane && GTK_PANED(lw->h_pane)->child1->allocation.x >= 0)
+       if (lw->h_pane)
+               {
+               GtkWidget *child = gtk_paned_get_child1(GTK_PANED(lw->h_pane));
+               gtk_widget_get_allocation(child, &h_allocation);
+               }
+
+       if (lw->v_pane)
+               {
+               GtkWidget *child = gtk_paned_get_child1(GTK_PANED(lw->v_pane));
+               gtk_widget_get_allocation(child, &v_allocation);
+               }
+
+       if (lw->h_pane && h_allocation.x >= 0)
                {
-               *h = GTK_PANED(lw->h_pane)->child1->allocation.width;
+               *h = h_allocation.width;
                }
        else if (h != &lw->options.main_window.hdivider_pos)
                {
                *h = lw->options.main_window.hdivider_pos;
                }
 
-       if (lw->v_pane && GTK_PANED(lw->v_pane)->child1->allocation.x >= 0)
+       if (lw->v_pane && v_allocation.x >= 0)
                {
-               *v = GTK_PANED(lw->v_pane)->child1->allocation.height;
+               *v = v_allocation.height;
                }
        else if (v != &lw->options.main_window.vdivider_pos)
                {
@@ -1141,13 +1153,11 @@ static void layout_location_compute(LayoutLocation l1, LayoutLocation l2,
 
 gboolean layout_geometry_get_tools(LayoutWindow *lw, gint *x, gint *y, gint *w, gint *h, gint *divider_pos)
 {
+       GdkWindow *window;
+       GtkAllocation allocation;
        if (!layout_valid(&lw)) return FALSE;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!lw->tools || !gtk_widget_get_visible(lw->tools))
-#else
-       if (!lw->tools || !GTK_WIDGET_VISIBLE(lw->tools))
-#endif
                {
                /* use the stored values (sort of breaks success return value) */
 
@@ -1156,16 +1166,19 @@ gboolean layout_geometry_get_tools(LayoutWindow *lw, gint *x, gint *y, gint *w,
                return FALSE;
                }
 
-       gdk_window_get_root_origin(lw->tools->window, x, y);
-       gdk_drawable_get_size(lw->tools->window, w, h);
+       window = gtk_widget_get_window(lw->window);
+       gdk_window_get_root_origin(window, x, y);
+       *w = gdk_window_get_width(window);
+       *h = gdk_window_get_height(window);
+       gtk_widget_get_allocation(gtk_paned_get_child1(GTK_PANED(lw->tools_pane)), &allocation);
 
        if (GTK_IS_VPANED(lw->tools_pane))
                {
-               *divider_pos = GTK_PANED(lw->tools_pane)->child1->allocation.height;
+               *divider_pos = allocation.height;
                }
        else
                {
-               *divider_pos = GTK_PANED(lw->tools_pane)->child1->allocation.width;
+               *divider_pos = allocation.width;
                }
 
        return TRUE;
@@ -1183,11 +1196,7 @@ static void layout_tools_hide(LayoutWindow *lw, gboolean hide)
 
        if (hide)
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_visible(lw->tools))
-#else
-               if (GTK_WIDGET_VISIBLE(lw->tools))
-#endif
                        {
                        layout_tools_geometry_sync(lw);
                        gtk_widget_hide(lw->tools);
@@ -1195,11 +1204,7 @@ static void layout_tools_hide(LayoutWindow *lw, gboolean hide)
                }
        else
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (!gtk_widget_get_visible(lw->tools))
-#else
-               if (!GTK_WIDGET_VISIBLE(lw->tools))
-#endif
                        {
                        gtk_widget_show(lw->tools);
                        if (lw->vf) vf_refresh(lw->vf);
@@ -1227,10 +1232,6 @@ static void layout_tools_setup(LayoutWindow *lw, GtkWidget *tools, GtkWidget *fi
 
        vertical = (layout_location_single(lw->image_location) && !layout_location_vertical(lw->image_location)) ||
                   (!layout_location_single(lw->image_location) && layout_location_vertical(layout_grid_compass(lw)));
-#if 0
-       layout_location_compute(lw->dir_location, lw->file_location,
-                               tools, files, &w1, &w2);
-#endif
        /* for now, tools/dir are always first in order */
        w1 = tools;
        w2 = files;
@@ -1271,7 +1272,7 @@ static void layout_tools_setup(LayoutWindow *lw, GtkWidget *tools, GtkWidget *fi
                {
                layout_tools_geometry_sync(lw);
                /* dump the contents */
-               gtk_widget_destroy(GTK_BIN(lw->tools)->child);
+               gtk_widget_destroy(gtk_bin_get_child(GTK_BIN(lw->tools)));
                }
 
        layout_actions_add_window(lw, lw->tools);
@@ -1400,8 +1401,8 @@ void layout_split_change(LayoutWindow *lw, ImageSplitMode mode)
                if (lw->split_images[i])
                        {
                        gtk_widget_hide(lw->split_images[i]->widget);
-                       if (lw->split_images[i]->widget->parent != lw->utility_paned)
-                               gtk_container_remove(GTK_CONTAINER(lw->split_images[i]->widget->parent), lw->split_images[i]->widget);
+                       if (gtk_widget_get_parent(lw->split_images[i]->widget) != lw->utility_paned)
+                               gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->split_images[i]->widget)), lw->split_images[i]->widget);
                        }
                }
        gtk_container_remove(GTK_CONTAINER(lw->utility_paned), lw->split_image_widget);
@@ -1443,7 +1444,7 @@ static void layout_grid_setup(LayoutWindow *lw)
                image = layout_image_setup_split(lw, lw->split_mode);
                image_sb = layout_bars_prepare(lw, image);
                }
-       
+
        tools = layout_tools_new(lw);
        files = layout_list_new(lw);
 
@@ -1549,7 +1550,7 @@ void layout_style_set(LayoutWindow *lw, gint style, const gchar *order)
 
        /* remember state */
 
-       /* layout_image_slideshow_stop(lw); slideshow should survive */ 
+       /* layout_image_slideshow_stop(lw); slideshow should survive */
        layout_image_full_screen_stop(lw);
 
        dir_fd = lw->dir_fd;
@@ -1560,10 +1561,10 @@ void layout_style_set(LayoutWindow *lw, gint style, const gchar *order)
 
        /* preserve utility_box (image + sidebars), menu_bar and toolbars to be reused later in layout_grid_setup */
        /* lw->image is preserved together with lw->utility_box */
-       if (lw->utility_box) gtk_container_remove(GTK_CONTAINER(lw->utility_box->parent), lw->utility_box);
-       if (lw->menu_bar) gtk_container_remove(GTK_CONTAINER(lw->menu_bar->parent), lw->menu_bar);
+       if (lw->utility_box) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->utility_box)), lw->utility_box);
+       if (lw->menu_bar) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->menu_bar)), lw->menu_bar);
        for (i = 0; i < TOOLBAR_COUNT; i++)
-               if (lw->toolbar[i]) gtk_container_remove(GTK_CONTAINER(lw->toolbar[i]->parent), lw->toolbar[i]);
+               if (lw->toolbar[i]) gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(lw->toolbar[i])), lw->toolbar[i]);
 
        /* clear it all */
 
@@ -1633,7 +1634,7 @@ void layout_colors_update(void)
                gint i;
                LayoutWindow *lw = work->data;
                work = work->next;
-               
+
                if (!lw->image) continue;
 
                for (i = 0; i < MAX_SPLIT_IMAGES; i++)
@@ -1641,7 +1642,7 @@ void layout_colors_update(void)
                        if (!lw->split_images[i]) continue;
                        image_background_set_color_from_options(lw->split_images[i], !!lw->full_screen);
                        }
-               
+
                image_background_set_color_from_options(lw->image, !!lw->full_screen);
                }
 }
@@ -1725,26 +1726,18 @@ void layout_toolbar_toggle(LayoutWindow *lw)
 
        if (lw->options.toolbar_hidden)
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_visible(lw->toolbar[TOOLBAR_MAIN])) gtk_widget_hide(lw->toolbar[TOOLBAR_MAIN]);
-#else
-               if (GTK_WIDGET_VISIBLE(lw->toolbar[TOOLBAR_MAIN])) gtk_widget_hide(lw->toolbar[TOOLBAR_MAIN]);
-#endif
                }
        else
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (!gtk_widget_get_visible(lw->toolbar[TOOLBAR_MAIN])) gtk_widget_show(lw->toolbar[TOOLBAR_MAIN]);
-#else
-               if (!GTK_WIDGET_VISIBLE(lw->toolbar[TOOLBAR_MAIN])) gtk_widget_show(lw->toolbar[TOOLBAR_MAIN]);
-#endif
                }
 }
 
 void layout_info_pixel_set(LayoutWindow *lw, gboolean show)
 {
        GtkWidget *frame;
-       
+
        if (!layout_valid(&lw)) return;
        if (!lw->info_pixel) return;
 
@@ -1759,7 +1752,7 @@ void layout_info_pixel_set(LayoutWindow *lw, gboolean show)
                {
                gtk_widget_show(frame);
                }
-       
+
        g_signal_emit_by_name (lw->image->pr, "update-pixel");
 }
 
@@ -1780,7 +1773,7 @@ struct _LayoutConfig
        GtkWidget *configwindow;
        GtkWidget *home_path_entry;
        GtkWidget *layout_widget;
-       
+
        LayoutOptions options;
 };
 
@@ -1789,7 +1782,7 @@ static gint layout_config_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer d
 static void layout_config_close_cb(GtkWidget *widget, gpointer data)
 {
        LayoutConfig *lc = data;
-       
+
        gtk_widget_destroy(lc->configwindow);
        free_layout_options_content(&lc->options);
        g_free(lc);
@@ -1804,7 +1797,7 @@ static gint layout_config_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer d
 static void layout_config_apply_cb(GtkWidget *widget, gpointer data)
 {
        LayoutConfig *lc = data;
-       
+
        g_free(lc->options.order);
        lc->options.order = layout_config_get(lc->layout_widget, &lc->options.style);
 
@@ -1893,7 +1886,7 @@ void layout_show_config_window(LayoutWindow *lw)
        button = pref_button_new(NULL, GTK_STOCK_OK, NULL, FALSE,
                                 G_CALLBACK(layout_config_ok_cb), lc);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_grab_default(button);
        gtk_widget_show(button);
 
@@ -1904,17 +1897,17 @@ void layout_show_config_window(LayoutWindow *lw)
        gtk_container_add(GTK_CONTAINER(hbox), button);
        GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
        gtk_widget_show(button);
-*/     
+*/
        button = pref_button_new(NULL, GTK_STOCK_APPLY, NULL, FALSE,
                                 G_CALLBACK(layout_config_apply_cb), lc);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        button = pref_button_new(NULL, GTK_STOCK_CANCEL, NULL, FALSE,
                                 G_CALLBACK(layout_config_close_cb), lc);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        if (!generic_dialog_get_alternative_button_order(lc->configwindow))
@@ -1923,7 +1916,7 @@ void layout_show_config_window(LayoutWindow *lw)
                }
 
        frame = pref_frame_new(win_vbox, TRUE, NULL, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);
-       
+
        vbox = gtk_vbox_new(FALSE, PREF_PAD_SPACE);
        gtk_container_add(GTK_CONTAINER(frame), vbox);
        gtk_widget_show(vbox);
@@ -1997,7 +1990,7 @@ void layout_sync_options_with_current_state(LayoutWindow *lw)
 
        lw->options.image_overlay.state = image_osd_get(lw->image);
        histogram = image_osd_get_histogram(lw->image);
-       
+
        lw->options.image_overlay.histogram_channel = histogram->histogram_channel;
        lw->options.image_overlay.histogram_mode = histogram->histogram_mode;
 
@@ -2044,7 +2037,7 @@ void layout_free(LayoutWindow *lw)
        if (current_lw == lw) current_lw = NULL;
 
        if (lw->exif_window) g_signal_handlers_disconnect_matched(G_OBJECT(lw->exif_window), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, lw);
-               
+
        layout_bars_close(lw);
 
        g_object_unref(lw->menu_bar);
@@ -2055,9 +2048,9 @@ void layout_free(LayoutWindow *lw)
                if (lw->toolbar[i]) g_object_unref(lw->toolbar[i]);
                string_list_free(lw->toolbar_actions[i]);
                }
-       
+
        gtk_widget_destroy(lw->window);
-       
+
        if (lw->split_image_sizegroup) g_object_unref(lw->split_image_sizegroup);
 
        file_data_unregister_notify_func(layout_image_notify_cb, lw);
@@ -2193,7 +2186,7 @@ LayoutWindow *layout_new_with_geometry(FileData *dir_fd, LayoutOptions *lop,
                GdkPixbuf *pixbuf;
 
                pixbuf = pixbuf_inline(PIXBUF_INLINE_LOGO);
-               
+
                /* FIXME: the zoom value set here is the value, which is then copied again and again
                   in "Leave Zoom at previous setting" mode. This is not ideal.  */
                image_change_pixbuf(lw->image, pixbuf, 0.0, FALSE);
@@ -2213,7 +2206,7 @@ LayoutWindow *layout_new_with_geometry(FileData *dir_fd, LayoutOptions *lop,
 
        image_osd_set(lw->image, lw->options.image_overlay.state);
        histogram = image_osd_get_histogram(lw->image);
-       
+
        histogram->histogram_channel = lw->options.image_overlay.histogram_channel;
        histogram->histogram_mode = lw->options.image_overlay.histogram_mode;
 
@@ -2285,7 +2278,7 @@ void layout_write_config(LayoutWindow *lw, GString *outstr, gint indent)
 
        bar_sort_write_config(lw->bar_sort, outstr, indent + 1);
        bar_write_config(lw->bar, outstr, indent + 1);
-       
+
        layout_toolbar_write_config(lw, TOOLBAR_MAIN, outstr, indent + 1);
        layout_toolbar_write_config(lw, TOOLBAR_STATUS, outstr, indent + 1);
 
@@ -2295,7 +2288,7 @@ void layout_write_config(LayoutWindow *lw, GString *outstr, gint indent)
 void layout_load_attributes(LayoutOptions *layout, const gchar **attribute_names, const gchar **attribute_values)
 {
        gchar *id = NULL;
-       
+
        while (*attribute_names)
                {
                const gchar *option = *attribute_names++;
@@ -2306,7 +2299,7 @@ void layout_load_attributes(LayoutOptions *layout, const gchar **attribute_names
 
                if (READ_INT(*layout, style)) continue;
                if (READ_CHAR(*layout, order)) continue;
-               
+
                if (READ_UINT(*layout, dir_view_type)) continue;
                if (READ_UINT(*layout, file_view_type)) continue;
                if (READ_BOOL(*layout, show_marks)) continue;
@@ -2332,7 +2325,7 @@ void layout_load_attributes(LayoutOptions *layout, const gchar **attribute_names
                if (READ_INT(*layout, float_window.w)) continue;
                if (READ_INT(*layout, float_window.h)) continue;
                if (READ_INT(*layout, float_window.vdivider_pos)) continue;
-       
+
                if (READ_INT(*layout, properties_window.w)) continue;
                if (READ_INT(*layout, properties_window.h)) continue;
 
@@ -2372,7 +2365,7 @@ static void layout_config_startup_path(LayoutOptions *lop, gchar **path)
                        *path = get_current_dir();
                        break;
                }
-}      
+}
 
 
 static void layout_config_commandline(LayoutOptions *lop, gchar **path)
@@ -2390,7 +2383,7 @@ static void layout_config_commandline(LayoutOptions *lop, gchar **path)
                *path = g_strdup(command_line->path);
                }
        else layout_config_startup_path(lop, path);
-       
+
        if (command_line->tools_show)
                {
                lop->tools_float = FALSE;
@@ -2407,16 +2400,16 @@ LayoutWindow *layout_new_from_config(const gchar **attribute_names, const gchar
        LayoutOptions lop;
        LayoutWindow *lw;
        gchar *path = NULL;
-       
+
        init_layout_options(&lop);
 
        if (attribute_names) layout_load_attributes(&lop, attribute_names, attribute_values);
-       
+
        if (use_commandline)
                {
                layout_config_commandline(&lop, &path);
                }
-       else 
+       else
                {
                layout_config_startup_path(&lop, &path);
                }
@@ -2437,13 +2430,13 @@ LayoutWindow *layout_new_from_config(const gchar **attribute_names, const gchar
 void layout_update_from_config(LayoutWindow *lw, const gchar **attribute_names, const gchar **attribute_values)
 {
        LayoutOptions lop;
-       
+
        init_layout_options(&lop);
 
        if (attribute_names) layout_load_attributes(&lop, attribute_names, attribute_values);
 
        layout_apply_options(lw, &lop);
-               
+
        free_layout_options_content(&lop);
 }
 
index ffaadd1..e5c804f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index d782e7e..718bf37 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -222,7 +222,7 @@ static void layout_config_table_button(GtkWidget *table, LayoutLocation l, const
 
        button = gtk_button_new_with_label(text);
        gtk_widget_set_sensitive(button, FALSE);
-       GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
+       gtk_widget_set_can_focus(button, FALSE);
        gtk_table_attach_defaults(GTK_TABLE(table), button, x1, x2, y1, y2);
        gtk_widget_show(button);
 }
@@ -264,21 +264,6 @@ static GtkWidget *layout_config_widget(GtkWidget *group, GtkWidget *box, gint st
        return group;
 }
 
-#if 0
-static void layout_config_row_move(GtkWidget *clist, gint source_row, gint dest_row, gpointer data)
-{
-       gchar *text;
-       gint i;
-
-       for (i = 0; i < 3; i++)
-               {
-               text = g_strdup_printf("%d", i + 1);
-               gtk_clist_set_text(GTK_CLIST(clist), i, 0, text);
-               g_free(text);
-               }
-}
-#endif
-
 static void layout_config_number_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
                                    GtkTreeModel *store, GtkTreeIter *iter, gpointer data)
 {
index bd57592..f0e83b0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index cfe0661..b59eaa6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -64,7 +64,8 @@ static void layout_image_full_screen_stop_func(FullScreenData *fs, gpointer data
        LayoutWindow *lw = data;
 
        /* restore image window */
-       lw->image = fs->normal_imd;
+       if (lw->image == fs->imd)
+               lw->image = fs->normal_imd;
 
        lw->full_screen = NULL;
 }
@@ -79,7 +80,8 @@ void layout_image_full_screen_start(LayoutWindow *lw)
                                           layout_image_full_screen_stop_func, lw);
 
        /* set to new image window */
-       lw->image = lw->full_screen->imd;
+       if (lw->full_screen->same_region)
+               lw->image = lw->full_screen->imd;
 
        layout_image_set_buttons(lw);
 
@@ -87,10 +89,6 @@ void layout_image_full_screen_start(LayoutWindow *lw)
                         G_CALLBACK(layout_key_press_cb), lw);
 
        layout_actions_add_window(lw, lw->full_screen->window);
-#if 0
-       gtk_widget_set_sensitive(lw->window, FALSE);
-       if (lw->tools) gtk_widget_set_sensitive(lw->tools, FALSE);
-#endif
 
        image_osd_copy_status(lw->full_screen->normal_imd, lw->image);
 }
@@ -100,14 +98,10 @@ void layout_image_full_screen_stop(LayoutWindow *lw)
        if (!layout_valid(&lw)) return;
        if (!lw->full_screen) return;
 
-       image_osd_copy_status(lw->image, lw->full_screen->normal_imd);
+       if (lw->image == lw->full_screen->imd)
+               image_osd_copy_status(lw->image, lw->full_screen->normal_imd);
 
        fullscreen_stop(lw->full_screen);
-
-#if 0
-       gtk_widget_set_sensitive(lw->window, TRUE);
-       if (lw->tools) gtk_widget_set_sensitive(lw->tools, TRUE);
-#endif
 }
 
 void layout_image_full_screen_toggle(LayoutWindow *lw)
@@ -468,7 +462,7 @@ static GList *layout_image_get_fd_list(LayoutWindow *lw)
                else
                        list = g_list_append(NULL, file_data_ref(fd));
                }
-       
+
        return list;
 }
 
@@ -518,7 +512,7 @@ static GtkWidget *layout_image_pop_menu(LayoutWindow *lw)
        if (!path) gtk_widget_set_sensitive(item, FALSE);
        item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(li_pop_menu_delete_cb), lw);
        if (!path) gtk_widget_set_sensitive(item, FALSE);
-       
+
        item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(li_pop_menu_copy_path_cb), lw);
        if (!path) gtk_widget_set_sensitive(item, FALSE);
 
@@ -567,7 +561,7 @@ static void layout_image_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *
 {
        LayoutWindow *lw = data;
 
-       gdk_window_get_origin(lw->image->pr->window, x, y);
+       gdk_window_get_origin(gtk_widget_get_window(lw->image->pr), x, y);
        popup_menu_position_clamp(menu, x, y, 0);
 }
 
@@ -614,13 +608,13 @@ static void layout_image_dnd_receive(GtkWidget *widget, GdkDragContext *context,
 
                if (info == TARGET_URI_LIST)
                        {
-                       list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
+                       list = uri_filelist_from_gtk_selection_data(selection_data);
                        source = NULL;
                        info_list = NULL;
                        }
                else
                        {
-                       source = collection_from_dnd_data((gchar *)selection_data->data, &list, &info_list);
+                       source = collection_from_dnd_data((gchar *)gtk_selection_data_get_data(selection_data), &list, &info_list);
                        }
 
                if (list)
@@ -692,34 +686,15 @@ static void layout_image_dnd_get(GtkWidget *widget, GdkDragContext *context,
 
        if (fd)
                {
-               gchar *text = NULL;
-               gint len;
-               gboolean plain_text;
                GList *list;
 
-               switch (info)
-                       {
-                       case TARGET_URI_LIST:
-                               plain_text = FALSE;
-                               break;
-                       case TARGET_TEXT_PLAIN:
-                       default:
-                               plain_text = TRUE;
-                               break;
-                       }
                list = g_list_append(NULL, fd);
-               text = uri_text_from_filelist(list, &len, plain_text);
+               uri_selection_data_set_uris_from_filelist(selection_data, list);
                g_list_free(list);
-               if (text)
-                       {
-                       gtk_selection_data_set(selection_data, selection_data->target,
-                                              8, (guchar *)text, len);
-                       g_free(text);
-                       }
                }
        else
                {
-               gtk_selection_data_set(selection_data, selection_data->target,
+               gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
                                       8, NULL, 0);
                }
 }
@@ -727,7 +702,7 @@ static void layout_image_dnd_get(GtkWidget *widget, GdkDragContext *context,
 static void layout_image_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
 {
        LayoutWindow *lw = data;
-       if (context->action == GDK_ACTION_MOVE)
+       if (gdk_drag_context_get_selected_action(context) == GDK_ACTION_MOVE)
                {
                FileData *fd;
                gint row;
@@ -797,12 +772,17 @@ void layout_image_scroll(LayoutWindow *lw, gint x, gint y, gboolean connect_scro
 
        image_scroll(lw->image, x, y);
 
+       if (lw->full_screen && lw->image != lw->full_screen->imd)
+               {
+               image_scroll(lw->full_screen->imd, x, y);
+               }
+
        if (!connect_scroll) return;
 
        image_get_image_size(lw->image, &width, &height);
        dx = (gdouble) x / width;
        dy = (gdouble) y / height;
-       
+
        for (i = 0; i < MAX_SPLIT_IMAGES; i++)
                {
                if (lw->split_images[i] && lw->split_images[i] != lw->image)
@@ -824,6 +804,11 @@ void layout_image_zoom_adjust(LayoutWindow *lw, gdouble increment, gboolean conn
 
        image_zoom_adjust(lw->image, increment);
 
+       if (lw->full_screen && lw->image != lw->full_screen->imd)
+               {
+               image_zoom_adjust(lw->full_screen->imd, increment);
+               }
+
        if (!connect_zoom) return;
 
        for (i = 0; i < MAX_SPLIT_IMAGES; i++)
@@ -840,6 +825,11 @@ void layout_image_zoom_adjust_at_point(LayoutWindow *lw, gdouble increment, gint
 
        image_zoom_adjust_at_point(lw->image, increment, x, y);
 
+       if (lw->full_screen && lw->image != lw->full_screen->imd)
+               {
+               image_zoom_adjust_at_point(lw->full_screen->imd, increment, x, y);
+               }
+
        if (!connect_zoom) return;
 
        for (i = 0; i < MAX_SPLIT_IMAGES; i++)
@@ -856,6 +846,11 @@ void layout_image_zoom_set(LayoutWindow *lw, gdouble zoom, gboolean connect_zoom
 
        image_zoom_set(lw->image, zoom);
 
+       if (lw->full_screen && lw->image != lw->full_screen->imd)
+               {
+               image_zoom_set(lw->full_screen->imd, zoom);
+               }
+
        if (!connect_zoom) return;
 
        for (i = 0; i < MAX_SPLIT_IMAGES; i++)
@@ -872,6 +867,11 @@ void layout_image_zoom_set_fill_geometry(LayoutWindow *lw, gboolean vertical, gb
 
        image_zoom_set_fill_geometry(lw->image, vertical);
 
+       if (lw->full_screen && lw->image != lw->full_screen->imd)
+               {
+               image_zoom_set_fill_geometry(lw->full_screen->imd, vertical);
+               }
+
        if (!connect_zoom) return;
 
        for (i = 0; i < MAX_SPLIT_IMAGES; i++)
@@ -984,6 +984,12 @@ void layout_image_set_fd(LayoutWindow *lw, FileData *fd)
 
        image_change_fd(lw->image, fd, image_zoom_get_default(lw->image));
 
+       if (lw->full_screen && lw->image != lw->full_screen->imd)
+               {
+               image_change_fd(lw->full_screen->imd, fd, image_zoom_get_default(lw->full_screen->imd));
+               }
+
+
        layout_list_sync_fd(lw, fd);
        layout_image_slideshow_continue_check(lw);
        layout_bars_new_image(lw);
@@ -1477,6 +1483,23 @@ static void layout_image_drag_cb(ImageWindow *imd, GdkEventButton *event, gdoubl
 {
        gint i;
        LayoutWindow *lw = data;
+       gdouble sx, sy;
+
+       if (lw->full_screen && lw->image != lw->full_screen->imd &&
+           imd != lw->full_screen->imd)
+               {
+               if (event->state & GDK_CONTROL_MASK)
+                       {
+                       image_get_scroll_center(imd, &sx, &sy);
+                       }
+               else
+                       {
+                       image_get_scroll_center(lw->full_screen->imd, &sx, &sy);
+                       sx += dx;
+                       sy += dy;
+                       }
+               image_set_scroll_center(lw->full_screen->imd, sx, sy);
+               }
 
        if (!(event->state & GDK_SHIFT_MASK)) return;
 
@@ -1484,7 +1507,6 @@ static void layout_image_drag_cb(ImageWindow *imd, GdkEventButton *event, gdoubl
                {
                if (lw->split_images[i] && lw->split_images[i] != imd)
                        {
-                       gdouble sx, sy;
 
                        if (event->state & GDK_CONTROL_MASK)
                                {
@@ -1583,19 +1605,19 @@ void layout_status_update_pixel_cb(PixbufRenderer *pr, gpointer data)
        if (width < 1 || height < 1) return;
 
        pixbuf_renderer_get_mouse_position(pr, &x_pixel, &y_pixel);
-       
+
        if(x_pixel >= 0 && y_pixel >= 0)
                {
                gint r_mouse, g_mouse, b_mouse;
-                       
+
                pixbuf_renderer_get_pixel_colors(pr, x_pixel, y_pixel,
-                                                &r_mouse, &g_mouse, &b_mouse);                 
-               
+                                                &r_mouse, &g_mouse, &b_mouse);
+
                text = g_strdup_printf(_("[%*d,%*d]: RGB(%3d,%3d,%3d)"),
                                         num_length(width - 1), x_pixel,
                                         num_length(height - 1), y_pixel,
                                         r_mouse, g_mouse, b_mouse);
-               
+
                }
        else
                {
@@ -1633,11 +1655,7 @@ GtkWidget *layout_image_new(LayoutWindow *lw, gint i)
                {
                lw->split_images[i] = image_new(TRUE);
 
-#if GTK_CHECK_VERSION(2,12,0)
                g_object_ref(lw->split_images[i]->widget);
-#else
-               gtk_widget_ref(lw->split_images[i]->widget);
-#endif
 
                g_signal_connect(G_OBJECT(lw->split_images[i]->pr), "update-pixel",
                                 G_CALLBACK(layout_status_update_pixel_cb), lw);
@@ -1709,6 +1727,7 @@ void layout_image_activate(LayoutWindow *lw, gint i, gboolean force)
 //             layout_list_sync_path(lw, path);
                layout_set_fd(lw, fd);
                }
+       layout_status_update_image(lw);
 }
 
 
@@ -1726,7 +1745,7 @@ static void layout_image_setup_split_common(LayoutWindow *lw, gint n)
                        layout_image_new(lw, i);
                        image_set_frame(lw->split_images[i], frame);
                        image_set_selectable(lw->split_images[i], (n > 1));
-                       
+
                        if (lw->image)
                                {
                                image_osd_copy_status(lw->image, lw->split_images[i]);
@@ -1736,14 +1755,14 @@ static void layout_image_setup_split_common(LayoutWindow *lw, gint n)
                                {
                                GList *work = g_list_last(layout_selection_list(lw));
                                gint j = 0;
-                               
+
                                if (work) work = work->prev;
 
                                while (work && j < i)
                                        {
                                        FileData *fd = work->data;
                                        work = work->prev;
-                                       
+
                                        j++;
                                        if (!fd || !*fd->path) continue;
                                        img_fd = fd;
@@ -1775,15 +1794,11 @@ static void layout_image_setup_split_common(LayoutWindow *lw, gint n)
                {
                if (lw->split_images[i])
                        {
-#if GTK_CHECK_VERSION(2,12,0)
                        g_object_unref(lw->split_images[i]->widget);
-#else
-                       gtk_widget_unref(lw->split_images[i]->widget);
-#endif
                        lw->split_images[i] = NULL;
                        }
                }
-       
+
        if (!lw->image || lw->active_split_image < 0 || lw->active_split_image >= n)
                {
                layout_image_activate(lw, 0, TRUE);
@@ -1799,7 +1814,7 @@ static void layout_image_setup_split_common(LayoutWindow *lw, gint n)
 GtkWidget *layout_image_setup_split_none(LayoutWindow *lw)
 {
        lw->split_mode = SPLIT_NONE;
-       
+
        layout_image_setup_split_common(lw, 1);
 
        lw->split_image_widget = lw->split_images[0]->widget;
@@ -1811,7 +1826,7 @@ GtkWidget *layout_image_setup_split_none(LayoutWindow *lw)
 GtkWidget *layout_image_setup_split_hv(LayoutWindow *lw, gboolean horizontal)
 {
        GtkWidget *paned;
-       
+
        lw->split_mode = horizontal ? SPLIT_HOR : SPLIT_VERT;
 
        layout_image_setup_split_common(lw, 2);
@@ -1923,8 +1938,8 @@ static void layout_image_maint_removed(LayoutWindow *lw, FileData *fd)
                                }
                        layout_image_set_fd(lw, NULL);
                        }
-                       
-               /* the image will be set to the next image from the list soon,  
+
+               /* the image will be set to the next image from the list soon,
                   setting it to NULL here is not necessary*/
                }
 }
@@ -1937,7 +1952,7 @@ void layout_image_notify_cb(FileData *fd, NotifyType type, gpointer data)
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
 
        DEBUG_1("Notify layout_image: %s %04x", fd->path, type);
-       
+
        switch (fd->change->type)
                {
                case FILEDATA_CHANGE_MOVE:
index fe8efd1..83c5db9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 26b3547..a954019 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -64,10 +64,10 @@ static void layout_util_sync_views(LayoutWindow *lw);
  */
 
 static guint tree_key_overrides[] = {
-       GDK_Page_Up,    GDK_KP_Page_Up,
-       GDK_Page_Down,  GDK_KP_Page_Down,
-       GDK_Home,       GDK_KP_Home,
-       GDK_End,        GDK_KP_End
+       GDK_KEY_Page_Up,        GDK_KEY_KP_Page_Up,
+       GDK_KEY_Page_Down,      GDK_KEY_KP_Page_Down,
+       GDK_KEY_Home,   GDK_KEY_KP_Home,
+       GDK_KEY_End,    GDK_KEY_KP_End
 };
 
 static gboolean layout_key_match(guint keyval)
@@ -85,17 +85,14 @@ static gboolean layout_key_match(guint keyval)
 gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        LayoutWindow *lw = data;
+       GtkWidget *focused;
        gboolean stop_signal = FALSE;
        gint x = 0;
        gint y = 0;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (lw->path_entry && gtk_widget_has_focus(lw->path_entry))
-#else
-       if (lw->path_entry && GTK_WIDGET_HAS_FOCUS(lw->path_entry))
-#endif
                {
-               if (event->keyval == GDK_Escape && lw->dir_fd)
+               if (event->keyval == GDK_KEY_Escape && lw->dir_fd)
                        {
                        gtk_entry_set_text(GTK_ENTRY(lw->path_entry), lw->dir_fd->path);
                        }
@@ -108,11 +105,7 @@ gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                        return TRUE;
                        }
                }
-#if GTK_CHECK_VERSION(2,20,0)
        if (lw->vd && lw->options.dir_view_type == DIRVIEW_TREE && gtk_widget_has_focus(lw->vd->view) &&
-#else
-       if (lw->vd && lw->options.dir_view_type == DIRVIEW_TREE && GTK_WIDGET_HAS_FOCUS(lw->vd->view) &&
-#endif
            !layout_key_match(event->keyval) &&
            gtk_widget_event(lw->vd->view, (GdkEvent *)event))
                {
@@ -124,32 +117,23 @@ gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                return TRUE;
                }
 
-/*
-       if (event->type == GDK_KEY_PRESS && lw->full_screen &&
-           gtk_accel_groups_activate(G_OBJECT(lw->window), event->keyval, event->state))
-               return TRUE;
-*/
-
+       focused = gtk_container_get_focus_child(GTK_CONTAINER(lw->image->widget));
        if (lw->image &&
-#if GTK_CHECK_VERSION(2,20,0)
-           (gtk_widget_has_focus(lw->image->widget) || (lw->tools && widget == lw->window) || lw->full_screen) )
-#else
-           (GTK_WIDGET_HAS_FOCUS(lw->image->widget) || (lw->tools && widget == lw->window) || lw->full_screen) )
-#endif
+           ((focused && gtk_widget_has_focus(focused)) || (lw->tools && widget == lw->window) || lw->full_screen) )
                {
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Left: case GDK_KP_Left:
+                       case GDK_KEY_Left: case GDK_KEY_KP_Left:
                                x -= 1;
                                break;
-                       case GDK_Right: case GDK_KP_Right:
+                       case GDK_KEY_Right: case GDK_KEY_KP_Right:
                                x += 1;
                                break;
-                       case GDK_Up: case GDK_KP_Up:
+                       case GDK_KEY_Up: case GDK_KEY_KP_Up:
                                y -= 1;
                                break;
-                       case GDK_Down: case GDK_KP_Down:
+                       case GDK_KEY_Down: case GDK_KEY_KP_Down:
                                y += 1;
                                break;
                        default:
@@ -163,7 +147,7 @@ gboolean layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                        stop_signal = TRUE;
                        switch (event->keyval)
                                {
-                               case GDK_Menu:
+                               case GDK_KEY_Menu:
                                        layout_image_menu_popup(lw);
                                        break;
                                default:
@@ -621,7 +605,7 @@ static void layout_menu_thumb_cb(GtkToggleAction *action, gpointer data)
 static void layout_menu_list_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
 {
        LayoutWindow *lw = data;
-       
+
        layout_exit_fullscreen(lw);
        layout_views_set(lw, lw->options.dir_view_type, (FileViewType) gtk_radio_action_get_current_value(action));
 }
@@ -654,11 +638,6 @@ static void layout_menu_escape_cb(GtkAction *action, gpointer data)
        LayoutWindow *lw = data;
 
        layout_exit_fullscreen(lw);
-
-       /* FIXME:interrupting thumbs no longer allowed */
-#if 0
-       interrupt_thumbs();
-#endif
 }
 
 static void layout_menu_overlay_toggle_cb(GtkAction *action, gpointer data)
@@ -673,18 +652,18 @@ static void layout_menu_overlay_toggle_cb(GtkAction *action, gpointer data)
 static void layout_menu_overlay_cb(GtkToggleAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       
+
        if (gtk_toggle_action_get_active(action))
                {
                OsdShowFlags flags = image_osd_get(lw->image);
-               
+
                if ((flags | OSD_SHOW_INFO | OSD_SHOW_STATUS) != flags)
                        image_osd_set(lw->image, flags | OSD_SHOW_INFO | OSD_SHOW_STATUS);
                }
        else
                {
                GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
-               
+
                image_osd_set(lw->image, OSD_SHOW_NOTHING);
                gtk_toggle_action_set_active(histogram_action, FALSE); /* this calls layout_menu_histogram_cb */
                }
@@ -730,7 +709,7 @@ static void layout_menu_histogram_channel_cb(GtkRadioAction *action, GtkRadioAct
        GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
 
        if (channel < 0 || channel >= HCHAN_COUNT) return;
-       
+
        gtk_toggle_action_set_active(histogram_action, TRUE); /* this calls layout_menu_histogram_cb */
        image_osd_histogram_set_channel(lw->image, channel);
 }
@@ -742,7 +721,7 @@ static void layout_menu_histogram_mode_cb(GtkRadioAction *action, GtkRadioAction
        GtkToggleAction *histogram_action = GTK_TOGGLE_ACTION(gtk_action_group_get_action(lw->action_group, "ImageHistogram"));
 
        if (mode < 0 || mode > 1) return;
-       
+
        gtk_toggle_action_set_active(histogram_action, TRUE); /* this calls layout_menu_histogram_cb */
        image_osd_histogram_set_mode(lw->image, mode);
 }
@@ -757,7 +736,7 @@ static void layout_menu_refresh_cb(GtkAction *action, gpointer data)
 static void layout_menu_bar_exif_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       
+
        layout_exit_fullscreen(lw);
        layout_exif_window_new(lw);
 }
@@ -841,13 +820,13 @@ static void layout_menu_stereo_mode_next_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
        gint mode = layout_image_stereo_pixbuf_get(lw);
-       
+
        /* 0->1, 1->2, 2->3, 3->1 - disable auto, then cycle */
        mode = mode % 3 + 1;
-       
+
        GtkAction *radio = gtk_action_group_get_action(lw->action_group, "StereoAuto");
-       radio_action_set_current_value(GTK_RADIO_ACTION(radio), mode);
-       
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(radio), mode);
+
        /*
        this is called via fallback in layout_menu_stereo_mode_cb
        layout_image_stereo_pixbuf_set(lw, mode);
@@ -881,7 +860,7 @@ static void layout_menu_help_keys_cb(GtkAction *action, gpointer data)
 static void layout_menu_notes_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       
+
        layout_exit_fullscreen(lw);
        help_window_show("release_notes");
 }
@@ -1062,7 +1041,7 @@ static void layout_menu_back_cb(GtkAction *action, gpointer data)
                }
 
        if (!path) return;
-       
+
        /* Open previous path */
        dir_fd = file_data_new_dir(path);
        layout_set_fd(lw, dir_fd);
@@ -1073,7 +1052,7 @@ static void layout_menu_home_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
        const gchar *path;
-       
+
        if (lw->options.home_path && *lw->options.home_path)
                path = lw->options.home_path;
        else
@@ -1098,7 +1077,7 @@ static void layout_menu_edit_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
        const gchar *key = gtk_action_get_name(action);
-       
+
        if (!editor_window_flag_set(key))
                layout_exit_fullscreen(lw);
 
@@ -1692,7 +1671,7 @@ static void layout_actions_setup_mark(LayoutWindow *lw, gint mark, gchar *name_t
 
        g_snprintf(name, sizeof(name), name_tmpl, mark);
        g_snprintf(label, sizeof(label), label_tmpl, mark);
-               
+
        if (accel_tmpl)
                g_snprintf(accel, sizeof(accel), accel_tmpl, mark % 10);
        else
@@ -1702,7 +1681,7 @@ static void layout_actions_setup_mark(LayoutWindow *lw, gint mark, gchar *name_t
                g_snprintf(tooltip, sizeof(tooltip), tooltip_tmpl, mark);
        else
                entry.tooltip = NULL;
-               
+
        gtk_action_group_add_actions(lw->action_group, &entry, 1, lw);
        action = gtk_action_group_get_action(lw->action_group, name);
        g_object_set_data(G_OBJECT(action), "mark_num", GINT_TO_POINTER(mark));
@@ -1774,23 +1753,23 @@ static GList *layout_actions_editor_menu_path(EditorDescription *editor)
        gchar **split = g_strsplit(editor->menu_path, "/", 0);
        gint i = 0;
        GList *ret = NULL;
-       
-       if (split[0] == NULL) 
+
+       if (split[0] == NULL)
                {
                g_strfreev(split);
                return NULL;
                }
-       
+
        while (split[i])
                {
                ret = g_list_prepend(ret, g_strdup(split[i]));
                i++;
                }
-       
+
        g_strfreev(split);
-       
+
        ret = g_list_prepend(ret, g_strdup(editor->key));
-       
+
        return g_list_reverse(ret);
 }
 
@@ -1804,13 +1783,13 @@ static void layout_actions_editor_add(GString *desc, GList *path, GList *old_pat
                }
        to_open = g_list_length(path) - 1;
        to_close = g_list_length(old_path) - 1;
-       
+
        if (to_close > 0)
                {
                old_path = g_list_last(old_path);
                old_path = old_path->prev;
                }
-       
+
        for (i =  0; i < to_close; i++)
                {
                gchar *name = old_path->data;
@@ -1846,7 +1825,7 @@ static void layout_actions_editor_add(GString *desc, GList *path, GList *old_pat
                        }
                path = path->next;
                }
-       
+
        if (path)
                g_string_append_printf(desc, "      <menuitem action='%s'/>", (gchar *)path->data);
 }
@@ -1858,7 +1837,7 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
        GList *work;
        GList *old_path;
        GString *desc;
-       
+
        if (lw->ui_editors_id)
                {
                gtk_ui_manager_remove_ui(lw->ui_manager, lw->ui_editors_id);
@@ -1878,29 +1857,29 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                                "  <menubar name='MainMenu'>");
 
        editors_list = editor_list_get();
-       
+
        old_path = NULL;
        work = editors_list;
        while (work)
                {
                GList *path;
                EditorDescription *editor = work->data;
-               GtkActionEntry entry = { editor->key, 
+               GtkActionEntry entry = { editor->key,
                                         NULL,
                                         editor->name,
-                                        editor->hotkey, 
+                                        editor->hotkey,
                                         editor->comment ? editor->comment : editor->name,
                                         G_CALLBACK(layout_menu_edit_cb) };
-               
+
                if (editor->icon)
                        {
                        entry.stock_id = editor->key;
                        }
                gtk_action_group_add_actions(lw->action_group_editors, &entry, 1, lw);
-               
+
                path = layout_actions_editor_menu_path(editor);
                layout_actions_editor_add(desc, path, old_path);
-               
+
                string_list_free(old_path);
                old_path = path;
                work = work->next;
@@ -1913,7 +1892,7 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                                "</ui>" );
 
        error = NULL;
-       
+
        lw->ui_editors_id = gtk_ui_manager_add_ui_from_string(lw->ui_manager, desc->str, -1, &error);
        if (!lw->ui_editors_id)
                {
@@ -1975,14 +1954,14 @@ void layout_actions_setup(LayoutWindow *lw)
                g_error_free(error);
                exit(EXIT_FAILURE);
                }
-       
+
        DEBUG_1("%s layout_actions_setup: add toolbar", get_exec_time());
        for (i = 0; i < TOOLBAR_COUNT; i++)
                {
                layout_toolbar_clear(lw, i);
                layout_toolbar_add_default(lw, i);
                }
-       
+
 
        DEBUG_1("%s layout_actions_setup: marks", get_exec_time());
        layout_actions_setup_marks(lw);
@@ -1992,7 +1971,7 @@ void layout_actions_setup(LayoutWindow *lw)
 
        DEBUG_1("%s layout_actions_setup: status_update_write", get_exec_time());
        layout_util_status_update_write(lw);
-       
+
        DEBUG_1("%s layout_actions_setup: actions_add_window", get_exec_time());
        layout_actions_add_window(lw, lw->window);
        DEBUG_1("%s layout_actions_setup: end", get_exec_time());
@@ -2009,12 +1988,12 @@ static gboolean layout_editors_reload_idle_cb(gpointer data)
                layout_editors_desktop_files = editor_get_desktop_files();
                return TRUE;
                }
-       
+
        editor_read_desktop_file(layout_editors_desktop_files->data);
        g_free(layout_editors_desktop_files->data);
        layout_editors_desktop_files = g_list_delete_link(layout_editors_desktop_files, layout_editors_desktop_files);
-       
-       
+
+
        if (!layout_editors_desktop_files)
                {
                GList *work;
@@ -2030,7 +2009,7 @@ static gboolean layout_editors_reload_idle_cb(gpointer data)
                        }
 
                DEBUG_1("%s layout_editors_reload_idle_cb: setup_editors done", get_exec_time());
-               
+
                layout_editors_reload_idle_id = -1;
                return FALSE;
                }
@@ -2039,8 +2018,6 @@ static gboolean layout_editors_reload_idle_cb(gpointer data)
 
 void layout_editors_reload_start(void)
 {
-       GList *work;
-
        DEBUG_1("%s layout_editors_reload_start", get_exec_time());
 
        if (layout_editors_reload_idle_id != -1)
@@ -2049,12 +2026,10 @@ void layout_editors_reload_start(void)
                string_list_free(layout_editors_desktop_files);
                }
 
-       work = layout_window_list;
-
        editor_table_clear();
        layout_editors_reload_idle_id = g_idle_add(layout_editors_reload_idle_cb, NULL);
 }
-       
+
 void layout_editors_reload_finish(void)
 {
        if (layout_editors_reload_idle_id != -1)
@@ -2111,23 +2086,23 @@ GtkWidget *layout_actions_toolbar(LayoutWindow *lw, ToolbarType type)
 
 void layout_toolbar_clear(LayoutWindow *lw, ToolbarType type)
 {
-       if (lw->toolbar_merge_id[type]) 
+       if (lw->toolbar_merge_id[type])
                {
                gtk_ui_manager_remove_ui(lw->ui_manager, lw->toolbar_merge_id[type]);
                gtk_ui_manager_ensure_update(lw->ui_manager);
                }
        string_list_free(lw->toolbar_actions[type]);
        lw->toolbar_actions[type] = NULL;
-       
+
        lw->toolbar_merge_id[type] = gtk_ui_manager_new_merge_id(lw->ui_manager);
 }
-       
+
 
 void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
 {
        const gchar *path = NULL;
        if (!action || !lw->ui_manager) return;
-       
+
        if (g_list_find_custom(lw->toolbar_actions[type], action, (GCompareFunc)strcmp)) return;
 
        switch (type)
@@ -2141,13 +2116,13 @@ void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
                default:
                        break;
                }
-       
-       
+
+
        if (g_str_has_suffix(action, ".desktop"))
                {
                /* this may be called before the external editors are read
                   create a dummy action for now */
-                 
+
                if (!lw->action_group_editors)
                        {
                        lw->action_group_editors = gtk_action_group_new("MenuActionsExternal");
@@ -2155,17 +2130,17 @@ void layout_toolbar_add(LayoutWindow *lw, ToolbarType type, const gchar *action)
                        }
                if (!gtk_action_group_get_action(lw->action_group_editors, action))
                        {
-                       GtkActionEntry entry = { action, 
+                       GtkActionEntry entry = { action,
                                                 GTK_STOCK_MISSING_IMAGE,
                                                 action,
-                                                NULL, 
+                                                NULL,
                                                 NULL,
                                                 NULL };
                        DEBUG_1("Creating temporary action %s", action);
                        gtk_action_group_add_actions(lw->action_group_editors, &entry, 1, lw);
                        }
                }
-       gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, action, action, GTK_UI_MANAGER_TOOLITEM, FALSE); 
+       gtk_ui_manager_add_ui(lw->ui_manager, lw->toolbar_merge_id[type], path, action, action, GTK_UI_MANAGER_TOOLITEM, FALSE);
        lw->toolbar_actions[type] = g_list_append(lw->toolbar_actions[type], g_strdup(action));
 }
 
@@ -2231,7 +2206,7 @@ void layout_toolbar_write_config(LayoutWindow *lw, ToolbarType type, GString *ou
 void layout_toolbar_add_from_config(LayoutWindow *lw, ToolbarType type, const gchar **attribute_names, const gchar **attribute_values)
 {
        gchar *action = NULL;
-       
+
        while (*attribute_names)
                {
                const gchar *option = *attribute_names++;
@@ -2243,7 +2218,7 @@ void layout_toolbar_add_from_config(LayoutWindow *lw, ToolbarType type, const gc
                }
 
        layout_toolbar_add(lw, type, action);
-       g_free(action); 
+       g_free(action);
 }
 
 /*
@@ -2304,7 +2279,7 @@ void layout_util_sync_color(LayoutWindow *lw)
 
        if (!lw->action_group) return;
        if (!layout_image_color_profile_get(lw, &input, &use_image)) return;
-       
+
        use_color = layout_image_color_profile_get_use(lw);
 
        action = gtk_action_group_get_action(lw->action_group, "UseColorProfiles");
@@ -2337,7 +2312,7 @@ void layout_util_sync_color(LayoutWindow *lw)
                {
                sprintf(action_name, "ColorProfile%d", i);
                action = gtk_action_group_get_action(lw->action_group, action_name);
-               
+
                if (i >= COLOR_PROFILE_FILE)
                        {
                        const gchar *name = options->color_profile.input_name[i - COLOR_PROFILE_FILE];
@@ -2373,13 +2348,13 @@ static void layout_util_sync_views(LayoutWindow *lw)
        if (!lw->action_group) return;
 
        action = gtk_action_group_get_action(lw->action_group, "FolderTree");
-       radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->options.dir_view_type);
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->options.dir_view_type);
 
        action = gtk_action_group_get_action(lw->action_group, "SplitSingle");
-       radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->split_mode);
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->split_mode);
 
        action = gtk_action_group_get_action(lw->action_group, "ViewIcons");
-       radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->options.file_view_type);
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->options.file_view_type);
 
        action = gtk_action_group_get_action(lw->action_group, "FloatTools");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.tools_float);
@@ -2392,7 +2367,7 @@ static void layout_util_sync_views(LayoutWindow *lw)
 
        action = gtk_action_group_get_action(lw->action_group, "HideToolbar");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.toolbar_hidden);
-       
+
        action = gtk_action_group_get_action(lw->action_group, "ShowInfoPixel");
        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->options.show_info_pixel);
 
@@ -2411,17 +2386,17 @@ static void layout_util_sync_views(LayoutWindow *lw)
        if (osd_flags & OSD_SHOW_HISTOGRAM)
                {
                action = gtk_action_group_get_action(lw->action_group, "HistogramChanR");
-               radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_channel(lw->image));
+               gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_channel(lw->image));
 
                action = gtk_action_group_get_action(lw->action_group, "HistogramModeLin");
-               radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_mode(lw->image));
+               gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), image_osd_histogram_get_mode(lw->image));
                }
 
        action = gtk_action_group_get_action(lw->action_group, "ConnectZoomMenu");
        gtk_action_set_sensitive(action, lw->split_mode != SPLIT_NONE);
 
        action = gtk_action_group_get_action(lw->action_group, "StereoAuto");
-       radio_action_set_current_value(GTK_RADIO_ACTION(action), layout_image_stereo_pixbuf_get(lw));
+       gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), layout_image_stereo_pixbuf_get(lw));
 
        layout_util_sync_color(lw);
 }
@@ -2454,11 +2429,7 @@ void layout_util_sync(LayoutWindow *lw)
 
 static gboolean layout_bar_enabled(LayoutWindow *lw)
 {
-#if GTK_CHECK_VERSION(2,20,0)
        return lw->bar && gtk_widget_get_visible(lw->bar);
-#else
-       return lw->bar && GTK_WIDGET_VISIBLE(lw->bar);
-#endif
 }
 
 static void layout_bar_destroyed(GtkWidget *widget, gpointer data)
@@ -2466,7 +2437,7 @@ static void layout_bar_destroyed(GtkWidget *widget, gpointer data)
        LayoutWindow *lw = data;
 
        lw->bar = NULL;
-/* 
+/*
     do not call layout_util_sync_views(lw) here
     this is called either when whole layout is destroyed - no need for update
     or when the bar is replaced - sync is called by upper function at the end of whole operation
@@ -2477,13 +2448,13 @@ static void layout_bar_destroyed(GtkWidget *widget, gpointer data)
 static void layout_bar_set_default(LayoutWindow *lw)
 {
        GtkWidget *bar;
-       
+
        if (!lw->utility_box) return;
 
        bar = bar_new(lw);
-       
+
        layout_bar_set(lw, bar);
-       
+
        bar_populate_default(bar);
 }
 
@@ -2511,7 +2482,7 @@ void layout_bar_set(LayoutWindow *lw, GtkWidget *bar)
 
 
 //     gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->bar, FALSE, FALSE, 0);
-       gtk_paned_pack2(GTK_PANED(lw->utility_paned), lw->bar, FALSE, TRUE); 
+       gtk_paned_pack2(GTK_PANED(lw->utility_paned), lw->bar, FALSE, TRUE);
 
        bar_set_fd(lw->bar, layout_image_get_fd(lw));
 }
@@ -2551,11 +2522,7 @@ static void layout_bar_new_selection(LayoutWindow *lw, gint count)
 
 static gboolean layout_bar_sort_enabled(LayoutWindow *lw)
 {
-#if GTK_CHECK_VERSION(2,20,0)
        return lw->bar_sort && gtk_widget_get_visible(lw->bar_sort);
-#else
-       return lw->bar_sort && GTK_WIDGET_VISIBLE(lw->bar_sort);
-#endif
 }
 
 
@@ -2565,7 +2532,7 @@ static void layout_bar_sort_destroyed(GtkWidget *widget, gpointer data)
 
        lw->bar_sort = NULL;
 
-/* 
+/*
     do not call layout_util_sync_views(lw) here
     this is called either when whole layout is destroyed - no need for update
     or when the bar is replaced - sync is called by upper function at the end of whole operation
@@ -2576,11 +2543,11 @@ static void layout_bar_sort_destroyed(GtkWidget *widget, gpointer data)
 static void layout_bar_sort_set_default(LayoutWindow *lw)
 {
        GtkWidget *bar;
-       
+
        if (!lw->utility_box) return;
 
        bar = bar_sort_new_default(lw);
-       
+
        layout_bar_sort_set(lw, bar);
 }
 
@@ -2648,9 +2615,9 @@ GtkWidget *layout_bars_prepare(LayoutWindow *lw, GtkWidget *image)
        lw->utility_paned = gtk_hpaned_new();
        gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->utility_paned, TRUE, TRUE, 0);
 
-       gtk_paned_pack1(GTK_PANED(lw->utility_paned), image, TRUE, FALSE); 
+       gtk_paned_pack1(GTK_PANED(lw->utility_paned), image, TRUE, FALSE);
        gtk_widget_show(lw->utility_paned);
-       
+
        gtk_widget_show(image);
 
        g_object_ref(lw->utility_box);
@@ -2671,8 +2638,8 @@ static void layout_exif_window_destroy(GtkWidget *widget, gpointer data)
 
 void layout_exif_window_new(LayoutWindow *lw)
 {
-       if (lw->exif_window) return; 
-       
+       if (lw->exif_window) return;
+
        lw->exif_window = advanced_exif_new();
        if (!lw->exif_window) return;
        g_signal_connect(G_OBJECT(lw->exif_window), "destroy",
index e784e83..70552fc 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 7ee87c9..cbd09d4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  */
 
@@ -53,7 +53,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
        gint ret;
        gint x = 0;
        gint y = 0;
-       
+
        /* LIRC code and corresponding geeqie command (and parameters)*/
        gchar *code;
        gchar *cmd;
@@ -71,7 +71,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 4;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                i_parm = atoi(ptr);
-                               
+
                                if (i_parm <= 0) i_parm = 1;
                                x -= i_parm;
                                }
@@ -80,7 +80,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 5;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                i_parm = atoi(ptr);
-                               
+
                                if (i_parm <= 0) i_parm = 1;
                                x += i_parm;
                                }
@@ -89,7 +89,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 2;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                i_parm = atoi(ptr);
-                               
+
                                if (i_parm <= 0) i_parm = 1;
                                y -= i_parm;
                                }
@@ -98,7 +98,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 4;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                i_parm = atoi(ptr);
-                               
+
                                if (i_parm <= 0) i_parm = 1;
                                y += i_parm;
                                }
@@ -115,7 +115,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 7;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                fl_parm = atoi(ptr) / 10.0;
-                               
+
                                if (fl_parm <= 0.01) fl_parm = get_zoom_increment();
                                layout_image_zoom_adjust(lw, fl_parm, FALSE);
                                }
@@ -124,7 +124,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 8;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                fl_parm = atoi(ptr) / 10.0;
-                               
+
                                if (fl_parm <= 0.01) fl_parm = get_zoom_increment();
                                layout_image_zoom_adjust(lw, -fl_parm, FALSE);
                                }
@@ -141,7 +141,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 8;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                i_parm = atoi(ptr);
-                               
+
                                if (i_parm <= 0) i_parm = 1;
                                layout_image_zoom_set(lw, 1.0, FALSE);
                                }
@@ -150,7 +150,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
                                ptr = cmd + 12;
                                while (g_ascii_isspace(*ptr)) ptr++;
                                i_parm = atoi(ptr);
-                               
+
                                if (i_parm <= 0) i_parm = 1;
                                layout_image_zoom_set(lw, -i_parm, FALSE);
                                }
@@ -204,7 +204,7 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition,
 void layout_image_lirc_init(LayoutWindow *lw)
 {
        gint flags;
-       
+
        DEBUG_1("Initializing LIRC...");
        lirc_fd = lirc_init(GQ_APPNAME_LC, get_debug_level() > 0);
        if (lirc_fd == -1)
index 0b61f5e..440efbc 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik, Laurent Monin
  * based on logwindow.[ch] from Sylpheed 2.4.7 (C) Hiroyuki Yamamoto
@@ -26,7 +26,7 @@ struct _LogWindow
        GtkWidget *window;
        GtkWidget *scrolledwin;
        GtkWidget *text;
-       
+
        GdkColor colors[LOG_COUNT];
 
        guint lines;
@@ -57,7 +57,7 @@ static void hide_cb(GtkWidget *widget, LogWindow *logwin)
 static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
                            LogWindow *logwin)
 {
-       if (event && event->keyval == GDK_Escape)
+       if (event && event->keyval == GDK_KEY_Escape)
                gtk_widget_hide(logwin->window);
        return FALSE;
 }
@@ -111,13 +111,15 @@ static LogWindow *log_window_create(void)
 static void log_window_init(LogWindow *logwin)
 {
        GtkTextBuffer *buffer;
+#if !GTK_CHECK_VERSION(3,0,0)
        GdkColormap *colormap;
        gboolean success[LOG_COUNT];
+#endif
        gint i;
 
        g_assert(logwin != NULL);
        g_assert(logwin->colors != NULL);
-
+#if !GTK_CHECK_VERSION(3,0,0)
        for (i = LOG_NORMAL; i < LOG_COUNT; i++)
                {
                gboolean ok = gdk_color_parse(logdefs[i].color, &logwin->colors[i]);
@@ -127,7 +129,7 @@ static void log_window_init(LogWindow *logwin)
                memcpy(&logwin->colors[i], &logwin->colors[LOG_NORMAL], sizeof(GdkColor));
                }
 
-       colormap = gdk_drawable_get_colormap(logwin->window->window);
+       colormap = gdk_drawable_get_colormap(gtk_widget_get_window(logwin->window));
        gdk_colormap_alloc_colors(colormap, logwin->colors, LOG_COUNT, FALSE, TRUE, success);
 
        for (i = LOG_NORMAL; i < LOG_COUNT; i++)
@@ -144,7 +146,7 @@ static void log_window_init(LogWindow *logwin)
                        break;
                        }
                }
-
+#endif
        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(logwin->text));
        for (i = LOG_NORMAL; i < LOG_COUNT; i++)
                gtk_text_buffer_create_tag(buffer, logdefs[i].tag,
@@ -158,7 +160,7 @@ static void log_window_show(LogWindow *logwin)
        GtkTextView *text = GTK_TEXT_VIEW(logwin->text);
        GtkTextBuffer *buffer;
        GtkTextMark *mark;
-       
+
        g_assert(logwin != NULL);
 
        buffer = gtk_text_view_get_buffer(text);
@@ -227,7 +229,7 @@ void log_window_append(const gchar *str, LogType type)
                                {
                                GList *work = g_list_last(memory);
                                LogMsg *oldest_msg = work->data;
-                       
+
                                g_free(oldest_msg->text);
                                memory = g_list_delete_link(memory, work);
                                }
@@ -257,9 +259,9 @@ void log_window_append(const gchar *str, LogType type)
                {
                GList *prev;
                LogMsg *oldest_msg = work->data;
-               
+
                log_window_insert_text(buffer, &iter, oldest_msg->text, logdefs[oldest_msg->type].tag);
-               
+
                prev = work->prev;
                memory = g_list_delete_link(memory, work);
                work = prev;
@@ -268,14 +270,10 @@ void log_window_append(const gchar *str, LogType type)
 
        log_window_insert_text(buffer, &iter, str, logdefs[type].tag);
 
-#if GTK_CHECK_VERSION(2,20,0)
-       if (gtk_widget_get_visible(text))
-#else
-       if (GTK_WIDGET_VISIBLE(text))
-#endif
+       if (gtk_widget_get_visible(GTK_WIDGET(text)))
                {
                GtkTextMark *mark;
-               
+
                mark = gtk_text_buffer_get_mark(buffer, "end");
                gtk_text_view_scroll_mark_onscreen(text, mark);
                }
index 1397c7c..5b3f04a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Vladimir Nadvornik, Laurent Monin
  * based on logwindow.[ch] from Sylpheed 2.4.7 (C) Hiroyuki Yamamoto
index db832a1..c56ab57 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -19,6 +19,7 @@
 #ifdef G_OS_UNIX
 #include <pwd.h>
 #endif
+#include <locale.h>
 
 #include "main.h"
 
 #include "pixbuf_util.h"
 #include "glua.h"
 
-#ifdef HAVE_LIBCHAMPLAIN
-#ifdef HAVE_LIBCHAMPLAIN_GTK
+#ifdef HAVE_CLUTTER
 #include <clutter-gtk/clutter-gtk.h>
 #endif
-#endif
 
 
 gboolean thumb_format_changed = FALSE;
@@ -143,7 +142,7 @@ static void parse_command_line_add_dir(const gchar *dir, gchar **path, gchar **f
        path_parsed = g_strdup(dir);
        parse_out_relatives(path_parsed);
        dir_fd = file_data_new_dir(path_parsed);
-       
+
 
        if (filelist_read(dir_fd, &files, NULL))
                {
@@ -213,9 +212,9 @@ static void parse_command_line(gint argc, gchar *argv[])
        GList *remote_errors = NULL;
        gboolean remote_do = FALSE;
        gchar *first_dir = NULL;
-       
+
        command_line = g_new0(CommandLine, 1);
-       
+
        command_line->argc = argc;
        command_line->argv = argv;
 
@@ -373,12 +372,12 @@ static void parse_command_line(gint argc, gchar *argv[])
                if (remote_errors)
                        {
                        GList *work = remote_errors;
-                       
+
                        printf_term(_("Invalid or ignored remote options: "));
                        while (work)
                                {
                                gchar *opt = work->data;
-                                               
+
                                printf_term("%s%s", (work == remote_errors) ? "" : ", ", opt);
                                work = work->next;
                                }
@@ -544,7 +543,7 @@ static gboolean gq_accel_map_save(const gchar *path)
                log_printf(_("error saving file: %s\n"), path);
                return FALSE;
                }
-       
+
        gstring = g_string_new("; ");
        if (g_get_prgname())
                g_string_append(gstring, g_get_prgname());
@@ -700,7 +699,7 @@ void exit_program(void)
        exit_program_final();
 }
 
-/* This code is supposed to handle situation when a file mmaped by image_loader 
+/* This code is supposed to handle situation when a file mmaped by image_loader
  * or by exif loader is truncated by some other process.
  * This is probably not completely correct according to posix, because
  * mmap is not in the list of calls that can be used safely in signal handler,
@@ -743,12 +742,12 @@ gint main(gint argc, gchar *argv[])
        gdk_threads_enter();
 
 #endif
-       
+
        /* init execution time counter (debug only) */
        init_exec_time();
 
        /* setup locale, i18n */
-       gtk_set_locale();
+       setlocale(LC_ALL, "");
 
 #ifdef ENABLE_NLS
        bindtextdomain(PACKAGE, GQ_LOCALEDIR);
@@ -773,22 +772,18 @@ gint main(gint argc, gchar *argv[])
        file_data_register_notify_func(histogram_notify_cb, NULL, NOTIFY_PRIORITY_HIGH);
        file_data_register_notify_func(collect_manager_notify_cb, NULL, NOTIFY_PRIORITY_LOW);
        file_data_register_notify_func(metadata_notify_cb, NULL, NOTIFY_PRIORITY_LOW);
-       
+
 
        gtkrc_load();
 
        parse_command_line_for_debug_option(argc, argv);
-       DEBUG_1("%s main: gtk_init", get_exec_time());   
-#ifdef HAVE_LIBCHAMPLAIN
-#ifdef HAVE_LIBCHAMPLAIN_GTK
+       DEBUG_1("%s main: gtk_init", get_exec_time());
+#ifdef HAVE_CLUTTER
        if (gtk_clutter_init(&argc, &argv) != CLUTTER_INIT_SUCCESS)
                {
                log_printf("Can't initialize clutter-gtk.\n");
                exit(1);
                }
-#else
-       gtk_init(&argc, &argv);
-#endif
 #else
        gtk_init(&argc, &argv);
 #endif
@@ -803,13 +798,17 @@ gint main(gint argc, gchar *argv[])
                log_printf("!!! %s may quit unexpectedly with a relocation error.\n", GQ_APPNAME);
                }
 
-       DEBUG_1("%s main: pixbuf_inline_register_stock_icons", get_exec_time());         
+       DEBUG_1("%s main: pixbuf_inline_register_stock_icons", get_exec_time());
        pixbuf_inline_register_stock_icons();
 
-       DEBUG_1("%s main: parse_command_line", get_exec_time());         
+       DEBUG_1("%s main: setting default options before commandline handling", get_exec_time());
+       options = init_options(NULL);
+       setup_default_options(options);
+
+       DEBUG_1("%s main: parse_command_line", get_exec_time());
        parse_command_line(argc, argv);
 
-       DEBUG_1("%s main: mkdir_if_not_exists", get_exec_time());        
+       DEBUG_1("%s main: mkdir_if_not_exists", get_exec_time());
        /* these functions don't depend on config file */
        mkdir_if_not_exists(get_rc_dir());
        mkdir_if_not_exists(get_collections_dir());
@@ -823,19 +822,17 @@ gint main(gint argc, gchar *argv[])
 
        /* restore session from the config file */
 
-       options = init_options(NULL);
-       setup_default_options(options);
 
-       DEBUG_1("%s main: load_options", get_exec_time());       
+       DEBUG_1("%s main: load_options", get_exec_time());
        if (!load_options(options))
                {
                /* load_options calls these functions after it parses global options, we have to call it here if it fails */
                filter_add_defaults();
-               filter_rebuild(); 
+               filter_rebuild();
                }
 
        /* handle missing config file and commandline additions*/
-       if (!layout_window_list) 
+       if (!layout_window_list)
                {
                /* broken or no config file */
                layout_new_from_config(NULL, NULL, TRUE);
@@ -919,8 +916,8 @@ gint main(gint argc, gchar *argv[])
        buf = g_build_filename(get_rc_dir(), ".command", NULL);
        remote_connection = remote_server_init(buf, cd);
        g_free(buf);
-       
-       DEBUG_1("%s main: gtk_main", get_exec_time());   
+
+       DEBUG_1("%s main: gtk_main", get_exec_time());
        gtk_main();
 #ifdef HAVE_GTHREAD
        gdk_threads_leave();
index 74a8137..b800477 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 0201295..7d493a8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -54,9 +54,9 @@ static GtkWidget *add_menu_item(GtkWidget *menu, gchar *label, GtkAccelGroup *ac
 
 gpointer submenu_item_get_data(GtkWidget *menu)
 {
-       if (!menu->parent || !GTK_IS_MENU(menu->parent)) return NULL;
+       if (!gtk_widget_get_parent(menu) || !GTK_IS_MENU(gtk_widget_get_parent(menu))) return NULL;
 
-       return g_object_get_data(G_OBJECT(menu->parent), "submenu_data");
+       return g_object_get_data(G_OBJECT(gtk_widget_get_parent(menu)), "submenu_data");
 }
 
 /*
@@ -96,7 +96,7 @@ static void add_edit_items(GtkWidget *menu, GCallback func, GList *fd_list)
                        g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(edit_item_destroy_cb), key);
                        }
                }
-       
+
        g_list_free(editors_list);
 }
 
@@ -135,6 +135,9 @@ gchar *sort_type_get_text(SortType method)
                case SORT_TIME:
                        return _("Sort by date");
                        break;
+               case SORT_EXIFTIME:
+                       return _("Sort by Exif-date");
+                       break;
                case SORT_NONE:
                        return _("Unsorted");
                        break;
@@ -188,6 +191,7 @@ GtkWidget *submenu_add_sort(GtkWidget *menu, GCallback func, gpointer data,
        submenu_add_sort_item(submenu, func, SORT_NUMBER, show_current, type);
 #endif
        submenu_add_sort_item(submenu, func, SORT_TIME, show_current, type);
+       submenu_add_sort_item(submenu, func, SORT_EXIFTIME, show_current, type);
        submenu_add_sort_item(submenu, func, SORT_SIZE, show_current, type);
        if (include_path) submenu_add_sort_item(submenu, func, SORT_PATH, show_current, type);
        if (include_none) submenu_add_sort_item(submenu, func, SORT_NONE, show_current, type);
index 3bf77dc..5edfdec 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index f265927..5842e74 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis, Laurent Monin
  *
@@ -75,14 +75,14 @@ static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **commen
 static void metadata_cache_update(FileData *fd, const gchar *key, const GList *values)
 {
        GList *work;
-       
+
        work = fd->cached_metadata;
        while (work)
                {
                GList *entry = work->data;
                gchar *entry_key = entry->data;
-               
-               if (strcmp(entry_key, key) == 0) 
+
+               if (strcmp(entry_key, key) == 0)
                        {
                        /* key found - just replace values */
                        GList *old_values = entry->next;
@@ -95,9 +95,9 @@ static void metadata_cache_update(FileData *fd, const gchar *key, const GList *v
                        }
                work = work->next;
                }
-       
+
        /* key not found - prepend new entry */
-       fd->cached_metadata = g_list_prepend(fd->cached_metadata, 
+       fd->cached_metadata = g_list_prepend(fd->cached_metadata,
                                g_list_prepend(string_list_copy(values), g_strdup(key)));
        DEBUG_1("added %s %s\n", key, fd->path);
 
@@ -106,14 +106,14 @@ static void metadata_cache_update(FileData *fd, const gchar *key, const GList *v
 static const GList *metadata_cache_get(FileData *fd, const gchar *key)
 {
        GList *work;
-       
+
        work = fd->cached_metadata;
        while (work)
                {
                GList *entry = work->data;
                gchar *entry_key = entry->data;
-               
-               if (strcmp(entry_key, key) == 0) 
+
+               if (strcmp(entry_key, key) == 0)
                        {
                        /* key found */
                        DEBUG_1("found %s %s\n", key, fd->path);
@@ -128,14 +128,14 @@ static const GList *metadata_cache_get(FileData *fd, const gchar *key)
 static void metadata_cache_remove(FileData *fd, const gchar *key)
 {
        GList *work;
-       
+
        work = fd->cached_metadata;
        while (work)
                {
                GList *entry = work->data;
                gchar *entry_key = entry->data;
-               
-               if (strcmp(entry_key, key) == 0) 
+
+               if (strcmp(entry_key, key) == 0)
                        {
                        /* key found */
                        string_list_free(entry);
@@ -152,13 +152,13 @@ void metadata_cache_free(FileData *fd)
 {
        GList *work;
        if (fd->cached_metadata) DEBUG_1("freed %s\n", fd->path);
-       
+
        work = fd->cached_metadata;
        while (work)
                {
                GList *entry = work->data;
                string_list_free(entry);
-               
+
                work = work->next;
                }
        g_list_free(fd->cached_metadata);
@@ -185,16 +185,16 @@ static void metadata_write_queue_add(FileData *fd)
                {
                metadata_write_queue = g_list_prepend(metadata_write_queue, fd);
                file_data_ref(fd);
-               
+
                layout_util_status_update_write_all();
                }
 
-       if (metadata_write_idle_id) 
+       if (metadata_write_idle_id)
                {
                g_source_remove(metadata_write_idle_id);
                metadata_write_idle_id = 0;
                }
-       
+
        if (options->metadata.confirm_after_timeout)
                {
                metadata_write_idle_id = g_timeout_add(options->metadata.confirm_timeout * 1000, metadata_write_queue_idle_cb, NULL);
@@ -208,7 +208,7 @@ gboolean metadata_write_queue_remove(FileData *fd)
        fd->modified_xmp = NULL;
 
        metadata_write_queue = g_list_remove(metadata_write_queue, fd);
-       
+
        file_data_increment_version(fd);
        file_data_send_notification(fd, NOTIFY_REREAD);
 
@@ -222,7 +222,7 @@ gboolean metadata_write_queue_remove_list(GList *list)
 {
        GList *work;
        gboolean ret = TRUE;
-       
+
        work = list;
        while (work)
                {
@@ -238,8 +238,8 @@ void metadata_notify_cb(FileData *fd, NotifyType type, gpointer data)
        if (type & (NOTIFY_REREAD | NOTIFY_CHANGE))
                {
                metadata_cache_free(fd);
-               
-               if (g_list_find(metadata_write_queue, fd)) 
+
+               if (g_list_find(metadata_write_queue, fd))
                        {
                        DEBUG_1("Notify metadata: %s %04x", fd->path, type);
                        if (!isname(fd->path))
@@ -255,27 +255,27 @@ gboolean metadata_write_queue_confirm(gboolean force_dialog, FileUtilDoneFunc do
 {
        GList *work;
        GList *to_approve = NULL;
-       
+
        work = metadata_write_queue;
        while (work)
                {
                FileData *fd = work->data;
                work = work->next;
-               
+
                if (!isname(fd->path))
                        {
                        /* ignore deleted files */
                        metadata_write_queue_remove(fd);
                        continue;
                        }
-               
+
                if (fd->change) continue; /* another operation in progress, skip this file for now */
-               
+
                to_approve = g_list_prepend(to_approve, file_data_ref(fd));
                }
 
        file_util_write_metadata(NULL, to_approve, NULL, force_dialog, done_func, done_data);
-       
+
        return (metadata_write_queue != NULL);
 }
 
@@ -290,10 +290,10 @@ gboolean metadata_write_perform(FileData *fd)
 {
        gboolean success;
        ExifData *exif;
-       
+
        g_assert(fd->change);
-       
-       if (fd->change->dest && 
+
+       if (fd->change->dest &&
            strcmp(extension_from_path(fd->change->dest), GQ_CACHE_EXT_METADATA) == 0)
                {
                success = metadata_legacy_write(fd);
@@ -302,24 +302,24 @@ gboolean metadata_write_perform(FileData *fd)
                }
 
        /* write via exiv2 */
-       /*  we can either use cached metadata which have fd->modified_xmp already applied 
+       /*  we can either use cached metadata which have fd->modified_xmp already applied
                                     or read metadata from file and apply fd->modified_xmp
            metadata are read also if the file was modified meanwhile */
-       exif = exif_read_fd(fd); 
+       exif = exif_read_fd(fd);
        if (!exif) return FALSE;
 
        success = (fd->change->dest) ? exif_write_sidecar(exif, fd->change->dest) : exif_write(exif); /* write modified metadata */
        exif_free_fd(fd, exif);
 
        if (fd->change->dest)
-               /* this will create a FileData for the sidecar and link it to the main file 
+               /* this will create a FileData for the sidecar and link it to the main file
                   (we can't wait until the sidecar is discovered by directory scanning because
-                   exif_read_fd is called before that and it would read the main file only and 
+                   exif_read_fd is called before that and it would read the main file only and
                    store the metadata in the cache)
                    FIXME: this does not catch new sidecars created by independent external programs
                */
-               file_data_unref(file_data_new_group(fd->change->dest)); 
-               
+               file_data_unref(file_data_new_group(fd->change->dest));
+
        if (success) metadata_legacy_delete(fd, fd->change->dest);
        return success;
 }
@@ -332,7 +332,7 @@ gint metadata_queue_length(void)
 static gboolean metadata_check_key(const gchar *keys[], const gchar *key)
 {
        const gchar **k = keys;
-       
+
        while (*k)
                {
                if (strcmp(key, *k) == 0) return TRUE;
@@ -344,9 +344,9 @@ static gboolean metadata_check_key(const gchar *keys[], const gchar *key)
 gboolean metadata_write_revert(FileData *fd, const gchar *key)
 {
        if (!fd->modified_xmp) return FALSE;
-       
+
        g_hash_table_remove(fd->modified_xmp, key);
-       
+
        if (g_hash_table_size(fd->modified_xmp) == 0)
                {
                metadata_write_queue_remove(fd);
@@ -367,9 +367,9 @@ gboolean metadata_write_list(FileData *fd, const gchar *key, const GList *values
                fd->modified_xmp = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)string_list_free);
                }
        g_hash_table_insert(fd->modified_xmp, g_strdup(key), string_list_copy((GList *)values));
-       
+
        metadata_cache_remove(fd, key);
-       
+
        if (fd->exif)
                {
                exif_update_metadata(fd->exif, key, values);
@@ -381,13 +381,13 @@ gboolean metadata_write_list(FileData *fd, const gchar *key, const GList *values
        if (options->metadata.sync_grouped_files && metadata_check_key(group_keys, key))
                {
                GList *work = fd->sidecar_files;
-               
+
                while (work)
                        {
                        FileData *sfd = work->data;
                        work = work->next;
-                       
-                       if (filter_file_class(sfd->extension, FORMAT_CLASS_META)) continue; 
+
+                       if (filter_file_class(sfd->extension, FORMAT_CLASS_META)) continue;
 
                        metadata_write_list(sfd, key, values);
                        }
@@ -396,7 +396,7 @@ gboolean metadata_write_list(FileData *fd, const gchar *key, const GList *values
 
        return TRUE;
 }
-       
+
 gboolean metadata_write_string(FileData *fd, const gchar *key, const char *value)
 {
        GList *list = g_list_append(NULL, g_strdup(value));
@@ -408,8 +408,8 @@ gboolean metadata_write_string(FileData *fd, const gchar *key, const char *value
 gboolean metadata_write_int(FileData *fd, const gchar *key, guint64 value)
 {
        gchar string[50];
-       
-       g_snprintf(string, sizeof(string), "%ld", value);
+
+       g_snprintf(string, sizeof(string), "%llu", (unsigned long long) value);
        return metadata_write_string(fd, key, string);
 }
 
@@ -469,17 +469,17 @@ static gboolean metadata_legacy_write(FileData *fd)
        have_keywords = g_hash_table_lookup_extended(fd->modified_xmp, KEYWORD_KEY, NULL, &keywords);
        have_comment = g_hash_table_lookup_extended(fd->modified_xmp, COMMENT_KEY, NULL, &comment_l);
        comment = (have_comment && comment_l) ? ((GList *)comment_l)->data : NULL;
-       
+
        if (!have_keywords || !have_comment) metadata_file_read(metadata_pathl, &orig_keywords, &orig_comment);
-       
-       success = metadata_file_write(metadata_pathl, 
+
+       success = metadata_file_write(metadata_pathl,
                                      have_keywords ? (GList *)keywords : orig_keywords,
                                      have_comment ? comment : orig_comment);
 
        g_free(metadata_pathl);
        g_free(orig_comment);
        string_list_free(orig_keywords);
-       
+
        return success;
 }
 
@@ -502,10 +502,10 @@ static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **commen
                if (*ptr == '[' && key != MK_COMMENT)
                        {
                        gchar *keystr = ++ptr;
-                       
+
                        key = MK_NONE;
                        while (*ptr != ']' && *ptr != '\n' && *ptr != '\0') ptr++;
-                       
+
                        if (*ptr == ']')
                                {
                                *ptr = '\0';
@@ -516,7 +516,7 @@ static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **commen
                                }
                        continue;
                        }
-               
+
                switch (key)
                        {
                        case MK_NONE:
@@ -539,10 +539,10 @@ static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **commen
                                break;
                        }
                }
-       
+
        fclose(f);
 
-       if (keywords) 
+       if (keywords)
                {
                *keywords = g_list_reverse(list);
                }
@@ -550,7 +550,7 @@ static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **commen
                {
                string_list_free(list);
                }
-               
+
        if (comment_build)
                {
                if (comment)
@@ -584,7 +584,7 @@ static void metadata_legacy_delete(FileData *fd, const gchar *except)
        if (!fd) return;
 
        metadata_path = cache_find_location(CACHE_TYPE_METADATA, fd->path);
-       if (metadata_path && (!except || strcmp(metadata_path, except) != 0)) 
+       if (metadata_path && (!except || strcmp(metadata_path, except) != 0))
                {
                metadata_pathl = path_from_utf8(metadata_path);
                unlink(metadata_pathl);
@@ -593,10 +593,10 @@ static void metadata_legacy_delete(FileData *fd, const gchar *except)
                }
 
 #ifdef HAVE_EXIV2
-       /* without exiv2: do not delete xmp metadata because we are not able to convert it, 
+       /* without exiv2: do not delete xmp metadata because we are not able to convert it,
           just ignore it */
        metadata_path = cache_find_location(CACHE_TYPE_XMP_METADATA, fd->path);
-       if (metadata_path && (!except || strcmp(metadata_path, except) != 0)) 
+       if (metadata_path && (!except || strcmp(metadata_path, except) != 0))
                {
                metadata_pathl = path_from_utf8(metadata_path);
                unlink(metadata_pathl);
@@ -611,7 +611,7 @@ static gboolean metadata_legacy_read(FileData *fd, GList **keywords, gchar **com
        gchar *metadata_path;
        gchar *metadata_pathl;
        gboolean success = FALSE;
-       
+
        if (!fd) return FALSE;
 
        metadata_path = cache_find_location(CACHE_TYPE_METADATA, fd->path);
@@ -666,13 +666,13 @@ GList *metadata_read_list(FileData *fd, const gchar *key, MetadataFormat format)
                }
 
 
-       if (format == METADATA_PLAIN && strcmp(key, KEYWORD_KEY) == 0 
+       if (format == METADATA_PLAIN && strcmp(key, KEYWORD_KEY) == 0
            && (cache_entry = metadata_cache_get(fd, key)))
                {
                return string_list_copy(cache_entry->next);
                }
 
-       /* 
+       /*
            Legacy metadata file is the primary source if it exists.
            Merging the lists does not make much sense, because the existence of
            legacy metadata file indicates that the other metadata sources are not
@@ -681,9 +681,9 @@ GList *metadata_read_list(FileData *fd, const gchar *key, MetadataFormat format)
        */
        if (strcmp(key, KEYWORD_KEY) == 0)
                {
-               if (metadata_legacy_read(fd, &list, NULL)) 
+               if (metadata_legacy_read(fd, &list, NULL))
                        {
-                       if (format == METADATA_PLAIN) 
+                       if (format == METADATA_PLAIN)
                                {
                                metadata_cache_update(fd, key, list);
                                }
@@ -699,17 +699,17 @@ GList *metadata_read_list(FileData *fd, const gchar *key, MetadataFormat format)
                {
                return g_list_append(NULL, metadata_file_info(fd, key, format));
                }
-       
+
        exif = exif_read_fd(fd); /* this is cached, thus inexpensive */
        if (!exif) return NULL;
        list = exif_get_metadata(exif, key, format);
        exif_free_fd(fd, exif);
-       
+
        if (format == METADATA_PLAIN && strcmp(key, KEYWORD_KEY) == 0)
                {
                metadata_cache_update(fd, key, list);
                }
-               
+
        return list;
 }
 
@@ -732,7 +732,7 @@ guint64 metadata_read_int(FileData *fd, const gchar *key, guint64 fallback)
        gchar *endptr;
        gchar *string = metadata_read_string(fd, key, METADATA_PLAIN);
        if (!string) return fallback;
-       
+
        ret = g_ascii_strtoull(string, &endptr, 10);
        if (string == endptr) ret = fallback;
        g_free(string);
@@ -747,40 +747,40 @@ gdouble metadata_read_GPS_coord(FileData *fd, const gchar *key, gdouble fallback
        gboolean ok = FALSE;
        gchar *string = metadata_read_string(fd, key, METADATA_PLAIN);
        if (!string) return fallback;
-       
+
        deg = g_ascii_strtod(string, &endptr);
        if (*endptr == ',')
                {
                min = g_ascii_strtod(endptr + 1, &endptr);
                if (*endptr == ',')
                        sec = g_ascii_strtod(endptr + 1, &endptr);
-               else 
+               else
                        sec = 0.0;
-               
-               
-               if (*endptr == 'S' || *endptr == 'W' || *endptr == 'N' || *endptr == 'E') 
+
+
+               if (*endptr == 'S' || *endptr == 'W' || *endptr == 'N' || *endptr == 'E')
                        {
                        coord = deg + min /60.0 + sec / 3600.0;
                        ok = TRUE;
                        if (*endptr == 'S' || *endptr == 'W') coord = -coord;
                        }
                }
-       
+
        if (!ok)
                {
                coord = fallback;
                log_printf("unable to parse GPS coordinate '%s'\n", string);
                }
-       
+
        g_free(string);
        return coord;
 }
-       
+
 gboolean metadata_append_string(FileData *fd, const gchar *key, const char *value)
 {
        gchar *str = metadata_read_string(fd, key, METADATA_PLAIN);
-       
-       if (!str) 
+
+       if (!str)
                {
                return metadata_write_string(fd, key, value);
                }
@@ -797,8 +797,8 @@ gboolean metadata_append_string(FileData *fd, const gchar *key, const char *valu
 gboolean metadata_append_list(FileData *fd, const gchar *key, const GList *values)
 {
        GList *list = metadata_read_list(fd, key, METADATA_PLAIN);
-       
-       if (!list) 
+
+       if (!list)
                {
                return metadata_write_list(fd, key, values);
                }
@@ -807,7 +807,7 @@ gboolean metadata_append_list(FileData *fd, const gchar *key, const GList *value
                gboolean ret;
                list = g_list_concat(list, string_list_copy(values));
                list = remove_duplicate_strings_from_list(list);
-               
+
                ret = metadata_write_list(fd, key, list);
                string_list_free(list);
                return ret;
@@ -929,7 +929,7 @@ GList *string_to_keywords_list(const gchar *text)
 /*
  * keywords to marks
  */
+
 
 gboolean meta_data_get_keyword_mark(FileData *fd, gint n, gpointer data)
 {
@@ -954,14 +954,14 @@ gboolean meta_data_set_keyword_mark(FileData *fd, gint n, gboolean value, gpoint
        GList *path = data;
        GList *keywords = NULL;
        GtkTreeIter iter;
-       
+
        if (!keyword_tree_get_iter(GTK_TREE_MODEL(keyword_tree), &iter, path)) return FALSE;
 
        keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN);
 
        if (!!keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords) != !!value)
                {
-               if (value) 
+               if (value)
                        {
                        keyword_tree_set(GTK_TREE_MODEL(keyword_tree), &iter, &keywords);
                        }
@@ -990,12 +990,12 @@ void meta_data_connect_mark_with_keyword(GtkTreeModel *keyword_tree, GtkTreeIter
        for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
                {
                file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &mark_func_data);
-               if (get_mark_func == meta_data_get_keyword_mark) 
+               if (get_mark_func == meta_data_get_keyword_mark)
                        {
                        GtkTreeIter old_kw_iter;
                        GList *old_path = mark_func_data;
-                       
-                       if (keyword_tree_get_iter(keyword_tree, &old_kw_iter, old_path) && 
+
+                       if (keyword_tree_get_iter(keyword_tree, &old_kw_iter, old_path) &&
                            (i == mark || /* release any previous connection of given mark */
                             keyword_compare(keyword_tree, &old_kw_iter, kw_iter) == 0)) /* or given keyword */
                                {
@@ -1012,7 +1012,7 @@ void meta_data_connect_mark_with_keyword(GtkTreeModel *keyword_tree, GtkTreeIter
                gchar *mark_str;
                path = keyword_tree_get_path(keyword_tree, kw_iter);
                file_data_register_mark_func(mark, meta_data_get_keyword_mark, meta_data_set_keyword_mark, path, (GDestroyNotify)string_list_free);
-               
+
                mark_str = g_strdup_printf("%d", mark + 1);
                gtk_tree_store_set(GTK_TREE_STORE(keyword_tree), kw_iter, KEYWORD_COLUMN_MARK, mark_str, -1);
                g_free(mark_str);
@@ -1075,7 +1075,7 @@ gboolean keyword_same_parent(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTree
 {
        GtkTreeIter parent_a;
        GtkTreeIter parent_b;
-       
+
        gboolean valid_pa = gtk_tree_model_iter_parent(keyword_tree, &parent_a, a);
        gboolean valid_pb = gtk_tree_model_iter_parent(keyword_tree, &parent_b, b);
 
@@ -1096,7 +1096,7 @@ gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, Gtk
        gboolean toplevel = FALSE;
        gboolean ret;
        gchar *casefold;
-       
+
        if (parent_ptr)
                {
                parent = *parent_ptr;
@@ -1109,12 +1109,12 @@ gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, Gtk
                {
                toplevel = TRUE;
                }
-       
+
        if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &iter, toplevel ? NULL : &parent)) return FALSE;
-       
+
        casefold = g_utf8_casefold(name, -1);
        ret = FALSE;
-       
+
        while (TRUE)
                {
                if (!(exclude_sibling && sibling && keyword_compare(keyword_tree, &iter, sibling) == 0))
@@ -1132,7 +1132,7 @@ gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, Gtk
                                g_free(iter_casefold);
                                } // if (options->metadata.tags_cas...
                        }
-               if (ret) 
+               if (ret)
                        {
                        if (result) *result = iter;
                        break;
@@ -1168,11 +1168,11 @@ void keyword_copy(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from
 void keyword_copy_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from)
 {
        GtkTreeIter from_child;
-       
+
        keyword_copy(keyword_tree, to, from);
-       
+
        if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &from_child, from)) return;
-       
+
        while (TRUE)
                {
                GtkTreeIter to_child;
@@ -1192,7 +1192,7 @@ GList *keyword_tree_get_path(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr)
 {
        GList *path = NULL;
        GtkTreeIter iter = *iter_ptr;
-       
+
        while (TRUE)
                {
                GtkTreeIter parent;
@@ -1208,7 +1208,7 @@ gboolean keyword_tree_get_iter(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr
        GtkTreeIter iter;
 
        if (!gtk_tree_model_get_iter_first(keyword_tree, &iter)) return FALSE;
-       
+
        while (TRUE)
                {
                GtkTreeIter children;
@@ -1220,12 +1220,12 @@ gboolean keyword_tree_get_iter(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr
                        if (!gtk_tree_model_iter_next(keyword_tree, &iter)) return FALSE;
                        }
                path = path->next;
-               if (!path) 
+               if (!path)
                        {
                        *iter_ptr = iter;
                        return TRUE;
                        }
-                       
+
                if (!gtk_tree_model_iter_children(keyword_tree, &children, &iter)) return FALSE;
                iter = children;
                }
@@ -1240,7 +1240,7 @@ static gboolean keyword_tree_is_set_casefold(GtkTreeModel *keyword_tree, GtkTree
                {
                /* for the purpose of expanding and hiding, a helper is set if it has any children set */
                GtkTreeIter child;
-               if (!gtk_tree_model_iter_children(keyword_tree, &child, &iter)) 
+               if (!gtk_tree_model_iter_children(keyword_tree, &child, &iter))
                        return FALSE; /* this should happen only on empty helpers */
 
                while (TRUE)
@@ -1249,7 +1249,7 @@ static gboolean keyword_tree_is_set_casefold(GtkTreeModel *keyword_tree, GtkTree
                        if (!gtk_tree_model_iter_next(keyword_tree, &child)) return FALSE;
                        }
                }
-       
+
        while (TRUE)
                {
                GtkTreeIter parent;
@@ -1273,7 +1273,7 @@ static gboolean keyword_tree_is_set_casefold(GtkTreeModel *keyword_tree, GtkTree
                        g_free(iter_casefold);
                        if (!found) return FALSE;
                        }
-               
+
                if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return TRUE;
                iter = parent;
                }
@@ -1421,7 +1421,7 @@ static void keyword_tree_reset_recursive(GtkTreeModel *keyword_tree, GtkTreeIter
 {
        GtkTreeIter child;
        keyword_tree_reset1(keyword_tree, iter, kw_list);
-       
+
        if (!gtk_tree_model_iter_children(keyword_tree, &child, iter)) return;
 
        while (TRUE)
@@ -1434,8 +1434,8 @@ static void keyword_tree_reset_recursive(GtkTreeModel *keyword_tree, GtkTreeIter
 static gboolean keyword_tree_check_empty_children(GtkTreeModel *keyword_tree, GtkTreeIter *parent, GList *kw_list)
 {
        GtkTreeIter iter;
-       
-       if (!gtk_tree_model_iter_children(keyword_tree, &iter, parent)) 
+
+       if (!gtk_tree_model_iter_children(keyword_tree, &iter, parent))
                return TRUE; /* this should happen only on empty helpers */
 
        while (TRUE)
@@ -1453,7 +1453,7 @@ void keyword_tree_reset(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr, GList
 
        if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return;
        iter = parent;
-       
+
        while (keyword_tree_check_empty_children(keyword_tree, &iter, *kw_list))
                {
                GtkTreeIter parent;
@@ -1471,12 +1471,12 @@ void keyword_delete(GtkTreeStore *keyword_tree, GtkTreeIter *iter_ptr)
                {
                keyword_delete(keyword_tree, &child);
                }
-       
+
        meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree), iter_ptr, -1);
 
        gtk_tree_model_get(GTK_TREE_MODEL(keyword_tree), iter_ptr, KEYWORD_COLUMN_HIDE_IN, &list, -1);
        g_list_free(list);
-       
+
        gtk_tree_store_remove(keyword_tree, iter_ptr);
 }
 
@@ -1531,7 +1531,7 @@ static void keyword_hide_unset_in_recursive(GtkTreeStore *keyword_tree, GtkTreeI
                else
                        {
                        GtkTreeIter child;
-                       if (gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &child, &iter)) 
+                       if (gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &child, &iter))
                                {
                                keyword_hide_unset_in_recursive(keyword_tree, &child, id, keywords);
                                }
@@ -1578,7 +1578,7 @@ void keyword_show_set_in(GtkTreeStore *keyword_tree, gpointer id, GList *keyword
 void keyword_tree_new(void)
 {
        if (keyword_tree) return;
-       
+
        keyword_tree = gtk_tree_store_new(KEYWORD_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER);
 }
 
@@ -1592,70 +1592,70 @@ static GtkTreeIter keyword_tree_default_append(GtkTreeStore *keyword_tree, GtkTr
 
 void keyword_tree_new_default(void)
 {
-       GtkTreeIter i1, i2, i3;
+       GtkTreeIter i1, i2;
 
        if (!keyword_tree) keyword_tree_new();
 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("People"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Family"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Free time"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Children"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Sport"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Culture"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Festival"), TRUE); 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Nature"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Animal"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Bird"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Insect"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Pets"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Wildlife"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Zoo"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Plant"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Tree"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Flower"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Water"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("River"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Lake"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Sea"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Landscape"), TRUE); 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Art"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Statue"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Painting"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Historic"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Modern"), TRUE); 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("City"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Park"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Street"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Square"), TRUE); 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Architecture"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Buildings"), FALSE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("House"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Cathedral"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Palace"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Castle"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Bridge"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Interior"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Historic"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Modern"), TRUE); 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Places"), FALSE); 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Conditions"), FALSE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Night"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Lights"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Reflections"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Sun"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Weather"), FALSE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Fog"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Rain"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Clouds"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Snow"), TRUE); 
-                       i3 = keyword_tree_default_append(keyword_tree, &i2, _("Sunny weather"), TRUE); 
-       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Photo"), FALSE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Edited"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Detail"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Macro"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Portrait"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Black and White"), TRUE); 
-               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Perspective"), TRUE); 
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("People"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Family"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Free time"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Children"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Sport"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Culture"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Festival"), TRUE);
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Nature"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Animal"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Bird"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Insect"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Pets"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Wildlife"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Zoo"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Plant"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Tree"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Flower"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Water"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("River"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Lake"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Sea"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Landscape"), TRUE);
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Art"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Statue"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Painting"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Historic"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Modern"), TRUE);
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("City"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Park"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Street"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Square"), TRUE);
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Architecture"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Buildings"), FALSE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("House"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Cathedral"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Palace"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Castle"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Bridge"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Interior"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Historic"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Modern"), TRUE);
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Places"), FALSE);
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Conditions"), FALSE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Night"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Lights"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Reflections"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Sun"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Weather"), FALSE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Fog"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Rain"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Clouds"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Snow"), TRUE);
+                       keyword_tree_default_append(keyword_tree, &i2, _("Sunny weather"), TRUE);
+       i1 = keyword_tree_default_append(keyword_tree, NULL, _("Photo"), FALSE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Edited"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Detail"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Macro"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Portrait"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Black and White"), TRUE);
+               i2 = keyword_tree_default_append(keyword_tree, &i1, _("Perspective"), TRUE);
 }
 
 
@@ -1672,7 +1672,7 @@ static void keyword_tree_node_write_config(GtkTreeModel *keyword_tree, GtkTreeIt
                write_char_option(outstr, indent, "name", name);
                g_free(name);
                write_bool_option(outstr, indent, "kw", keyword_get_is_keyword(keyword_tree, &iter));
-               if (gtk_tree_model_iter_children(keyword_tree, &children, &iter)) 
+               if (gtk_tree_model_iter_children(keyword_tree, &children, &iter))
                        {
                        WRITE_STRING(">");
                        indent++;
@@ -1680,7 +1680,7 @@ static void keyword_tree_node_write_config(GtkTreeModel *keyword_tree, GtkTreeIt
                        indent--;
                        WRITE_NL(); WRITE_STRING("</keyword>");
                        }
-               else 
+               else
                        {
                        WRITE_STRING("/>");
                        }
@@ -1693,7 +1693,7 @@ void keyword_tree_write_config(GString *outstr, gint indent)
        GtkTreeIter iter;
        WRITE_NL(); WRITE_STRING("<keyword_tree>");
        indent++;
-       
+
        if (keyword_tree && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(keyword_tree), &iter))
                {
                keyword_tree_node_write_config(GTK_TREE_MODEL(keyword_tree), &iter, outstr, indent);
@@ -1717,7 +1717,7 @@ GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *pa
 
                log_printf("unknown attribute %s = %s\n", option, value);
                }
-       if (name && name[0]) 
+       if (name && name[0])
                {
                GtkTreeIter iter;
                /* re-use existing keyword if any */
index 1a9d42f..da2025b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis, Laurent Monin
  *
index 6b44393..6f244ec 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik / Laurent Monin
  *
@@ -22,7 +22,7 @@ gchar *utf8_validate_or_convert(const gchar *text)
        gint len;
 
        if (!text) return NULL;
-       
+
        len = strlen(text);
        if (!g_utf8_validate(text, len, NULL))
                return g_convert(text, len, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
@@ -160,7 +160,7 @@ int runcmd(gchar *cmd)
 
                DEBUG_1("%s : %d\n", msg, retval);
        }
-       
+
        return retval;
 #endif
 }
index 4ca81ec..ef2ef93 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik / Laurent Monin
  *
index 1d83a08..15c0351 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik, Laurent Monin
  *
@@ -38,7 +38,7 @@ ConfOptions *init_options(ConfOptions *options)
 
        options->dnd_icon_size = 48;
        options->duplicates_similarity_threshold = 99;
-       
+
        options->file_filter.disable = FALSE;
        options->file_filter.show_dot_directory = FALSE;
        options->file_filter.show_hidden_files = FALSE;
@@ -63,7 +63,6 @@ ConfOptions *init_options(ConfOptions *options)
        options->fullscreen.screen = -1;
 
        memset(&options->image.border_color, 0, sizeof(options->image.border_color));
-       options->image.dither_quality = GDK_RGB_DITHER_NORMAL;
        options->image.enable_read_ahead = TRUE;
        options->image.exif_rotate_enable = TRUE;
        options->image.exif_proof_rotate_enable = TRUE;
@@ -93,7 +92,7 @@ ConfOptions *init_options(ConfOptions *options)
        options->place_dialogs_under_mouse = FALSE;
 
        options->progressive_key_scrolling = TRUE;
-       
+
        options->metadata.enable_metadata_dirs = FALSE;
        options->metadata.save_in_image_file = FALSE;
        options->metadata.save_legacy_IPTC = FALSE;
@@ -107,7 +106,7 @@ ConfOptions *init_options(ConfOptions *options)
        options->metadata.confirm_on_dir_change = TRUE;
        options->metadata.keywords_case_sensitive = FALSE;
        options->metadata.write_orientation = TRUE;
-       
+
        options->show_icon_names = TRUE;
 
        options->slideshow.delay = 50;
@@ -125,7 +124,7 @@ ConfOptions *init_options(ConfOptions *options)
 
        options->tree_descend_subdirs = FALSE;
        options->update_on_time_change = TRUE;
-       
+
        options->stereo.fixed_w = 1920;
        options->stereo.fixed_h = 1080;
        options->stereo.fixed_x1 = 0;
@@ -161,17 +160,12 @@ void setup_default_options(ConfOptions *options)
 
        options->shell.path = g_strdup(GQ_DEFAULT_SHELL_PATH);
        options->shell.options = g_strdup(GQ_DEFAULT_SHELL_OPTIONS);
-
-#if 0  
-       for (i = 0; ExifUIList[i].key; i++)
-               ExifUIList[i].current = ExifUIList[i].default_value;
-#endif
 }
 
 void copy_layout_options(LayoutOptions *dest, const LayoutOptions *src)
 {
        free_layout_options_content(dest);
-       
+
        *dest = *src;
        dest->id = g_strdup(src->id);
        dest->order = g_strdup(src->order);
@@ -261,7 +255,7 @@ gboolean load_options(ConfOptions *options)
                DEBUG_1("Loading options from %s ... %s", rc_path, success ? "done" : "failed");
                g_free(rc_path);
                }
-       
+
        rc_path = g_build_filename(get_rc_dir(), RC_FILE_NAME, NULL);
        success = load_config_from_file(rc_path, TRUE);
        DEBUG_1("Loading options from %s ... %s", rc_path, success ? "done" : "failed");
index 2151a75..f888e7e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik, Laurent Monin
  *
@@ -60,7 +60,6 @@ struct _ConfOptions
 
                gint tile_cache_max;    /* in megabytes */
                gint image_cache_max;   /* in megabytes */
-               guint dither_quality;
                gboolean enable_read_ahead;
 
                ZoomMode zoom_mode;
@@ -68,6 +67,7 @@ struct _ConfOptions
                gboolean zoom_to_fit_allow_expand;
                guint zoom_quality;
                gint zoom_increment;    /* 10 is 1.0, 5 is 0.05, 20 is 2.0, etc. */
+               gboolean use_clutter_renderer;
 
                gboolean use_custom_border_color_in_fullscreen;
                gboolean use_custom_border_color;
@@ -96,7 +96,7 @@ struct _ConfOptions
        struct {
                gchar *ext;
        } sidecar;
-       
+
        /* collections */
        struct {
                gboolean rectangular_selection;
@@ -107,7 +107,7 @@ struct _ConfOptions
                gchar *path;
                gchar *options;
        } shell;
-       
+
        /* file sorting */
        struct {
                SortType method;
@@ -171,9 +171,9 @@ struct _ConfOptions
                gboolean warn_on_write_problems;
 
                gboolean save_legacy_format;
-               
+
                gboolean sync_grouped_files;
-               
+
                gboolean confirm_write;
                gint confirm_timeout;
                gboolean confirm_after_timeout;
@@ -182,7 +182,7 @@ struct _ConfOptions
                gboolean keywords_case_sensitive;
                gboolean write_orientation;
        } metadata;
-       
+
        /* Stereo */
        struct {
                gint mode;;
@@ -204,7 +204,7 @@ struct _ConfOptions
                        gboolean fs_flip_left;
                        gboolean fs_swap;
                        gboolean fs_temp_disable;
-               } tmp; 
+               } tmp;
        } stereo;
 };
 
index 511b220..96e5172 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -86,22 +86,11 @@ void pan_calendar_update(PanWindow *pw, PanItem *pi_day)
                        }
                }
 
-#if 0
-       if (!list) return;
-#endif
-
        grid = (gint)(sqrt(g_list_length(list)) + 0.5);
 
        x = pi_day->x + pi_day->width + 4;
        y = pi_day->y;
 
-#if 0
-       if (y + grid * (PAN_THUMB_SIZE + PAN_THUMB_GAP) + PAN_BOX_BORDER * 4 > pw->pr->image_height)
-               {
-               y = pw->pr->image_height - (grid * (PAN_THUMB_SIZE + PAN_THUMB_GAP) + PAN_BOX_BORDER * 4);
-               }
-#endif
-
        pbox = pan_item_box_new(pw, NULL, x, y, PAN_BOX_BORDER, PAN_BOX_BORDER,
                                PAN_CAL_POPUP_BORDER,
                                PAN_CAL_POPUP_COLOR, PAN_CAL_POPUP_ALPHA,
@@ -194,8 +183,6 @@ void pan_calendar_compute(PanWindow *pw, FileData *dir_fd, gint *width, gint *he
        time_t tc;
        gint count;
        gint day_max;
-       gint day_width;
-       gint day_height;
        gint grid;
        gint year = 0;
        gint month = 0;
@@ -240,8 +227,6 @@ void pan_calendar_compute(PanWindow *pw, FileData *dir_fd, gint *width, gint *he
        DEBUG_1("biggest day contains %d images", day_max);
 
        grid = (gint)(sqrt((gdouble)day_max) + 0.5) * (PAN_THUMB_SIZE + PAN_SHADOW_OFFSET * 2 + PAN_THUMB_GAP);
-       day_width = MAX(PAN_CAL_DAY_WIDTH, grid);
-       day_height = MAX(PAN_CAL_DAY_HEIGHT, grid);
 
        if (list)
                {
index f9dcd88..8788e20 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 5026ae7..4f1c527 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 0fa555b..b4539a7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -450,7 +450,7 @@ PanItem *pan_item_thumb_new(PanWindow *pw, FileData *fd, gint x, gint y)
        PanItem *pi;
 
        pi = g_new0(PanItem, 1);
-       
+
        pi->type = PAN_ITEM_THUMB;
        pi->fd = fd;
        pi->x = x;
index 6435d37..d65c4b2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index af231a2..33db08d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index f36bb73..5a6f91a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 9d6679a..2328756 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -150,32 +150,6 @@ static void pan_queue_image_done_cb(ImageLoader *il, gpointer data)
        while (pan_queue_step(pw));
 }
 
-#if 0
-static void pan_queue_image_area_cb(ImageLoader *il, guint x, guint y,
-                                   guint width, guint height, gpointer data)
-{
-       PanWindow *pw = data;
-
-       if (pw->queue_pi)
-               {
-               PanItem *pi;
-               gint rc;
-
-               pi = pw->queue_pi;
-
-               if (!pi->pixbuf)
-                       {
-                       pi->pixbuf = image_loader_get_pixbuf(pw->il);
-                       if (pi->pixbuf) g_object_ref(pi->pixbuf);
-                       }
-
-               rc = pi->refcount;
-               image_area_changed(pw->imd, pi->x + x, pi->y + y, width, height);
-               pi->refcount = rc;
-               }
-}
-#endif
-
 static gboolean pan_queue_step(PanWindow *pw)
 {
        PanItem *pi;
@@ -207,9 +181,6 @@ static gboolean pan_queue_step(PanWindow *pw)
                        image_loader_set_requested_size(pw->il, pi->width, pi->height);
                        }
 
-#if 0
-               image_loader_set_area_ready_func(pw->il, pan_queue_image_area_cb, pw);
-#endif
                g_signal_connect(G_OBJECT(pw->il), "error", (GCallback)pan_queue_image_done_cb, pw);
                g_signal_connect(G_OBJECT(pw->il), "done", (GCallback)pan_queue_image_done_cb, pw);
 
@@ -347,26 +318,6 @@ static gboolean pan_window_request_tile_cb(PixbufRenderer *pr, gint x, gint y,
 
        g_list_free(list);
 
-#if 0
-       if (x%512 == 0 && y%512 == 0)
-               {
-               PangoLayout *layout;
-               gchar *buf;
-
-               layout = gtk_widget_create_pango_layout((GtkWidget *)pr, NULL);
-
-               buf = g_strdup_printf("%d,%d\n(#%d)", x, y,
-                                     (x / pr->source_tile_width) +
-                                     (y / pr->source_tile_height * (pr->image_width/pr->source_tile_width + 1)));
-               pango_layout_set_text(layout, buf, -1);
-               g_free(buf);
-
-               pixbuf_draw_layout(pixbuf, layout, (GtkWidget *)pr, 0, 0, 0, 0, 0, 255);
-
-               g_object_unref(G_OBJECT(layout));
-               }
-#endif
-
        return TRUE;
 }
 
@@ -613,46 +564,6 @@ static gboolean pan_cache_step(PanWindow *pw)
        fd = pw->cache_todo->data;
        pw->cache_todo = g_list_remove(pw->cache_todo, fd);
 
-#if 0
-       if (enable_thumb_caching)
-               {
-               gchar *found;
-
-               found = cache_find_location(CACHE_TYPE_SIM, fd->path);
-               if (found && filetime(found) == fd->date)
-                       {
-                       cd = cache_sim_data_load(found);
-                       }
-               g_free(found);
-               }
-
-       if (!cd) cd = cache_sim_data_new();
-
-       if (!cd->dimensions)
-               {
-               cd->dimensions = image_load_dimensions(fd, &cd->width, &cd->height);
-               if (enable_thumb_caching &&
-                   cd->dimensions)
-                       {
-                       gchar *base;
-                       mode_t mode = 0755;
-
-                       base = cache_get_location(CACHE_TYPE_SIM, fd->path, FALSE, &mode);
-                       if (recursive_mkdir_if_not_exists(base, mode))
-                               {
-                               g_free(cd->path);
-                               cd->path = cache_get_location(CACHE_TYPE_SIM, fd->path, TRUE, NULL);
-                               if (cache_sim_data_save(cd))
-                                       {
-                                       filetime_set(cd->path, filetime(fd->path));
-                                       }
-                               }
-                       g_free(base);
-                       }
-
-               pw->cache_tick = 9;
-               }
-#endif
        pc = g_new0(PanCacheData, 1);
        pc->fd = file_data_ref(fd);
 
@@ -748,9 +659,6 @@ static void pan_grid_build(PanWindow *pw, gint width, gint height, gint grid_siz
        gint col, row;
        gint cw, ch;
        gint l;
-       gdouble total;
-       gdouble s;
-       gdouble aw, ah;
        gint i, j;
 
        pan_grid_clear(pw);
@@ -759,12 +667,6 @@ static void pan_grid_build(PanWindow *pw, gint width, gint height, gint grid_siz
 
        if (l < 1) return;
 
-       total = (gdouble)width * (gdouble)height / (gdouble)l;
-       s = sqrt(total);
-
-       aw = (gdouble)width / s;
-       ah = (gdouble)height / s;
-
        col = (gint)(sqrt((gdouble)l / grid_size) * width / height + 0.999);
        col = CLAMP(col, 1, l / grid_size + 1);
        row = (gint)((gdouble)l / grid_size / col);
@@ -1193,7 +1095,7 @@ static void pan_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *pu
 {
        PanWindow *pw = data;
 
-       gdk_window_get_origin(pw->imd->pr->window, x, y);
+       gdk_window_get_origin(gtk_widget_get_window(pw->imd->pr), x, y);
        popup_menu_position_clamp(menu, x, y, 0);
 }
 
@@ -1204,6 +1106,7 @@ static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, g
        FileData *fd;
        gboolean stop_signal = FALSE;
        GtkWidget *menu;
+       GtkWidget *imd_widget;
        gint x = 0;
        gint y = 0;
        gint focused;
@@ -1212,43 +1115,38 @@ static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, g
        pr = PIXBUF_RENDERER(pw->imd->pr);
        fd = pan_menu_click_fd(pw);
 
-#if GTK_CHECK_VERSION(2,20,0)
-       focused = (pw->fs || gtk_widget_has_focus(GTK_WIDGET(pw->imd->widget)));
+       imd_widget = gtk_container_get_focus_child(GTK_CONTAINER(pw->imd->widget));
+       focused = (pw->fs || (imd_widget && gtk_widget_has_focus(imd_widget)));
        on_entry = (gtk_widget_has_focus(pw->path_entry) ||
                    gtk_widget_has_focus(pw->search_entry));
-#else
-       focused = (pw->fs || GTK_WIDGET_HAS_FOCUS(GTK_WIDGET(pw->imd->widget)));
-       on_entry = (GTK_WIDGET_HAS_FOCUS(pw->path_entry) ||
-                   GTK_WIDGET_HAS_FOCUS(pw->search_entry));
-#endif
 
        if (focused)
                {
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Left: case GDK_KP_Left:
+                       case GDK_KEY_Left: case GDK_KEY_KP_Left:
                                x -= 1;
                                break;
-                       case GDK_Right: case GDK_KP_Right:
+                       case GDK_KEY_Right: case GDK_KEY_KP_Right:
                                x += 1;
                                break;
-                       case GDK_Up: case GDK_KP_Up:
+                       case GDK_KEY_Up: case GDK_KEY_KP_Up:
                                y -= 1;
                                break;
-                       case GDK_Down: case GDK_KP_Down:
+                       case GDK_KEY_Down: case GDK_KEY_KP_Down:
                                y += 1;
                                break;
-                       case GDK_Page_Up: case GDK_KP_Page_Up:
+                       case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
                                pixbuf_renderer_scroll(pr, 0, 0 - pr->vis_height / 2);
                                break;
-                       case GDK_Page_Down: case GDK_KP_Page_Down:
+                       case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
                                pixbuf_renderer_scroll(pr, 0, pr->vis_height / 2);
                                break;
-                       case GDK_Home: case GDK_KP_Home:
+                       case GDK_KEY_Home: case GDK_KEY_KP_Home:
                                pixbuf_renderer_scroll(pr, 0 - pr->vis_width / 2, 0);
                                break;
-                       case GDK_End: case GDK_KP_End:
+                       case GDK_KEY_End: case GDK_KEY_KP_End:
                                pixbuf_renderer_scroll(pr, pr->vis_width / 2, 0);
                                break;
                        default:
@@ -1272,40 +1170,19 @@ static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, g
 
        if (event->state & GDK_CONTROL_MASK)
                {
-               gint n = -1;
-
                stop_signal = TRUE;
                switch (event->keyval)
                        {
                        case '1':
-                               n = 0;
-                               break;
                        case '2':
-                               n = 1;
-                               break;
                        case '3':
-                               n = 2;
-                               break;
                        case '4':
-                               n = 3;
-                               break;
                        case '5':
-                               n = 4;
-                               break;
                        case '6':
-                               n = 5;
-                               break;
                        case '7':
-                               n = 6;
-                               break;
                        case '8':
-                               n = 7;
-                               break;
                        case '9':
-                               n = 8;
-                               break;
                        case '0':
-                               n = 9;
                                break;
                        case 'C': case 'c':
                                if (fd) file_util_copy(fd, NULL, NULL, GTK_WIDGET(pr));
@@ -1332,23 +1209,13 @@ static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, g
                                stop_signal = FALSE;
                                break;
                        }
-#if 0
-               if (n != -1 && fd)
-                       {
-                       if (!editor_window_flag_set(n))
-                               {
-                               pan_fullscreen_toggle(pw, TRUE);
-                               }
-                       file_util_start_editor_from_file(n, fd, GTK_WIDGET(pr));
-                       }
-#endif
                }
        else
                {
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Escape:
+                       case GDK_KEY_Escape:
                                if (pw->fs)
                                        {
                                        pan_fullscreen_toggle(pw, TRUE);
@@ -1370,13 +1237,13 @@ static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, g
                        stop_signal = TRUE;
                        switch (event->keyval)
                                {
-                               case '+': case '=': case GDK_KP_Add:
+                               case '+': case '=': case GDK_KEY_KP_Add:
                                        pixbuf_renderer_zoom_adjust(pr, ZOOM_INCREMENT);
                                        break;
-                               case '-': case GDK_KP_Subtract:
+                               case '-': case GDK_KEY_KP_Subtract:
                                        pixbuf_renderer_zoom_adjust(pr, -ZOOM_INCREMENT);
                                        break;
-                               case 'Z': case 'z': case GDK_KP_Divide: case '1':
+                               case 'Z': case 'z': case GDK_KEY_KP_Divide: case '1':
                                        pixbuf_renderer_zoom_set(pr, 1.0);
                                        break;
                                case '2':
@@ -1399,18 +1266,15 @@ static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, g
                                        break;
                                case 'F': case 'f':
                                case 'V': case 'v':
-                               case GDK_F11:
+                               case GDK_KEY_F11:
                                        pan_fullscreen_toggle(pw, FALSE);
                                        break;
                                case 'I': case 'i':
-#if 0
-                                       pan_overlay_toggle(pw);
-#endif
                                        break;
-                               case GDK_Delete: case GDK_KP_Delete:
+                               case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
                                        break;
-                               case GDK_Menu:
-                               case GDK_F10:
+                               case GDK_KEY_Menu:
+                               case GDK_KEY_F10:
                                        menu = pan_popup_menu(pw);
                                        gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
                                                       pan_window_menu_pos_cb, pw, 0, GDK_CURRENT_TIME);
@@ -1440,57 +1304,6 @@ static void pan_info_add_exif(PanTextAlignment *ta, FileData *fd)
        if (!fd) return;
 
        pan_text_alignment_add(ta, NULL, NULL);
-#if 0
-       {
-       GList *work;
-       gint i;
-
-
-       for (i = 0; ExifUIList[i].key; i++)
-               {
-               gchar *label;
-               gchar *desc;
-               gchar *text;
-
-               if (ExifUIList[i].current == EXIF_UI_OFF) continue;
-
-               text = metadata_read_string(fd, ExifUIList[i].key, METADATA_FORMATTED);
-               
-               if (ExifUIList[i].current == EXIF_UI_IFSET && (!text || !*text))
-                       {
-                       g_free(text);
-                       continue;
-                       }
-               
-               desc = exif_get_description_by_key(ExifUIList[i].key);
-               label = g_strdup_printf("%s:", desc);
-               g_free(desc);
-               pan_text_alignment_add(ta, label, text);
-               g_free(label);
-               g_free(text);
-               }
-
-       work = g_list_last(history_list_get_by_key("exif_extras"));
-       if (work) pan_text_alignment_add(ta, "---", NULL);
-       while (work)
-               {
-               const gchar *name;
-               gchar *text;
-
-               name = work->data;
-               work = work->prev;
-
-               text =  metadata_read_string(fd, name, METADATA_FORMATTED);
-               if (text)
-                       {
-                       gchar *label = g_strdup_printf("%s:", name);
-                       pan_text_alignment_add(ta, label, text);
-                       g_free(label);
-                       g_free(text);
-                       }
-               }
-       }
-#endif
 }
 
 
@@ -1956,13 +1769,6 @@ static void pan_search_activate(PanWindow *pw)
 {
        gchar *text;
 
-#if 0
-       if (!GTK_WIDGET_VISIBLE(pw->search_box))
-               {
-               gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pw->search_button), TRUE);
-               }
-#endif
-
        text = g_strdup(gtk_entry_get_text(GTK_ENTRY(pw->search_entry)));
        pan_search_activate_cb(text, pw);
        g_free(text);
@@ -1973,11 +1779,7 @@ static void pan_search_toggle_cb(GtkWidget *button, gpointer data)
        PanWindow *pw = data;
        gboolean visible;
 
-#if GTK_CHECK_VERSION(2,20,0)
        visible = gtk_widget_get_visible(pw->search_box);
-#else
-       visible = GTK_WIDGET_VISIBLE(pw->search_box);
-#endif
        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)) == visible) return;
 
        if (visible)
@@ -1999,11 +1801,7 @@ static void pan_search_toggle_visible(PanWindow *pw, gboolean enable)
 
        if (enable)
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_visible(pw->search_box))
-#else
-               if (GTK_WIDGET_VISIBLE(pw->search_box))
-#endif
                        {
                        gtk_widget_grab_focus(pw->search_entry);
                        }
@@ -2014,17 +1812,9 @@ static void pan_search_toggle_visible(PanWindow *pw, gboolean enable)
                }
        else
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_visible(pw->search_entry))
-#else
-               if (GTK_WIDGET_VISIBLE(pw->search_entry))
-#endif
                        {
-#if GTK_CHECK_VERSION(2,20,0)
                        if (gtk_widget_has_focus(pw->search_entry))
-#else
-                       if (GTK_WIDGET_HAS_FOCUS(pw->search_entry))
-#endif
                                {
                                gtk_widget_grab_focus(GTK_WIDGET(pw->imd->widget));
                                }
@@ -2089,9 +1879,6 @@ static void button_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data)
 
 static void scroll_cb(PixbufRenderer *pr, GdkEventScroll *event, gpointer data)
 {
-#if 0
-       PanWindow *pw = data;
-#endif
        gint w, h;
 
        w = pr->vis_width;
@@ -2199,12 +1986,12 @@ static void pan_window_image_scroll_notify_cb(PixbufRenderer *pr, gpointer data)
        pixbuf_renderer_get_image_size(pr, &width, &height);
 
        adj = gtk_range_get_adjustment(GTK_RANGE(pw->scrollbar_h));
-       adj->page_size = (gdouble)rect.width;
-       adj->page_increment = adj->page_size / 2.0;
-       adj->step_increment = 48.0 / pr->scale;
-       adj->lower = 0.0;
-       adj->upper = MAX((gdouble)width, 1.0);
-       adj->value = (gdouble)rect.x;
+       gtk_adjustment_set_page_size(adj, rect.width);
+       gtk_adjustment_set_page_increment(adj, gtk_adjustment_get_page_size(adj) / 2.0);
+       gtk_adjustment_set_step_increment(adj, 48.0 / pr->scale);
+       gtk_adjustment_set_lower(adj, 0.0);
+       gtk_adjustment_set_upper(adj, MAX((gdouble)width, 1.0));
+       gtk_adjustment_set_value(adj, (gdouble)rect.x);
 
        pref_signal_block_data(pw->scrollbar_h, pw);
        gtk_adjustment_changed(adj);
@@ -2212,12 +1999,12 @@ static void pan_window_image_scroll_notify_cb(PixbufRenderer *pr, gpointer data)
        pref_signal_unblock_data(pw->scrollbar_h, pw);
 
        adj = gtk_range_get_adjustment(GTK_RANGE(pw->scrollbar_v));
-       adj->page_size = (gdouble)rect.height;
-       adj->page_increment = adj->page_size / 2.0;
-       adj->step_increment = 48.0 / pr->scale;
-       adj->lower = 0.0;
-       adj->upper = MAX((gdouble)height, 1.0);
-       adj->value = (gdouble)rect.y;
+       gtk_adjustment_set_page_size(adj, rect.height);
+       gtk_adjustment_set_page_increment(adj, gtk_adjustment_get_page_size(adj) / 2.0);
+       gtk_adjustment_set_step_increment(adj, 48.0 / pr->scale);
+       gtk_adjustment_set_lower(adj, 0.0);
+       gtk_adjustment_set_upper(adj, MAX((gdouble)height, 1.0));
+       gtk_adjustment_set_value(adj, (gdouble)rect.y);
 
        pref_signal_block_data(pw->scrollbar_v, pw);
        gtk_adjustment_changed(adj);
@@ -2271,16 +2058,6 @@ static void pan_window_layout_size_cb(GtkWidget *combo, gpointer data)
        pan_layout_update(pw);
 }
 
-#if 0
-static void pan_window_date_toggle_cb(GtkWidget *button, gpointer data)
-{
-       PanWindow *pw = data;
-
-       pw->exif_date_enable = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
-       pan_layout_update(pw);
-}
-#endif
-
 static void pan_window_entry_activate_cb(const gchar *new_text, gpointer data)
 {
        PanWindow *pw = data;
@@ -2406,17 +2183,17 @@ static void pan_window_new_real(FileData *dir_fd)
        pref_label_new(box, _("Location:"));
        combo = tab_completion_new_with_history(&pw->path_entry, dir_fd->path, "pan_view_path", -1,
                                                pan_window_entry_activate_cb, pw);
-       g_signal_connect(G_OBJECT(pw->path_entry->parent), "changed",
+       g_signal_connect(G_OBJECT(gtk_widget_get_parent(pw->path_entry)), "changed",
                         G_CALLBACK(pan_window_entry_change_cb), pw);
        gtk_box_pack_start(GTK_BOX(box), combo, TRUE, TRUE, 0);
        gtk_widget_show(combo);
 
-       combo = gtk_combo_box_new_text();
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Timeline"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Calendar"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Folders"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Folders (flower)"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Grid"));
+       combo = gtk_combo_box_text_new();
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Timeline"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Calendar"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Folders"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Folders (flower)"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Grid"));
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(combo), pw->layout);
        g_signal_connect(G_OBJECT(combo), "changed",
@@ -2424,17 +2201,17 @@ static void pan_window_new_real(FileData *dir_fd)
        gtk_box_pack_start(GTK_BOX(box), combo, FALSE, FALSE, 0);
        gtk_widget_show(combo);
 
-       combo = gtk_combo_box_new_text();
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Dots"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("No Images"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Small Thumbnails"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Normal Thumbnails"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Large Thumbnails"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:10 (10%)"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:4 (25%)"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:3 (33%)"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:2 (50%)"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("1:1 (100%)"));
+       combo = gtk_combo_box_text_new();
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Dots"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("No Images"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Small Thumbnails"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Normal Thumbnails"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Large Thumbnails"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:10 (10%)"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:4 (25%)"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:3 (33%)"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:2 (50%)"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("1:1 (100%)"));
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(combo), pw->size);
        g_signal_connect(G_OBJECT(combo), "changed",
@@ -2524,11 +2301,6 @@ static void pan_window_new_real(FileData *dir_fd)
        gtk_container_add(GTK_CONTAINER(frame), pw->label_zoom);
        gtk_widget_show(pw->label_zoom);
 
-#if 0
-       pw->date_button = pref_checkbox_new(box, _("Use Exif date"), pw->exif_date_enable,
-                                           G_CALLBACK(pan_window_date_toggle_cb), pw);
-#endif
-
        pw->search_button = gtk_toggle_button_new();
        gtk_button_set_relief(GTK_BUTTON(pw->search_button), GTK_RELIEF_NONE);
        gtk_button_set_focus_on_click(GTK_BUTTON(pw->search_button), FALSE);
@@ -2809,9 +2581,9 @@ static GList *pan_view_get_fd_list(PanWindow *pw)
 {
        GList *list = NULL;
        FileData *fd = pan_menu_click_fd(pw);
-       
+
        if (fd) list = g_list_prepend(filelist_copy(fd->sidecar_files), file_data_ref(fd));
-       
+
        return list;
 }
 
@@ -2841,7 +2613,7 @@ static GtkWidget *pan_popup_menu(PanWindow *pw)
 
        submenu_add_edit(menu, &item, G_CALLBACK(pan_edit_cb), pw, editmenu_fd_list);
        gtk_widget_set_sensitive(item, active);
-       
+
        menu_item_add_stock_sensitive(menu, _("View in _new window"), GTK_STOCK_NEW, active,
                                      G_CALLBACK(pan_new_window_cb), pw);
 
@@ -2933,7 +2705,7 @@ static void pan_window_get_dnd_data(GtkWidget *widget, GdkDragContext *context,
                {
                GList *list;
 
-               list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
+               list = uri_filelist_from_gtk_selection_data(selection_data);
                if (list && isdir(((FileData *)list->data)->path))
                        {
                        FileData *fd = list->data;
@@ -2955,34 +2727,15 @@ static void pan_window_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
        fd = pan_menu_click_fd(pw);
        if (fd)
                {
-               gchar *text = NULL;
-               gint len;
-               gboolean plain_text;
                GList *list;
 
-               switch (info)
-                       {
-                       case TARGET_URI_LIST:
-                               plain_text = FALSE;
-                               break;
-                       case TARGET_TEXT_PLAIN:
-                       default:
-                               plain_text = TRUE;
-                               break;
-                       }
                list = g_list_append(NULL, fd);
-               text = uri_text_from_filelist(list, &len, plain_text);
+               uri_selection_data_set_uris_from_filelist(selection_data, list);
                g_list_free(list);
-               if (text)
-                       {
-                       gtk_selection_data_set(selection_data, selection_data->target,
-                                              8, (guchar *)text, len);
-                       g_free(text);
-                       }
                }
        else
                {
-               gtk_selection_data_set(selection_data, selection_data->target,
+               gtk_selection_data_set(selection_data, gtk_selection_data_get_target(selection_data),
                                       8, NULL, 0);
                }
 }
index b60b235..5186e28 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 93923d1..32f8641 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
 #include "main.h"
 #include "pixbuf-renderer.h"
 #include "renderer-tiles.h"
+#include "renderer-clutter.h"
 
 #include "intl.h"
 #include "layout.h"
 
 #include <gtk/gtk.h>
 
-
 /* comment this out if not using this from within Geeqie
  * defining GQ_BUILD does these things:
  *   - Sets the shift-click scroller pixbuf to a nice icon instead of a black box
@@ -86,7 +86,6 @@ enum {
        PROP_ZOOM_QUALITY,
        PROP_ZOOM_2PASS,
        PROP_ZOOM_EXPAND,
-       PROP_DITHER_QUALITY,
        PROP_SCROLL_RESET,
        PROP_DELAY_FLIP,
        PROP_LOADING,
@@ -121,8 +120,6 @@ static void pixbuf_renderer_set_property(GObject *object, guint prop_id,
                                         const GValue *value, GParamSpec *pspec);
 static void pixbuf_renderer_get_property(GObject *object, guint prop_id,
                                         GValue *value, GParamSpec *pspec);
-static gboolean pixbuf_renderer_expose(GtkWidget *widget, GdkEventExpose *event);
-
 static void pr_scroller_timer_set(PixbufRenderer *pr, gboolean start);
 
 
@@ -133,7 +130,6 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
 
 static void pr_signals_connect(PixbufRenderer *pr);
 static void pr_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data);
-static void pixbuf_renderer_paint(PixbufRenderer *pr, GdkRectangle *area);
 static void pr_stereo_temp_disable(PixbufRenderer *pr, gboolean disable);
 
 
@@ -173,7 +169,6 @@ GType pixbuf_renderer_get_type(void)
 static void pixbuf_renderer_class_init(PixbufRendererClass *class)
 {
        GObjectClass *gobject_class = G_OBJECT_CLASS(class);
-       GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(class);
 
        parent_class = g_type_class_peek_parent(class);
 
@@ -182,8 +177,6 @@ static void pixbuf_renderer_class_init(PixbufRendererClass *class)
 
        gobject_class->finalize = pixbuf_renderer_finalize;
 
-       widget_class->expose_event = pixbuf_renderer_expose;
-
        g_object_class_install_property(gobject_class,
                                        PROP_ZOOM_MIN,
                                        g_param_spec_double("zoom_min",
@@ -229,17 +222,6 @@ static void pixbuf_renderer_class_init(PixbufRendererClass *class)
                                                             NULL,
                                                             FALSE,
                                                             G_PARAM_READABLE | G_PARAM_WRITABLE));
-
-       g_object_class_install_property(gobject_class,
-                                       PROP_DITHER_QUALITY,
-                                       g_param_spec_uint("dither_quality",
-                                                         "Dither quality",
-                                                         NULL,
-                                                         GDK_RGB_DITHER_NONE,
-                                                         GDK_RGB_DITHER_MAX,
-                                                         GDK_RGB_DITHER_NORMAL,
-                                                         G_PARAM_READABLE | G_PARAM_WRITABLE));
-
        g_object_class_install_property(gobject_class,
                                        PROP_SCROLL_RESET,
                                        g_param_spec_uint("scroll_reset",
@@ -386,7 +368,7 @@ static void pixbuf_renderer_class_init(PixbufRendererClass *class)
                             g_cclosure_marshal_VOID__BOXED,
                             G_TYPE_NONE, 1,
                             GDK_TYPE_EVENT);
-                            
+
        signals[SIGNAL_UPDATE_PIXEL] =
                g_signal_new("update-pixel",
                             G_OBJECT_CLASS_TYPE(gobject_class),
@@ -397,6 +379,20 @@ static void pixbuf_renderer_class_init(PixbufRendererClass *class)
                             G_TYPE_NONE, 0);
 }
 
+static RendererFuncs *pr_backend_renderer_new(PixbufRenderer *pr)
+{
+       if (options->image.use_clutter_renderer)
+               {
+#ifdef HAVE_CLUTTER
+               return renderer_clutter_new(pr);
+#else
+               DEBUG_0("Geeqie is built without clutter renderer support");
+#endif
+               }
+       return renderer_tiles_new(pr);
+}
+
+
 static void pixbuf_renderer_init(PixbufRenderer *pr)
 {
        GtkWidget *box;
@@ -412,13 +408,11 @@ static void pixbuf_renderer_init(PixbufRenderer *pr)
        pr->scale = 1.0;
        pr->aspect_ratio = 1.0;
 
-       pr->dither_quality = GDK_RGB_DITHER_NORMAL;
-
        pr->scroll_reset = PR_SCROLL_RESET_TOPLEFT;
 
        pr->scroller_id = 0;
        pr->scroller_overlay = -1;
-       
+
        pr->x_mouse = -1;
        pr->y_mouse = -1;
 
@@ -429,14 +423,15 @@ static void pixbuf_renderer_init(PixbufRenderer *pr)
 
        pr->norm_center_x = 0.5;
        pr->norm_center_y = 0.5;
-       
+
        pr->stereo_mode = PR_STEREO_NONE;
-       
-       pr->renderer = (void *)renderer_tiles_new(pr);
-       
+
+       pr->renderer = pr_backend_renderer_new(pr);
+
        pr->renderer2 = NULL;
 
        gtk_widget_set_double_buffered(box, FALSE);
+       gtk_widget_set_app_paintable(box, TRUE);
        g_signal_connect_after(G_OBJECT(box), "size_allocate",
                               G_CALLBACK(pr_size_cb), pr);
 
@@ -489,9 +484,6 @@ static void pixbuf_renderer_set_property(GObject *object, guint prop_id,
                case PROP_ZOOM_EXPAND:
                        pr->zoom_expand = g_value_get_boolean(value);
                        break;
-               case PROP_DITHER_QUALITY:
-                       pr->dither_quality = g_value_get_uint(value);
-                       break;
                case PROP_SCROLL_RESET:
                        pr->scroll_reset = g_value_get_uint(value);
                        break;
@@ -555,9 +547,6 @@ static void pixbuf_renderer_get_property(GObject *object, guint prop_id,
                case PROP_ZOOM_EXPAND:
                        g_value_set_boolean(value, pr->zoom_expand);
                        break;
-               case PROP_DITHER_QUALITY:
-                       g_value_set_uint(value, pr->dither_quality);
-                       break;
                case PROP_SCROLL_RESET:
                        g_value_set_uint(value, pr->scroll_reset);
                        break;
@@ -597,41 +586,6 @@ static void pixbuf_renderer_get_property(GObject *object, guint prop_id,
                }
 }
 
-static gboolean pixbuf_renderer_expose(GtkWidget *widget, GdkEventExpose *event)
-{
-#if GTK_CHECK_VERSION(2,20,0)
-       if (gtk_widget_is_drawable(widget))
-#else
-       if (GTK_WIDGET_DRAWABLE(widget))
-#endif
-               {
-#if GTK_CHECK_VERSION(2,20,0)
-               if (gtk_widget_get_has_window(widget))
-#else
-               if (!GTK_WIDGET_NO_WINDOW(widget))
-#endif
-                       {
-                       if (event->window != widget->window)
-                               {
-                               GdkRectangle area;
-
-                               gdk_window_get_position(event->window, &area.x, &area.y);
-
-                               area.x += event->area.x;
-                               area.y += event->area.y;
-                               area.width = event->area.width;
-                               area.height = event->area.height;
-                               pixbuf_renderer_paint(PIXBUF_RENDERER(widget), &area);
-                               }
-                       else
-                               {
-                               pixbuf_renderer_paint(PIXBUF_RENDERER(widget), &event->area);
-                               }
-                       }
-               }
-
-       return FALSE;
-}
 
 /*
  *-------------------------------------------------------------------
@@ -643,7 +597,7 @@ static void widget_set_cursor(GtkWidget *widget, gint icon)
 {
        GdkCursor *cursor;
 
-       if (!widget->window) return;
+       if (!gtk_widget_get_window(widget)) return;
 
        if (icon == -1)
                {
@@ -654,7 +608,7 @@ static void widget_set_cursor(GtkWidget *widget, gint icon)
                cursor = gdk_cursor_new(icon);
                }
 
-       gdk_window_set_cursor(widget->window, cursor);
+       gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
 
        if (cursor) gdk_cursor_unref(cursor);
 }
@@ -686,10 +640,10 @@ static gboolean pr_parent_window_sizable(PixbufRenderer *pr)
 
        if (!pr->parent_window) return FALSE;
        if (!pr->window_fit) return FALSE;
-       if (!GTK_WIDGET(pr)->window) return FALSE;
+       if (!gtk_widget_get_window(GTK_WIDGET(pr))) return FALSE;
 
-       if (!pr->parent_window->window) return FALSE;
-       state = gdk_window_get_state(pr->parent_window->window);
+       if (!gtk_widget_get_window(pr->parent_window)) return FALSE;
+       state = gdk_window_get_state(gtk_widget_get_window(pr->parent_window));
        if (state & GDK_WINDOW_STATE_MAXIMIZED) return FALSE;
 
        return TRUE;
@@ -700,6 +654,8 @@ static gboolean pr_parent_window_resize(PixbufRenderer *pr, gint w, gint h)
        GtkWidget *widget;
        GtkWidget *parent;
        gint ww, wh;
+       GtkAllocation widget_allocation;
+       GtkAllocation parent_allocation;
 
        if (!pr_parent_window_sizable(pr)) return FALSE;
 
@@ -715,13 +671,17 @@ static gboolean pr_parent_window_resize(PixbufRenderer *pr, gint w, gint h)
        widget = GTK_WIDGET(pr);
        parent = GTK_WIDGET(pr->parent_window);
 
-       w += (parent->allocation.width - widget->allocation.width);
-       h += (parent->allocation.height - widget->allocation.height);
+       gtk_widget_get_allocation(widget, &widget_allocation);
+       gtk_widget_get_allocation(parent, &parent_allocation);
 
-       gdk_drawable_get_size(parent->window, &ww, &wh);
+       w += (parent_allocation.width - widget_allocation.width);
+       h += (parent_allocation.height - widget_allocation.height);
+
+       ww = gdk_window_get_width(gtk_widget_get_window(parent));
+       wh = gdk_window_get_height(gtk_widget_get_window(parent));
        if (w == ww && h == wh) return FALSE;
 
-       gdk_window_resize(parent->window, w, h);
+       gdk_window_resize(gtk_widget_get_window(parent), w, h);
 
        return TRUE;
 }
@@ -928,12 +888,6 @@ static void pr_scroller_stop(PixbufRenderer *pr)
  *-------------------------------------------------------------------
  */
 
-static void pr_border_clear(PixbufRenderer *pr)
-{
-       pr->renderer->border_clear(pr->renderer);
-       if (pr->renderer2) pr->renderer2->border_clear(pr->renderer2);
-}
-
 void pixbuf_renderer_set_color(PixbufRenderer *pr, GdkColor *color)
 {
        GtkStyle *style;
@@ -959,21 +913,8 @@ void pixbuf_renderer_set_color(PixbufRenderer *pr, GdkColor *color)
 
        gtk_widget_set_style(widget, style);
 
-#if GTK_CHECK_VERSION(2,20,0)
-       if (gtk_widget_get_visible(widget)) pr_border_clear(pr);
-#else
-       if (GTK_WIDGET_VISIBLE(widget)) pr_border_clear(pr);
-#endif
-}
-
-static void pr_redraw(PixbufRenderer *pr, gboolean new_data)
-{
-       pr->renderer->queue_clear(pr->renderer);
-       pr->renderer->redraw(pr->renderer, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, new_data, FALSE);
-       if (pr->renderer2) {
-               pr->renderer2->queue_clear(pr->renderer2);
-               pr->renderer2->redraw(pr->renderer2, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, new_data, FALSE);
-       }
+       pr->renderer->update_viewport(pr->renderer);
+       if (pr->renderer2) pr->renderer2->update_viewport(pr->renderer2);
 }
 
 /*
@@ -1242,8 +1183,8 @@ void pixbuf_renderer_set_tiles(PixbufRenderer *pr, gint width, gint height,
        pr->func_tile_dispose = func_dispose;
        pr->func_tile_data = user_data;
 
+       pr_stereo_temp_disable(pr, TRUE);
        pr_zoom_sync(pr, zoom, PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
-       pr_redraw(pr, TRUE);
 }
 
 void pixbuf_renderer_set_tiles_size(PixbufRenderer *pr, gint width, gint height)
@@ -1321,9 +1262,6 @@ static void pr_zoom_adjust_real(PixbufRenderer *pr, gdouble increment,
 
 static void pr_update_signal(PixbufRenderer *pr)
 {
-#if 0
-       log_printf("FIXME: send updated signal\n");
-#endif
        DEBUG_1("%s pixbuf renderer updated - started drawing %p, img: %dx%d", get_exec_time(), pr, pr->image_width, pr->image_height);
        pr->debug_updated = TRUE;
 }
@@ -1557,7 +1495,7 @@ static void pixbuf_renderer_sync_scroll_center(PixbufRenderer *pr)
        gint src_x, src_y;
        if (!pr->width || !pr->height) return;
 
-       /* 
+       /*
         * Update norm_center only if the image is bigger than the window.
         * With this condition the stored center survives also a temporary display
         * of the "broken image" icon.
@@ -1568,7 +1506,7 @@ static void pixbuf_renderer_sync_scroll_center(PixbufRenderer *pr)
                src_x = pr->x_scroll + pr->vis_width / 2;
                pr->norm_center_x = (gdouble)src_x / pr->width;
                }
-       
+
        if (pr->height > pr->viewport_height)
                {
                src_y = pr->y_scroll + pr->vis_height / 2;
@@ -1651,15 +1589,12 @@ static gboolean pr_size_clamp(PixbufRenderer *pr)
 }
 
 static gboolean pr_zoom_clamp(PixbufRenderer *pr, gdouble zoom,
-                             PrZoomFlags flags, gboolean *redrawn)
+                             PrZoomFlags flags)
 {
        gint w, h;
        gdouble scale;
-       gboolean invalid;
        gboolean force = !!(flags & PR_ZOOM_FORCE);
        gboolean new = !!(flags & PR_ZOOM_NEW);
-       gboolean invalidate = !!(flags & PR_ZOOM_INVALIDATE);
-       gboolean lazy = !!(flags & PR_ZOOM_LAZY);
 
        zoom = CLAMP(zoom, pr->zoom_min, pr->zoom_max);
 
@@ -1743,23 +1678,11 @@ static gboolean pr_zoom_clamp(PixbufRenderer *pr, gdouble zoom,
                h = h * scale * pr->aspect_ratio;
                }
 
-       invalid = (pr->width != w || pr->height != h);
-
        pr->zoom = zoom;
        pr->width = w;
        pr->height = h;
        pr->scale = scale;
 
-       if (invalidate || invalid)
-               {
-               pr->renderer->invalidate_all(pr->renderer);
-               if (pr->renderer2) pr->renderer2->invalidate_all(pr->renderer2);
-               if (!lazy) pr_redraw(pr, TRUE);
-               }
-       if (redrawn) *redrawn = (invalidate || invalid);
-
-       pixbuf_renderer_sync_scroll_center(pr);
-
        return TRUE;
 }
 
@@ -1768,9 +1691,6 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
 {
        gdouble old_scale;
        gint old_cx, old_cy;
-       gboolean clamped;
-       gboolean sized;
-       gboolean redrawn = FALSE;
        gboolean center_point = !!(flags & PR_ZOOM_CENTER);
        gboolean force = !!(flags & PR_ZOOM_FORCE);
        gboolean new = !!(flags & PR_ZOOM_NEW);
@@ -1778,7 +1698,7 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
        PrZoomFlags clamp_flags = flags;
        gdouble old_center_x = pr->norm_center_x;
        gdouble old_center_y = pr->norm_center_y;
-       
+
        old_scale = pr->scale;
        if (center_point)
                {
@@ -1795,11 +1715,10 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
                }
 
        if (force) clamp_flags |= PR_ZOOM_INVALIDATE;
-       if (lazy) clamp_flags |= PR_ZOOM_LAZY;
-       if (!pr_zoom_clamp(pr, zoom, clamp_flags, &redrawn)) return;
+       if (!pr_zoom_clamp(pr, zoom, clamp_flags)) return;
 
-       clamped = pr_size_clamp(pr);
-       sized = pr_parent_window_resize(pr, pr->width, pr->height);
+       (void) pr_size_clamp(pr);
+       (void) pr_parent_window_resize(pr, pr->width, pr->height);
 
        if (force && new)
                {
@@ -1840,21 +1759,8 @@ static void pr_zoom_sync(PixbufRenderer *pr, gdouble zoom,
 
        pr_scroll_clamp(pr);
 
-       /* If the window was not sized, redraw the image - we know there will be no size/expose signal.
-        * But even if a size is claimed, there is no guarantee that the window manager will allow it,
-        * so redraw the window anyway :/
-        */
-       if (sized || clamped) pr_border_clear(pr);
-       
-       if (lazy)
-               {
-               pr->renderer->queue_clear(pr->renderer);
-               if (pr->renderer2) pr->renderer2->queue_clear(pr->renderer2);
-               }
-       else
-               {
-               pr_redraw(pr, redrawn);
-               }
+       pr->renderer->update_zoom(pr->renderer, lazy);
+       if (pr->renderer2) pr->renderer2->update_zoom(pr->renderer2, lazy);
 
        pr_scroll_notify_signal(pr);
        pr_zoom_signal(pr);
@@ -1884,7 +1790,7 @@ static void pr_size_sync(PixbufRenderer *pr, gint new_width, gint new_height)
                        new_viewport_height = pr->stereo_fixed_height;
                        }
                }
-               
+
        if (pr->window_width == new_width && pr->window_height == new_height &&
            pr->viewport_width == new_viewport_width && pr->viewport_height == new_viewport_height) return;
 
@@ -1896,15 +1802,22 @@ static void pr_size_sync(PixbufRenderer *pr, gint new_width, gint new_height)
        if (pr->zoom == 0.0)
                {
                gdouble old_scale = pr->scale;
-               pr_zoom_clamp(pr, 0.0, PR_ZOOM_FORCE, NULL);
+               pr_zoom_clamp(pr, 0.0, PR_ZOOM_FORCE);
                zoom_changed = (old_scale != pr->scale);
                }
 
        pr_size_clamp(pr);
        pr_scroll_clamp(pr);
 
-       pr->renderer->update_sizes(pr->renderer);
-       if (pr->renderer2) pr->renderer2->update_sizes(pr->renderer2);
+       if (zoom_changed)
+               {
+               pr->renderer->update_zoom(pr->renderer, FALSE);
+               if (pr->renderer2) pr->renderer2->update_zoom(pr->renderer2, FALSE);
+               }
+
+       pr->renderer->update_viewport(pr->renderer);
+       if (pr->renderer2) pr->renderer2->update_viewport(pr->renderer2);
+
 
        /* ensure scroller remains visible */
        if (pr->scroller_overlay != -1)
@@ -1940,8 +1853,6 @@ static void pr_size_sync(PixbufRenderer *pr, gint new_width, gint new_height)
                        }
                }
 
-       pr_border_clear(pr);
-
        pr_scroll_notify_signal(pr);
        if (zoom_changed) pr_zoom_signal(pr);
        pr_update_signal(pr);
@@ -1954,19 +1865,6 @@ static void pr_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer da
        pr_size_sync(pr, allocation->width, allocation->height);
 }
 
-static void pixbuf_renderer_paint(PixbufRenderer *pr, GdkRectangle *area)
-{
-       gint x, y;
-
-       pr->renderer->redraw(pr->renderer, area->x, area->y, area->width, area->height,
-                             FALSE, TILE_RENDER_ALL, FALSE, FALSE);
-       if (pr->renderer2) 
-               {
-               pr->renderer2->redraw(pr->renderer2, area->x, area->y, area->width, area->height,
-                             FALSE, TILE_RENDER_ALL, FALSE, FALSE);
-               }
-}
-
 /*
  *-------------------------------------------------------------------
  * scrolling
@@ -1989,16 +1887,16 @@ void pixbuf_renderer_scroll(PixbufRenderer *pr, gint x, gint y)
        pr->y_scroll += y;
 
        pr_scroll_clamp(pr);
-       
+
        pixbuf_renderer_sync_scroll_center(pr);
-       
+
        if (pr->x_scroll == old_x && pr->y_scroll == old_y) return;
 
        pr_scroll_notify_signal(pr);
 
        x_off = pr->x_scroll - old_x;
        y_off = pr->y_scroll - old_y;
-       
+
        pr->renderer->scroll(pr->renderer, x_off, y_off);
        if (pr->renderer2) pr->renderer2->scroll(pr->renderer2, x_off, y_off);
 }
@@ -2067,11 +1965,11 @@ static gboolean pr_mouse_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gp
                pr->scroller_xpos = bevent->x;
                pr->scroller_ypos = bevent->y;
                }
-       
+
        pr->x_mouse = bevent->x;
        pr->y_mouse = bevent->y;
        pr_update_pixel_signal(pr);
-       
+
        if (!pr->in_drag || !gdk_pointer_is_grabbed()) return FALSE;
 
        if (pr->drag_moved < PR_DRAG_SCROLL_THRESHHOLD)
@@ -2137,7 +2035,7 @@ static gboolean pr_mouse_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpo
                        pr->drag_last_x = bevent->x;
                        pr->drag_last_y = bevent->y;
                        pr->drag_moved = 0;
-                       gdk_pointer_grab(widget->window, FALSE,
+                       gdk_pointer_grab(gtk_widget_get_window(widget), FALSE,
                                         GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_RELEASE_MASK,
                                         NULL, NULL, bevent->time);
                        gtk_grab_add(widget);
@@ -2153,11 +2051,7 @@ static gboolean pr_mouse_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpo
                }
 
        parent = gtk_widget_get_parent(widget);
-#if GTK_CHECK_VERSION(2,20,0)
        if (widget && gtk_widget_get_can_focus(parent))
-#else
-       if (widget && GTK_WIDGET_CAN_FOCUS(parent))
-#endif
                {
                gtk_widget_grab_focus(parent);
                }
@@ -2177,11 +2071,7 @@ static gboolean pr_mouse_release_cb(GtkWidget *widget, GdkEventButton *bevent, g
                return TRUE;
                }
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gdk_pointer_is_grabbed() && gtk_widget_has_grab(GTK_WIDGET(pr)))
-#else
-       if (gdk_pointer_is_grabbed() && GTK_WIDGET_HAS_GRAB(pr))
-#endif
                {
                gtk_grab_remove(widget);
                gdk_pointer_ungrab(bevent->time);
@@ -2245,7 +2135,7 @@ static void pr_signals_connect(PixbufRenderer *pr)
                         G_CALLBACK(pr_leave_notify_cb), pr);
 
        gtk_widget_set_events(GTK_WIDGET(pr), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK |
-                                             GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK |
+                                             GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_SCROLL_MASK |
                                              GDK_LEAVE_NOTIFY_MASK);
 
        g_signal_connect(G_OBJECT(pr), "drag_begin",
@@ -2327,7 +2217,7 @@ const double pr_dubois_matrix[3][6] = {
        { 0.456,  0.500,  0.176, -0.043, -0.088, -0.002},
        {-0.040, -0.038, -0.016,  0.378,  0.734, -0.018},
        {-0.015, -0.021, -0.005, -0.072, -0.113,  1.226}
-       }; 
+       };
 
 static void pr_create_anaglyph_dubois(GdkPixbuf *pixbuf, GdkPixbuf *right, gint x, gint y, gint w, gint h)
 {
@@ -2352,9 +2242,9 @@ static void pr_create_anaglyph_dubois(GdkPixbuf *pixbuf, GdkPixbuf *right, gint
                for (j = 0; j < w; j++)
                        {
                        double res[3];
-                       for (k = 0; k < 3; k++) 
+                       for (k = 0; k < 3; k++)
                                {
-                               double *m = pr_dubois_matrix[k];
+                               const double *m = pr_dubois_matrix[k];
                                res[k] = sp[0] * m[0] + sp[1] * m[1] + sp[2] * m[2] + dp[0] * m[3] + dp[1] * m[4] + dp[2] * m[5];
                                if (res[k] < 0.0) res[k] = 0;
                                if (res[k] > 255.0) res[k] = 255.0;
@@ -2367,7 +2257,7 @@ static void pr_create_anaglyph_dubois(GdkPixbuf *pixbuf, GdkPixbuf *right, gint
                        }
                }
 }
+
 void pr_create_anaglyph(guint mode, GdkPixbuf *pixbuf, GdkPixbuf *right, gint x, gint y, gint w, gint h)
 {
        if (mode & PR_STEREO_ANAGLYPH_RC)
@@ -2396,27 +2286,27 @@ static void pr_pixbuf_size_sync(PixbufRenderer *pr)
                case EXIF_ORIENTATION_LEFT_BOTTOM:
                        pr->image_width = gdk_pixbuf_get_height(pr->pixbuf);
                        pr->image_height = gdk_pixbuf_get_width(pr->pixbuf);
-                       if (pr->stereo_data == STEREO_PIXBUF_SBS) 
+                       if (pr->stereo_data == STEREO_PIXBUF_SBS)
                                {
                                pr->image_height /= 2;
                                pr->stereo_pixbuf_offset_right = pr->image_height;
                                }
-                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS) 
+                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS)
                                {
                                pr->image_height /= 2;
                                pr->stereo_pixbuf_offset_left = pr->image_height;
                                }
-                       
+
                        break;
                default:
                        pr->image_width = gdk_pixbuf_get_width(pr->pixbuf);
                        pr->image_height = gdk_pixbuf_get_height(pr->pixbuf);
-                       if (pr->stereo_data == STEREO_PIXBUF_SBS) 
+                       if (pr->stereo_data == STEREO_PIXBUF_SBS)
                                {
                                pr->image_width /= 2;
                                pr->stereo_pixbuf_offset_right = pr->image_width;
                                }
-                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS) 
+                       else if (pr->stereo_data == STEREO_PIXBUF_CROSS)
                                {
                                pr->image_width /= 2;
                                pr->stereo_pixbuf_offset_left = pr->image_width;
@@ -2432,8 +2322,6 @@ static void pr_set_pixbuf(PixbufRenderer *pr, GdkPixbuf *pixbuf, gdouble zoom, P
 
        if (!pr->pixbuf)
                {
-               GtkWidget *box;
-
                /* no pixbuf so just clear the window */
                pr->image_width = 0;
                pr->image_height = 0;
@@ -2441,31 +2329,23 @@ static void pr_set_pixbuf(PixbufRenderer *pr, GdkPixbuf *pixbuf, gdouble zoom, P
                pr->zoom = zoom; /* don't throw away the zoom value, it is set by pixbuf_renderer_move, among others,
                                    and used for pixbuf_renderer_zoom_get */
 
-               box = GTK_WIDGET(pr);
-
-#if GTK_CHECK_VERSION(2,20,0)
-               if (gtk_widget_get_realized(box))
-#else
-               if (GTK_WIDGET_REALIZED(box))
-#endif
-                       {
-                       gdk_window_clear(box->window);
-                       pr->renderer->overlay_draw(pr->renderer, 0, 0, pr->viewport_width, pr->viewport_height);
-                       if (pr->renderer2) pr->renderer2->overlay_draw(pr->renderer2, 0, 0, pr->viewport_width, pr->viewport_height);
-                       }
+               pr->renderer->update_pixbuf(pr->renderer, flags & PR_ZOOM_LAZY);
+               if (pr->renderer2) pr->renderer2->update_pixbuf(pr->renderer2, flags & PR_ZOOM_LAZY);
 
                pr_update_signal(pr);
 
                return;
                }
 
-       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE) 
+       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE)
                {
                gint disable = !pr->pixbuf || ! pr->stereo_data;
                pr_stereo_temp_disable(pr, disable);
                }
 
        pr_pixbuf_size_sync(pr);
+       pr->renderer->update_pixbuf(pr->renderer, flags & PR_ZOOM_LAZY);
+       if (pr->renderer2) pr->renderer2->update_pixbuf(pr->renderer2, flags & PR_ZOOM_LAZY);
        pr_zoom_sync(pr, zoom, flags | PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
 }
 
@@ -2519,15 +2399,19 @@ gint pixbuf_renderer_get_orientation(PixbufRenderer *pr)
 void pixbuf_renderer_set_stereo_data(PixbufRenderer *pr, StereoPixbufData stereo_data)
 {
        g_return_if_fail(IS_PIXBUF_RENDERER(pr));
+       if (pr->stereo_data == stereo_data) return;
+
 
        pr->stereo_data = stereo_data;
 
-       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE) 
+       if (pr->stereo_mode & PR_STEREO_TEMP_DISABLE)
                {
                gint disable = !pr->pixbuf || ! pr->stereo_data;
                pr_stereo_temp_disable(pr, disable);
                }
        pr_pixbuf_size_sync(pr);
+       pr->renderer->update_pixbuf(pr->renderer, FALSE);
+       if (pr->renderer2) pr->renderer2->update_pixbuf(pr->renderer2, FALSE);
        pr_zoom_sync(pr, pr->zoom, PR_ZOOM_FORCE, 0, 0);
 }
 
@@ -2593,7 +2477,6 @@ void pixbuf_renderer_move(PixbufRenderer *pr, PixbufRenderer *source)
                source->source_tiles = NULL;
 
                pr_zoom_sync(pr, source->zoom, PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
-               pr_redraw(pr, TRUE);
                }
        else
                {
@@ -2603,8 +2486,61 @@ void pixbuf_renderer_move(PixbufRenderer *pr, PixbufRenderer *source)
        pr->scroll_reset = scroll_reset;
 
        pixbuf_renderer_set_pixbuf(source, NULL, source->zoom);
-//     pr_queue_clear(source);
-//     pr_tile_free_all(source);
+}
+
+void pixbuf_renderer_copy(PixbufRenderer *pr, PixbufRenderer *source)
+{
+       GObject *object;
+       PixbufRendererScrollResetType scroll_reset;
+
+       g_return_if_fail(IS_PIXBUF_RENDERER(pr));
+       g_return_if_fail(IS_PIXBUF_RENDERER(source));
+
+       if (pr == source) return;
+
+       object = G_OBJECT(pr);
+
+       g_object_set(object, "zoom_min", source->zoom_min, NULL);
+       g_object_set(object, "zoom_max", source->zoom_max, NULL);
+       g_object_set(object, "loading", source->loading, NULL);
+
+       pr->complete = source->complete;
+
+       pr->x_scroll = source->x_scroll;
+       pr->y_scroll = source->y_scroll;
+       pr->x_mouse  = source->x_mouse;
+       pr->y_mouse  = source->y_mouse;
+
+       scroll_reset = pr->scroll_reset;
+       pr->scroll_reset = PR_SCROLL_RESET_NOCHANGE;
+
+       pr->orientation = source->orientation;
+       pr->stereo_data = source->stereo_data;
+
+       if (source->source_tiles_enabled)
+               {
+               pr->source_tiles_enabled = source->source_tiles_enabled;
+               pr->source_tiles_cache_size = source->source_tiles_cache_size;
+               pr->source_tile_width = source->source_tile_width;
+               pr->source_tile_height = source->source_tile_height;
+               pr->image_width = source->image_width;
+               pr->image_height = source->image_height;
+
+               pr->func_tile_request = source->func_tile_request;
+               pr->func_tile_dispose = source->func_tile_dispose;
+               pr->func_tile_data = source->func_tile_data;
+
+               pr->source_tiles = source->source_tiles;
+               source->source_tiles = NULL;
+
+               pr_zoom_sync(pr, source->zoom, PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
+               }
+       else
+               {
+               pixbuf_renderer_set_pixbuf(pr, source->pixbuf, source->zoom);
+               }
+
+       pr->scroll_reset = scroll_reset;
 }
 
 void pixbuf_renderer_area_changed(PixbufRenderer *pr, gint x, gint y, gint w, gint h)
@@ -2677,13 +2613,13 @@ void pixbuf_renderer_zoom_set_limits(PixbufRenderer *pr, gdouble min, gdouble ma
 
 static void pr_stereo_set(PixbufRenderer *pr)
 {
-       if (!pr->renderer) pr->renderer = (void *)renderer_tiles_new(pr);
-       
+       if (!pr->renderer) pr->renderer = pr_backend_renderer_new(pr);
+
        pr->renderer->stereo_set(pr->renderer, pr->stereo_mode & ~PR_STEREO_MIRROR_RIGHT & ~PR_STEREO_FLIP_RIGHT);
-       
+
        if (pr->stereo_mode & (PR_STEREO_HORIZ | PR_STEREO_VERT | PR_STEREO_FIXED))
                {
-               if (!pr->renderer2) pr->renderer2 = (void *)renderer_tiles_new(pr);
+               if (!pr->renderer2) pr->renderer2 = pr_backend_renderer_new(pr);
                pr->renderer2->stereo_set(pr->renderer2, (pr->stereo_mode & ~PR_STEREO_MIRROR_LEFT & ~PR_STEREO_FLIP_LEFT) | PR_STEREO_RIGHT);
                }
        else
@@ -2708,12 +2644,12 @@ void pixbuf_renderer_stereo_set(PixbufRenderer *pr, gint stereo_mode)
        gboolean redraw = !(pr->stereo_mode == stereo_mode) || pr->stereo_temp_disable;
        pr->stereo_mode = stereo_mode;
        if ((stereo_mode & PR_STEREO_TEMP_DISABLE) && pr->stereo_temp_disable) return;
-       
+
        pr->stereo_temp_disable = FALSE;
-       
+
        pr_stereo_set(pr);
-       
-       if (redraw) 
+
+       if (redraw)
                {
                pr_size_sync(pr, pr->window_width, pr->window_height); /* recalculate new viewport */
                pr_zoom_sync(pr, pr->zoom, PR_ZOOM_FORCE | PR_ZOOM_NEW, 0, 0);
@@ -2741,7 +2677,7 @@ static void pr_stereo_temp_disable(PixbufRenderer *pr, gboolean disable)
        pr->stereo_temp_disable = disable;
        if (disable)
                {
-               if (!pr->renderer) pr->renderer = (void *)renderer_tiles_new(pr);
+               if (!pr->renderer) pr->renderer = pr_backend_renderer_new(pr);
                pr->renderer->stereo_set(pr->renderer, PR_STEREO_NONE);
                if (pr->renderer2) pr->renderer2->free(pr->renderer2);
                pr->renderer2 = NULL;
@@ -2754,14 +2690,14 @@ static void pr_stereo_temp_disable(PixbufRenderer *pr, gboolean disable)
        pr_size_sync(pr, pr->window_width, pr->window_height); /* recalculate new viewport */
 }
 
-gboolean pixbuf_renderer_get_pixel_colors(PixbufRenderer *pr, gint x_pixel, gint y_pixel, 
+gboolean pixbuf_renderer_get_pixel_colors(PixbufRenderer *pr, gint x_pixel, gint y_pixel,
                                           gint *r_mouse, gint *g_mouse, gint *b_mouse)
 {
        GdkPixbuf *pb = pr->pixbuf;
        gint p_alpha, prs;
        guchar *p_pix, *pp;
        gint map_x, map_y, map_w, map_h;
-       
+
        g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), FALSE);
        g_return_val_if_fail(r_mouse != NULL && g_mouse != NULL && b_mouse != NULL, FALSE);
 
@@ -2772,7 +2708,7 @@ gboolean pixbuf_renderer_get_pixel_colors(PixbufRenderer *pr, gint x_pixel, gint
                *b_mouse = -1;
                return FALSE;
                }
-       
+
        if (!pb) return FALSE;
 
        pr_tile_region_map_orientation(pr->orientation,
@@ -2784,7 +2720,7 @@ gboolean pixbuf_renderer_get_pixel_colors(PixbufRenderer *pr, gint x_pixel, gint
 
        if (map_x < 0 || map_x > gdk_pixbuf_get_width(pr->pixbuf) - 1) return  FALSE;
        if (map_y < 0 || map_y > gdk_pixbuf_get_height(pr->pixbuf) - 1) return  FALSE;
-       
+
        p_alpha = gdk_pixbuf_get_has_alpha(pb);
        prs = gdk_pixbuf_get_rowstride(pb);
        p_pix = gdk_pixbuf_get_pixels(pb);
@@ -2795,14 +2731,14 @@ gboolean pixbuf_renderer_get_pixel_colors(PixbufRenderer *pr, gint x_pixel, gint
        *g_mouse = *pp;
        pp++;
        *b_mouse = *pp;
-       
+
        return TRUE;
 }
 
 gboolean pixbuf_renderer_get_mouse_position(PixbufRenderer *pr, gint *x_pixel_return, gint *y_pixel_return)
 {
        gint x_pixel, y_pixel, x_pixel_clamped, y_pixel_clamped;
-            
+
        g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), FALSE);
        g_return_val_if_fail(x_pixel_return != NULL && y_pixel_return != NULL, FALSE);
 
@@ -2812,12 +2748,12 @@ gboolean pixbuf_renderer_get_mouse_position(PixbufRenderer *pr, gint *x_pixel_re
                *y_pixel_return = -1;
                return FALSE;
                }
-       
+
        x_pixel = floor((gdouble)(pr->x_mouse - pr->x_offset + pr->x_scroll) / pr->scale);
        y_pixel = floor((gdouble)(pr->y_mouse - pr->y_offset + pr->y_scroll) / pr->scale / pr->aspect_ratio);
        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)
                {
                /* mouse is not on pr */
@@ -2826,7 +2762,7 @@ gboolean pixbuf_renderer_get_mouse_position(PixbufRenderer *pr, gint *x_pixel_re
 
        *x_pixel_return = x_pixel;
        *y_pixel_return = y_pixel;
-       
+
        return TRUE;
 }
 
@@ -2909,6 +2845,9 @@ gboolean pixbuf_renderer_get_virtual_rect(PixbufRenderer *pr, GdkRectangle *rect
 
 void pixbuf_renderer_set_size_early(PixbufRenderer *pr, guint width, guint height)
 {
+#if 0
+       /* FIXME: this function does not consider the image orientation,
+       so it probably only breaks something */
        gdouble zoom;
        gint w, h;
 
@@ -2923,6 +2862,7 @@ void pixbuf_renderer_set_size_early(PixbufRenderer *pr, guint width, guint heigh
 
        //pr->width = width;
        //pr->height = height;
+#endif
 }
 
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 390de23..a0668a9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
 #ifndef PIXBUF_RENDERER_H
 #define PIXBUF_RENDERER_H
 
-#include <gtk/gtkeventbox.h>
-#include <gtk/gtkwindow.h>
-
-
 #define TYPE_PIXBUF_RENDERER           (pixbuf_renderer_get_type())
 #define PIXBUF_RENDERER(obj)           (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_PIXBUF_RENDERER, PixbufRenderer))
 #define PIXBUF_RENDERER_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_PIXBUF_RENDERER, PixbufRendererClass))
@@ -76,22 +72,20 @@ typedef enum {
 
 struct _RendererFuncs
 {
-       void (*redraw)(void *renderer, gint x, gint y, gint w, gint h,
-                     gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
-        void (*area_changed)(void *renderer, gint src_x, gint src_y, gint src_w, gint src_h);
-       void (*queue_clear)(void *renderer);
-       void (*border_clear)(void *renderer);
-       void (*invalidate_all)(void *renderer);
+//     void (*redraw)(void *renderer, gint x, gint y, gint w, gint h,
+  //                   gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
+        void (*area_changed)(void *renderer, gint src_x, gint src_y, gint src_w, gint src_h); /* pixbuf area changed */
        void (*invalidate_region)(void *renderer, gint x, gint y, gint w, gint h);
-       void (*scroll)(void *renderer, gint x_off, gint y_off);
-       void (*update_sizes)(void *renderer);
+       void (*scroll)(void *renderer, gint x_off, gint y_off); /* scroll */
+       void (*update_viewport)(void *renderer); /* window / wiewport / border color has changed */
+       void (*update_pixbuf)(void *renderer, gboolean lazy); /* pixbuf has changed */
+       void (*update_zoom)(void *renderer, gboolean lazy); /* zoom has changed */
 
        gint (*overlay_add)(void *renderer, GdkPixbuf *pixbuf, gint x, gint y, OverlayRendererFlags flags);
        void (*overlay_set)(void *renderer, gint id, GdkPixbuf *pixbuf, gint x, gint y);
        gboolean (*overlay_get)(void *renderer, gint id, GdkPixbuf **pixbuf, gint *x, gint *y);
-       void (*overlay_draw)(void *renderer, gint x, gint y, gint w, gint h);
 
-       void (*stereo_set)(void *renderer, gint stereo_mode);
+       void (*stereo_set)(void *renderer, gint stereo_mode); /* set stereo mode */
 
        void (*free)(void *renderer);
 };
@@ -115,7 +109,7 @@ struct _PixbufRenderer
 
        gint x_offset;          /* offset of image start (non-zero when viewport < window) */
        gint y_offset;
-       
+
        gint x_mouse; /* coordinates of the mouse taken from GtkEvent */
        gint y_mouse;
 
@@ -130,7 +124,7 @@ struct _PixbufRenderer
 
        gdouble norm_center_x;  /* coordinates of viewport center in the image, in range 0.0 - 1.0 */
        gdouble norm_center_y;  /* these coordinates are used for PR_SCROLL_RESET_NOCHANGE and should be preserved over periods with NULL pixbuf */
-       
+
        gdouble subpixel_x_scroll; /* subpixel scroll alignment, used to prevent acumulation of rounding errors */
        gdouble subpixel_y_scroll;
 
@@ -145,8 +139,6 @@ struct _PixbufRenderer
        gboolean zoom_2pass;
        gboolean zoom_expand;
 
-       GdkRgbDither dither_quality;
-
        PixbufRendererScrollResetType scroll_reset;
 
        gboolean has_frame;
@@ -201,7 +193,7 @@ struct _PixbufRenderer
        gint orientation;
 
        gint stereo_mode;
-       
+
        StereoPixbufData stereo_data;
        gboolean stereo_temp_disable;
        gint stereo_fixed_width;
@@ -210,7 +202,7 @@ struct _PixbufRenderer
        gint stereo_fixed_y_left;
        gint stereo_fixed_x_right;
        gint stereo_fixed_y_right;
-       
+
        RendererFuncs *renderer;
        RendererFuncs *renderer2;
 };
@@ -270,6 +262,7 @@ gint pixbuf_renderer_get_tiles(PixbufRenderer *pr);
 /* move image data from source to pr, source is then set to NULL image */
 
 void pixbuf_renderer_move(PixbufRenderer *pr, PixbufRenderer *source);
+void pixbuf_renderer_copy(PixbufRenderer *pr, PixbufRenderer *source);
 
 /* update region of existing image */
 
index 2580d98..8fa06cb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -136,13 +136,13 @@ static void register_stock_icon(const gchar *key, GdkPixbuf *pixbuf)
 {
        static GtkIconFactory *icon_factory = NULL;
        GtkIconSet *icon_set;
-       
+
        if (!icon_factory)
                {
                icon_factory = gtk_icon_factory_new();
                gtk_icon_factory_add_default(icon_factory);
                }
-       
+
        icon_set = gtk_icon_set_new_from_pixbuf(pixbuf);
        gtk_icon_factory_add(icon_factory, key, icon_set);
 }
@@ -167,7 +167,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
        GError *error = NULL;
 
        icon_theme = gtk_icon_theme_get_default();
-       
+
        if (gtk_icon_theme_has_icon(icon_theme, key)) return FALSE;
 
        pixbuf = gtk_icon_theme_load_icon(icon_theme,
@@ -175,7 +175,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
                            64, /* size */
                            0,  /* flags */
                            &error);
-       if (!pixbuf) 
+       if (!pixbuf)
                {
                if (error)
                        {
@@ -183,7 +183,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
                        g_error_free(error);
                        error = NULL;
                        }
-                       
+
                if (strchr(icon, '.'))
                        {
                        /* try again without extension */
@@ -203,7 +203,7 @@ gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
                }
 
        if (!pixbuf) return FALSE;
-       
+
        register_stock_icon(key, pixbuf);
        return TRUE;
 }
@@ -231,7 +231,7 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h,
 GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_height)
 {
        GdkPixbuf *pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); /* FIXME use different images according to FORMAT_CLASS */
-       
+
        if (requested_width && requested_height)
                {
                gint w = gdk_pixbuf_get_width(pixbuf);
@@ -349,10 +349,6 @@ GdkPixbuf *pixbuf_copy_rotate_90(GdkPixbuf *src, gboolean counter_clockwise)
        gint dw, dh, drs;
        guchar *s_pix;
        guchar *d_pix;
-#if 0
-       guchar *sp;
-       guchar *dp;
-#endif
        gint i, j;
        gint a;
        GdkPixbuf *buffer;
@@ -512,7 +508,7 @@ GdkPixbuf *pixbuf_apply_orientation(GdkPixbuf *pixbuf, gint orientation)
 {
        GdkPixbuf *dest;
        GdkPixbuf *tmp = NULL;
-       
+
        switch (orientation)
                {
                case EXIF_ORIENTATION_TOP_LEFT:
@@ -780,32 +776,35 @@ void pixbuf_draw_layout(GdkPixbuf *pixbuf, PangoLayout *layout, GtkWidget *widge
                        gint x, gint y,
                        guint8 r, guint8 g, guint8 b, guint8 a)
 {
-       GdkPixmap *pixmap;
        GdkPixbuf *buffer;
        gint w, h;
-       GdkGC *gc;
        gint sx, sy;
        gint dw, dh;
-
-       if (!widget || !widget->window) return;
+       cairo_surface_t *source;
+       cairo_t *cr;
 
        pango_layout_get_pixel_size(layout, &w, &h);
        if (w < 1 || h < 1) return;
 
-       pixmap = gdk_pixmap_new(widget->window, w, h, -1);
-
-       gc = gdk_gc_new(widget->window);
-       gdk_gc_copy(gc, widget->style->black_gc);
-       gdk_draw_rectangle(pixmap, gc, TRUE, 0, 0, w, h);
-       gdk_gc_copy(gc, widget->style->white_gc);
-       gdk_draw_layout(pixmap, gc, 0, 0, layout);
-       g_object_unref(gc);
-
-       buffer = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, w, h);
-       gdk_pixbuf_get_from_drawable(buffer, pixmap,
-                                    gdk_drawable_get_colormap(widget->window),
-                                    0, 0, 0, 0, w, h);
-       g_object_unref(pixmap);
+       source = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
+
+       cr = cairo_create (source);
+       cairo_set_source_rgb(cr, 0, 0, 0);
+       cairo_rectangle (cr, 0, 0, w, h);
+       cairo_fill (cr);
+       cairo_set_source_rgb(cr, 1, 1, 1);
+       pango_cairo_show_layout (cr, layout);
+       cairo_destroy (cr);
+
+       buffer = gdk_pixbuf_new_from_data (cairo_image_surface_get_data (source),
+                                          GDK_COLORSPACE_RGB,
+                                          cairo_image_surface_get_format (source) == CAIRO_FORMAT_ARGB32,
+                                          8,
+                                          cairo_image_surface_get_width (source),
+                                          cairo_image_surface_get_height (source),
+                                          cairo_image_surface_get_stride (source),
+                                          NULL,
+                                          NULL);
 
        sx = 0;
        sy = 0;
@@ -834,6 +833,7 @@ void pixbuf_draw_layout(GdkPixbuf *pixbuf, PangoLayout *layout, GtkWidget *widge
                         r, g, b, a);
 
        g_object_unref(buffer);
+       cairo_surface_destroy(source);
 }
 
 /*
@@ -1005,20 +1005,6 @@ static gboolean util_clip_line(gdouble clip_x, gdouble clip_y, gdouble clip_w, g
                if (y1 < clip_y || y2 > clip_y + clip_h) return FALSE;
                }
 
-#if 0
-       if (x1 >= clip_x && x2 <= clip_x + clip_w)
-               {
-               if (y1 < y2)
-                       {
-                       if (y1 >= clip_y && y2 <= clip_y + clip_h) return TRUE;
-                       }
-               else
-                       {
-                       if (y2 >= clip_y && y1 <= clip_y + clip_h) return TRUE;
-                       }
-               }
-#endif
-
        d = x2 - x1;
        if (d > 0.0)
                {
index 2e730e1..c754820 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index b79fee2..7881572 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -125,13 +125,13 @@ static GtkWidget *sidecar_ext_entry;
 
 static void zoom_mode_cb(GtkWidget *widget, gpointer data)
 {
-       if (GTK_TOGGLE_BUTTON (widget)->active)
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
                c_options->image.zoom_mode = GPOINTER_TO_INT(data);
 }
 
 static void scroll_reset_cb(GtkWidget *widget, gpointer data)
 {
-       if (GTK_TOGGLE_BUTTON (widget)->active)
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
                c_options->image.scroll_reset_method = GPOINTER_TO_INT(data);
 }
 
@@ -174,14 +174,14 @@ static gboolean accel_apply_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIt
        gchar *accel_path, *accel;
 
        gtk_tree_model_get(model, iter, AE_ACCEL, &accel_path, AE_KEY, &accel, -1);
-       
+
        if (accel_path && accel_path[0])
                {
                GtkAccelKey key;
                gtk_accelerator_parse(accel, &key.accel_key, &key.accel_mods);
                gtk_accel_map_change_entry(accel_path, key.accel_key, key.accel_mods, TRUE);
                }
-               
+
        g_free(accel_path);
        g_free(accel);
 
@@ -195,7 +195,7 @@ static void config_window_apply(void)
        gboolean refresh = FALSE;
 
        config_entry_to_option(safe_delete_path_entry, &options->file_ops.safe_delete_path, remove_trailing_slash);
-       
+
        if (options->file_filter.show_hidden_files != c_options->file_filter.show_hidden_files) refresh = TRUE;
        if (options->file_filter.show_dot_directory != c_options->file_filter.show_dot_directory) refresh = TRUE;
        if (options->file_sort.case_sensitive != c_options->file_sort.case_sensitive) refresh = TRUE;
@@ -216,6 +216,7 @@ static void config_window_apply(void)
        options->image.max_window_size = c_options->image.max_window_size;
        options->image.limit_autofit_size = c_options->image.limit_autofit_size;
        options->image.max_autofit_size = c_options->image.max_autofit_size;
+       options->image.use_clutter_renderer = c_options->image.use_clutter_renderer;
        options->progressive_key_scrolling = c_options->progressive_key_scrolling;
        if (options->thumbnails.max_width != c_options->thumbnails.max_width
            || options->thumbnails.max_height != c_options->thumbnails.max_height
@@ -230,9 +231,6 @@ static void config_window_apply(void)
        options->thumbnails.enable_caching = c_options->thumbnails.enable_caching;
        options->thumbnails.cache_into_dirs = c_options->thumbnails.cache_into_dirs;
        options->thumbnails.use_exif = c_options->thumbnails.use_exif;
-#if 0
-       options->thumbnails.use_xvpics = c_options->thumbnails.use_xvpics;
-#endif
        options->thumbnails.spec_standard = c_options->thumbnails.spec_standard;
        options->metadata.enable_metadata_dirs = c_options->metadata.enable_metadata_dirs;
        options->file_filter.show_hidden_files = c_options->file_filter.show_hidden_files;
@@ -263,7 +261,7 @@ static void config_window_apply(void)
 
        options->image.enable_read_ahead = c_options->image.enable_read_ahead;
 
-       
+
        if (options->image.use_custom_border_color != c_options->image.use_custom_border_color
            || options->image.use_custom_border_color_in_fullscreen != c_options->image.use_custom_border_color_in_fullscreen
            || !gdk_color_equal(&options->image.border_color, &c_options->image.border_color))
@@ -282,7 +280,7 @@ static void config_window_apply(void)
        if (c_options->image_overlay.template_string)
                set_image_overlay_template_string(&options->image_overlay.template_string,
                                                  c_options->image_overlay.template_string);
-               
+
        options->update_on_time_change = c_options->update_on_time_change;
        options->image.exif_rotate_enable = c_options->image.exif_rotate_enable;
        options->image.exif_proof_rotate_enable = c_options->image.exif_proof_rotate_enable;
@@ -293,7 +291,7 @@ static void config_window_apply(void)
 
        options->open_recent_list_maxsize = c_options->open_recent_list_maxsize;
        options->dnd_icon_size = c_options->dnd_icon_size;
-       
+
        options->metadata.save_in_image_file = c_options->metadata.save_in_image_file;
        options->metadata.save_legacy_IPTC = c_options->metadata.save_legacy_IPTC;
        options->metadata.warn_on_write_problems = c_options->metadata.warn_on_write_problems;
@@ -342,13 +340,6 @@ static void config_window_apply(void)
        options->color_profile.use_x11_screen_profile = c_options->color_profile.use_x11_screen_profile;
 #endif
 
-#if 0
-       for (i = 0; ExifUIList[i].key; i++)
-               {
-               ExifUIList[i].current = ExifUIList[i].temp;
-               }
-
-#endif
        image_options_sync();
 
        if (refresh)
@@ -356,7 +347,7 @@ static void config_window_apply(void)
                filter_rebuild();
                layout_refresh(NULL);
                }
-       
+
        if (accel_store) gtk_tree_model_foreach(GTK_TREE_MODEL(accel_store), accel_apply_cb, NULL);
 }
 
@@ -434,15 +425,15 @@ static void add_quality_menu(GtkWidget *table, gint column, gint row, const gcha
 
        pref_table_label(table, column, row, text, 0.0);
 
-       combo = gtk_combo_box_new_text();
+       combo = gtk_combo_box_text_new();
 
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Nearest (worst, but fastest)"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Nearest (worst, but fastest)"));
        if (option == GDK_INTERP_NEAREST) current = 0;
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Tiles"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Tiles"));
        if (option == GDK_INTERP_TILES) current = 1;
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Bilinear"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Bilinear"));
        if (option == GDK_INTERP_BILINEAR) current = 2;
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Hyper (best, but slowest)"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Hyper (best, but slowest)"));
        if (option == GDK_INTERP_HYPER) current = 3;
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(combo), current);
@@ -455,33 +446,6 @@ static void add_quality_menu(GtkWidget *table, gint column, gint row, const gcha
        gtk_widget_show(combo);
 }
 
-#if 0
-static void add_dither_menu(gint option, gint *option_c, gchar *text, GtkWidget *box)
-{
-       GtkWidget *hbox;
-       GtkWidget *omenu;
-       GtkWidget *menu;
-
-       *option_c = option;
-
-       hbox = pref_box_new(box, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
-       pref_label_new(hbox, text);
-
-       omenu = gtk_option_menu_new();
-       menu = gtk_menu_new();
-
-       add_menu_item(menu, _("None"), option_c, (gint)GDK_RGB_DITHER_NONE);
-       add_menu_item(menu, _("Normal"), option_c, (gint)GDK_RGB_DITHER_NORMAL);
-       add_menu_item(menu, _("Best"), option_c, (gint)GDK_RGB_DITHER_MAX);
-
-       gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu);
-       gtk_option_menu_set_history(GTK_OPTION_MENU(omenu), *option_c);
-
-       gtk_box_pack_start(GTK_BOX(hbox), omenu, FALSE, FALSE, 0);
-       gtk_widget_show(omenu);
-}
-#endif
-
 static void thumb_size_menu_cb(GtkWidget *combo, gpointer data)
 {
        gint n;
@@ -512,7 +476,7 @@ static void add_thumb_size_menu(GtkWidget *table, gint column, gint row, gchar *
 
        pref_table_label(table, column, row, text, 0.0);
 
-       combo = gtk_combo_box_new_text();
+       combo = gtk_combo_box_text_new();
 
        current = -1;
        for (i = 0; (guint) i < sizeof(thumb_size_list) / sizeof(ThumbSize); i++)
@@ -524,7 +488,7 @@ static void add_thumb_size_menu(GtkWidget *table, gint column, gint row, gchar *
                h = thumb_size_list[i].h;
 
                buf = g_strdup_printf("%d x %d", w, h);
-               gtk_combo_box_append_text(GTK_COMBO_BOX(combo), buf);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), buf);
                g_free(buf);
 
                if (w == options->thumbnails.max_width && h == options->thumbnails.max_height) current = i;
@@ -535,7 +499,7 @@ static void add_thumb_size_menu(GtkWidget *table, gint column, gint row, gchar *
                gchar *buf;
 
                buf = g_strdup_printf("%s %d x %d", _("Custom"), options->thumbnails.max_width, options->thumbnails.max_height);
-               gtk_combo_box_append_text(GTK_COMBO_BOX(combo), buf);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), buf);
                g_free(buf);
 
                current = i;
@@ -588,7 +552,7 @@ static void stereo_mode_menu_cb(GtkWidget *combo, gpointer data)
 }
 
 static void add_stereo_mode_menu(GtkWidget *table, gint column, gint row, const gchar *text,
-                            guint option, guint *option_c, gboolean add_fixed)
+                            gint option, gint *option_c, gboolean add_fixed)
 {
        GtkWidget *combo;
        gint current = 0;
@@ -597,36 +561,36 @@ static void add_stereo_mode_menu(GtkWidget *table, gint column, gint row, const
 
        pref_table_label(table, column, row, text, 0.0);
 
-       combo = gtk_combo_box_new_text();
+       combo = gtk_combo_box_text_new();
 
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Single image"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Single image"));
 
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Anaglyph Red-Cyan"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Anaglyph Red-Cyan"));
        if (option & PR_STEREO_ANAGLYPH_RC) current = 1;
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Anaglyph Gray Red-Cyan"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Anaglyph Gray Red-Cyan"));
        if (option & PR_STEREO_ANAGLYPH_GRAY) current = 2;
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Anaglyph Dubois"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Anaglyph Dubois"));
        if (option & PR_STEREO_ANAGLYPH_DB) current = 3;
 
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Side by Side"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Side by Side Half size"));
-       if (option & PR_STEREO_HORIZ) 
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Side by Side"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Side by Side Half size"));
+       if (option & PR_STEREO_HORIZ)
                {
                current = 4;
                if (option & PR_STEREO_HALF) current = 5;
                }
 
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Top - Bottom"));
-       gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Top - Bottom Half size"));
-       if (option & PR_STEREO_VERT) 
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Top - Bottom"));
+       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Top - Bottom Half size"));
+       if (option & PR_STEREO_VERT)
                {
                current = 6;
                if (option & PR_STEREO_HALF) current = 7;
                }
-               
+
        if (add_fixed)
                {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _("Fixed position"));
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Fixed position"));
                if (option & PR_STEREO_FIXED) current = 8;
                }
 
@@ -823,12 +787,48 @@ static void filter_set_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cel
                }
 }
 
+static gboolean filter_add_scroll(gpointer data)
+{
+       GtkTreePath *path;
+       GList *list_cells;
+       GtkCellRenderer *cell;
+       GtkTreeViewColumn *column;
+       GList *list_columns;
+       const gchar *title;
+       guint i = 0;
+       gint rows;
+
+       rows = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(filter_store), NULL);
+       path = gtk_tree_path_new_from_indices(rows-1, -1);
+
+       list_columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(data));
+       do {
+               column = g_list_nth(list_columns,i)->data;
+               title = gtk_tree_view_column_get_title(GTK_TREE_VIEW_COLUMN(column));
+               i++;
+               } while (strcmp(title, "Filter") !=0 );
+
+       list_cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
+       cell = g_list_last(list_cells)->data;
+
+       gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(data),
+                                                               path, column, FALSE, 0.0, 0.0 );
+       gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(data),
+                                                               path, column, cell, TRUE);
+
+       gtk_tree_path_free(path);
+       g_list_free(list_cells);
+       g_list_free(list_columns);
+
+       return(FALSE);
+}
+
 static void filter_add_cb(GtkWidget *widget, gpointer data)
 {
        filter_add_unique("description", ".new", FORMAT_CLASS_IMAGE, TRUE, FALSE, TRUE);
        filter_store_populate();
 
-       /* FIXME: implement the scroll to/select row stuff for tree view */
+       g_idle_add((GSourceFunc)filter_add_scroll, data);
 }
 
 static void filter_remove_cb(GtkWidget *widget, gpointer data)
@@ -849,12 +849,33 @@ static void filter_remove_cb(GtkWidget *widget, gpointer data)
        filter_store_populate();
 }
 
+static gboolean filter_default_ok_scroll(GtkTreeView *data)
+{
+       GtkTreeIter iter;
+       GtkTreePath *path;
+       GtkTreeViewColumn *column;
+
+       gtk_tree_model_get_iter_first(GTK_TREE_MODEL(filter_store), &iter);
+       path = gtk_tree_model_get_path(GTK_TREE_MODEL(filter_store), &iter);
+       column = gtk_tree_view_get_column(GTK_TREE_VIEW(data),0);
+
+       gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(data),
+                                    path, column,
+                                    FALSE, 0.0, 0.0);
+
+       gtk_tree_path_free(path);
+
+       return(FALSE);
+}
+
 static void filter_default_ok_cb(GenericDialog *gd, gpointer data)
 {
        filter_reset();
        filter_add_defaults();
        filter_rebuild();
        filter_store_populate();
+
+       g_idle_add((GSourceFunc)filter_default_ok_scroll, gd->data);
 }
 
 static void dummy_cancel_cb(GenericDialog *gd, gpointer data)
@@ -868,7 +889,7 @@ static void filter_default_cb(GtkWidget *widget, gpointer data)
 
        gd = generic_dialog_new(_("Reset filters"),
                                "reset_filter", widget, TRUE,
-                               dummy_cancel_cb, NULL);
+                               dummy_cancel_cb, data);
        generic_dialog_add_message(gd, GTK_STOCK_DIALOG_QUESTION, _("Reset filters"),
                                   _("This will reset the file filters to the defaults.\nContinue?"));
        generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, filter_default_ok_cb, TRUE);
@@ -904,7 +925,7 @@ static void safe_delete_clear_cb(GtkWidget *widget, gpointer data)
                                    _("This will remove the trash contents."));
        generic_dialog_add_button(gd, GTK_STOCK_OK, NULL, safe_delete_clear_ok_cb, TRUE);
        entry = gtk_entry_new();
-       GTK_WIDGET_UNSET_FLAGS(entry, GTK_CAN_FOCUS);
+       gtk_widget_set_can_focus(entry, FALSE);
        gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE);
        if (options->file_ops.safe_delete_path) gtk_entry_set_text(GTK_ENTRY(entry), options->file_ops.safe_delete_path);
        gtk_box_pack_start(GTK_BOX(gd->vbox), entry, FALSE, FALSE, 0);
@@ -959,7 +980,6 @@ static void image_overlay_help_cb(GtkWidget *widget, gpointer data)
        help_window_show("overlay");
 }
 
-#if GTK_CHECK_VERSION(2, 10, 0)
 static void accel_store_populate(void)
 {
        LayoutWindow *lw;
@@ -991,15 +1011,15 @@ static void accel_store_populate(void)
                                             "label", &label,
                                             NULL);
 
-                               if (pango_parse_markup(label, -1, '_', NULL, &label2, NULL, NULL) && label2) 
+                               if (pango_parse_markup(label, -1, '_', NULL, &label2, NULL, NULL) && label2)
                                        {
                                        g_free(label);
                                        label = label2;
                                        }
 
                                accel = gtk_accelerator_name(key.accel_key, key.accel_mods);
-                               
-                               if (tooltip) 
+
+                               if (tooltip)
                                        {
                                        gtk_tree_store_append(accel_store, &iter, NULL);
                                        gtk_tree_store_set(accel_store, &iter,
@@ -1023,7 +1043,7 @@ static void accel_store_populate(void)
 
 static void accel_store_cleared_cb(GtkCellRendererAccel *accel, gchar *path_string, gpointer user_data)
 {
-    
+
 }
 
 static gboolean accel_remove_key_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
@@ -1034,16 +1054,16 @@ static gboolean accel_remove_key_cb(GtkTreeModel *model, GtkTreePath *path, GtkT
        GtkAccelKey key2;
 
        gtk_tree_model_get(model, iter, AE_KEY, &accel2, -1);
-       
+
        gtk_accelerator_parse(accel1, &key1.accel_key, &key1.accel_mods);
        gtk_accelerator_parse(accel2, &key2.accel_key, &key2.accel_mods);
-       
+
        if (key1.accel_key == key2.accel_key && key1.accel_mods == key2.accel_mods)
                {
                gtk_tree_store_set(accel_store, iter, AE_KEY, "",  -1);
                DEBUG_1("accelerator key '%s' is already used, removing.", accel1);
                }
-       
+
        g_free(accel2);
 
        return FALSE;
@@ -1066,11 +1086,11 @@ static void accel_store_edited_cb(GtkCellRendererAccel *accel, gchar *path_strin
        gtk_accel_map_lookup_entry(accel_path, &old_key);
 
        /* change the key and read it back (change may fail on keys hardcoded in gtk)*/
-       gtk_accel_map_change_entry(accel_path, accel_key, accel_mods, TRUE); 
+       gtk_accel_map_change_entry(accel_path, accel_key, accel_mods, TRUE);
        gtk_accel_map_lookup_entry(accel_path, &key);
 
        /* restore the original for now, the key will be really changed when the changes are confirmed */
-       gtk_accel_map_change_entry(accel_path, old_key.accel_key, old_key.accel_mods, TRUE); 
+       gtk_accel_map_change_entry(accel_path, old_key.accel_key, old_key.accel_mods, TRUE);
 
        acc = gtk_accelerator_name(key.accel_key, key.accel_mods);
        gtk_tree_model_foreach(GTK_TREE_MODEL(accel_store), accel_remove_key_cb, acc);
@@ -1080,29 +1100,36 @@ static void accel_store_edited_cb(GtkCellRendererAccel *accel, gchar *path_strin
        g_free(acc);
 }
 
-static void accel_default_cb(GtkWidget *widget, gpointer data)
+static gboolean accel_default_scroll(GtkTreeView *data)
 {
-       accel_store_populate();
+       GtkTreeIter iter;
+       GtkTreePath *path;
+       GtkTreeViewColumn *column;
 
-       /* FIXME: implement the scroll to/select row stuff for tree view */
-}
+       gtk_tree_model_get_iter_first(GTK_TREE_MODEL(accel_store), &iter);
+       path = gtk_tree_model_get_path(GTK_TREE_MODEL(accel_store), &iter);
+       column = gtk_tree_view_get_column(GTK_TREE_VIEW(data),0);
 
-void accel_remove_selection(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
-{
-       gtk_tree_store_set(accel_store, iter, AE_KEY, "", -1);    
+       gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(data),
+                                    path, column,
+                                    FALSE, 0.0, 0.0);
+
+       gtk_tree_path_free(path);
+
+       return(FALSE);
 }
 
-#if 0    
-static void accel_remove_cb(GtkWidget *widget, gpointer data)
+static void accel_default_cb(GtkWidget *widget, gpointer data)
 {
-       GtkTreeSelection *selection;
+       accel_store_populate();
 
-       if (!accel_store) return;
+       g_idle_add((GSourceFunc)accel_default_scroll, data);
+}
 
-       selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data));
-       gtk_tree_selection_selected_foreach(selection, &accel_remove_selection, NULL);
+void accel_remove_selection(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+       gtk_tree_store_set(accel_store, iter, AE_KEY, "", -1);
 }
-#endif
 
 void accel_reset_selection(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
 {
@@ -1130,115 +1157,6 @@ static void accel_reset_cb(GtkWidget *widget, gpointer data)
 }
 
 
-#if 0
-static void accel_alternate_activate_cb(GtkWidget *widget, gpointer data)
-{
-       gtk_action_activate((GtkAction*)data);
-}
-
-#define DUPL "-alt-"
-
-void accel_add_alt_selection(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
-{
-       LayoutWindow *lw;
-       GList *groups, *actions;
-       GtkAction *action;
-       GtkAccelKey key, *key2;
-       GtkAccelMap *map;
-       gchar *accel_path2, *accel;
-       const gchar *accel_path;
-       gint freeduplnum = 1;    
-       gint len;
-       GClosure* closure;
-       GtkAccelGroup *group;
-       GtkAction *action_new, *action_new2;
-       gchar *name, *accel_path_new, *accel_path_new2;
-
-       if (!accel_store || !layout_window_list || !layout_window_list->data) return;
-
-       gtk_tree_model_get(model, iter, AE_ACCEL, &accel_path2, -1);
-       len = strlen(accel_path2);
-       gtk_tree_store_clear(accel_store);
-       lw = layout_window_list->data;
-    
-       g_assert(lw && lw->ui_manager);
-       groups = gtk_ui_manager_get_action_groups(lw->ui_manager);
-       group = gtk_ui_manager_get_accel_group(lw->ui_manager);
-
-       while (groups)
-               {
-               actions = gtk_action_group_list_actions(GTK_ACTION_GROUP(groups->data));
-               while (actions)
-                       {
-                       gchar *dupl;
-                       guint64 num;
-
-                       action = GTK_ACTION(actions->data);
-                       actions = actions->next;
-
-                       accel_path = gtk_action_get_accel_path(action);
-                       if (!accel_path) continue;
-
-                       dupl = g_strrstr(accel_path, DUPL);
-
-                       printf("D: %s %s %s\n", accel_path, accel_path2, dupl);
-
-                       if ((dupl && (len != (dupl - accel_path)) ) ||
-                           g_ascii_strncasecmp(accel_path, accel_path2, len) != 0)
-                               continue;
-
-                       if (dupl && (num = g_ascii_strtoull(dupl + strlen(DUPL), NULL, 10)) > 0 &&
-                           num > freeduplnum)
-                               {
-                               freeduplnum = num + 1;
-                               }
-                       else
-                               {
-                               closure = gtk_action_get_accel_closure(action);
-                               name = gtk_action_get_name(action);
-                               accel_path_new = g_strdup(accel_path);
-                               action_new2 = action;
-                               }
-                       }
-               groups = groups->next;
-               }
-
-       action_new = gtk_action_new(name, NULL, NULL, NULL);
-       gtk_action_set_accel_group(action_new, group);
-
-       g_signal_connect(G_OBJECT(action_new), "activate",
-                        G_CALLBACK(accel_alternate_activate_cb), action_new2);
-
-//     accel_path_new2 = g_strdup_printf("%s%s%d", accel_path_new, dupl, freeduplnum);
-       g_free(accel_path_new);
-
-       gtk_action_set_accel_path(action_new, accel_path_new);
-
-//     gtk_tree_store_set(accel_store, iter, AE_KEY, "", -1);
-       printf("D: %s\n", accel_path_new2);
-
-       g_free(accel_path_new2);
-       gtk_action_connect_accelerator(action_new);
-}
-    
-static void accel_add_alt_cb(GtkWidget *widget, gpointer data)
-{
-       GtkWidget *accel_view = data;
-       GtkTreeSelection *selection;
-
-       if (!accel_store) return;
-       selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(data));
-       gtk_tree_selection_selected_foreach(selection, &accel_add_alt_selection, NULL);
-}
-
-static void accel_default_ok_cb(GenericDialog *gd, gpointer data)
-{
-       accel_store_populate();
-}
-
-#endif
-#endif
 
 static GtkWidget *scrolled_notebook_page(GtkWidget *notebook, const gchar *title)
 {
@@ -1301,11 +1219,6 @@ static void config_tab_general(GtkWidget *notebook)
        pref_checkbox_new_int(subgroup, _("Store thumbnails in '.thumbnails' folder, local to image folder (non-standard)"),
                              options->thumbnails.cache_into_dirs, &c_options->thumbnails.cache_into_dirs);
 
-#if 0
-       pref_checkbox_new_int(subgroup, _("Use xvpics thumbnails when found (read only)"),
-                             options->thumbnails.use_xvpics, &c_options->thumbnails.use_xvpics);
-#endif
-
        pref_checkbox_new_int(group, _("Use EXIF thumbnails when available (EXIF thumbnails may be outdated)"),
                              options->thumbnails.use_exif, &c_options->thumbnails.use_exif);
 
@@ -1323,11 +1236,6 @@ static void config_tab_general(GtkWidget *notebook)
 
        group = pref_group_new(vbox, FALSE, _("Image loading and caching"), GTK_ORIENTATION_VERTICAL);
 
-#if 0
-       pref_spin_new_int(group, _("Offscreen cache size (Mb per image):"), NULL,
-                         0, 128, 1, options->image.tile_cache_max, &c_options->image.tile_cache_max);
-#endif
-
        pref_spin_new_int(group, _("Decoded image cache size (Mb):"), NULL,
                          0, 1024, 1, options->image.image_cache_max, &c_options->image.image_cache_max);
        pref_checkbox_new_int(group, _("Preload next image"),
@@ -1353,12 +1261,14 @@ static void config_tab_image(GtkWidget *notebook)
 
        group = pref_group_new(vbox, FALSE, _("Zoom"), GTK_ORIENTATION_VERTICAL);
 
-#if 0
-       add_dither_menu(dither_quality, &c_options->image.dither_quality, _("Dithering method:"), group);
-#endif
        table = pref_table_new(group, 2, 1, FALSE, FALSE);
        add_quality_menu(table, 0, 0, _("Quality:"), options->image.zoom_quality, &c_options->image.zoom_quality);
 
+#ifdef HAVE_CLUTTER
+       pref_checkbox_new_int(group, _("Use GPU acceleration via Clutter library"),
+                             options->image.use_clutter_renderer, &c_options->image.use_clutter_renderer);
+#endif
+
        pref_checkbox_new_int(group, _("Two pass rendering (apply HQ zoom and color correction in second pass)"),
                              options->image.zoom_2pass, &c_options->image.zoom_2pass);
 
@@ -1410,7 +1320,7 @@ static void config_tab_image(GtkWidget *notebook)
 
        pref_checkbox_new_int(group, _("Use custom border color in window mode"),
                              options->image.use_custom_border_color, &c_options->image.use_custom_border_color);
-       
+
        pref_checkbox_new_int(group, _("Use custom border color in fullscreen mode"),
                              options->image.use_custom_border_color_in_fullscreen, &c_options->image.use_custom_border_color_in_fullscreen);
 
@@ -1489,7 +1399,6 @@ static void config_tab_windows(GtkWidget *notebook)
 
        image_overlay_template_view = gtk_text_view_new();
 
-#if GTK_CHECK_VERSION(2,12,0)
        gtk_widget_set_tooltip_markup(image_overlay_template_view,
        _("<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"
@@ -1500,9 +1409,8 @@ static void config_tab_windows(GtkWidget *notebook)
          "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 to add lines that totally disappear when no data is available.\n"
-));
-#endif
+         "If a line is empty, it is removed. This allows one to add lines that totally disappear when no data is available.\n"
+       ));
        gtk_container_add(GTK_CONTAINER(scrolled), image_overlay_template_view);
        gtk_widget_show(image_overlay_template_view);
 
@@ -1564,10 +1472,6 @@ static void config_tab_files(GtkWidget *notebook)
 
        pref_checkbox_new_int(group, _("Show hidden files or folders"),
                              options->file_filter.show_hidden_files, &c_options->file_filter.show_hidden_files);
-#if 0
-       pref_checkbox_new_int(group, _("Show dot directory"),
-                             options->file_filter.show_dot_directory, &c_options->file_filter.show_dot_directory);
-#endif
        pref_checkbox_new_int(group, _("Case sensitive sort"),
                              options->file_sort.case_sensitive, &c_options->file_sort.case_sensitive);
 
@@ -1626,6 +1530,9 @@ static void config_tab_files(GtkWidget *notebook)
        column = gtk_tree_view_column_new();
        gtk_tree_view_column_set_title(column, _("Description"));
        gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_column_set_fixed_width(column, 200);
+       gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+
        renderer = gtk_cell_renderer_text_new();
        g_signal_connect(G_OBJECT(renderer), "edited",
                         G_CALLBACK(filter_store_desc_edit_cb), filter_store);
@@ -1682,7 +1589,7 @@ static void config_tab_files(GtkWidget *notebook)
        hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_BUTTON_GAP);
 
        button = pref_button_new(NULL, NULL, _("Defaults"), FALSE,
-                                G_CALLBACK(filter_default_cb), NULL);
+                                G_CALLBACK(filter_default_cb), filter_view);
        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
        gtk_widget_show(button);
 
@@ -1692,7 +1599,7 @@ static void config_tab_files(GtkWidget *notebook)
        gtk_widget_show(button);
 
        button = pref_button_new(NULL, GTK_STOCK_ADD, NULL, FALSE,
-                                G_CALLBACK(filter_add_cb), NULL);
+                                G_CALLBACK(filter_add_cb), filter_view);
        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
        gtk_widget_show(button);
 }
@@ -1729,6 +1636,7 @@ static void config_tab_metadata(GtkWidget *notebook)
        text = g_strdup_printf(_("3) Save metadata in Geeqie private directory '%s'"), get_metadata_cache_dir());
        label = pref_label_new(group, text);
        gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+       gtk_misc_set_padding(GTK_MISC(label), 22, 0);
        g_free(text);
 
        group = pref_group_new(vbox, FALSE, _("Step 1: Write to image files"), GTK_ORIENTATION_VERTICAL);
@@ -1780,7 +1688,7 @@ static void config_tab_metadata(GtkWidget *notebook)
 
        pref_spin_new_int(hbox, _("Timeout (seconds):"), NULL, 0, 900, 1,
                              options->metadata.confirm_timeout, &c_options->metadata.confirm_timeout);
-                             
+
        pref_checkbox_new_int(group, _("Write metadata on image change"),
                              options->metadata.confirm_on_image_change, &c_options->metadata.confirm_on_image_change);
 
@@ -1828,7 +1736,6 @@ static void config_tab_color(GtkWidget *notebook)
 
                entry = gtk_entry_new();
                gtk_entry_set_max_length(GTK_ENTRY(entry), EDITOR_NAME_MAX_LENGTH);
-//             gtk_widget_set_size_request(editor_name_entry[i], 30, -1);
                if (options->color_profile.input_name[i])
                        {
                        gtk_entry_set_text(GTK_ENTRY(entry), options->color_profile.input_name[i]);
@@ -1907,9 +1814,7 @@ static void config_tab_behavior(GtkWidget *notebook)
        pref_spacer(hbox, PREF_PAD_INDENT - PREF_PAD_GAP);
        spin = pref_spin_new_int(hbox, _("Maximum size:"), _("MB"),
                                 0, 2048, 1, options->file_ops.safe_delete_folder_maxsize, &c_options->file_ops.safe_delete_folder_maxsize);
-#if GTK_CHECK_VERSION(2,12,0)
        gtk_widget_set_tooltip_markup(spin, _("Set to 0 for unlimited size"));
-#endif
        button = pref_button_new(NULL, NULL, _("View"), FALSE,
                                 G_CALLBACK(safe_delete_view_cb), NULL);
        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
@@ -1934,7 +1839,7 @@ static void config_tab_behavior(GtkWidget *notebook)
 
        pref_spin_new_int(group, _("Open recent list maximum size"), NULL,
                          1, 50, 1, options->open_recent_list_maxsize, &c_options->open_recent_list_maxsize);
-       
+
        pref_spin_new_int(group, _("Drag'n drop icon size"), NULL,
                          16, 256, 16, options->dnd_icon_size, &c_options->dnd_icon_size);
 
@@ -1962,7 +1867,6 @@ static void config_tab_behavior(GtkWidget *notebook)
 /* accelerators tab */
 static void config_tab_accelerators(GtkWidget *notebook)
 {
-#if GTK_CHECK_VERSION(2, 10, 0)
        GtkWidget *hbox;
        GtkWidget *vbox;
        GtkWidget *group;
@@ -1995,9 +1899,9 @@ static void config_tab_accelerators(GtkWidget *notebook)
        renderer = gtk_cell_renderer_text_new();
 
        column = gtk_tree_view_column_new_with_attributes(_("Action"),
-                                                     renderer,
-                                                      "text", AE_ACTION,
-                                                      NULL);
+                                                         renderer,
+                                                         "text", AE_ACTION,
+                                                         NULL);
 
        gtk_tree_view_column_set_sort_column_id(column, AE_ACTION);
        gtk_tree_view_column_set_resizable(column, TRUE);
@@ -2012,14 +1916,14 @@ static void config_tab_accelerators(GtkWidget *notebook)
 
 
        g_object_set (renderer,
-                  "editable", TRUE,
-                  "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
-                  NULL);
-    
+                     "editable", TRUE,
+                     "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
+                     NULL);
+
        column = gtk_tree_view_column_new_with_attributes(_("KEY"),
-                                                      renderer,
-                                                      "text", AE_KEY,
-                                                      NULL);
+                                                         renderer,
+                                                         "text", AE_KEY,
+                                                         NULL);
 
        gtk_tree_view_column_set_sort_column_id(column, AE_KEY);
        gtk_tree_view_column_set_resizable(column, TRUE);
@@ -2028,9 +1932,9 @@ static void config_tab_accelerators(GtkWidget *notebook)
        renderer = gtk_cell_renderer_text_new();
 
        column = gtk_tree_view_column_new_with_attributes(_("Tooltip"),
-                                                      renderer,
-                                                      "text", AE_TOOLTIP,
-                                                      NULL);
+                                                         renderer,
+                                                         "text", AE_TOOLTIP,
+                                                         NULL);
 
        gtk_tree_view_column_set_sort_column_id(column, AE_TOOLTIP);
        gtk_tree_view_column_set_resizable(column, TRUE);
@@ -2039,14 +1943,14 @@ static void config_tab_accelerators(GtkWidget *notebook)
        renderer = gtk_cell_renderer_text_new();
 
        column = gtk_tree_view_column_new_with_attributes("Accel",
-                                                      renderer,
-                                                      "text", AE_ACCEL,
-                                                      NULL);
+                                                         renderer,
+                                                         "text", AE_ACCEL,
+                                                         NULL);
+
        gtk_tree_view_column_set_sort_column_id(column, AE_ACCEL);
        gtk_tree_view_column_set_resizable(column, TRUE);
        gtk_tree_view_append_column(GTK_TREE_VIEW(accel_view), column);
-    
+
        accel_store_populate();
        gtk_container_add(GTK_CONTAINER(scrolled), accel_view);
        gtk_widget_show(accel_view);
@@ -2054,29 +1958,14 @@ static void config_tab_accelerators(GtkWidget *notebook)
        hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_BUTTON_GAP);
 
        button = pref_button_new(NULL, NULL, _("Defaults"), FALSE,
-                                G_CALLBACK(accel_default_cb), NULL);
+                                G_CALLBACK(accel_default_cb), accel_view);
        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
        gtk_widget_show(button);
 
-#if 0
-       button = pref_button_new(NULL, GTK_STOCK_REMOVE, NULL, FALSE,
-                                G_CALLBACK(accel_remove_cb), accel_view);
-       gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
-       gtk_widget_show(button);
-#endif
-
        button = pref_button_new(NULL, NULL, _("Reset selected"), FALSE,
                                 G_CALLBACK(accel_reset_cb), accel_view);
        gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
        gtk_widget_show(button);
-
-#if 0
-       button = pref_button_new(NULL, _("Add Alt"), NULL, FALSE,
-                 G_CALLBACK(accel_add_alt_cb), accel_view);
-       gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
-       gtk_widget_show(button);
-#endif
-#endif
 }
 
 /* stereo tab */
@@ -2188,7 +2077,7 @@ static void config_window_create(void)
        button = pref_button_new(NULL, GTK_STOCK_OK, NULL, FALSE,
                                 G_CALLBACK(config_window_ok_cb), NULL);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_grab_default(button);
        gtk_widget_show(button);
 
@@ -2197,19 +2086,19 @@ static void config_window_create(void)
        button = pref_button_new(NULL, GTK_STOCK_SAVE, NULL, FALSE,
                                 G_CALLBACK(config_window_save_cb), NULL);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
-       
+
        button = pref_button_new(NULL, GTK_STOCK_APPLY, NULL, FALSE,
                                 G_CALLBACK(config_window_apply_cb), NULL);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        button = pref_button_new(NULL, GTK_STOCK_CANCEL, NULL, FALSE,
                                 G_CALLBACK(config_window_close_cb), NULL);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        if (!generic_dialog_get_alternative_button_order(configwindow))
@@ -2318,7 +2207,7 @@ void show_about_window(void)
        buf = g_strdup_printf(_("%s %s\n\nCopyright (c) 2006 John Ellis\nCopyright (c) %s The Geeqie Team\nwebsite: %s\nemail: %s\n\nReleased under the GNU General Public License"),
                              GQ_APPNAME,
                              VERSION,
-                             "2008 - 2010",
+                             "2008 - 2012",
                              GQ_WEBSITE,
                              GQ_EMAIL_ADDRESS);
        label = gtk_label_new(buf);
@@ -2337,13 +2226,13 @@ void show_about_window(void)
        button = pref_button_new(NULL, NULL, _("Credits..."), FALSE,
                                 G_CALLBACK(about_credits_cb), NULL);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_show(button);
 
        button = pref_button_new(NULL, GTK_STOCK_CLOSE, NULL, FALSE,
                                 G_CALLBACK(about_window_close), NULL);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_grab_default(button);
        gtk_widget_show(button);
 
index ba15f8b..0bf48b1 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 12aae51..23bb71f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -1367,10 +1367,10 @@ static gboolean print_job_ps_page_text(PrintWindow *pw, const gchar *text, gdoub
        pixbuf_draw_layout(pixbuf, layout, pw->dialog->dialog, 0, 0, r, g, b, 255);
        g_object_unref(G_OBJECT(layout));
 
-       ret = print_job_ps_page_image(pw, pixbuf, x, y, 
+       ret = print_job_ps_page_image(pw, pixbuf, x, y,
                                       /* do not allow rescaling of the pixbuf due to rounding errors */
                                      ((gdouble)lw + 0.01) / scale_to_max_dpi,
-                                     ((gdouble)lh + 0.01) / scale_to_max_dpi, 
+                                     ((gdouble)lh + 0.01) / scale_to_max_dpi,
                                      0, 0);
 
        g_object_unref(G_OBJECT(pixbuf));
@@ -1959,11 +1959,7 @@ static void print_job_throw_error(PrintWindow *pw, const gchar *message)
        GtkWidget *label;
        gchar *buf;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_get_visible(pw->dialog->dialog)) parent = pw->dialog->dialog;
-#else
-       if (GTK_WIDGET_VISIBLE(pw->dialog->dialog)) parent = pw->dialog->dialog;
-#endif
 
        gd = generic_dialog_new(_("Printing error"), "print_warning",
                                parent, TRUE, NULL, NULL);
@@ -2061,7 +2057,6 @@ static void print_job_render_image_loader_done(ImageLoader *il, gpointer data)
                gdouble sw, sh;
                gdouble dw, dh;
                gdouble x, y, w, h;
-               gdouble scale;
                gdouble offx, offy;
 
                sw = (gdouble)gdk_pixbuf_get_width(pixbuf);
@@ -2074,13 +2069,11 @@ static void print_job_render_image_loader_done(ImageLoader *il, gpointer data)
                        {
                        w = dw;
                        h = dw / sw * sh;
-                       scale = w / sw;
                        }
                else
                        {
                        h = dh;
                        w = dh / sh *sw;
-                       scale = h / sh;
                        }
 
                if (pw->image_scale >= 5.0)
@@ -2191,7 +2184,6 @@ static void print_job_render_proof_loader_done(ImageLoader *il, gpointer data)
        gdouble w, h;
        gdouble proof_w, proof_h;
        gdouble icon_w, icon_h;
-       gdouble scale;
        gboolean success = TRUE;
 
        if (pw->proof_columns < 1 || pw->proof_rows < 1)
@@ -2217,13 +2209,11 @@ static void print_job_render_proof_loader_done(ImageLoader *il, gpointer data)
                {
                icon_w = pw->proof_width;
                icon_h = pw->proof_width / w * h;
-               scale = icon_w / w;
                }
        else
                {
                icon_h = pw->proof_height;
                icon_w = pw->proof_height / h * w;
-               scale = icon_h / h;
                }
 
        y = pw->proof_position / pw->proof_columns;
@@ -2489,11 +2479,7 @@ static void print_job_close(PrintWindow *pw, gint error)
                pw->job_pixbuf = NULL;
                }
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (pw->dialog && !gtk_widget_get_visible(pw->dialog->dialog))
-#else
-       if (pw->dialog && !GTK_WIDGET_VISIBLE(pw->dialog->dialog))
-#endif
                {
                g_idle_add_full(G_PRIORITY_HIGH_IDLE, print_job_close_finish_cb, pw, NULL);
                }
@@ -2672,11 +2658,11 @@ static GtkWidget *print_combo_menu(const gchar *text[], gint count, gint preferr
        GtkWidget *combo;
        gint i;
 
-       combo = gtk_combo_box_new_text();
+       combo = gtk_combo_box_text_new();
 
        for (i = 0 ; i < count; i++)
                {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _(text[i]));
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _(text[i]));
                }
 
        if (preferred >= 0 && preferred < count)
@@ -2704,12 +2690,12 @@ static GtkWidget *print_paper_menu(GtkWidget *table, gint column, gint row,
 
        pref_table_label(table, column, row, (_("Format:")), 1.0);
 
-       combo = gtk_combo_box_new_text();
+       combo = gtk_combo_box_text_new();
 
        i = 0;
        while (print_paper_sizes[i].description)
                {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(combo), _(print_paper_sizes[i].description));
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _(print_paper_sizes[i].description));
                i++;
                }
 
@@ -2985,7 +2971,7 @@ static void print_custom_entry_set(PrintWindow *pw, GtkWidget *combo)
                work = work->next;
 
                buf = g_strdup_printf(PRINT_LPR_CUSTOM, name);
-               gtk_combo_box_append_text(GTK_COMBO_BOX(combo), buf);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), buf);
                g_free(buf);
                }
        string_list_free(list);
@@ -3226,12 +3212,6 @@ static void print_text_menu(GtkWidget *box, PrintWindow *pw)
        pref_spin_new(group, _("Size:"), _("points"),
                      8.0, 100.0, 1.0, 0, pw->text_points,
                      G_CALLBACK(print_text_cb_points), pw);
-
-#if 0
-       button = color_selection_new();
-       gtk_box_pack_start(GTK_BOX(group), button, FALSE, FALSE, 0);
-       gtk_widget_show(button);
-#endif
 }
 
 /*
@@ -3324,9 +3304,9 @@ void print_window_new(FileData *fd, GList *selection, GList *list, GtkWidget *pa
 
        pw->source = print_pref_int(PRINT_PREF_SOURCE, PRINT_SOURCE_SELECTION);
        pw->layout = print_pref_int(PRINT_PREF_LAYOUT, PRINT_LAYOUT_IMAGE);
-       
+
        pw->image_scale = print_pref_double(PRINT_PREF_IMAGE_SCALE, 100.0);
-       
+
        pw->output = print_pref_int(PRINT_PREF_OUTPUT, PRINT_OUTPUT_PS_LPR);
        pw->output_format = print_pref_int(PRINT_PREF_FORMAT, PRINT_FILE_JPG_NORMAL);
 
index d972c88..05e7c54 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index ae415b9..ad17096 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -49,7 +49,7 @@ void write_indent(GString *str, gint indent)
 
 void write_char_option(GString *str, gint indent, const gchar *label, const gchar *text)
 {
-       /* this is needed for overlay string, because g_markup_escape_text does not handle \n and such, 
+       /* this is needed for overlay string, because g_markup_escape_text does not handle \n and such,
           ideas for improvement are welcome
        */
        static const unsigned char no_quote_utf[] = {
@@ -67,13 +67,22 @@ void write_char_option(GString *str, gint indent, const gchar *label, const gcha
                '"',  0 /* '"' is handled in g_markup_escape_text */
        };
 
-       gchar *escval1 = g_strescape(text ? text : "", (gchar *) no_quote_utf); 
+       gchar *escval1 = g_strescape(text ? text : "", (gchar *) no_quote_utf);
        gchar *escval2 = g_markup_escape_text(escval1, -1);
        g_string_append_printf(str, "%s = \"%s\" ", label, escval2);
        g_free(escval2);
        g_free(escval1);
 }
 
+/* dummy read for old/obsolete/futur/deprecated/unused options */
+gboolean read_dummy_option(const gchar *option, const gchar *label, const gchar *message)
+{
+       if (g_ascii_strcasecmp(option, label) != 0) return FALSE;
+       log_printf(_("Option %s ignored: %s\n"), option, message);
+       return TRUE;
+}
+
+
 gboolean read_char_option(const gchar *option, const gchar *label, const gchar *value, gchar **text)
 {
        if (g_ascii_strcasecmp(option, label) != 0) return FALSE;
@@ -160,7 +169,7 @@ gboolean read_uint_option(const gchar *option, const gchar *label, const gchar *
                else
                        *n = 0;
                }
-       
+
        return TRUE;
 }
 
@@ -230,7 +239,7 @@ gboolean read_int_unit_option(const gchar *option, const gchar *label, const gch
 
        *n = l * subunits + r;
        g_free(buf);
-       
+
        return TRUE;
 }
 
@@ -260,8 +269,7 @@ gboolean read_bool_option(const gchar *option, const gchar *label, const gchar *
 
 static void write_global_attributes(GString *outstr, gint indent)
 {
-//     WRITE_SUBTITLE("General Options");
-
+       /* General Options */
        WRITE_NL(); WRITE_BOOL(*options, show_icon_names);
        WRITE_SEPARATOR();
 
@@ -283,8 +291,7 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_BOOL(*options, save_window_positions);
        WRITE_NL(); WRITE_BOOL(*options, tools_restore_state);
 
-//     WRITE_SUBTITLE("File operations Options");
-
+       /* 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.enable_delete_key);
@@ -292,27 +299,12 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_CHAR(*options, file_ops.safe_delete_path);
        WRITE_NL(); WRITE_INT(*options, file_ops.safe_delete_folder_maxsize);
 
-
-
-
-//     WRITE_SUBTITLE("Properties dialog Options");
+       /* Properties dialog Options */
        WRITE_NL(); WRITE_CHAR(*options, properties.tabs_order);
 
-//     WRITE_SUBTITLE("Image Options");
-
+       /* Image Options */
        WRITE_NL(); WRITE_UINT(*options, image.zoom_mode);
 
-//     g_string_append_printf(outstr, "# image.zoom_mode possible values are:\n"
-//                         "#   original\n"
-//                         "#   fit\n"
-//                         "#   dont_change\n");
-//     g_string_append_printf(outstr, "image.zoom_mode: ");
-//     switch (options->image.zoom_mode)
-//     {
-//     case ZOOM_RESET_ORIGINAL: g_string_append_printf(outstr, "original\n"); break;
-//     case ZOOM_RESET_FIT_WINDOW: g_string_append_printf(outstr, "fit\n"); break;
-//     case ZOOM_RESET_NONE: g_string_append_printf(outstr, "dont_change\n"); break;
-//     }
        WRITE_SEPARATOR();
        WRITE_NL(); WRITE_BOOL(*options, image.zoom_2pass);
        WRITE_NL(); WRITE_BOOL(*options, image.zoom_to_fit_allow_expand);
@@ -326,15 +318,14 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_UINT(*options, image.scroll_reset_method);
        WRITE_NL(); WRITE_INT(*options, image.tile_cache_max);
        WRITE_NL(); WRITE_INT(*options, image.image_cache_max);
-       WRITE_NL(); WRITE_UINT(*options, image.dither_quality);
        WRITE_NL(); WRITE_BOOL(*options, image.enable_read_ahead);
        WRITE_NL(); WRITE_BOOL(*options, image.exif_rotate_enable);
        WRITE_NL(); WRITE_BOOL(*options, image.use_custom_border_color);
        WRITE_NL(); WRITE_BOOL(*options, image.use_custom_border_color_in_fullscreen);
        WRITE_NL(); WRITE_COLOR(*options, image.border_color);
+       WRITE_NL(); WRITE_BOOL(*options, image.use_clutter_renderer);
 
-//     WRITE_SUBTITLE("Thumbnails Options");
-
+       /* Thumbnails Options */
        WRITE_NL(); WRITE_INT(*options, thumbnails.max_width);
        WRITE_NL(); WRITE_INT(*options, thumbnails.max_height);
        WRITE_NL(); WRITE_BOOL(*options, thumbnails.enable_caching);
@@ -344,16 +335,12 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_UINT(*options, thumbnails.quality);
        WRITE_NL(); WRITE_BOOL(*options, thumbnails.use_exif);
 
-
-//     WRITE_SUBTITLE("File sorting Options");
-
+       /* File sorting Options */
        WRITE_NL(); WRITE_INT(*options, file_sort.method);
        WRITE_NL(); WRITE_BOOL(*options, file_sort.ascending);
        WRITE_NL(); WRITE_BOOL(*options, file_sort.case_sensitive);
 
-
-//     WRITE_SUBTITLE("Fullscreen Options");
-
+       /* Fullscreen Options */
        WRITE_NL(); WRITE_INT(*options, fullscreen.screen);
        WRITE_NL(); WRITE_BOOL(*options, fullscreen.clean_flip);
        WRITE_NL(); WRITE_BOOL(*options, fullscreen.disable_saver);
@@ -361,75 +348,40 @@ static void write_global_attributes(GString *outstr, gint indent)
 
        WRITE_SEPARATOR();
 
-//     WRITE_SUBTITLE("Image Overlay Options");
+       /* Image Overlay Options */
        WRITE_NL(); WRITE_CHAR(*options, image_overlay.template_string);
 
-//     g_string_append_printf(outstr, "# these are relative positions:\n");
-//     g_string_append_printf(outstr, "# x >= 0: |x| pixels from left border\n");
-//     g_string_append_printf(outstr, "# x < 0 : |x| pixels from right border\n");
-//     g_string_append_printf(outstr, "# y >= 0: |y| pixels from top border\n");
-//     g_string_append_printf(outstr, "# y < 0 : |y| pixels from bottom border\n");
        WRITE_NL(); WRITE_INT(*options, image_overlay.x);
        WRITE_NL(); WRITE_INT(*options, image_overlay.y);
 
-
-//     WRITE_SUBTITLE("Slideshow Options");
-
+       /* Slideshow Options */
        WRITE_NL(); WRITE_INT_UNIT(*options, slideshow.delay, SLIDESHOW_SUBSECOND_PRECISION);
        WRITE_NL(); WRITE_BOOL(*options, slideshow.random);
        WRITE_NL(); WRITE_BOOL(*options, slideshow.repeat);
 
-
-//     WRITE_SUBTITLE("Collection Options");
-
+       /* Collection Options */
        WRITE_NL(); WRITE_BOOL(*options, collections.rectangular_selection);
 
-
-//     WRITE_SUBTITLE("Filtering Options");
-
+       /* Filtering Options */
        WRITE_NL(); WRITE_BOOL(*options, file_filter.show_hidden_files);
        WRITE_NL(); WRITE_BOOL(*options, file_filter.show_dot_directory);
        WRITE_NL(); WRITE_BOOL(*options, file_filter.disable);
        WRITE_SEPARATOR();
 
-
-//     WRITE_SUBTITLE("Sidecars Options");
-
+       /* Sidecars Options */
        WRITE_NL(); WRITE_CHAR(*options, sidecar.ext);
 
-
-
-//     WRITE_SUBTITLE("Shell command");
+       /* Shell command */
        WRITE_NL(); WRITE_CHAR(*options, shell.path);
        WRITE_NL(); WRITE_CHAR(*options, shell.options);
 
-
-//     WRITE_SUBTITLE("Helpers");
-//     g_string_append_printf(outstr, "# Html browser\n");
-//     g_string_append_printf(outstr, "# command_name is: the binary's name to look for in the path\n");
-//     g_string_append_printf(outstr, "# If command_name is empty, the program will try various common html browsers\n");
-//     g_string_append_printf(outstr, "# command_line is:\n");
-//     g_string_append_printf(outstr, "# \"\" (empty string)  = execute binary with html file path as command line\n");
-//     g_string_append_printf(outstr, "# \"string\"           = execute string and use results for command line\n");
-//     g_string_append_printf(outstr, "# \"!string\"          = use text following ! as command line, replacing optional %%s with html file path\n");
+       /* Helpers */
        WRITE_NL(); WRITE_CHAR(*options, helpers.html_browser.command_name);
        WRITE_NL(); WRITE_CHAR(*options, helpers.html_browser.command_line);
 
-/* FIXME:
-       WRITE_SUBTITLE("Exif Options");
-       g_string_append_printf(outstr, "# Display: 0: never\n"
-                           "#          1: if set\n"
-                           "#          2: always\n\n");
-       for (i = 0; ExifUIList[i].key; i++)
-               {
-               g_string_append_printf(outstr, "exif.display.");
-               write_int_option(outstr, 2, (gchar *)ExifUIList[i].key, ExifUIList[i].current);
-               }
-*/
-
-//     WRITE_SUBTITLE("Metadata Options");
+       /* Metadata Options */
        WRITE_NL(); WRITE_BOOL(*options, metadata.enable_metadata_dirs);
-       WRITE_NL(); WRITE_BOOL(*options, metadata.save_in_image_file); 
+       WRITE_NL(); WRITE_BOOL(*options, metadata.save_in_image_file);
        WRITE_NL(); WRITE_BOOL(*options, metadata.save_legacy_IPTC);
        WRITE_NL(); WRITE_BOOL(*options, metadata.warn_on_write_problems);
        WRITE_NL(); WRITE_BOOL(*options, metadata.save_legacy_format);
@@ -442,15 +394,15 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_BOOL(*options, metadata.keywords_case_sensitive);
        WRITE_NL(); WRITE_BOOL(*options, metadata.write_orientation);
 
-       WRITE_NL(); WRITE_UINT(*options, stereo.mode);
-       WRITE_NL(); WRITE_UINT(*options, stereo.fsmode);
+       WRITE_NL(); WRITE_INT(*options, stereo.mode);
+       WRITE_NL(); WRITE_INT(*options, stereo.fsmode);
        WRITE_NL(); WRITE_BOOL(*options, stereo.enable_fsmode);
-       WRITE_NL(); WRITE_UINT(*options, stereo.fixed_w);
-       WRITE_NL(); WRITE_UINT(*options, stereo.fixed_h);
-       WRITE_NL(); WRITE_UINT(*options, stereo.fixed_x1);
-       WRITE_NL(); WRITE_UINT(*options, stereo.fixed_y1);
-       WRITE_NL(); WRITE_UINT(*options, stereo.fixed_x2);
-       WRITE_NL(); WRITE_UINT(*options, stereo.fixed_y2);
+       WRITE_NL(); WRITE_INT(*options, stereo.fixed_w);
+       WRITE_NL(); WRITE_INT(*options, stereo.fixed_h);
+       WRITE_NL(); WRITE_INT(*options, stereo.fixed_x1);
+       WRITE_NL(); WRITE_INT(*options, stereo.fixed_y1);
+       WRITE_NL(); WRITE_INT(*options, stereo.fixed_x2);
+       WRITE_NL(); WRITE_INT(*options, stereo.fixed_y2);
 }
 
 static void write_color_profile(GString *outstr, gint indent)
@@ -495,7 +447,7 @@ gboolean save_config_to_file(const gchar *utf8_path, ConfOptions *options)
        GString *outstr;
        gint indent = 0;
        GList *work;
-       
+
        rc_pathl = path_from_utf8(utf8_path);
        ssi = secure_open(rc_pathl);
        g_free(rc_pathl);
@@ -520,7 +472,7 @@ gboolean save_config_to_file(const gchar *utf8_path, ConfOptions *options)
 
        WRITE_STRING("<gq>\n");
        indent++;
-       
+
        WRITE_NL(); WRITE_STRING("<global\n");
        indent++;
        write_global_attributes(outstr, indent + 1);
@@ -540,8 +492,8 @@ gboolean save_config_to_file(const gchar *utf8_path, ConfOptions *options)
        WRITE_NL(); WRITE_STRING("</global>\n");
 
        WRITE_SEPARATOR();
-       WRITE_SUBTITLE("Layout Options");
 
+       /* Layout Options */
        work = layout_window_list;
        while (work)
                {
@@ -581,8 +533,7 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                const gchar *option = *attribute_names++;
                const gchar *value = *attribute_values++;
 
-
-               /* general options */
+               /* General options */
                if (READ_BOOL(*options, show_icon_names)) continue;
 
                if (READ_BOOL(*options, tree_descend_subdirs)) continue;
@@ -602,10 +553,10 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_BOOL(*options, save_window_positions)) continue;
                if (READ_BOOL(*options, tools_restore_state)) continue;
 
-               /* properties dialog options */
+               /* Properties dialog options */
                if (READ_CHAR(*options, properties.tabs_order)) continue;
 
-               /* image options */
+               /* Image options */
                if (READ_UINT_CLAMP(*options, image.zoom_mode, 0, ZOOM_RESET_NONE)) continue;
                if (READ_BOOL(*options, image.zoom_2pass)) continue;
                if (READ_BOOL(*options, image.zoom_to_fit_allow_expand)) continue;
@@ -618,15 +569,15 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_INT(*options, image.tile_cache_max)) continue;
                if (READ_INT(*options, image.image_cache_max)) continue;
                if (READ_UINT_CLAMP(*options, image.zoom_quality, GDK_INTERP_NEAREST, GDK_INTERP_HYPER)) continue;
-               if (READ_UINT_CLAMP(*options, image.dither_quality, GDK_RGB_DITHER_NONE, GDK_RGB_DITHER_MAX)) continue;
                if (READ_INT(*options, image.zoom_increment)) continue;
                if (READ_BOOL(*options, image.enable_read_ahead)) continue;
                if (READ_BOOL(*options, image.exif_rotate_enable)) continue;
                if (READ_BOOL(*options, image.use_custom_border_color)) continue;
                if (READ_BOOL(*options, image.use_custom_border_color_in_fullscreen)) continue;
                if (READ_COLOR(*options, image.border_color)) continue;
+               if (READ_BOOL(*options, image.use_clutter_renderer)) continue;
 
-               /* thumbnails options */
+               /* Thumbnails options */
                if (READ_INT_CLAMP(*options, thumbnails.max_width, 16, 512)) continue;
                if (READ_INT_CLAMP(*options, thumbnails.max_height, 16, 512)) continue;
 
@@ -637,12 +588,12 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_UINT_CLAMP(*options, thumbnails.quality, GDK_INTERP_NEAREST, GDK_INTERP_HYPER)) continue;
                if (READ_BOOL(*options, thumbnails.use_exif)) continue;
 
-               /* file sorting options */
+               /* File sorting options */
                if (READ_UINT(*options, file_sort.method)) continue;
                if (READ_BOOL(*options, file_sort.ascending)) continue;
                if (READ_BOOL(*options, file_sort.case_sensitive)) continue;
 
-               /* file operations *options */
+               /* 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.enable_delete_key)) continue;
@@ -650,29 +601,26 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_CHAR(*options, file_ops.safe_delete_path)) continue;
                if (READ_INT(*options, file_ops.safe_delete_folder_maxsize)) continue;
 
-               /* fullscreen options */
+               /* Fullscreen options */
                if (READ_INT(*options, fullscreen.screen)) continue;
                if (READ_BOOL(*options, fullscreen.clean_flip)) continue;
                if (READ_BOOL(*options, fullscreen.disable_saver)) continue;
                if (READ_BOOL(*options, fullscreen.above)) continue;
 
-               /* image overlay */
+               /* Image overlay */
                if (READ_CHAR(*options, image_overlay.template_string)) continue;
                if (READ_INT(*options, image_overlay.x)) continue;
                if (READ_INT(*options, image_overlay.y)) continue;
 
-
-               /* slideshow options */
+               /* Slideshow options */
                if (READ_INT_UNIT(*options, slideshow.delay, SLIDESHOW_SUBSECOND_PRECISION)) continue;
                if (READ_BOOL(*options, slideshow.random)) continue;
                if (READ_BOOL(*options, slideshow.repeat)) continue;
 
-               /* collection options */
-
+               /* Collection options */
                if (READ_BOOL(*options, collections.rectangular_selection)) continue;
 
-               /* filtering options */
-
+               /* Filtering options */
                if (READ_BOOL(*options, file_filter.show_hidden_files)) continue;
                if (READ_BOOL(*options, file_filter.show_dot_directory)) continue;
                if (READ_BOOL(*options, file_filter.disable)) continue;
@@ -687,17 +635,8 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                /* Helpers */
                if (READ_CHAR(*options, helpers.html_browser.command_name)) continue;
                if (READ_CHAR(*options, helpers.html_browser.command_line)) continue;
-               /* Exif */
-/*
-               if (0 == g_ascii_strncasecmp(option, "exif.display.", 13))
-                       {
-                       for (i = 0; ExifUIList[i].key; i++)
-                               if (0 == g_ascii_strcasecmp(option + 13, ExifUIList[i].key))
-                                       ExifUIList[i].current = strtol(value, NULL, 10);
-                       continue;
-                       }
-*/
-               /* metadata */          
+
+               /* Metadata */
                if (READ_BOOL(*options, metadata.enable_metadata_dirs)) continue;
                if (READ_BOOL(*options, metadata.save_in_image_file)) continue;
                if (READ_BOOL(*options, metadata.save_legacy_IPTC)) continue;
@@ -712,16 +651,20 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_BOOL(*options, metadata.keywords_case_sensitive)) continue;
                if (READ_BOOL(*options, metadata.write_orientation)) continue;
 
-               if (READ_UINT(*options, stereo.mode)) continue;
-               if (READ_UINT(*options, stereo.fsmode)) continue;
+               if (READ_INT(*options, stereo.mode)) continue;
+               if (READ_INT(*options, stereo.fsmode)) continue;
                if (READ_BOOL(*options, stereo.enable_fsmode)) continue;
-               if (READ_UINT(*options, stereo.fixed_w)) continue;
-               if (READ_UINT(*options, stereo.fixed_h)) continue;
-               if (READ_UINT(*options, stereo.fixed_x1)) continue;
-               if (READ_UINT(*options, stereo.fixed_y1)) continue;
-               if (READ_UINT(*options, stereo.fixed_x2)) continue;
-               if (READ_UINT(*options, stereo.fixed_y2)) continue;
+               if (READ_INT(*options, stereo.fixed_w)) continue;
+               if (READ_INT(*options, stereo.fixed_h)) continue;
+               if (READ_INT(*options, stereo.fixed_x1)) continue;
+               if (READ_INT(*options, stereo.fixed_y1)) continue;
+               if (READ_INT(*options, stereo.fixed_x2)) continue;
+               if (READ_INT(*options, stereo.fixed_y2)) continue;
+
+               /* Dummy options */
+               if (READ_DUMMY(*options, image.dither_quality, "deprecated since 2012-08-13")) continue;
 
+               /* Unknown options */
                log_printf("unknown attribute %s = %s\n", option, value);
                }
 
@@ -784,7 +727,7 @@ static const gchar *options_get_id(const gchar **attribute_names, const gchar **
                {
                const gchar *option = *attribute_names++;
                const gchar *value = *attribute_values++;
-               
+
                if (strcmp(option, "id") == 0) return value;
 
                }
@@ -829,7 +772,7 @@ static void options_parse_filter(GQParserData *parser_data, GMarkupParseContext
 static void options_parse_filter_end(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, gpointer data, GError **error)
 {
        if (parser_data->startup) filter_add_defaults();
-       filter_rebuild(); 
+       filter_rebuild();
 }
 
 static void options_parse_keyword_end(GQParserData *parser_data, GMarkupParseContext *context, const gchar *element_name, gpointer data, GError **error)
@@ -1063,7 +1006,7 @@ static void options_parse_layout(GQParserData *parser_data, GMarkupParseContext
                        {
                        bar_update_from_config(lw->bar, attribute_names, attribute_values);
                        }
-                       
+
                options_parse_func_push(parser_data, options_parse_bar, NULL, lw->bar);
                }
        else if (g_ascii_strcasecmp(element_name, "bar_sort") == 0)
@@ -1107,12 +1050,12 @@ static void options_parse_toplevel(GQParserData *parser_data, GMarkupParseContex
                options_parse_func_push(parser_data, options_parse_global, options_parse_global_end, NULL);
                return;
                }
-       
+
        if (g_ascii_strcasecmp(element_name, "layout") == 0)
                {
                LayoutWindow *lw;
                lw = layout_find_by_layout_id(options_get_id(attribute_names, attribute_values));
-               if (lw) 
+               if (lw)
                        {
                        layout_update_from_config(lw, attribute_names, attribute_values);
                        }
@@ -1144,7 +1087,6 @@ struct _GQParserFuncData
 {
        GQParserStartFunc start_func;
        GQParserEndFunc end_func;
-//     GQParserTextFunc text_func;
        gpointer data;
 };
 
@@ -1154,7 +1096,7 @@ void options_parse_func_push(GQParserData *parser_data, GQParserStartFunc start_
        func_data->start_func = start_func;
        func_data->end_func = end_func;
        func_data->data = data;
-       
+
        parser_data->parse_func_stack = g_list_prepend(parser_data->parse_func_stack, func_data);
 }
 
@@ -1176,12 +1118,12 @@ static void start_element(GMarkupParseContext *context,
                          const gchar **attribute_names,
                          const gchar **attribute_values,
                          gpointer user_data,
-                         GError **error) 
+                         GError **error)
 {
        GQParserData *parser_data = user_data;
-       GQParserFuncData *func = parser_data->parse_func_stack->data; 
+       GQParserFuncData *func = parser_data->parse_func_stack->data;
        DEBUG_2("start %s", element_name);
-       
+
        if (func->start_func)
                func->start_func(parser_data, context, element_name, attribute_names, attribute_values, func->data, error);
 }
@@ -1189,10 +1131,10 @@ static void start_element(GMarkupParseContext *context,
 static void end_element(GMarkupParseContext *context,
                          const gchar *element_name,
                          gpointer user_data,
-                         GError **error) 
+                         GError **error)
 {
        GQParserData *parser_data = user_data;
-       GQParserFuncData *func = parser_data->parse_func_stack->data; 
+       GQParserFuncData *func = parser_data->parse_func_stack->data;
        DEBUG_2("end %s", element_name);
 
        if (func->end_func)
@@ -1222,10 +1164,10 @@ gboolean load_config_from_buf(const gchar *buf, gsize size, gboolean startup)
        GQParserData *parser_data;
 
        parser_data = g_new0(GQParserData, 1);
-       
+
        parser_data->startup = startup;
        options_parse_func_push(parser_data, options_parse_toplevel, NULL, NULL);
-       
+
        context = g_markup_parse_context_new(&parser, 0, parser_data, NULL);
 
        if (g_markup_parse_context_parse(context, buf, size, NULL) == FALSE)
@@ -1233,7 +1175,7 @@ gboolean load_config_from_buf(const gchar *buf, gsize size, gboolean startup)
                ret = FALSE;
                DEBUG_1("Parse failed");
                }
-               
+
        g_free(parser_data);
 
        g_markup_parse_context_free(context);
@@ -1246,7 +1188,7 @@ gboolean load_config_from_file(const gchar *utf8_path, gboolean startup)
        gchar *buf;
        gboolean ret = TRUE;
 
-       if (g_file_get_contents(utf8_path, &buf, &size, NULL) == FALSE) 
+       if (g_file_get_contents(utf8_path, &buf, &size, NULL) == FALSE)
                {
                return FALSE;
                }
@@ -1254,7 +1196,7 @@ gboolean load_config_from_file(const gchar *utf8_path, gboolean startup)
        g_free(buf);
        return ret;
 }
-       
+
 
 
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 27e8538..8a486e6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -17,6 +17,7 @@
 
 void write_indent(GString *str, gint indent);
 void write_char_option(GString *str, gint indent, const gchar *label, const gchar *text);
+gboolean read_dummy_option(const gchar *option, const gchar *label, const gchar *message);
 gboolean read_char_option(const gchar *option, const gchar *label, const gchar *value, gchar **text);
 void write_color_option(GString *str, gint indent, gchar *label, GdkColor *color);
 gboolean read_color_option(const gchar *option, const gchar *label, const gchar *value, GdkColor *color);
@@ -40,7 +41,6 @@ gboolean read_bool_option(const gchar *option, const gchar *label, const gchar *
 
 #define WRITE_NL() write_indent(outstr, indent)
 #define WRITE_SEPARATOR() g_string_append(outstr, "\n")
-#define WRITE_SUBTITLE(_title_) g_string_append_printf(outstr, "\n\n<!-- "_title_" -->\n\n")
 #define WRITE_STRING(...) g_string_append_printf(outstr, __VA_ARGS__)
 
 #define READ_BOOL(_target_, _name_) read_bool_option(option, #_name_, value, &(_target_)._name_)
@@ -60,8 +60,7 @@ gboolean read_bool_option(const gchar *option, const gchar *label, const gchar *
 #define READ_CHAR_FULL(_name_, _target_) read_char_option(option, _name_, value, &(_target_))
 #define READ_COLOR_FULL(_name_, _target_) read_color_option(option, _name_, value, &(_target_))
 
-
-
+#define READ_DUMMY(_target_, _name_, _msg_) read_dummy_option(option, #_name_, _msg_)
 
 typedef struct _GQParserFuncData GQParserFuncData;
 typedef struct _GQParserData GQParserData;
index f94ef07..579811a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -102,7 +102,7 @@ static gboolean remote_server_client_cb(GIOChannel *source, GIOCondition conditi
 
                DEBUG_1("HUP detected, closing client.");
                DEBUG_1("client count %d", g_list_length(rc->clients));
-               
+
                g_source_remove(client->channel_id);
                close(client->fd);
                g_free(client);
@@ -212,14 +212,14 @@ static RemoteConnection *remote_server_open(const gchar *path)
                }
 
        rc = g_new0(RemoteConnection, 1);
-       
+
        rc->server = TRUE;
        rc->fd = fd;
        rc->path = g_strdup(path);
 
        channel = g_io_channel_unix_new(rc->fd);
-       g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL); 
-       
+       g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL);
+
        rc->channel_id = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, G_IO_IN,
                                             remote_server_read_cb, rc, NULL);
        g_io_channel_unref(channel);
@@ -338,7 +338,7 @@ static gboolean remote_client_send(RemoteConnection *rc, const gchar *text)
                        ret = FALSE;
                        }
                }
-               
+
 
        /* restore the original signal handler */
        sigaction(SIGPIPE, &old_action, NULL);
@@ -533,7 +533,7 @@ static void gr_get_sidecars(const gchar *text, GIOChannel *channel, gpointer dat
 {
        gchar *filename = expand_tilde(text);
        FileData *fd = file_data_new_group(filename);
-       
+
        GList *work;
        if (fd->parent) fd = fd->parent;
 
@@ -556,7 +556,7 @@ static void gr_get_destination(const gchar *text, GIOChannel *channel, gpointer
 {
        gchar *filename = expand_tilde(text);
        FileData *fd = file_data_new_group(filename);
-       
+
        if (fd->change && fd->change->dest)
                {
                g_io_channel_write_chars(channel, fd->change->dest, -1, NULL, NULL);
@@ -932,7 +932,7 @@ RemoteConnection *remote_server_init(gchar *path, CollectionData *command_collec
 {
        RemoteConnection *remote_connection = remote_server_open(path);
        RemoteData *remote_data = g_new(RemoteData, 1);
-       
+
        remote_data->command_collection = command_collection;
 
        remote_server_subscribe(remote_connection, remote_cb, remote_data);
index db78a5d..c755563 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
diff --git a/src/renderer-clutter.c b/src/renderer-clutter.c
new file mode 100644 (file)
index 0000000..c0f3b10
--- /dev/null
@@ -0,0 +1,894 @@
+/*
+ * Geeqie
+ * (C) 2006 John Ellis
+ * Copyright (C) 2008 - 2012 The Geeqie Team
+ *
+ * Author: John Ellis
+ * Author: Vladimir Nadvornik
+ *
+ * This software is released under the GNU General Public License (GNU GPL).
+ * Please read the included file COPYING for more information.
+ * This software comes with no warranty of any kind, use at your own risk!
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "main.h"
+#include "pixbuf-renderer.h"
+#include "renderer-clutter.h"
+
+#include "intl.h"
+#include "layout.h"
+
+#include <gtk/gtk.h>
+
+#ifdef HAVE_CLUTTER
+
+/* for 3d texture */
+#define COGL_ENABLE_EXPERIMENTAL_API
+#define CLUTTER_ENABLE_EXPERIMENTAL_API
+
+#include <clutter/clutter.h>
+
+#include <clutter-gtk/clutter-gtk.h>
+
+
+
+#define GQ_BUILD 1
+
+#ifdef GQ_BUILD
+#include "main.h"
+#include "pixbuf_util.h"
+#include "exif.h"
+#else
+typedef enum {
+       EXIF_ORIENTATION_UNKNOWN        = 0,
+       EXIF_ORIENTATION_TOP_LEFT       = 1,
+       EXIF_ORIENTATION_TOP_RIGHT      = 2,
+       EXIF_ORIENTATION_BOTTOM_RIGHT   = 3,
+       EXIF_ORIENTATION_BOTTOM_LEFT    = 4,
+       EXIF_ORIENTATION_LEFT_TOP       = 5,
+       EXIF_ORIENTATION_RIGHT_TOP      = 6,
+       EXIF_ORIENTATION_RIGHT_BOTTOM   = 7,
+       EXIF_ORIENTATION_LEFT_BOTTOM    = 8
+} ExifOrientationType;
+#endif
+
+#define GET_RIGHT_PIXBUF_OFFSET(rc) \
+        (( (rc->stereo_mode & PR_STEREO_RIGHT) && !(rc->stereo_mode & PR_STEREO_SWAP)) || \
+         (!(rc->stereo_mode & PR_STEREO_RIGHT) &&  (rc->stereo_mode & PR_STEREO_SWAP)) ?  \
+          rc->pr->stereo_pixbuf_offset_right : rc->pr->stereo_pixbuf_offset_left )
+
+#define GET_LEFT_PIXBUF_OFFSET(rc) \
+        ((!(rc->stereo_mode & PR_STEREO_RIGHT) && !(rc->stereo_mode & PR_STEREO_SWAP)) || \
+         ( (rc->stereo_mode & PR_STEREO_RIGHT) &&  (rc->stereo_mode & PR_STEREO_SWAP)) ?  \
+          rc->pr->stereo_pixbuf_offset_right : rc->pr->stereo_pixbuf_offset_left )
+
+
+typedef struct _OverlayData OverlayData;
+struct _OverlayData
+{
+       gint id;
+
+       GdkPixbuf *pixbuf;
+       ClutterActor *actor;
+
+       gint x;
+       gint y;
+
+       OverlayRendererFlags flags;
+};
+
+typedef struct _RendererClutter RendererClutter;
+
+struct _RendererClutter
+{
+       RendererFuncs f;
+       PixbufRenderer *pr;
+
+
+       gint stereo_mode;
+       gint stereo_off_x;
+       gint stereo_off_y;
+
+
+       GList *pending_updates;
+       gint idle_update;
+
+       GList *overlay_list;
+
+       GtkWidget *widget; /* widget and stage may be shared with other renderers */
+       ClutterActor *stage;
+       ClutterActor *texture;
+       ClutterActor *group;
+
+       gboolean clut_updated;
+       gint64 last_pixbuf_change;
+};
+
+typedef struct _RendererClutterAreaParam RendererClutterAreaParam;
+struct _RendererClutterAreaParam {
+       RendererClutter *rc;
+       gint x;
+       gint y;
+       gint w;
+       gint h;
+};
+
+typedef struct _RendererClutterShaderInfo RendererClutterShaderInfo;
+struct _RendererClutterShaderInfo {
+       float checkersize;
+       float checkercolor0[3];
+       float checkercolor1[3];
+};
+
+#define CLUT_SIZE      32
+
+static void rc_set_shader(CoglHandle material, const RendererClutterShaderInfo *shaderInfo)
+{
+       CoglHandle shader;
+       CoglHandle program;
+       gint uniform_no;
+
+       shader = cogl_create_shader (COGL_SHADER_TYPE_FRAGMENT);
+       cogl_shader_source (shader,
+       "vec3 checker(vec2 texc, vec3 color0, vec3 color1)                                              \n"
+       "{                                                                                                                                              \n"
+       "  if (mod(floor(texc.x) + floor(texc.y), 2.0) == 0.0)                                  \n"
+       "    return color0;                                                                                                             \n"
+       "  else                                                                                                                                 \n"
+       "    return color1;                                                                                                             \n"
+       "}                                                                                                                                              \n"
+       "                                                                                                                                               \n"
+       "uniform sampler2D tex;                                                                                                 \n"
+       "uniform sampler3D clut;                                                                                                \n"
+       "uniform float scale;                                                                                                   \n"
+       "uniform float offset;                                                                                                  \n"
+       "uniform float checkersize;                                                                                             \n"
+       "uniform vec3 color0;                                                                                                   \n"
+       "uniform vec3 color1;                                                                                                   \n"
+       "                                                                                                                                               \n"
+       "void main(void)                                                                                                                \n"
+       "{                                                                                                                                              \n"
+       "    vec3 bg = checker(gl_FragCoord.xy / checkersize, color0, color1);  \n"
+       "    vec4 img4 = texture2D(tex, gl_TexCoord[0].xy);                                             \n"
+       "    vec3 img3 = img4.bgr;                                                                                              \n"
+       "    img3 = img3 * scale + offset;                                                                              \n"
+       "    img3 = texture3D(clut, img3).rgb;                                                                  \n"
+       "                                                                                                                                               \n"
+       "    gl_FragColor = vec4(img3 * img4.a + bg * (1.0 - img4.a), 1.0);             \n"
+       "}                                                                                                                                              \n"
+       );
+       cogl_shader_compile(shader);
+       gchar *err = cogl_shader_get_info_log(shader);
+       DEBUG_0("%s\n",err);
+       g_free(err);
+
+       program = cogl_create_program ();
+       cogl_program_attach_shader (program, shader);
+       cogl_handle_unref (shader);
+       cogl_program_link (program);
+
+       uniform_no = cogl_program_get_uniform_location (program, "tex");
+       cogl_program_set_uniform_1i (program, uniform_no, 0);
+
+       uniform_no = cogl_program_get_uniform_location (program, "clut");
+       cogl_program_set_uniform_1i (program, uniform_no, 1);
+
+       uniform_no = cogl_program_get_uniform_location (program, "scale");
+       cogl_program_set_uniform_1f (program, uniform_no, (double) (CLUT_SIZE - 1) / CLUT_SIZE);
+
+       uniform_no = cogl_program_get_uniform_location (program, "offset");
+       cogl_program_set_uniform_1f (program, uniform_no, 1.0 / (2 * CLUT_SIZE));
+
+       uniform_no = cogl_program_get_uniform_location (program, "checkersize");
+       cogl_program_set_uniform_1f (program, uniform_no, shaderInfo->checkersize);
+
+       uniform_no = cogl_program_get_uniform_location (program, "color0");
+       cogl_program_set_uniform_float (program, uniform_no, 3, 1, shaderInfo->checkercolor0);
+
+       uniform_no = cogl_program_get_uniform_location (program, "color1");
+       cogl_program_set_uniform_float (program, uniform_no, 3, 1, shaderInfo->checkercolor1);
+
+       cogl_material_set_user_program (material, program);
+       cogl_handle_unref (program);
+}
+
+
+static void rc_prepare_post_process_lut(RendererClutter *rc)
+{
+       PixbufRenderer *pr = rc->pr;
+       static guchar clut[CLUT_SIZE * CLUT_SIZE * CLUT_SIZE * 3];
+       guint r, g, b;
+       GdkPixbuf *tmp_pixbuf;
+       CoglHandle material;
+       CoglHandle tex3d;
+
+       DEBUG_0("%s clut start", get_exec_time());
+
+       for (r = 0; r < CLUT_SIZE; r++)
+               {
+               for (g = 0; g < CLUT_SIZE; g++)
+                       {
+                       for (b = 0; b < CLUT_SIZE; b++)
+                               {
+                               guchar *ptr = clut + ((b * CLUT_SIZE + g) * CLUT_SIZE + r) * 3;
+                               ptr[0] = floor ((double) r / (CLUT_SIZE - 1) * 255.0 + 0.5);
+                               ptr[1] = floor ((double) g / (CLUT_SIZE - 1) * 255.0 + 0.5);
+                               ptr[2] = floor ((double) b / (CLUT_SIZE - 1) * 255.0 + 0.5);
+                               }
+                       }
+               }
+       tmp_pixbuf = gdk_pixbuf_new_from_data(clut, GDK_COLORSPACE_RGB, FALSE, 8,
+                                             CLUT_SIZE * CLUT_SIZE,
+                                             CLUT_SIZE,
+                                             CLUT_SIZE * CLUT_SIZE * 3,
+                                             NULL, NULL);
+       if (pr->func_post_process)
+               {
+               pr->func_post_process(pr, &tmp_pixbuf, 0, 0, CLUT_SIZE * CLUT_SIZE, CLUT_SIZE, pr->post_process_user_data);
+               }
+       g_object_unref(tmp_pixbuf);
+
+       DEBUG_0("%s clut upload start", get_exec_time());
+#if CLUTTER_CHECK_VERSION(1,10,0)
+       {
+       CoglContext *ctx = clutter_backend_get_cogl_context(clutter_get_default_backend ());
+
+       tex3d = cogl_texture_3d_new_from_data(ctx,
+                                             CLUT_SIZE, CLUT_SIZE, CLUT_SIZE,
+                                             COGL_PIXEL_FORMAT_RGB_888,
+                                             COGL_PIXEL_FORMAT_RGB_888,
+                                             CLUT_SIZE * 3,
+                                             CLUT_SIZE * CLUT_SIZE * 3,
+                                             clut,
+                                             NULL);
+       }
+#else
+       tex3d = cogl_texture_3d_new_from_data(CLUT_SIZE, CLUT_SIZE, CLUT_SIZE,
+                                             COGL_TEXTURE_NONE,
+                                             COGL_PIXEL_FORMAT_RGB_888,
+                                             COGL_PIXEL_FORMAT_RGB_888,
+                                             CLUT_SIZE * 3,
+                                             CLUT_SIZE * CLUT_SIZE * 3,
+                                             clut,
+                                             NULL);
+#endif
+       material = clutter_texture_get_cogl_material(CLUTTER_TEXTURE(rc->texture));
+       cogl_material_set_layer(material, 1, tex3d);
+       cogl_handle_unref(tex3d);
+       DEBUG_0("%s clut end", get_exec_time());
+       rc->clut_updated = TRUE;
+}
+
+
+
+static void rc_sync_actor(RendererClutter *rc)
+{
+       PixbufRenderer *pr = rc->pr;
+       gint anchor_x = 0;
+       gint anchor_y = 0;
+       gint rot_z = 0;
+       gint rot_y = 0;
+
+       clutter_actor_set_anchor_point(CLUTTER_ACTOR(rc->texture), 0, 0);
+
+       DEBUG_0("scale %d %d", rc->pr->width, rc->pr->height);
+       DEBUG_0("pos   %d %d", rc->pr->x_offset, rc->pr->y_offset);
+
+       clutter_actor_set_scale(CLUTTER_ACTOR(rc->texture),
+                               (gfloat)pr->width / pr->image_width,
+                               (gfloat)pr->height / pr->image_height);
+
+       switch (pr->orientation)
+               {
+               case EXIF_ORIENTATION_TOP_LEFT:
+                       /* 1 - Horizontal (normal)  */
+                       break;
+               case EXIF_ORIENTATION_TOP_RIGHT:
+                       /* 2 - Mirror horizontal */
+                       rot_y = 180;
+                       anchor_x = pr->width;
+                       break;
+               case EXIF_ORIENTATION_BOTTOM_RIGHT:
+                       /* 3 - Rotate 180 */
+                       rot_z = 180;
+                       anchor_x = pr->width;
+                       anchor_y = pr->height;
+                       break;
+               case EXIF_ORIENTATION_BOTTOM_LEFT:
+                       /* 4 - Mirror vertical */
+                       rot_z = 180;
+                       rot_y = 180;
+                       anchor_y = pr->height;
+                       break;
+               case EXIF_ORIENTATION_LEFT_TOP:
+                       /* 5 - Mirror horizontal and rotate 270 CW */
+                       rot_z = 270;
+                       rot_y = 180;
+                       break;
+               case EXIF_ORIENTATION_RIGHT_TOP:
+                       /* 6 - Rotate 90 CW */
+                       rot_z = 90;
+                       anchor_x = pr->width;
+                       break;
+               case EXIF_ORIENTATION_RIGHT_BOTTOM:
+                       /* 7 - Mirror horizontal and rotate 90 CW */
+                       rot_z = 90;
+                       rot_y = 180;
+                       anchor_x = pr->width;
+                       anchor_y = pr->height;
+                       break;
+               case EXIF_ORIENTATION_LEFT_BOTTOM:
+                       /* 8 - Rotate 270 CW */
+                       rot_z = 270;
+                       anchor_y = pr->height;
+                       break;
+               default:
+                       /* The other values are out of range */
+                       break;
+               }
+
+       clutter_actor_set_rotation(     CLUTTER_ACTOR(rc->texture),
+                                                               CLUTTER_Z_AXIS,
+                                                               rot_z, 0, 0, 0);
+       clutter_actor_set_rotation(     CLUTTER_ACTOR(rc->texture),
+                                                               CLUTTER_Y_AXIS,
+                                                               rot_y, 0, 0, 0);
+
+       clutter_actor_set_position(CLUTTER_ACTOR(rc->texture),
+                               pr->x_offset - pr->x_scroll + anchor_x,
+                               pr->y_offset - pr->y_scroll + anchor_y);
+
+}
+
+
+static void rc_area_clip_add(RendererClutter *rc, gfloat x, gfloat y, gfloat w, gfloat h)
+{
+       gfloat x2, y2;
+       gfloat clip_x, clip_y, clip_w, clip_h, clip_x2, clip_y2;
+
+       x2 = x + w;
+       y2 = y + h;
+
+       clutter_actor_get_clip(rc->texture, &clip_x, &clip_y, &clip_w, &clip_h);
+
+       clip_x2 = clip_x + clip_w;
+       clip_y2 = clip_y + clip_h;
+
+       if (clip_x > x) clip_x = x;
+       if (clip_x2 < x2) clip_x2 = x2;
+       if (clip_y > y) clip_y = y;
+       if (clip_y2 < y2) clip_y2 = y2;
+
+       clip_w = clip_x2 - clip_x;
+       clip_h = clip_y2 - clip_y;
+
+       clutter_actor_set_clip(rc->texture, clip_x, clip_y, clip_w, clip_h);
+}
+
+#define MAX_REGION_AREA (32768 * 1024)
+
+static gboolean rc_area_changed_cb(gpointer data);
+
+static void rc_schedule_texture_upload(RendererClutter *rc)
+{
+       if (g_get_monotonic_time() - rc->last_pixbuf_change < 50000)
+               {
+               /* delay clutter redraw until the texture has some data
+                  set priority between gtk redraw and clutter redraw */
+               DEBUG_0("%s tex upload high prio", get_exec_time());
+               rc->idle_update = g_idle_add_full(CLUTTER_PRIORITY_REDRAW - 10, rc_area_changed_cb, rc, NULL);
+               }
+       else
+               {
+               /* higher prio than histogram */
+               DEBUG_0("%s tex upload low prio", get_exec_time());
+
+               rc->idle_update = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE - 5, rc_area_changed_cb, rc, NULL);
+               }
+}
+
+static gboolean rc_area_changed_cb(gpointer data)
+{
+       RendererClutter *rc = (RendererClutter *)data;
+       PixbufRenderer *pr = rc->pr;
+
+       RendererClutterAreaParam *par = rc->pending_updates->data;
+
+       gint h = MAX_REGION_AREA / par->w;
+       if (h == 0) h = 1;
+       if (h > par->h) h = par->h;
+
+
+       DEBUG_0("%s upload start", get_exec_time());
+       if (pr->pixbuf)
+               {
+               CoglHandle texture = clutter_texture_get_cogl_texture(CLUTTER_TEXTURE(rc->texture));
+
+               cogl_texture_set_region(texture,
+                                       par->x + GET_RIGHT_PIXBUF_OFFSET(rc),
+                                       par->y,
+                                       par->x,
+                                       par->y,
+                                       par->w,
+                                       h,
+                                       par->w,
+                                       h,
+                                       gdk_pixbuf_get_has_alpha(pr->pixbuf) ? COGL_PIXEL_FORMAT_BGRA_8888 : COGL_PIXEL_FORMAT_BGR_888,
+                                       gdk_pixbuf_get_rowstride(pr->pixbuf),
+                                       gdk_pixbuf_get_pixels(pr->pixbuf));
+               }
+       DEBUG_0("%s upload end", get_exec_time());
+       rc_area_clip_add(rc, par->x, par->y, par->w, h);
+
+
+       par->y += h;
+       par->h -= h;
+
+       if (par->h == 0)
+               {
+               rc->pending_updates = g_list_remove(rc->pending_updates, par);
+               g_free(par);
+               }
+       if (!rc->pending_updates)
+               {
+               clutter_actor_queue_redraw(CLUTTER_ACTOR(rc->texture));
+               rc->idle_update = 0;
+
+               /* FIXME: find a better place for this */
+               if (!rc->clut_updated) rc_prepare_post_process_lut(rc);
+
+               return FALSE;
+               }
+
+       rc_schedule_texture_upload(rc);
+
+       return FALSE; /* it was rescheduled, possibly with different prio */
+}
+
+
+static void rc_area_changed(void *renderer, gint src_x, gint src_y, gint src_w, gint src_h)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+       PixbufRenderer *pr = rc->pr;
+       RendererClutterAreaParam *par;
+
+       gint width = gdk_pixbuf_get_width(pr->pixbuf);
+       gint height = gdk_pixbuf_get_height(pr->pixbuf);
+
+       if (pr->stereo_data == STEREO_PIXBUF_SBS || pr->stereo_data == STEREO_PIXBUF_CROSS)
+                       {
+                       width /= 2;
+                       }
+
+       if (!pr_clip_region(src_x, src_y, src_w, src_h,
+                                               GET_RIGHT_PIXBUF_OFFSET(rc), 0, width, height,
+                                               &src_x, &src_y, &src_w, &src_h)) return;
+
+       par = g_new0(RendererClutterAreaParam, 1);
+       par->rc = rc;
+       par->x = src_x - GET_RIGHT_PIXBUF_OFFSET(rc);
+       par->y = src_y;
+       par->w = src_w;
+       par->h = src_h;
+       rc->pending_updates = g_list_append(rc->pending_updates, par);
+       if (!rc->idle_update)
+               {
+               rc_schedule_texture_upload(rc);
+               }
+}
+
+static void rc_remove_pending_updates(RendererClutter *rc)
+{
+       if (rc->idle_update) g_idle_remove_by_data(rc);
+       rc->idle_update = 0;
+       while (rc->pending_updates)
+               {
+               RendererClutterAreaParam *par = rc->pending_updates->data;
+               rc->pending_updates = g_list_remove(rc->pending_updates, par);
+               g_free(par);
+               }
+}
+
+static void rc_update_pixbuf(void *renderer, gboolean lazy)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+       PixbufRenderer *pr = rc->pr;
+
+       DEBUG_0("rc_update_pixbuf");
+
+       rc_remove_pending_updates(rc);
+
+       rc->last_pixbuf_change = g_get_monotonic_time();
+       DEBUG_0("%s change time reset", get_exec_time());
+
+       if (pr->pixbuf)
+               {
+               gint width = gdk_pixbuf_get_width(pr->pixbuf);
+               gint height = gdk_pixbuf_get_height(pr->pixbuf);
+
+               DEBUG_0("pixbuf size %d x %d (%d)", width, height, gdk_pixbuf_get_has_alpha(pr->pixbuf) ? 32 : 24);
+
+               gint prev_width, prev_height;
+
+               if (pr->stereo_data == STEREO_PIXBUF_SBS || pr->stereo_data == STEREO_PIXBUF_CROSS)
+                       {
+                       width /= 2;
+                       }
+
+
+               clutter_texture_get_base_size(CLUTTER_TEXTURE(rc->texture), &prev_width, &prev_height);
+
+               if (width != prev_width || height != prev_height)
+                       {
+                       /* FIXME use CoglMaterial with multiple textures for background, color management, anaglyph, ... */
+                       CoglHandle texture = cogl_texture_new_with_size(width,
+                                                                       height,
+                                                                       COGL_TEXTURE_NO_AUTO_MIPMAP | COGL_TEXTURE_NO_SLICING,
+                                                                       gdk_pixbuf_get_has_alpha(pr->pixbuf) ? COGL_PIXEL_FORMAT_BGRA_8888 : COGL_PIXEL_FORMAT_BGR_888);
+
+                       if (texture != COGL_INVALID_HANDLE)
+                               {
+                               clutter_texture_set_cogl_texture(CLUTTER_TEXTURE(rc->texture), texture);
+                               cogl_handle_unref(texture);
+                               }
+                       }
+               clutter_actor_set_clip(rc->texture, 0, 0, 0, 0); /* visible area is extended as area_changed events arrive */
+               if (!lazy)
+                       {
+                       rc_area_changed(renderer, GET_RIGHT_PIXBUF_OFFSET(rc), 0, width, height);
+                       }
+               }
+
+       rc->clut_updated = FALSE;
+}
+
+
+
+static void rc_update_zoom(void *renderer, gboolean lazy)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+
+       DEBUG_0("rc_update_zoom");
+       rc_sync_actor(rc);
+}
+
+static void rc_invalidate_region(void *renderer, gint x, gint y, gint w, gint h)
+{
+}
+
+static OverlayData *rc_overlay_find(RendererClutter *rc, gint id)
+{
+       GList *work;
+
+       work = rc->overlay_list;
+       while (work)
+               {
+               OverlayData *od = work->data;
+               work = work->next;
+
+               if (od->id == id) return od;
+               }
+
+       return NULL;
+}
+
+static void rc_overlay_actor_destroy_cb(ClutterActor *actor, gpointer user_data)
+{
+       OverlayData *od = user_data;
+       od->actor = NULL;
+}
+
+static void rc_overlay_free(RendererClutter *rc, OverlayData *od)
+{
+       rc->overlay_list = g_list_remove(rc->overlay_list, od);
+
+       if (od->pixbuf) g_object_unref(G_OBJECT(od->pixbuf));
+       if (od->actor) clutter_actor_destroy(od->actor);
+       g_free(od);
+}
+
+static void rc_overlay_update_position(RendererClutter *rc, OverlayData *od)
+{
+       gint px, py, pw, ph;
+
+       pw = gdk_pixbuf_get_width(od->pixbuf);
+       ph = gdk_pixbuf_get_height(od->pixbuf);
+       px = od->x;
+       py = od->y;
+
+       if (od->flags & OVL_RELATIVE)
+               {
+               if (px < 0) px = rc->pr->viewport_width - pw + px;
+               if (py < 0) py = rc->pr->viewport_height - ph + py;
+               }
+       if (od->actor) clutter_actor_set_position(od->actor, px, py);
+}
+
+static void rc_overlay_update_positions(RendererClutter *rc)
+{
+       GList *work;
+
+       work = rc->overlay_list;
+       while (work)
+               {
+               OverlayData *od = work->data;
+               work = work->next;
+
+               rc_overlay_update_position(rc, od);
+               }
+}
+
+static void rc_overlay_free_all(RendererClutter *rc)
+{
+       GList *work;
+
+       work = rc->overlay_list;
+       while (work)
+               {
+               OverlayData *od = work->data;
+               work = work->next;
+
+               rc_overlay_free(rc, od);
+               }
+}
+
+static gint rc_overlay_add(void *renderer, GdkPixbuf *pixbuf, gint x, gint y, OverlayRendererFlags flags)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+       PixbufRenderer *pr = rc->pr;
+       OverlayData *od;
+       gint id;
+
+       g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), -1);
+       g_return_val_if_fail(pixbuf != NULL, -1);
+
+       id = 1;
+       while (rc_overlay_find(rc, id)) id++;
+
+       od = g_new0(OverlayData, 1);
+       od->id = id;
+       od->pixbuf = pixbuf;
+       g_object_ref(G_OBJECT(od->pixbuf));
+       od->x = x;
+       od->y = y;
+       od->flags = flags;
+
+       od->actor = gtk_clutter_texture_new();
+       g_signal_connect (od->actor, "destroy", G_CALLBACK(rc_overlay_actor_destroy_cb), od);
+
+       gtk_clutter_texture_set_from_pixbuf(GTK_CLUTTER_TEXTURE (od->actor), pixbuf, NULL);
+       clutter_container_add_actor(CLUTTER_CONTAINER(rc->group), od->actor);
+
+       rc->overlay_list = g_list_append(rc->overlay_list, od);
+       rc_overlay_update_position(rc, od);
+
+       return od->id;
+}
+
+static void rc_overlay_set(void *renderer, gint id, GdkPixbuf *pixbuf, gint x, gint y)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+       PixbufRenderer *pr = rc->pr;
+       OverlayData *od;
+
+       g_return_if_fail(IS_PIXBUF_RENDERER(pr));
+
+       od = rc_overlay_find(rc, id);
+       if (!od) return;
+
+       if (pixbuf)
+               {
+               g_object_ref(G_OBJECT(pixbuf));
+               g_object_unref(G_OBJECT(od->pixbuf));
+               od->pixbuf = pixbuf;
+
+               od->x = x;
+               od->y = y;
+
+               if (od->actor) gtk_clutter_texture_set_from_pixbuf(GTK_CLUTTER_TEXTURE(od->actor), pixbuf, NULL);
+               rc_overlay_update_position(rc, od);
+               }
+       else
+               {
+               rc_overlay_free(rc, od);
+               }
+}
+
+static gboolean rc_overlay_get(void *renderer, gint id, GdkPixbuf **pixbuf, gint *x, gint *y)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+
+       PixbufRenderer *pr = rc->pr;
+       OverlayData *od;
+
+       g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), FALSE);
+
+       od = rc_overlay_find(rc, id);
+       if (!od) return FALSE;
+
+       if (pixbuf) *pixbuf = od->pixbuf;
+       if (x) *x = od->x;
+       if (y) *y = od->y;
+
+       return TRUE;
+}
+
+
+static void rc_update_viewport(void *renderer)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+       ClutterColor stage_color = { 0x00, 0x00, 0x00, 0xff };
+
+       rc->stereo_off_x = 0;
+       rc->stereo_off_y = 0;
+
+       if (rc->stereo_mode & PR_STEREO_RIGHT)
+               {
+               if (rc->stereo_mode & PR_STEREO_HORIZ)
+                       {
+                       rc->stereo_off_x = rc->pr->viewport_width;
+                       }
+               else if (rc->stereo_mode & PR_STEREO_VERT)
+                       {
+                       rc->stereo_off_y = rc->pr->viewport_height;
+                       }
+               else if (rc->stereo_mode & PR_STEREO_FIXED)
+                       {
+                       rc->stereo_off_x = rc->pr->stereo_fixed_x_right;
+                       rc->stereo_off_y = rc->pr->stereo_fixed_y_right;
+                       }
+               }
+       else
+               {
+               if (rc->stereo_mode & PR_STEREO_FIXED)
+                       {
+                       rc->stereo_off_x = rc->pr->stereo_fixed_x_left;
+                       rc->stereo_off_y = rc->pr->stereo_fixed_y_left;
+                       }
+               }
+       DEBUG_0("rc_update_viewport  scale %d %d", rc->pr->width, rc->pr->height);
+
+       clutter_stage_set_color(CLUTTER_STAGE(rc->stage), &stage_color);
+
+
+       clutter_actor_set_size(rc->group, rc->pr->viewport_width, rc->pr->viewport_height);
+       clutter_actor_set_position(rc->group, rc->stereo_off_x, rc->stereo_off_y);
+
+       clutter_actor_set_rotation(CLUTTER_ACTOR(rc->group),
+                                               CLUTTER_Y_AXIS,
+                                               (rc->stereo_mode & PR_STEREO_MIRROR) ? 180 : 0,
+                                               rc->pr->viewport_width / 2.0, 0, 0);
+
+       clutter_actor_set_rotation(CLUTTER_ACTOR(rc->group),
+                                               CLUTTER_X_AXIS,
+                                               (rc->stereo_mode & PR_STEREO_FLIP) ? 180 : 0,
+                                               0, rc->pr->viewport_height / 2.0, 0);
+
+       rc_sync_actor(rc);
+       rc_overlay_update_positions(rc);
+}
+
+static void rc_scroll(void *renderer, gint x_off, gint y_off)
+{
+       DEBUG_0("rc_scroll");
+       RendererClutter *rc = (RendererClutter *)renderer;
+
+       rc_sync_actor(rc);
+}
+
+static void rc_stereo_set(void *renderer, gint stereo_mode)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+
+       rc->stereo_mode = stereo_mode;
+}
+
+static void rc_free(void *renderer)
+{
+       RendererClutter *rc = (RendererClutter *)renderer;
+       GtkWidget *widget = gtk_bin_get_child(GTK_BIN(rc->pr));
+
+       rc_remove_pending_updates(rc);
+
+       rc_overlay_free_all(rc);
+
+       if (widget)
+               {
+               /* widget still exists */
+               clutter_actor_destroy(rc->group);
+               if (clutter_group_get_n_children(CLUTTER_GROUP(rc->stage)) == 0)
+                       {
+                       DEBUG_1("destroy %p", rc->widget);
+                       /* this was the last user */
+                       gtk_widget_destroy(rc->widget);
+                       }
+               else
+                       {
+                       DEBUG_1("keep %p", rc->widget);
+                       g_object_unref(G_OBJECT(rc->widget));
+                       }
+               }
+       g_free(rc);
+}
+
+/* initialize shader for transparency background checker */
+static void renderer_clutter_init_checker_shader(RendererClutter *rc)
+{
+       const RendererClutterShaderInfo info = {
+               16.0,                           /* checker size */
+               {0.6, 0.6, 0.6},        /* color 0 */
+               {0.4, 0.4, 0.4}         /* color 1 */
+       };
+       rc_set_shader(clutter_texture_get_cogl_material(CLUTTER_TEXTURE(rc->texture)), &info);
+}
+
+RendererFuncs *renderer_clutter_new(PixbufRenderer *pr)
+{
+       RendererClutter *rc = g_new0(RendererClutter, 1);
+
+       rc->pr = pr;
+
+       rc->f.area_changed = rc_area_changed;
+       rc->f.update_pixbuf = rc_update_pixbuf;
+       rc->f.free = rc_free;
+       rc->f.update_zoom = rc_update_zoom;
+       rc->f.invalidate_region = rc_invalidate_region;
+       rc->f.scroll = rc_scroll;
+       rc->f.update_viewport = rc_update_viewport;
+
+
+       rc->f.overlay_add = rc_overlay_add;
+       rc->f.overlay_set = rc_overlay_set;
+       rc->f.overlay_get = rc_overlay_get;
+
+       rc->f.stereo_set = rc_stereo_set;
+
+
+       rc->stereo_mode = 0;
+       rc->stereo_off_x = 0;
+       rc->stereo_off_y = 0;
+
+       rc->idle_update = 0;
+       rc->pending_updates = NULL;
+
+       rc->widget = gtk_bin_get_child(GTK_BIN(rc->pr));
+
+       if (rc->widget)
+               {
+               if (!GTK_CLUTTER_IS_EMBED(rc->widget))
+                       {
+                       g_free(rc);
+                       DEBUG_0("pixbuf renderer has a child of other type than gtk_clutter_embed");
+                       return NULL;
+                       }
+               }
+       else
+               {
+               rc->widget = gtk_clutter_embed_new();
+               gtk_container_add(GTK_CONTAINER(rc->pr), rc->widget);
+               }
+
+       gtk_event_box_set_above_child (GTK_EVENT_BOX(rc->pr), TRUE);
+       rc->stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (rc->widget));
+
+       rc->group = clutter_group_new();
+       clutter_container_add_actor(CLUTTER_CONTAINER(rc->stage), rc->group);
+       clutter_actor_set_clip_to_allocation(CLUTTER_ACTOR(rc->group), TRUE);
+
+       rc->texture = clutter_texture_new ();
+       clutter_container_add_actor(CLUTTER_CONTAINER(rc->group), rc->texture);
+
+       renderer_clutter_init_checker_shader(rc);
+       g_object_ref(G_OBJECT(rc->widget));
+
+       gtk_widget_show(rc->widget);
+       return (RendererFuncs *) rc;
+}
+
+#endif
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
diff --git a/src/renderer-clutter.h b/src/renderer-clutter.h
new file mode 100644 (file)
index 0000000..89c1b7c
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Geeqie
+ * (C) 2006 John Ellis
+ * Copyright (C) 2008 - 2012 The Geeqie Team
+ *
+ * Author: John Ellis
+ *
+ * This software is released under the GNU General Public License (GNU GPL).
+ * Please read the included file COPYING for more information.
+ * This software comes with no warranty of any kind, use at your own risk!
+ */
+
+#ifndef RENDERER_CLUTTER_H
+#define RENDERER_CLUTTER_H
+
+#ifdef HAVE_CLUTTER
+#include <pixbuf-renderer.h>
+
+
+RendererFuncs *renderer_clutter_new(PixbufRenderer *pr);
+
+#endif
+#endif
+/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 2949a26..f48fe57 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  * Author: Vladimir Nadvornik
@@ -59,7 +59,7 @@ typedef struct _QueueData QueueData;
 
 struct _ImageTile
 {
-       GdkPixmap *pixmap;      /* off screen buffer */
+       cairo_surface_t *surface;       /* off screen buffer */
        GdkPixbuf *pixbuf;      /* pixbuf area for zooming */
        gint x;                 /* x offset into image */
        gint y;                 /* y offset into image */
@@ -126,19 +126,19 @@ struct _RendererTiles
        GList *draw_queue_2pass;/* list when 2 pass is enabled */
 
        GList *overlay_list;
-       GdkPixmap *overlay_buffer;
-       
+       cairo_surface_t *overlay_buffer;
+
        guint draw_idle_id; /* event source id */
 
        GdkPixbuf *spare_tile;
-       
+
        gint stereo_mode;
        gint stereo_off_x;
        gint stereo_off_y;
-       
+
        gint x_scroll;  /* allow local adjustment and mirroring */
        gint y_scroll;
-       
+
 };
 
 
@@ -157,8 +157,6 @@ static void rt_queue(RendererTiles *rt, gint x, gint y, gint w, gint h,
 
 static void rt_hierarchy_changed_cb(GtkWidget *widget, GtkWidget *previous_toplevel, gpointer data);
 static gint rt_queue_draw_idle_cb(gpointer data);
-static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
-                     gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
 
 #define GET_RIGHT_PIXBUF_OFFSET(rt) \
         (( (rt->stereo_mode & PR_STEREO_RIGHT) && !(rt->stereo_mode & PR_STEREO_SWAP)) || \
@@ -174,13 +172,13 @@ static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
 static void rt_sync_scroll(RendererTiles *rt)
 {
        PixbufRenderer *pr = rt->pr;
-       
-       rt->x_scroll = (rt->stereo_mode & PR_STEREO_MIRROR) ? 
-                      pr->width - pr->vis_width - pr->x_scroll 
+
+       rt->x_scroll = (rt->stereo_mode & PR_STEREO_MIRROR) ?
+                      pr->width - pr->vis_width - pr->x_scroll
                       : pr->x_scroll;
-       
-       rt->y_scroll = (rt->stereo_mode & PR_STEREO_FLIP) ? 
-                      pr->height - pr->vis_height - pr->y_scroll 
+
+       rt->y_scroll = (rt->stereo_mode & PR_STEREO_FLIP) ?
+                      pr->height - pr->vis_height - pr->y_scroll
                       : pr->y_scroll;
 }
 
@@ -194,11 +192,17 @@ static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h)
 {
        PixbufRenderer *pr = rt->pr;
        GtkWidget *box;
+       GdkWindow *window;
        gint rx, ry, rw, rh;
+       cairo_t *cr;
 
        box = GTK_WIDGET(pr);
+       window = gtk_widget_get_window(box);
+
+       if (!window) return;
+
+       cr = gdk_cairo_create(window);
 
-       if (!box->window) return;
 
        if (!pr->pixbuf && !pr->source_tiles_enabled)
                {
@@ -207,7 +211,10 @@ static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h)
                                   pr->viewport_width, pr->viewport_height,
                                   &rx, &ry, &rw, &rh))
                        {
-                       gdk_window_clear_area(box->window, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_set_source_rgb(cr, 0, 0, 0);
+                       cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_fill(cr);
+                       cairo_destroy(cr);
                        rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
                        }
                return;
@@ -221,7 +228,9 @@ static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h)
                                   pr->x_offset, pr->viewport_height,
                                   &rx, &ry, &rw, &rh))
                        {
-                       gdk_window_clear_area(box->window, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_set_source_rgb(cr, 0, 0, 0);
+                       cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_fill(cr);
                        rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
                        }
                if (pr->viewport_width - pr->vis_width - pr->x_offset > 0 &&
@@ -230,7 +239,9 @@ static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h)
                                   pr->viewport_width - pr->vis_width - pr->x_offset, pr->viewport_height,
                                   &rx, &ry, &rw, &rh))
                        {
-                       gdk_window_clear_area(box->window, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_set_source_rgb(cr, 0, 0, 0);
+                       cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_fill(cr);
                        rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
                        }
                }
@@ -242,7 +253,9 @@ static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h)
                                   pr->vis_width, pr->y_offset,
                                   &rx, &ry, &rw, &rh))
                        {
-                       gdk_window_clear_area(box->window, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_set_source_rgb(cr, 0, 0, 0);
+                       cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_fill(cr);
                        rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
                        }
                if (pr->viewport_height - pr->vis_height - pr->y_offset > 0 &&
@@ -251,10 +264,13 @@ static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h)
                                   pr->vis_width, pr->viewport_height - pr->vis_height - pr->y_offset,
                                   &rx, &ry, &rw, &rh))
                        {
-                       gdk_window_clear_area(box->window, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_set_source_rgb(cr, 0, 0, 0);
+                       cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
+                       cairo_fill(cr);
                        rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
                        }
                }
+       cairo_destroy(cr);
 }
 
 static void rt_border_clear(RendererTiles *rt)
@@ -291,7 +307,7 @@ static void rt_tile_free(ImageTile *it)
        if (!it) return;
 
        if (it->pixbuf) g_object_unref(it->pixbuf);
-       if (it->pixmap) g_object_unref(it->pixmap);
+       if (it->surface) cairo_surface_destroy(it->surface);
 
        g_free(it);
 }
@@ -466,29 +482,31 @@ static ImageTile *rt_tile_get(RendererTiles *rt, gint x, gint y, gboolean only_e
        return rt_tile_add(rt, x, y);
 }
 
-static gint pixmap_calc_size(GdkPixmap *pixmap)
+static gint pixmap_calc_size(cairo_surface_t *surface)
 {
-       gint w, h, d;
+//     gint w, h, d;
 
-       d = gdk_drawable_get_depth(pixmap);
-       gdk_drawable_get_size(pixmap, &w, &h);
-       return w * h * (d / 8);
+//     d = gdk_drawable_get_depth(pixmap);
+//     gdk_drawable_get_size(pixmap, &w, &h);
+       return PR_TILE_SIZE * PR_TILE_SIZE * 4 / 8;
 }
 
 static void rt_tile_prepare(RendererTiles *rt, ImageTile *it)
 {
        PixbufRenderer *pr = rt->pr;
-       if (!it->pixmap)
+       if (!it->surface)
                {
-               GdkPixmap *pixmap;
+               cairo_surface_t *surface;
                guint size;
 
-               pixmap = gdk_pixmap_new(((GtkWidget *)pr)->window, rt->tile_width, rt->tile_height, -1);
+               surface = gdk_window_create_similar_surface(gtk_widget_get_window((GtkWidget *)pr),
+                                                           CAIRO_CONTENT_COLOR,
+                                                           rt->tile_width, rt->tile_height);
 
-               size = pixmap_calc_size(pixmap);
+               size = pixmap_calc_size(surface);
                rt_tile_free_space(rt, size, it);
 
-               it->pixmap = pixmap;
+               it->surface = surface;
                it->size += size;
                rt->tile_cache_size += size;
                }
@@ -553,7 +571,7 @@ static void rt_overlay_init_window(RendererTiles *rt, OverlayData *od)
        attributes.event_mask = GDK_EXPOSURE_MASK;
        attributes_mask = 0;
 
-       od->window = gdk_window_new(GTK_WIDGET(pr)->window, &attributes, attributes_mask);
+       od->window = gdk_window_new(gtk_widget_get_window(GTK_WIDGET(pr)), &attributes, attributes_mask);
        gdk_window_set_user_data(od->window, pr);
        gdk_window_move(od->window, px + rt->stereo_off_x, py + rt->stereo_off_y);
        gdk_window_show(od->window);
@@ -563,11 +581,8 @@ static void rt_overlay_draw(RendererTiles *rt, gint x, gint y, gint w, gint h,
                            ImageTile *it)
 {
        PixbufRenderer *pr = rt->pr;
-       GtkWidget *box;
        GList *work;
 
-       box = GTK_WIDGET(pr);
-
        work = rt->overlay_list;
        while (work)
                {
@@ -579,44 +594,35 @@ static void rt_overlay_draw(RendererTiles *rt, gint x, gint y, gint w, gint h,
                work = work->next;
 
                if (!od->window) rt_overlay_init_window(rt, od);
-               
+
                rt_overlay_get_position(rt, od, &px, &py, &pw, &ph);
                if (pr_clip_region(x, y, w, h, px, py, pw, ph, &rx, &ry, &rw, &rh))
                        {
                        if (!rt->overlay_buffer)
                                {
-                               rt->overlay_buffer = gdk_pixmap_new(((GtkWidget *)pr)->window, rt->tile_width, rt->tile_height, -1);
+                               rt->overlay_buffer = gdk_window_create_similar_surface(gtk_widget_get_window((GtkWidget *)pr),
+                                                           CAIRO_CONTENT_COLOR,
+                                                           rt->tile_width, rt->tile_height);
                                }
 
                        if (it)
                                {
-#if GTK_CHECK_VERSION(2,20,0)
-                               gdk_draw_drawable(rt->overlay_buffer, box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                               gdk_draw_drawable(rt->overlay_buffer, box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                                                 it->pixmap,
-                                                 rx - (pr->x_offset + (it->x - rt->x_scroll)),
-                                                 ry - (pr->y_offset + (it->y - rt->y_scroll)),
-                                                 0, 0, rw, rh);
-                               gdk_draw_pixbuf(rt->overlay_buffer,
-#if GTK_CHECK_VERSION(2,20,0)
-                                               box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                                               box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                                               od->pixbuf,
-                                               rx - px, ry - py,
-                                               0, 0, rw, rh,
-                                               pr->dither_quality, rx, ry);
-#if GTK_CHECK_VERSION(2,20,0)
-                               gdk_draw_drawable(od->window, box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                               gdk_draw_drawable(od->window, box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                                                 rt->overlay_buffer,
-                                                 0, 0,
-                                                 rx - px, ry - py, rw, rh);
+                               cairo_t *cr;
+
+                               cr = cairo_create(rt->overlay_buffer);
+                               cairo_set_source_surface(cr, it->surface, (pr->x_offset + (it->x - rt->x_scroll)) - rx, (pr->y_offset + (it->y - rt->y_scroll)) - ry);
+                               cairo_rectangle(cr, 0, 0, rw, rh);
+                               cairo_fill_preserve(cr);
+
+                               gdk_cairo_set_source_pixbuf(cr, od->pixbuf, px - rx, py - ry);
+                               cairo_fill (cr);
+                               cairo_destroy (cr);
+
+                               cr = gdk_cairo_create(od->window);
+                               cairo_set_source_surface(cr, rt->overlay_buffer, rx - px, ry - py);
+                               cairo_rectangle (cr, rx - px, ry - py, rw, rh);
+                               cairo_fill (cr);
+                               cairo_destroy (cr);
                                }
                        else
                                {
@@ -627,35 +633,25 @@ static void rt_overlay_draw(RendererTiles *rt, gint x, gint y, gint w, gint h,
                                    for (sy = ry; sy < ry + rh; sy += rt->tile_height)
                                        {
                                        gint sw, sh;
+                                       cairo_t *cr;
 
                                        sw = MIN(rx + rw - sx, rt->tile_width);
                                        sh = MIN(ry + rh - sy, rt->tile_height);
 
-                                       gdk_draw_rectangle(rt->overlay_buffer,
-#if GTK_CHECK_VERSION(2,20,0)
-                                                          box->style->bg_gc[gtk_widget_get_state(box)], TRUE,
-#else
-                                                          box->style->bg_gc[GTK_WIDGET_STATE(box)], TRUE,
-#endif
-                                                          0, 0, sw, sh);
-                                       gdk_draw_pixbuf(rt->overlay_buffer,
-#if GTK_CHECK_VERSION(2,20,0)
-                                                       box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                                                       box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                                                       od->pixbuf,
-                                                       sx - px, sy - py,
-                                                       0, 0, sw, sh,
-                                                       pr->dither_quality, sx, sy);
-#if GTK_CHECK_VERSION(2,20,0)
-                                       gdk_draw_drawable(od->window, box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                                       gdk_draw_drawable(od->window, box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                                                         rt->overlay_buffer,
-                                                         0, 0,
-                                                         sx - px, sy - py, sw, sh);
+                                       cr = cairo_create(rt->overlay_buffer);
+                                       cairo_set_source_rgb(cr, 0, 0, 0);
+                                       cairo_rectangle(cr, 0, 0, sw, sh);
+                                       cairo_fill_preserve(cr);
+
+                                       gdk_cairo_set_source_pixbuf(cr, od->pixbuf, px - sx, py - sy);
+                                       cairo_fill (cr);
+                                       cairo_destroy (cr);
+
+                                       cr = gdk_cairo_create(od->window);
+                                       cairo_set_source_surface(cr, rt->overlay_buffer, sx - px, sy - py);
+                                       cairo_rectangle (cr, sx - px, sy - py, sw, sh);
+                                       cairo_fill(cr);
+                                       cairo_destroy(cr);
                                        }
                                }
                        }
@@ -668,13 +664,13 @@ static void rt_overlay_queue_draw(RendererTiles *rt, OverlayData *od, gint x1, g
        gint x, y, w, h;
 
        rt_overlay_get_position(rt, od, &x, &y, &w, &h);
-       
+
        /* add borders */
        x -= x1;
        y -= y1;
        w += x1 + x2;
        h += y1 + y2;
-       
+
        rt_queue(rt, rt->x_scroll - pr->x_offset + x,
                 rt->y_scroll - pr->y_offset + y,
                 w, h,
@@ -706,9 +702,9 @@ static void rt_overlay_update_sizes(RendererTiles *rt)
                {
                OverlayData *od = work->data;
                work = work->next;
-               
+
                if (!od->window) rt_overlay_init_window(rt, od);
-               
+
                if (od->flags & OVL_RELATIVE)
                        {
                        gint x, y, w, h;
@@ -736,9 +732,10 @@ static OverlayData *rt_overlay_find(RendererTiles *rt, gint id)
 }
 
 
-gint renderer_tiles_overlay_add(RendererTiles *rt, GdkPixbuf *pixbuf, gint x, gint y,
+gint renderer_tiles_overlay_add(void *renderer, GdkPixbuf *pixbuf, gint x, gint y,
                                 OverlayRendererFlags flags)
 {
+       RendererTiles *rt = (RendererTiles *) renderer;
        PixbufRenderer *pr = rt->pr;
        OverlayData *od;
        gint id;
@@ -758,7 +755,7 @@ gint renderer_tiles_overlay_add(RendererTiles *rt, GdkPixbuf *pixbuf, gint x, gi
        od->flags = flags;
 
        rt_overlay_init_window(rt, od);
-       
+
        rt->overlay_list = g_list_append(rt->overlay_list, od);
 
        rt_overlay_queue_draw(rt, od, 0, 0, 0, 0);
@@ -776,7 +773,7 @@ static void rt_overlay_free(RendererTiles *rt, OverlayData *od)
 
        if (!rt->overlay_list && rt->overlay_buffer)
                {
-               g_object_unref(rt->overlay_buffer);
+               cairo_surface_destroy(rt->overlay_buffer);
                rt->overlay_buffer = NULL;
                }
 }
@@ -796,7 +793,7 @@ static void rt_overlay_list_reset_window(RendererTiles *rt)
 {
        GList *work;
 
-       if (rt->overlay_buffer) g_object_unref(rt->overlay_buffer);
+       if (rt->overlay_buffer) cairo_surface_destroy(rt->overlay_buffer);
        rt->overlay_buffer = NULL;
 
        work = rt->overlay_list;
@@ -809,8 +806,9 @@ static void rt_overlay_list_reset_window(RendererTiles *rt)
                }
 }
 
-void renderer_tiles_overlay_set(RendererTiles *rt, gint id, GdkPixbuf *pixbuf, gint x, gint y)
+void renderer_tiles_overlay_set(void *renderer, gint id, GdkPixbuf *pixbuf, gint x, gint y)
 {
+       RendererTiles *rt = (RendererTiles *) renderer;
        PixbufRenderer *pr = rt->pr;
        OverlayData *od;
 
@@ -843,8 +841,9 @@ void renderer_tiles_overlay_set(RendererTiles *rt, gint id, GdkPixbuf *pixbuf, g
                }
 }
 
-gboolean renderer_tiles_overlay_get(RendererTiles *rt, gint id, GdkPixbuf **pixbuf, gint *x, gint *y)
+gboolean renderer_tiles_overlay_get(void *renderer, gint id, GdkPixbuf **pixbuf, gint *x, gint *y)
 {
+       RendererTiles *rt = (RendererTiles *) renderer;
        PixbufRenderer *pr = rt->pr;
        OverlayData *od;
 
@@ -996,14 +995,13 @@ static void rt_tile_mirror_and_flip(RendererTiles *rt, GdkPixbuf **tile, gint x,
        gint srs, drs;
        guchar *s_pix, *d_pix;
        guchar *sp, *dp;
-       guchar *spi, *dpi;
+       guchar *dpi;
        gint i, j;
        gint tw = rt->tile_width;
        gint th = rt->tile_height;
 
        srs = gdk_pixbuf_get_rowstride(src);
        s_pix = gdk_pixbuf_get_pixels(src);
-       spi = s_pix + (x * COLOR_BYTES);
 
        dest = rt_get_spare_tile(rt);
        drs = gdk_pixbuf_get_rowstride(dest);
@@ -1117,13 +1115,10 @@ static gboolean rt_source_tile_render(RendererTiles *rt, ImageTile *it,
                                      gboolean new_data, gboolean fast)
 {
        PixbufRenderer *pr = rt->pr;
-       GtkWidget *box;
        GList *list;
        GList *work;
        gboolean draw = FALSE;
 
-       box = GTK_WIDGET(pr);
-
        if (pr->zoom == 1.0 || pr->scale == 1.0)
                {
                list = pr_source_tile_compute_region(pr, it->x + x, it->y + y, w, h, TRUE);
@@ -1140,25 +1135,20 @@ static gboolean rt_source_tile_render(RendererTiles *rt, ImageTile *it,
                                           it->x + x, it->y + y, w, h,
                                           &rx, &ry, &rw, &rh))
                                {
+                               cairo_t *cr;
+                               cr = cairo_create(it->surface);
+                               cairo_rectangle (cr, rx - it->x, ry - it->y, rw, rh);
+
                                if (st->blank)
                                        {
-                                       gdk_draw_rectangle(it->pixmap, box->style->black_gc, TRUE,
-                                                          rx - st->x, ry - st->y, rw, rh);
+                                       cairo_set_source_rgb(cr, 0, 0, 0);
                                        }
                                else /* (pr->zoom == 1.0 || pr->scale == 1.0) */
                                        {
-                                       gdk_draw_pixbuf(it->pixmap,
-#if GTK_CHECK_VERSION(2,20,0)
-                                                       box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                                                       box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                                                       st->pixbuf,
-                                                       rx - st->x, ry - st->y,
-                                                       rx - it->x, ry - it->y,
-                                                       rw, rh,
-                                                       pr->dither_quality, rx, ry);
+                                       gdk_cairo_set_source_pixbuf(cr, st->pixbuf, -it->x + st->x, -it->y + st->y);
                                        }
+                               cairo_fill (cr);
+                               cairo_destroy (cr);
                                }
                        }
                }
@@ -1203,10 +1193,15 @@ static gboolean rt_source_tile_render(RendererTiles *rt, ImageTile *it,
                                           it->x + x, it->y + y, w, h,
                                           &rx, &ry, &rw, &rh))
                                {
+
                                if (st->blank)
                                        {
-                                       gdk_draw_rectangle(it->pixmap, box->style->black_gc, TRUE,
-                                                          rx - st->x, ry - st->y, rw, rh);
+                                       cairo_t *cr;
+                                       cr = cairo_create(it->surface);
+                                       cairo_rectangle (cr, rx - st->x, ry - st->y, rw, rh);
+                                       cairo_set_source_rgb(cr, 0, 0, 0);
+                                       cairo_fill (cr);
+                                       cairo_destroy (cr);
                                        }
                                else
                                        {
@@ -1233,7 +1228,7 @@ static gboolean rt_source_tile_render(RendererTiles *rt, ImageTile *it,
        return draw;
 }
 
-static void rt_tile_get_region(gboolean has_alpha, 
+static void rt_tile_get_region(gboolean has_alpha,
                                const GdkPixbuf *src, GdkPixbuf *dest,
                                int pb_x, int pb_y, int pb_w, int pb_h,
                                double offset_x, double offset_y, double scale_x, double scale_y,
@@ -1249,10 +1244,10 @@ static void rt_tile_get_region(gboolean has_alpha,
                                             pb_w, pb_h,
                                             dest,
                                             pb_x, pb_y);
-                       } 
+                       }
                else
                        {
-                       gdk_pixbuf_scale(src, dest, 
+                       gdk_pixbuf_scale(src, dest,
                                         pb_x, pb_y, pb_w, pb_h,
                                         offset_x,
                                         offset_y,
@@ -1262,7 +1257,7 @@ static void rt_tile_get_region(gboolean has_alpha,
                }
        else
                {
-               gdk_pixbuf_composite_color(src, dest, 
+               gdk_pixbuf_composite_color(src, dest,
                                         pb_x, pb_y, pb_w, pb_h,
                                         offset_x,
                                         offset_y,
@@ -1293,12 +1288,11 @@ static void rt_tile_render(RendererTiles *rt, ImageTile *it,
                           gboolean new_data, gboolean fast)
 {
        PixbufRenderer *pr = rt->pr;
-       GtkWidget *box;
        gboolean has_alpha;
        gboolean draw = FALSE;
        gint orientation = rt_get_orientation(rt);
 
-       if (it->render_todo == TILE_RENDER_NONE && it->pixmap && !new_data) return;
+       if (it->render_todo == TILE_RENDER_NONE && it->surface && !new_data) return;
 
        if (it->render_done != TILE_RENDER_ALL)
                {
@@ -1321,8 +1315,6 @@ static void rt_tile_render(RendererTiles *rt, ImageTile *it,
        rt_tile_prepare(rt, it);
        has_alpha = (pr->pixbuf && gdk_pixbuf_get_has_alpha(pr->pixbuf));
 
-       box = GTK_WIDGET(pr);
-
        /* FIXME checker colors for alpha should be configurable,
         * also should be drawn for blank = TRUE
         */
@@ -1330,8 +1322,12 @@ static void rt_tile_render(RendererTiles *rt, ImageTile *it,
        if (it->blank)
                {
                /* no data, do fast rect fill */
-               gdk_draw_rectangle(it->pixmap, box->style->black_gc, TRUE,
-                                  0, 0, it->w, it->h);
+               cairo_t *cr;
+               cr = cairo_create(it->surface);
+               cairo_rectangle (cr, 0, 0, it->w, it->h);
+               cairo_set_source_rgb(cr, 0, 0, 0);
+               cairo_fill (cr);
+               cairo_destroy (cr);
                }
        else if (pr->source_tiles_enabled)
                {
@@ -1340,22 +1336,17 @@ static void rt_tile_render(RendererTiles *rt, ImageTile *it,
        else if ((pr->zoom == 1.0 || pr->scale == 1.0) &&
                 pr->aspect_ratio == 1.0 &&
                 !has_alpha &&
-                orientation == EXIF_ORIENTATION_TOP_LEFT && 
+                orientation == EXIF_ORIENTATION_TOP_LEFT &&
                 !(pr->func_post_process && !(pr->post_process_slow && fast)) &&
                 !(rt->stereo_mode & PR_STEREO_ANAGLYPH))
                {
                /* special case: faster, simple, scale 1.0, base orientation, no postprocessing */
-               gdk_draw_pixbuf(it->pixmap, 
-#if GTK_CHECK_VERSION(2,20,0)
-                               box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                               box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                               pr->pixbuf,
-                               it->x + x + GET_RIGHT_PIXBUF_OFFSET(rt), it->y + y,
-                               x, y,
-                               w, h,
-                               pr->dither_quality, it->x + x, it->y + y);
+               cairo_t *cr;
+               cr = cairo_create(it->surface);
+               cairo_rectangle (cr, x, y, w, h);
+               gdk_cairo_set_source_pixbuf(cr, pr->pixbuf, -it->x - GET_RIGHT_PIXBUF_OFFSET(rt), -it->y);
+               cairo_fill (cr);
+               cairo_destroy (cr);
                }
        else
                {
@@ -1394,7 +1385,7 @@ static void rt_tile_render(RendererTiles *rt, ImageTile *it,
                                /* nothing to do */
                                break;
                        }
-               
+
                /* HACK: The pixbuf scalers get kinda buggy(crash) with extremely
                 * small sizes for anything but GDK_INTERP_NEAREST
                 */
@@ -1407,7 +1398,7 @@ static void rt_tile_render(RendererTiles *rt, ImageTile *it,
                                   scale_x, scale_y,
                                   (fast) ? GDK_INTERP_NEAREST : pr->zoom_quality,
                                   it->x + pb_x, it->y + pb_y);
-               if (rt->stereo_mode & PR_STEREO_ANAGLYPH && 
+               if (rt->stereo_mode & PR_STEREO_ANAGLYPH &&
                    (pr->stereo_pixbuf_offset_right > 0 || pr->stereo_pixbuf_offset_left > 0))
                        {
                        GdkPixbuf *right_pb = rt_get_spare_tile(rt);
@@ -1427,30 +1418,17 @@ static void rt_tile_render(RendererTiles *rt, ImageTile *it,
 
        if (draw && it->pixbuf && !it->blank)
                {
+               cairo_t *cr;
 
                if (pr->func_post_process && !(pr->post_process_slow && fast))
                        pr->func_post_process(pr, &it->pixbuf, x, y, w, h, pr->post_process_user_data);
 
-               gdk_draw_pixbuf(it->pixmap,
-#if GTK_CHECK_VERSION(2,20,0)
-                               box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-                               box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                               it->pixbuf,
-                               x, y,
-                               x, y,
-                               w, h,
-                               pr->dither_quality, it->x + x, it->y + y);
+               cr = cairo_create(it->surface);
+               cairo_rectangle (cr, x, y, w, h);
+               gdk_cairo_set_source_pixbuf(cr, it->pixbuf, 0, 0);
+               cairo_fill (cr);
+               cairo_destroy (cr);
                }
-
-#if 0
-       /* enable this line for debugging the edges of tiles */
-       gdk_draw_rectangle(it->pixmap, box->style->white_gc,
-                          FALSE, 0, 0, it->w, it->h);
-       gdk_draw_rectangle(it->pixmap, box->style->white_gc,
-                          FALSE, x, y, w, h);
-#endif
 }
 
 
@@ -1460,6 +1438,8 @@ static void rt_tile_expose(RendererTiles *rt, ImageTile *it,
 {
        PixbufRenderer *pr = rt->pr;
        GtkWidget *box;
+       GdkWindow *window;
+       cairo_t *cr;
 
        /* clamp to visible */
        if (it->x + x < rt->x_scroll)
@@ -1469,7 +1449,7 @@ static void rt_tile_expose(RendererTiles *rt, ImageTile *it,
                }
        if (it->x + x + w > rt->x_scroll + pr->vis_width)
                {
-               w = rt->x_scroll + pr->vis_width - it->x - x; 
+               w = rt->x_scroll + pr->vis_width - it->x - x;
                }
        if (w < 1) return;
        if (it->y + y < rt->y_scroll)
@@ -1479,21 +1459,20 @@ static void rt_tile_expose(RendererTiles *rt, ImageTile *it,
                }
        if (it->y + y + h > rt->y_scroll + pr->vis_height)
                {
-               h = rt->y_scroll + pr->vis_height - it->y - y; 
+               h = rt->y_scroll + pr->vis_height - it->y - y;
                }
        if (h < 1) return;
 
        rt_tile_render(rt, it, x, y, w, h, new_data, fast);
 
        box = GTK_WIDGET(pr);
+       window = gtk_widget_get_window(box);
 
-#if GTK_CHECK_VERSION(2,20,0)
-       gdk_draw_drawable(box->window, box->style->fg_gc[gtk_widget_get_state(box)],
-#else
-       gdk_draw_drawable(box->window, box->style->fg_gc[GTK_WIDGET_STATE(box)],
-#endif
-                         it->pixmap, x, y,
-                         pr->x_offset + (it->x - rt->x_scroll) + x + rt->stereo_off_x, pr->y_offset + (it->y - rt->y_scroll) + y + rt->stereo_off_y, w, h);
+       cr = gdk_cairo_create(window);
+       cairo_set_source_surface(cr, it->surface, pr->x_offset + (it->x - rt->x_scroll) + rt->stereo_off_x, pr->y_offset + (it->y - rt->y_scroll) + rt->stereo_off_y);
+       cairo_rectangle (cr, pr->x_offset + (it->x - rt->x_scroll) + x + rt->stereo_off_x, pr->y_offset + (it->y - rt->y_scroll) + y + rt->stereo_off_y, w, h);
+       cairo_fill (cr);
+       cairo_destroy (cr);
 
        if (rt->overlay_list)
                {
@@ -1521,8 +1500,8 @@ static gboolean rt_tile_is_visible(RendererTiles *rt, ImageTile *it)
 static gint rt_get_queued_area(GList *work)
 {
        gint area = 0;
-       
-       while (work) 
+
+       while (work)
                {
                QueueData *qd = work->data;
                area += qd->w * qd->h;
@@ -1537,15 +1516,15 @@ static gboolean rt_queue_schedule_next_draw(RendererTiles *rt, gboolean force_se
        PixbufRenderer *pr = rt->pr;
        gfloat percent;
        gint visible_area = pr->vis_width * pr->vis_height;
-       
+
        if (!pr->loading)
                {
-               /* 2pass prio */ 
+               /* 2pass prio */
                DEBUG_2("redraw priority: 2pass");
                rt->draw_idle_id = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, rt_queue_draw_idle_cb, rt, NULL);
                return FALSE;
                }
-       
+
        if (visible_area == 0)
                {
                /* not known yet */
@@ -1555,7 +1534,7 @@ static gboolean rt_queue_schedule_next_draw(RendererTiles *rt, gboolean force_se
                {
                percent = 100.0 * rt_get_queued_area(rt->draw_queue) / visible_area;
                }
-       
+
        if (percent > 10.0)
                {
                /* we have enough data for starting intensive redrawing */
@@ -1563,7 +1542,7 @@ static gboolean rt_queue_schedule_next_draw(RendererTiles *rt, gboolean force_se
                rt->draw_idle_id = g_idle_add_full(GDK_PRIORITY_REDRAW, rt_queue_draw_idle_cb, rt, NULL);
                return FALSE;
                }
-       
+
        if (percent < 1.0 || force_set)
                {
                /* queue is (almost) empty, wait  50 ms*/
@@ -1571,12 +1550,12 @@ static gboolean rt_queue_schedule_next_draw(RendererTiles *rt, gboolean force_se
                rt->draw_idle_id = g_timeout_add_full(G_PRIORITY_DEFAULT_IDLE, 50, rt_queue_draw_idle_cb, rt, NULL);
                return FALSE;
                }
-       
+
        /* keep the same priority as before */
        DEBUG_2("redraw priority: no change %.2f %%", percent);
        return TRUE;
 }
-               
+
 
 static gboolean rt_queue_draw_idle_cb(gpointer data)
 {
@@ -1614,11 +1593,7 @@ static gboolean rt_queue_draw_idle_cb(gpointer data)
                fast = FALSE;
                }
 
-#if GTK_CHECK_VERSION(2,20,0)
-       if (gtk_widget_get_realized(pr))
-#else
-       if (GTK_WIDGET_REALIZED(pr))
-#endif
+       if (gtk_widget_get_realized(GTK_WIDGET(pr)))
                {
                if (rt_tile_is_visible(rt, qd->it))
                        {
@@ -1628,7 +1603,7 @@ static gboolean rt_queue_draw_idle_cb(gpointer data)
                        {
                        /* if new pixel data, and we already have a pixmap, update the tile */
                        qd->it->blank = FALSE;
-                       if (qd->it->pixmap && qd->it->render_done == TILE_RENDER_ALL)
+                       if (qd->it->surface && qd->it->render_done == TILE_RENDER_ALL)
                                {
                                rt_tile_render(rt, qd->it, qd->x, qd->y, qd->w, qd->h, qd->new_data, fast);
                                }
@@ -1882,13 +1857,14 @@ static void rt_queue(RendererTiles *rt, gint x, gint y, gint w, gint h,
                }
 }
 
-static void rt_scroll(RendererTiles *rt, gint x_off, gint y_off)
+static void rt_scroll(void *renderer, gint x_off, gint y_off)
 {
+       RendererTiles *rt = (RendererTiles *) renderer;
        PixbufRenderer *pr = rt->pr;
 
        rt_sync_scroll(rt);
        if (rt->stereo_mode & PR_STEREO_MIRROR) x_off = -x_off;
-       if (rt->stereo_mode & PR_STEREO_FLIP) y_off = -y_off; 
+       if (rt->stereo_mode & PR_STEREO_FLIP) y_off = -y_off;
 
        gint w = pr->vis_width - abs(x_off);
        gint h = pr->vis_height - abs(y_off);
@@ -1904,8 +1880,9 @@ static void rt_scroll(RendererTiles *rt, gint x_off, gint y_off)
                gint x1, y1;
                gint x2, y2;
                GtkWidget *box;
-               GdkGC *gc;
-               GdkEvent *event;
+               GdkWindow *window;
+               cairo_t *cr;
+               cairo_surface_t *surface;
 
                if (x_off < 0)
                        {
@@ -1930,14 +1907,22 @@ static void rt_scroll(RendererTiles *rt, gint x_off, gint y_off)
                        }
 
                box = GTK_WIDGET(pr);
-
-               gc = gdk_gc_new(box->window);
-               gdk_gc_set_exposures(gc, TRUE);
-               gdk_draw_drawable(box->window, gc,
-                                 box->window,
-                                 x2 + pr->x_offset + rt->stereo_off_x, y2 + pr->y_offset + rt->stereo_off_y,
-                                 x1 + pr->x_offset + rt->stereo_off_x, y1 + pr->y_offset + rt->stereo_off_y, w, h);
-               g_object_unref(gc);
+               window = gtk_widget_get_window(box);
+
+               cr = gdk_cairo_create(window);
+               surface = cairo_get_target(cr);
+               /* clipping restricts the intermediate surface's size, so it's a good idea
+                * to use it. */
+               cairo_rectangle(cr, x1 + pr->x_offset + rt->stereo_off_x, y1 + pr->y_offset + rt->stereo_off_y, w, h);
+               cairo_clip (cr);
+               /* Now push a group to change the target */
+               cairo_push_group (cr);
+               cairo_set_source_surface(cr, surface, x1 - x2, y1 - y2);
+               cairo_paint(cr);
+               /* Now copy the intermediate target back */
+               cairo_pop_group_to_source(cr);
+               cairo_paint(cr);
+               cairo_destroy(cr);
 
                rt_overlay_queue_all(rt, x2, y2, x1, y1);
 
@@ -1957,22 +1942,6 @@ static void rt_scroll(RendererTiles *rt, gint x_off, gint y_off)
                                    rt->x_scroll, y_off > 0 ? rt->y_scroll + (pr->vis_height - h) : rt->y_scroll,
                                    pr->vis_width, h, TRUE, TILE_RENDER_ALL, FALSE, FALSE);
                        }
-
-               /* process exposures here, "expose_event" seems to miss a few with obstructed windows */
-#if ! GTK_CHECK_VERSION(2,18,0)
-               while ((event = gdk_event_get_graphics_expose(box->window)) != NULL)
-                       {
-                       renderer_redraw((void *) rt, event->expose.area.x, event->expose.area.y, event->expose.area.width, event->expose.area.height,
-                              FALSE, TILE_RENDER_ALL, FALSE, FALSE);
-                       if (event->expose.count == 0)
-                               {
-                               gdk_event_free(event);
-                               break;
-                               }
-                       gdk_event_free(event);
-                       }
-#endif
                }
 }
 
@@ -2005,15 +1974,14 @@ static void renderer_area_changed(void *renderer, gint src_x, gint src_y, gint s
        rt_queue(rt, x1, y1, x2 - x1, y2 - y1, FALSE, TILE_RENDER_AREA, TRUE, TRUE);
 }
 
-static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
+static void renderer_redraw(RendererTiles *rt, gint x, gint y, gint w, gint h,
                      gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing)
 {
-       RendererTiles *rt = (RendererTiles *)renderer;
        PixbufRenderer *pr = rt->pr;
 
        x -= rt->stereo_off_x;
        y -= rt->stereo_off_y;
-       
+
        rt_border_draw(rt, x, y, w, h);
 
        x = MAX(0, x - pr->x_offset + pr->x_scroll);
@@ -2026,20 +1994,22 @@ static void renderer_redraw(void *renderer, gint x, gint y, gint w, gint h,
                 clamp, render, new_data, only_existing);
 }
 
-static void renderer_queue_clear(void *renderer)
+static void renderer_update_pixbuf(void *renderer, gboolean lazy)
 {
        rt_queue_clear((RendererTiles *)renderer);
 }
 
-static void renderer_border_clear(void *renderer)
+static void renderer_update_zoom(void *renderer, gboolean lazy)
 {
-       rt_border_clear((RendererTiles *)renderer);
-}
-
+       RendererTiles *rt = (RendererTiles *)renderer;
+       PixbufRenderer *pr = rt->pr;
 
-static void renderer_invalidate_all(void *renderer)
-{
        rt_tile_invalidate_all((RendererTiles *)renderer);
+       if (!lazy)
+               {
+               renderer_redraw(renderer, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, TRUE, FALSE);
+               }
+       rt_border_clear(rt);
 }
 
 static void renderer_invalidate_region(void *renderer, gint x, gint y, gint w, gint h)
@@ -2047,29 +2017,24 @@ static void renderer_invalidate_region(void *renderer, gint x, gint y, gint w, g
        rt_tile_invalidate_region((RendererTiles *)renderer, x, y, w, h);
 }
 
-static void renderer_overlay_draw(void *renderer, gint x, gint y, gint w, gint h)
-{
-       rt_overlay_draw((RendererTiles *)renderer, x, y, w, h, NULL);
-}
-
-static void renderer_update_sizes(void *renderer)
+static void renderer_update_viewport(void *renderer)
 {
        RendererTiles *rt = (RendererTiles *)renderer;
 
        rt->stereo_off_x = 0;
        rt->stereo_off_y = 0;
-       
-       if (rt->stereo_mode & PR_STEREO_RIGHT) 
+
+       if (rt->stereo_mode & PR_STEREO_RIGHT)
                {
-               if (rt->stereo_mode & PR_STEREO_HORIZ) 
+               if (rt->stereo_mode & PR_STEREO_HORIZ)
                        {
                        rt->stereo_off_x = rt->pr->viewport_width;
                        }
-               else if (rt->stereo_mode & PR_STEREO_VERT) 
+               else if (rt->stereo_mode & PR_STEREO_VERT)
                        {
                        rt->stereo_off_y = rt->pr->viewport_height;
                        }
-               else if (rt->stereo_mode & PR_STEREO_FIXED) 
+               else if (rt->stereo_mode & PR_STEREO_FIXED)
                        {
                        rt->stereo_off_x = rt->pr->stereo_fixed_x_right;
                        rt->stereo_off_y = rt->pr->stereo_fixed_y_right;
@@ -2077,7 +2042,7 @@ static void renderer_update_sizes(void *renderer)
                }
        else
                {
-               if (rt->stereo_mode & PR_STEREO_FIXED) 
+               if (rt->stereo_mode & PR_STEREO_FIXED)
                        {
                        rt->stereo_off_x = rt->pr->stereo_fixed_x_left;
                        rt->stereo_off_y = rt->pr->stereo_fixed_y_left;
@@ -2086,6 +2051,7 @@ static void renderer_update_sizes(void *renderer)
         DEBUG_1("update size: %p  %d %d   %d %d", rt, rt->stereo_off_x, rt->stereo_off_y, rt->pr->viewport_width, rt->pr->viewport_height);
        rt_sync_scroll(rt);
        rt_overlay_update_sizes(rt);
+       rt_border_clear(rt);
 }
 
 static void renderer_stereo_set(void *renderer, gint stereo_mode)
@@ -2109,30 +2075,82 @@ static void renderer_free(void *renderer)
         g_free(rt);
 }
 
+#if GTK_CHECK_VERSION(3,0,0)
+
+static gboolean rt_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
+{
+       RendererTiles *rt = (RendererTiles *)data;
+       if (gtk_widget_is_drawable(widget))
+               {
+               if (gtk_widget_get_has_window(widget))
+                       {
+                       GdkRectangle area;
+                       if (gdk_cairo_get_clip_rectangle(cr, &area))
+                               {
+                               renderer_redraw(rt, area.x, area.y, area.width, area.height,
+                                               FALSE, TILE_RENDER_ALL, FALSE, FALSE);
+                               }
+                       }
+               }
+
+       return FALSE;
+}
+
+#else
+static gboolean rt_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+       RendererTiles *rt = (RendererTiles *)data;
+       if (gtk_widget_is_drawable(widget))
+               {
+               if (gtk_widget_get_has_window(widget))
+                       {
+                       if (event->window != gtk_widget_get_window(widget))
+                               {
+                               GdkRectangle area;
+
+                               gdk_window_get_position(event->window, &area.x, &area.y);
+                               area.x += event->area.x;
+                               area.y += event->area.y;
+                               area.width = event->area.width;
+                               area.height = event->area.height;
+                               renderer_redraw(rt, area.x, area.y, area.width, area.height,
+                                               FALSE, TILE_RENDER_ALL, FALSE, FALSE);
+
+                               }
+                       else
+                               {
+                               renderer_redraw(rt, event->area.x, event->area.y, event->area.width, event->area.height,
+                                               FALSE, TILE_RENDER_ALL, FALSE, FALSE);
+                               }
+                       }
+               }
+
+       return FALSE;
+}
+#endif
+
+
 RendererFuncs *renderer_tiles_new(PixbufRenderer *pr)
 {
        RendererTiles *rt = g_new0(RendererTiles, 1);
-       
+
        rt->pr = pr;
-       
-       rt->f.redraw = renderer_redraw;
+
        rt->f.area_changed = renderer_area_changed;
-       rt->f.queue_clear = renderer_queue_clear;
-       rt->f.border_clear = renderer_border_clear;
+       rt->f.update_pixbuf = renderer_update_pixbuf;
        rt->f.free = renderer_free;
-       rt->f.invalidate_all = renderer_invalidate_all;
+       rt->f.update_zoom = renderer_update_zoom;
        rt->f.invalidate_region = renderer_invalidate_region;
        rt->f.scroll = rt_scroll;
-       rt->f.update_sizes = renderer_update_sizes;
+       rt->f.update_viewport = renderer_update_viewport;
 
 
        rt->f.overlay_add = renderer_tiles_overlay_add;
        rt->f.overlay_set = renderer_tiles_overlay_set;
        rt->f.overlay_get = renderer_tiles_overlay_get;
-       rt->f.overlay_draw = renderer_overlay_draw;
 
        rt->f.stereo_set = renderer_stereo_set;
-       
+
        rt->tile_width = PR_TILE_SIZE;
        rt->tile_height = PR_TILE_SIZE;
 
@@ -2142,7 +2160,7 @@ RendererFuncs *renderer_tiles_new(PixbufRenderer *pr)
        rt->tile_cache_max = PR_CACHE_SIZE_DEFAULT;
 
        rt->draw_idle_id = 0;
-       
+
        rt->stereo_mode = 0;
        rt->stereo_off_x = 0;
        rt->stereo_off_y = 0;
@@ -2150,6 +2168,13 @@ RendererFuncs *renderer_tiles_new(PixbufRenderer *pr)
        g_signal_connect(G_OBJECT(pr), "hierarchy-changed",
                         G_CALLBACK(rt_hierarchy_changed_cb), rt);
 
+#if GTK_CHECK_VERSION(3,0,0)
+       g_signal_connect(G_OBJECT(pr), "draw",
+                        G_CALLBACK(rt_draw_cb), rt);
+#else
+       g_signal_connect(G_OBJECT(pr), "expose_event",
+                        G_CALLBACK(rt_expose_cb), rt);
+#endif
        return (RendererFuncs *) rt;
 }
 
index 168023b..b15e4f8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -13,9 +13,6 @@
 #ifndef RENDERER_TILES_H
 #define RENDERER_TILES_H
 
-#include <gtk/gtkeventbox.h>
-#include <gtk/gtkwindow.h>
-
 #include <pixbuf-renderer.h>
 
 
index c855e61..c4f1146 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -286,7 +286,7 @@ static void search_status_update(SearchData *sd)
 
        t = search_result_count(sd, &t_bytes);
        s = search_result_selection_count(sd, &s_bytes);
-       
+
        tt = text_from_size_abrev(t_bytes);
 
        if (s > 0)
@@ -824,11 +824,7 @@ static void search_result_thumb_height(SearchData *sd)
 
        gtk_tree_view_column_set_fixed_width(column, (sd->thumb_enable) ? options->thumbnails.max_width : 4);
 
-#if GTK_CHECK_VERSION(2,18,0)
        list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
-#else
-       list = gtk_tree_view_column_get_cell_renderers(column);
-#endif
        if (!list) return;
        cell = list->data;
        g_list_free(list);
@@ -1219,40 +1215,19 @@ static gboolean search_result_keypress_cb(GtkWidget *widget, GdkEventKey *event,
 
        if (event->state & GDK_CONTROL_MASK)
                {
-               gint edit_val = -1;
-
                stop_signal = TRUE;
                switch (event->keyval)
                        {
                        case '1':
-                               edit_val = 0;
-                               break;
                        case '2':
-                               edit_val = 1;
-                               break;
                        case '3':
-                               edit_val = 2;
-                               break;
                        case '4':
-                               edit_val = 3;
-                               break;
                        case '5':
-                               edit_val = 4;
-                               break;
                        case '6':
-                               edit_val = 5;
-                               break;
                        case '7':
-                               edit_val = 6;
-                               break;
                        case '8':
-                               edit_val = 7;
-                               break;
                        case '9':
-                               edit_val = 8;
-                               break;
                        case '0':
-                               edit_val = 9;
                                break;
                        case 'C': case 'c':
                                file_util_copy(NULL, search_result_selection_list(sd), NULL, widget);
@@ -1276,26 +1251,20 @@ static gboolean search_result_keypress_cb(GtkWidget *widget, GdkEventKey *event,
                                        gtk_tree_selection_select_all(selection);
                                        }
                                break;
-                       case GDK_Delete: case GDK_KP_Delete:
+                       case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
                                search_result_clear(sd);
                                break;
                        default:
                                stop_signal = FALSE;
                                break;
                        }
-#if 0
-               if (edit_val >= 0)
-                       {
-                       search_result_edit_selected(sd, edit_val);
-                       }
-#endif
                }
        else
                {
                stop_signal = TRUE;
                switch (event->keyval)
                        {
-                       case GDK_Return: case GDK_KP_Enter:
+                       case GDK_KEY_Return: case GDK_KEY_KP_Enter:
                                if (mfd) layout_set_fd(NULL, mfd->fd);
                                break;
                        case 'V': case 'v':
@@ -1307,14 +1276,14 @@ static gboolean search_result_keypress_cb(GtkWidget *widget, GdkEventKey *event,
                                filelist_free(list);
                                }
                                break;
-                       case GDK_Delete: case GDK_KP_Delete:
+                       case GDK_KEY_Delete: case GDK_KEY_KP_Delete:
                                search_result_remove_selection(sd);
                                break;
                        case 'C': case 'c':
                                search_result_collection_from_selection(sd);
                                break;
-                       case GDK_Menu:
-                       case GDK_F10:
+                       case GDK_KEY_Menu:
+                       case GDK_KEY_F10:
                                {
                                GtkWidget *menu;
 
@@ -1376,27 +1345,13 @@ static void search_dnd_data_set(GtkWidget *widget, GdkDragContext *context,
                                guint time, gpointer data)
 {
        SearchData *sd = data;
-       gchar *uri_text;
-       gint length;
        GList *list;
 
-       switch (info)
-               {
-               case TARGET_URI_LIST:
-               case TARGET_TEXT_PLAIN:
-                       list = search_result_selection_list(sd);
-                       if (!list) return;
-                       uri_text = uri_text_from_filelist(list, &length, (info == TARGET_TEXT_PLAIN));
-                       filelist_free(list);
-                       break;
-               default:
-                       uri_text = NULL;
-                       break;
-               }
+       list = search_result_selection_list(sd);
+       if (!list) return;
 
-       if (uri_text) gtk_selection_data_set(selection_data, selection_data->target,
-                                            8, (guchar *)uri_text, length);
-       g_free(uri_text);
+       uri_selection_data_set_uris_from_filelist(selection_data, list);
+       filelist_free(list);
 }
 
 static void search_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
@@ -1440,11 +1395,6 @@ static void search_dnd_init(SearchData *sd)
                         G_CALLBACK(search_dnd_data_set), sd);
        g_signal_connect(G_OBJECT(sd->result_view), "drag_begin",
                         G_CALLBACK(search_dnd_begin), sd);
-#if 0
-       g_signal_connect(G_OBJECT(sd->result_view), "drag_end",
-                        G_CALLBACK(search_dnd_end), sd);
-#endif
-
 }
 
 /*
@@ -2361,19 +2311,11 @@ static void menu_choice_set_visible(GtkWidget *widget, gboolean visible)
 {
        if (visible)
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (!gtk_widget_get_visible(widget)) gtk_widget_show(widget);
-#else
-               if (!GTK_WIDGET_VISIBLE(widget)) gtk_widget_show(widget);
-#endif
                }
        else
                {
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_visible(widget)) gtk_widget_hide(widget);
-#else
-               if (GTK_WIDGET_VISIBLE(widget)) gtk_widget_hide(widget);
-#endif
                }
 }
 
@@ -2637,7 +2579,7 @@ void search_new(FileData *dir_fd, FileData *example_file)
        sd->match_name_enable = TRUE;
 
        sd->search_similarity = 95;
-       
+
        if (example_file)
                {
                sd->search_similarity_path = g_strdup(example_file->path);
@@ -2843,10 +2785,6 @@ void search_new(FileData *dir_fd, FileData *example_file)
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(sd->result_view), TRUE);
        gtk_tree_view_set_enable_search(GTK_TREE_VIEW(sd->result_view), FALSE);
 
-#if 0
-       gtk_tree_view_set_search_column(GTK_TREE_VIEW(sd->result_view), SEARCH_COLUMN_NAME);
-#endif
-
        search_result_add_column(sd, SEARCH_COLUMN_RANK, _("Rank"), FALSE, FALSE);
        search_result_add_column(sd, SEARCH_COLUMN_THUMB, "", TRUE, FALSE);
        search_result_add_column(sd, SEARCH_COLUMN_NAME, _("Name"), FALSE, FALSE);
@@ -2951,7 +2889,7 @@ static void search_notify_cb(FileData *fd, NotifyType type, gpointer data)
        if (!(type & NOTIFY_CHANGE) || !fd->change) return;
 
        DEBUG_1("Notify search: %s %04x", fd->path, type);
-       
+
        switch (fd->change->type)
                {
                case FILEDATA_CHANGE_MOVE:
index 91a553b..e324298 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2005 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 0cc28be..314f319 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * based on the code developped for ELinks by Laurent Monin
  *
index 87ae27c..f371715 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * based on the code developped for ELinks by Laurent Monin
  *
index 32ccb04..52ff7fd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 84d35fb..f3c308b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 04d207f..1d7cb97 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -88,7 +88,7 @@ static GPtrArray *generate_ptr_array_from_list(GList *src_list)
 static void swap(GPtrArray *array, guint index1, guint index2)
 {
        gpointer temp = g_ptr_array_index(array, index1);
-       
+
        g_ptr_array_index(array, index1) = g_ptr_array_index(array, index2);
        g_ptr_array_index(array, index2) = temp;
 }
@@ -116,7 +116,7 @@ static GList *generate_random_list(SlideShowData *ss)
        ptr_array_random_shuffle(src_array);
        g_ptr_array_foreach(src_array, (GFunc) list_prepend, &list);
        g_ptr_array_free(src_array, TRUE);
-       
+
        return list;
 }
 
@@ -403,7 +403,7 @@ static SlideShowData *real_slideshow_start(LayoutWindow *target_lw, ImageWindow
                }
 
        slideshow_list_init(ss, start_index);
-       
+
        if (ss->lw)
                ss->slide_fd = file_data_ref(layout_image_get_fd(ss->lw));
        else
index b4f6af2..4216ecb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index ab332bb..c8c77e9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -144,7 +144,7 @@ static void thumb_loader_done_cb(ImageLoader *il, gpointer data)
                        {
                        tl->fd->exif_orientation = metadata_read_int(tl->fd, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT);
                        }
-               
+
                if (tl->fd->exif_orientation != EXIF_ORIENTATION_TOP_LEFT)
                        {
                        rotated = pixbuf_apply_orientation(pixbuf, tl->fd->exif_orientation);
@@ -162,7 +162,7 @@ static void thumb_loader_done_cb(ImageLoader *il, gpointer data)
                tl->cache_hit = FALSE;
 
                thumb_loader_setup(tl, tl->fd);
-       
+
                g_signal_connect(G_OBJECT(tl->il), "done", (GCallback)thumb_loader_done_cb, tl);
 
                if (!image_loader_start(tl->il))
@@ -194,7 +194,7 @@ static void thumb_loader_done_cb(ImageLoader *il, gpointer data)
                        w = (gdouble)h / ph * pw;
                        if (w < 1) w = 1;
                        }
-               
+
                if (tl->fd)
                        {
                        if (tl->fd->thumb_pixbuf) g_object_unref(tl->fd->thumb_pixbuf);
@@ -215,7 +215,7 @@ static void thumb_loader_done_cb(ImageLoader *il, gpointer data)
                }
 
        if (rotated) g_object_unref(rotated);
-       
+
        /* save it ? */
        if (tl->cache_enable && save)
                {
@@ -242,7 +242,7 @@ static void thumb_loader_error_cb(ImageLoader *il, gpointer data)
        tl->il = NULL;
 
        thumb_loader_set_fallback(tl);
-       
+
        if (tl->func_error) tl->func_error(tl, tl->data);
 }
 
@@ -311,10 +311,6 @@ void thumb_loader_set_cache(ThumbLoader *tl, gboolean enable_cache, gboolean loc
                }
 
        tl->cache_enable = enable_cache;
-#if 0
-       tl->cache_local = local;
-       tl->cache_retry = retry_failed;
-#endif
 }
 
 
@@ -414,17 +410,6 @@ gboolean thumb_loader_start(ThumbLoader *tl, FileData *fd)
        return TRUE;
 }
 
-#if 0
-gint thumb_loader_to_pixmap(ThumbLoader *tl, GdkPixmap **pixmap, GdkBitmap **mask)
-{
-       if (!tl || !tl->pixbuf) return -1;
-
-       gdk_pixbuf_render_pixmap_and_mask(tl->pixbuf, pixmap, mask, 128);
-
-       return thumb_loader_get_space(tl);
-}
-#endif
-
 GdkPixbuf *thumb_loader_get_pixbuf(ThumbLoader *tl)
 {
        GdkPixbuf *pixbuf;
@@ -447,17 +432,6 @@ GdkPixbuf *thumb_loader_get_pixbuf(ThumbLoader *tl)
        return pixbuf;
 }
 
-#if 0
-gint thumb_loader_get_space(ThumbLoader *tl)
-{
-       if (!tl) return 0;
-
-       if (tl->pixbuf) return (tl->max_w - gdk_pixbuf_get_width(tl->pixbuf));
-
-       return tl->max_w;
-}
-#endif
-
 ThumbLoader *thumb_loader_new(gint width, gint height)
 {
        ThumbLoader *tl;
@@ -472,7 +446,7 @@ ThumbLoader *thumb_loader_new(gint width, gint height)
                }
 
        tl = g_new0(ThumbLoader, 1);
-       
+
        tl->cache_enable = options->thumbnails.enable_caching;
        tl->percent_done = 0.0;
        tl->max_w = width;
@@ -499,34 +473,6 @@ void thumb_loader_free(ThumbLoader *tl)
        g_free(tl);
 }
 
-#if 0
-gint thumb_from_xpm_d(const gchar **data, gint max_w, gint max_h, GdkPixmap **pixmap, GdkBitmap **mask)
-{
-       GdkPixbuf *pixbuf;
-       gint w, h;
-
-       pixbuf = gdk_pixbuf_new_from_xpm_data(data);
-       w = gdk_pixbuf_get_width(pixbuf);
-       h = gdk_pixbuf_get_height(pixbuf);
-
-       if (pixbuf_scale_aspect(w, h, max_w, max_h, &w, &h))
-               {
-               /* scale */
-               GdkPixbuf *tmp;
-
-               tmp = pixbuf;
-               pixbuf = gdk_pixbuf_scale_simple(tmp, w, h, GDK_INTERP_NEAREST);
-               gdk_pixbuf_unref(tmp);
-               }
-
-       gdk_pixbuf_render_pixmap_and_mask(pixbuf, pixmap, mask, 128);
-       gdk_pixbuf_unref(pixbuf);
-
-       return w;
-}
-#endif
-
-
 /* release thumb_pixbuf on file change - this forces reload. */
 void thumb_notify_cb(FileData *fd, NotifyType type, gpointer data)
 {
@@ -574,7 +520,7 @@ static guchar *load_xv_thumbnail(gchar *filename, gint *widthp, gint *heightp)
                if (sscanf(buffer, "%d %d %d", &width, &height, &depth) == 3)
                        {
                        gsize size = width * height;
-                       
+
                        data = g_new(guchar, size);
                        if (data && fread(data, 1, size, file) == size)
                                {
@@ -606,9 +552,9 @@ static GdkPixbuf *get_xv_thumbnail(gchar *thumb_filename, gint max_w, gint max_h
        path = path_from_utf8(thumb_filename);
        directory = g_path_get_dirname(path);
        name = g_path_get_basename(path);
-       
+
        thumb_name = g_build_filename(directory, ".xvpics", name, NULL);
-       
+
        g_free(name);
        g_free(directory);
        g_free(path);
index 877ad59..0dc6834 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index c23329f..2c637cc 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -389,7 +389,7 @@ static GdkPixbuf *thumb_loader_std_finish(ThumbLoaderStd *tl, GdkPixbuf *pixbuf,
                        {
                        tl->fd->exif_orientation = metadata_read_int(tl->fd, ORIENTATION_KEY, EXIF_ORIENTATION_TOP_LEFT);
                        }
-               
+
                if (tl->fd->exif_orientation != EXIF_ORIENTATION_TOP_LEFT)
                        {
                        rotated = pixbuf_apply_orientation(pixbuf, tl->fd->exif_orientation);
@@ -434,7 +434,7 @@ static GdkPixbuf *thumb_loader_std_finish(ThumbLoaderStd *tl, GdkPixbuf *pixbuf,
 
                                /* do not save the thumbnail if the source file has changed meanwhile -
                                   the thumbnail is most probably broken */
-                               if (stat_utf8(tl->fd->path, &st) && 
+                               if (stat_utf8(tl->fd->path, &st) &&
                                    tl->source_mtime == st.st_mtime &&
                                    tl->source_size == st.st_size)
                                        {
@@ -581,14 +581,14 @@ static void thumb_loader_std_error_cb(ImageLoader *il, gpointer data)
                thumb_loader_std_done_cb(il, data);
                return;
                }
-       
+
        DEBUG_1("thumb image error: %s", tl->fd->path);
        DEBUG_1("             from: %s", image_loader_get_fd(tl->il)->path);
 
        if (thumb_loader_std_next_source(tl, TRUE)) return;
 
        thumb_loader_std_set_fallback(tl);
-       
+
        if (tl->func_error) tl->func_error(tl, tl->data);
 }
 
@@ -792,9 +792,9 @@ static void thumb_loader_std_thumb_file_validate_done_cb(ThumbLoaderStd *tl, gpo
        GdkPixbuf *pixbuf;
        gboolean valid = FALSE;
 
-       /* get the original thumbnail pixbuf (unrotated, with original options) 
+       /* get the original thumbnail pixbuf (unrotated, with original options)
           this is called from image_loader done callback, so tv->tl->il must exist*/
-       pixbuf = image_loader_get_pixbuf(tv->tl->il); 
+       pixbuf = image_loader_get_pixbuf(tv->tl->il);
        if (pixbuf)
                {
                const gchar *uri;
@@ -959,9 +959,9 @@ static void thumb_std_maint_move_validate_cb(const gchar *path, gboolean valid,
        TMaintMove *tm = data;
        GdkPixbuf *pixbuf;
 
-       /* get the original thumbnail pixbuf (unrotated, with original options) 
+       /* get the original thumbnail pixbuf (unrotated, with original options)
           this is called from image_loader done callback, so tm->tl->il must exist*/
-       pixbuf = image_loader_get_pixbuf(tm->tl->il); 
+       pixbuf = image_loader_get_pixbuf(tm->tl->il);
        if (pixbuf)
                {
                const gchar *uri;
index b2a3399..944d255 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index e36106d..9ec05c2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -210,7 +210,7 @@ gchar *file_util_safe_delete_status(void)
                        buf = g_strdup_printf(_("Safe delete: %s"), _("off"));
                        }
                }
-               
+
        return buf;
 }
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index e6297d1..f21f52f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * This software is released under the GNU General Public License (GNU GPL).
  * Please read the included file COPYING for more information.
index e3179cc..482c05a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -50,7 +50,8 @@ typedef enum {
        SORT_SIZE,
        SORT_TIME,
        SORT_PATH,
-       SORT_NUMBER
+       SORT_NUMBER,
+       SORT_EXIFTIME
 } SortType;
 
 typedef enum {
@@ -139,7 +140,7 @@ typedef enum {
        NOTIFY_PRIORITY_MEDIUM,
        NOTIFY_PRIORITY_LOW
 } NotifyPriority;
-       
+
 typedef enum {
        NOTIFY_MARKS            = 1 << 1, /* changed marks */
        NOTIFY_PIXBUF           = 1 << 2, /* image was read into fd->pixbuf */
@@ -158,11 +159,11 @@ typedef enum {
        CHANGE_WARN_SAME               = 1 << 2,
        CHANGE_WARN_CHANGED_EXT        = 1 << 3,
        CHANGE_WARN_UNSAVED_META       = 1 << 4,
+       CHANGE_WARN_NO_WRITE_PERM_DEST_DIR  = 1 << 5,
        CHANGE_ERROR_MASK              = (~0) << 8, /* the values below are fatal errors */
        CHANGE_NO_READ_PERM            = 1 << 8,
        CHANGE_NO_WRITE_PERM_DIR       = 1 << 9,
        CHANGE_NO_DEST_DIR             = 1 << 10,
-       CHANGE_NO_WRITE_PERM_DEST_DIR  = 1 << 11,
        CHANGE_NO_WRITE_PERM_DEST      = 1 << 12,
        CHANGE_DEST_EXISTS             = 1 << 13,
        CHANGE_NO_SRC                  = 1 << 14,
@@ -486,7 +487,7 @@ struct _FileDataChangeInfo {
 };
 
 struct _FileData {
-       gint magick;
+       guint magick;
        gint type;
        gchar *original_path; /* key to file_data_pool hash table */
        gchar *path;
@@ -498,7 +499,7 @@ struct _FileData {
        time_t date;
        mode_t mode; /* this is needed at least for notification in view_dir because it is preserved after the file/directory is deleted */
        gint sidecar_priority;
-       
+
        guint marks; /* each bit represents one mark */
        guint valid_marks; /* zero bit means that the corresponding mark needs to be reread */
 
@@ -510,7 +511,7 @@ struct _FileData {
 
        GdkPixbuf *pixbuf; /* full-size image, only complete images, NULL during loading
                              all FileData with non-NULL pixbuf are referenced by image_cache */
-                             
+
        HistMap *histmap;
 
        gint ref;
@@ -519,8 +520,9 @@ struct _FileData {
 
        gint user_orientation;
        gint exif_orientation;
-       
+
        ExifData *exif;
+       time_t exifdate;
        GHashTable *modified_xmp; // hash table which contains unwritten xmp metadata in format: key->list of string values
        GList *cached_metadata;
 };
@@ -671,7 +673,7 @@ struct _LayoutWindow
        GtkWidget *info_details;
        GtkWidget *info_zoom;
        GtkWidget *info_pixel;
-       
+
        /* slide show */
 
        SlideShowData *slideshow;
@@ -780,7 +782,7 @@ struct _ViewFile
        gboolean marks_enabled;
        gint active_mark;
        gint clicked_mark;
-       
+
        /* refresh */
        guint refresh_idle_id; /* event source id */
        time_t time_refresh_set; /* time when refresh_idle_id was set */
@@ -866,6 +868,8 @@ struct _FullScreenData
 
        void (*stop_func)(FullScreenData *, gpointer);
        gpointer stop_data;
+
+       gboolean same_region; /* the returned region will overlap the current location of widget. */
 };
 
 struct _PixmapFolders
index 8ab6132..b9b5639 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -383,9 +383,11 @@ static void bookmark_menu_remove_cb(GtkWidget *widget, gpointer data)
 static void bookmark_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gint *pushed_in, gpointer data)
 {
        GtkWidget *button = data;
+       GtkAllocation allocation;
 
-       gdk_window_get_origin(button->window, x, y);
-       *y += button->allocation.y + button->allocation.height;
+       gtk_widget_set_allocation(button, &allocation);
+       gdk_window_get_origin(gtk_widget_get_window(button), x, y);
+       *y += allocation.y + allocation.height;
 }
 
 static void bookmark_menu_popup(BookMarkData *bm, GtkWidget *button,
@@ -437,20 +439,20 @@ static gboolean bookmark_keypress_cb(GtkWidget *button, GdkEventKey *event, gpoi
 
        switch (event->keyval)
                {
-               case GDK_F10:
+               case GDK_KEY_F10:
                        if (!(event->state & GDK_CONTROL_MASK)) return FALSE;
-               case GDK_Menu:
+               case GDK_KEY_Menu:
                        bookmark_menu_popup(bm, button, 0, event->time, TRUE);
                        return TRUE;
                        break;
-               case GDK_Up:
+               case GDK_KEY_Up:
                        if (event->state & GDK_SHIFT_MASK)
                                {
                                bookmark_move(bm, button, -1);
                                return TRUE;
                                }
                        break;
-               case GDK_Down:
+               case GDK_KEY_Down:
                        if (event->state & GDK_SHIFT_MASK)
                                {
                                bookmark_move(bm, button, 1);
@@ -468,34 +470,30 @@ static void bookmark_drag_set_data(GtkWidget *button,
 {
        BookMarkData *bm = data;
        BookButtonData *b;
-       gchar *uri_text = NULL;
-       gint length = 0;
        GList *list = NULL;
 
+#if GTK_CHECK_VERSION(3,0,0)
+       if (gdk_drag_context_get_dest_window(context) == gtk_widget_get_window(bm->widget)) return;
+#else
        if (context->dest_window == bm->widget->window) return;
+#endif
 
        b = g_object_get_data(G_OBJECT(button), "bookbuttondata");
        if (!b) return;
 
        list = g_list_append(list, b->path);
 
-       switch (info)
+       gchar **uris = uris_from_filelist(list);
+       gboolean ret = gtk_selection_data_set_uris(selection_data, uris);
+       if (!ret)
                {
-               case TARGET_URI_LIST:
-                       uri_text = uri_text_from_list(list, &length, FALSE);
-                       break;
-               case TARGET_TEXT_PLAIN:
-                       uri_text = uri_text_from_list(list, &length, TRUE);
-                       break;
+               char *str = g_strjoinv("\r\n", uris);
+               ret = gtk_selection_data_set_text(selection_data, str, -1);
+               g_free(str);
                }
 
+       g_strfreev(uris);
        g_list_free(list);
-
-       if (!uri_text) return;
-
-       gtk_selection_data_set(selection_data, selection_data->target,
-                              8, (guchar *)uri_text, length);
-       g_free(uri_text);
 }
 
 static void bookmark_drag_begin(GtkWidget *button, GdkDragContext *context, gpointer data)
@@ -503,17 +501,25 @@ static void bookmark_drag_begin(GtkWidget *button, GdkDragContext *context, gpoi
        GdkPixbuf *pixbuf;
        GdkModifierType mask;
        gint x, y;
+       GtkAllocation allocation;
 
-       pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8,
-                               button->allocation.width, button->allocation.height);
-       gdk_pixbuf_get_from_drawable(pixbuf, button->window, NULL,
-                                    button->allocation.x, button->allocation.y,
-                                    0, 0, button->allocation.width, button->allocation.height);
+       gtk_widget_get_allocation(button, &allocation);
 
-       gdk_window_get_pointer(button->window, &x, &y, &mask);
+#if GTK_CHECK_VERSION(3,0,0)
+       pixbuf = gdk_pixbuf_get_from_window(gtk_widget_get_window(button),
+                                           allocation.x, allocation.y,
+                                           allocation.width, allocation.height);
+#else
+       pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8,
+                               allocation.width, allocation.height);
+       gdk_pixbuf_get_from_drawable(pixbuf, gtk_widget_get_window(button), NULL,
+                                    allocation.x, allocation.y,
+                                    0, 0, allocation.width, allocation.height);
+#endif
+       gdk_window_get_pointer(gtk_widget_get_window(button), &x, &y, &mask);
 
        gtk_drag_set_icon_pixbuf(context, pixbuf,
-                                x - button->allocation.x, y - button->allocation.y);
+                                x - allocation.x, y - allocation.y);
        g_object_unref(pixbuf);
 }
 
@@ -681,16 +687,13 @@ static void bookmark_dnd_get_data(GtkWidget *widget,
        BookMarkData *bm = data;
        GList *list = NULL;
        GList *work;
+       gchar **uris;
 
        if (!bm->editable) return;
 
-       switch (info)
-               {
-               case TARGET_URI_LIST:
-               case TARGET_X_URL:
-                       list = uri_list_from_text((gchar *)selection_data->data, FALSE);
-                       break;
-               }
+       uris = gtk_selection_data_get_uris(selection_data);
+       list = uri_filelist_from_uris(uris);
+       g_strfreev(uris);
 
        work = list;
        while (work)
@@ -871,13 +874,9 @@ GtkWidget *history_combo_new(GtkWidget **entry, const gchar *text,
        hc->history_key = g_strdup(history_key);
        hc->history_levels = max_levels;
 
-       hc->combo = gtk_combo_box_entry_new_text();
-#if 0
-       gtk_combo_set_case_sensitive(GTK_COMBO(hc->combo), TRUE);
-       gtk_combo_set_use_arrows(GTK_COMBO(hc->combo), FALSE);
-#endif
+       hc->combo = gtk_combo_box_text_new_with_entry();
 
-       hc->entry = GTK_BIN(hc->combo)->child;
+       hc->entry = gtk_bin_get_child(GTK_BIN(hc->combo));
 
        g_object_set_data(G_OBJECT(hc->combo), "history_combo_data", hc);
        g_object_set_data(G_OBJECT(hc->entry), "history_combo_data", hc);
@@ -887,7 +886,7 @@ GtkWidget *history_combo_new(GtkWidget **entry, const gchar *text,
        work = history_list_get_by_key(hc->history_key);
        while (work)
                {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(hc->combo), (gchar *)work->data);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(hc->combo), (gchar *)work->data);
                work = work->next;
                n++;
                }
@@ -944,7 +943,7 @@ void history_combo_append_history(GtkWidget *widget, const gchar *text)
                work = history_list_get_by_key(hc->history_key);
                while (work)
                        {
-                       gtk_combo_box_append_text(GTK_COMBO_BOX(hc->combo), (gchar *)work->data);
+                       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(hc->combo), (gchar *)work->data);
                        work = work->next;
                        }
                }
index 9d1a70a..fd570fa 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 33c6560..3ab6bcb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -49,25 +49,6 @@ void print_term(const gchar *text_utf8)
        g_free(text_l);
 }
 
-static void encoding_dialog(const gchar *path);
-
-static gboolean encoding_dialog_idle(gpointer data)
-{
-       gchar *path = data;
-
-       encoding_dialog(path);
-       g_free(path);
-
-       return FALSE;
-}
-
-static gint encoding_dialog_delay(gpointer data)
-{
-       g_idle_add(encoding_dialog_idle, data);
-
-       return 0;
-}
-
 static void encoding_dialog(const gchar *path)
 {
        static gboolean warned_user = FALSE;
@@ -76,14 +57,6 @@ static void encoding_dialog(const gchar *path)
        const gchar *lc;
        const gchar *bf;
 
-       /* check that gtk is initialized (loop is level > 0) */
-       if (gtk_main_level() == 0)
-               {
-               /* gtk not initialized */
-               gtk_init_add(encoding_dialog_delay, g_strdup(path));
-               return;
-               }
-
        if (warned_user) return;
        warned_user = TRUE;
 
@@ -107,7 +80,7 @@ static void encoding_dialog(const gchar *path)
                name = g_convert(path, -1, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
                string = g_string_append(string, _("\nPreferred encoding appears to be UTF-8, however the file:\n"));
                g_string_append_printf(string, "\"%s\"\n", (name) ? name : _("[name not displayable]"));
-               
+
                if (g_utf8_validate(path, -1, NULL))
                        g_string_append_printf(string, _("\"%s\" is encoded in valid UTF-8."), (name) ? name : _("[name not displayable]"));
                else
@@ -196,7 +169,7 @@ const gchar *homedir(void)
 
        if (!home)
                home = path_to_utf8(getenv("HOME"));
-       
+
        if (!home)
                home = path_to_utf8(g_get_home_dir());
 
@@ -211,7 +184,7 @@ static gchar *xdg_dir_get(const gchar *key, const gchar *fallback)
                {
                return g_build_filename(homedir(), fallback, NULL);
                }
-       
+
        return path_to_utf8(dir);
 }
 
@@ -220,7 +193,7 @@ const gchar *xdg_data_home_get(void)
        static const gchar *xdg_data_home = NULL;
 
        if (xdg_data_home) return xdg_data_home;
-       
+
        xdg_data_home = xdg_dir_get("XDG_DATA_HOME", ".local/share");
 
        return xdg_data_home;
@@ -231,7 +204,7 @@ const gchar *xdg_config_home_get(void)
        static const gchar *xdg_config_home = NULL;
 
        if (xdg_config_home) return xdg_config_home;
-       
+
        xdg_config_home = xdg_dir_get("XDG_CONFIG_HOME", ".config");
 
        return xdg_config_home;
@@ -242,7 +215,7 @@ const gchar *xdg_cache_home_get(void)
        static const gchar *xdg_cache_home = NULL;
 
        if (xdg_cache_home) return xdg_cache_home;
-       
+
        xdg_cache_home = xdg_dir_get("XDG_CACHE_HOME", ".cache");
 
        return xdg_cache_home;
@@ -251,7 +224,7 @@ const gchar *xdg_cache_home_get(void)
 const gchar *get_rc_dir(void)
 {
        static gchar *rc_dir = NULL;
-       
+
        if (rc_dir) return rc_dir;
 
        if (USE_XDG)
@@ -289,7 +262,7 @@ const gchar *get_trash_dir(void)
        static gchar *trash_dir = NULL;
 
        if (trash_dir) return trash_dir;
-       
+
        if (USE_XDG)
                {
                trash_dir = g_build_filename(xdg_data_home_get(), GQ_APPNAME_LC, GQ_TRASH_DIR, NULL);
@@ -545,15 +518,15 @@ gboolean copy_file(const gchar *s, const gchar *t)
 
        fi = fopen(sl, "rb");
        if (!fi) goto end;
-       
+
        /* First we write to a temporary file, then we rename it on success,
           and attributes from original file are copied */
        randname = g_strconcat(tl, ".tmp_XXXXXX", NULL);
        if (!randname) goto end;
-       
+
        fd = g_mkstemp(randname);
        if (fd == -1) goto end;
-       
+
        fo = fdopen(fd, "wb");
        if (!fo) {
                close(fd);
@@ -574,7 +547,7 @@ gboolean copy_file(const gchar *s, const gchar *t)
 
        if (rename(randname, tl) < 0) {
                unlink(randname);
-               goto end;       
+               goto end;
        }
 
        ret = copy_file_attributes(s, t, TRUE, TRUE);
@@ -828,7 +801,7 @@ void parse_out_relatives(gchar *path)
                                continue;
                                }
                        }
-       
+
                if (s != t) path[t] = path[s];
                t++;
                s++;
@@ -892,7 +865,7 @@ gboolean recursive_mkdir_if_not_exists(const gchar *path, mode_t mode)
                                        p[0] = '\0';
                                        end = FALSE;
                                        }
-                               
+
                                if (!isdir(npath))
                                        {
                                        DEBUG_1("creating sub dir:%s", npath);
@@ -903,7 +876,7 @@ gboolean recursive_mkdir_if_not_exists(const gchar *path, mode_t mode)
                                                return FALSE;
                                                }
                                        }
-                               
+
                                if (!end) p[0] = G_DIR_SEPARATOR;
                                }
                        }
index 276dc88..12b9a61 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 830da1f..a21f7f6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -65,10 +65,6 @@ static void help_window_scroll(GtkWidget *text, const gchar *key)
                gtk_text_buffer_get_iter_at_line_offset(buffer, &iter, line, 0);
                gtk_text_buffer_place_cursor(buffer, &iter);
 
-#if 0
-               gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(text), &iter, 0.0, TRUE, 0, 0);
-#endif
-
                /* apparently only scroll_to_mark works when the textview is not visible yet */
 
                /* if mark exists, move it instead of creating one for every scroll */
@@ -167,7 +163,7 @@ void help_window_set_key(GtkWidget *window, const gchar *key)
        text = g_object_get_data(G_OBJECT(window), "text_widget");
        if (!text) return;
 
-       gdk_window_raise(window->window);
+       gdk_window_raise(gtk_widget_get_window(window));
 
        if (key) help_window_scroll(text, key);
 }
@@ -181,7 +177,7 @@ void help_window_set_file(GtkWidget *window, const gchar *path, const gchar *key
        text = g_object_get_data(G_OBJECT(window), "text_widget");
        if (!text) return;
 
-       gdk_window_raise(window->window);
+       gdk_window_raise(gtk_widget_get_window(window));
 
        help_window_load_text(text, path);
        help_window_scroll(text, key);
@@ -203,9 +199,6 @@ GtkWidget *help_window_new(const gchar *title,
 
        window = window_new(GTK_WINDOW_TOPLEVEL, subclass, NULL, NULL, title);
        gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
-#if 0
-       gtk_container_set_border_width(GTK_CONTAINER(window), PREF_PAD_BORDER);
-#endif
        gtk_window_set_default_size(GTK_WINDOW(window), HELP_WINDOW_WIDTH, HELP_WINDOW_HEIGHT);
 
        g_signal_connect(G_OBJECT(window), "delete_event",
@@ -249,7 +242,7 @@ GtkWidget *help_window_new(const gchar *title,
        g_signal_connect(G_OBJECT(button), "clicked",
                         G_CALLBACK(help_window_close), window);
        gtk_container_add(GTK_CONTAINER(hbox), button);
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        gtk_widget_grab_default(button);
        gtk_widget_show(button);
 
index fd6fd6a..eb4167f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 39dafbf..0219978 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -162,9 +162,11 @@ gboolean popup_menu_position_clamp(GtkMenu *menu, gint *x, gint *y, gint height)
        gboolean adjusted = FALSE;
        gint w, h;
        gint xw, xh;
+       GtkRequisition requisition;
 
-       w = GTK_WIDGET(menu)->requisition.width;
-       h = GTK_WIDGET(menu)->requisition.height;
+       gtk_widget_get_requisition(GTK_WIDGET(menu), &requisition);
+       w = requisition.width;
+       h = requisition.height;
        xw = gdk_screen_width();
        xh = gdk_screen_height();
 
index 8ea43e3..f9b6a5f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 770899d..461e1ee 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -65,9 +65,14 @@ GtkWidget *pref_group_new(GtkWidget *parent_box, gboolean fill,
        vbox = gtk_vbox_new(FALSE, PREF_PAD_GAP);
 
        /* add additional spacing if necessary */
-       if (GTK_IS_VBOX(parent_box) && GTK_BOX(parent_box)->children != NULL)
+       if (GTK_IS_VBOX(parent_box))
                {
-               pref_spacer(vbox, PREF_PAD_GROUP - PREF_PAD_GAP);
+               GList *list = gtk_container_get_children(GTK_CONTAINER(parent_box));
+               if (list)
+                       {
+                       pref_spacer(vbox, PREF_PAD_GROUP - PREF_PAD_GAP);
+                       }
+               g_list_free(list);
                }
 
        gtk_box_pack_start(GTK_BOX(parent_box), vbox, fill, fill, 0);
@@ -538,24 +543,11 @@ GtkWidget *pref_spin_new_int(GtkWidget *parent_box, const gchar *text, const gch
                             G_CALLBACK(pref_spin_int_cb), value_var);
 }
 
-#if 0
-void pref_spin_set_blocking(GtkWidget *spin, gdouble value, gpointer block_data)
-{
-       g_signal_handlers_block_matched(G_OBJECT(spin), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, block_data);
-       gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value);
-       g_signal_handlers_unblock_matched(G_OBJECT(spin), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, block_data);
-}
-#endif
-
 static void pref_link_sensitivity_cb(GtkWidget *watch, GtkStateType prev_state, gpointer data)
 {
        GtkWidget *widget = data;
 
-#if GTK_CHECK_VERSION(2,20,0)
        gtk_widget_set_sensitive(widget, gtk_widget_is_sensitive(watch));
-#else
-       gtk_widget_set_sensitive(widget, GTK_WIDGET_IS_SENSITIVE(watch));
-#endif
 }
 
 void pref_link_sensitivity(GtkWidget *widget, GtkWidget *watch)
@@ -657,25 +649,6 @@ GtkWidget *pref_table_button(GtkWidget *table, gint column, gint row,
        return button;
 }
 
-#if 0
-static GtkWidget *pref_table_checkbox(GtkWidget *table, gint column, gint row,
-                                     const gchar *text, gint active,
-                                     GCallback func, gpointer data)
-{
-       GtkWidget *button;
-
-       button = gtk_check_button_new_with_label(text);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active);
-       if (func) g_signal_connect(G_OBJECT(button), "clicked", func, data);
-
-       gtk_table_attach(GTK_TABLE(table), button, column, column + 1, row, row + 1,
-                        GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-       gtk_widget_show(button);
-
-       return button;
-}
-#endif
-
 GtkWidget *pref_table_spin(GtkWidget *table, gint column, gint row,
                           const gchar *text, const gchar *suffix,
                           gdouble min, gdouble max, gdouble step, gint digits,
@@ -736,24 +709,10 @@ GtkWidget *pref_table_spin_new_int(GtkWidget *table, gint column, gint row,
 }
 
 
-#if ! GTK_CHECK_VERSION(2,12,0)
-
-static void pref_toolbar_destroy_cb(GtkWidget *widget, gpointer data)
-{
-       GtkTooltips *tips = data;
-
-       g_object_unref(G_OBJECT(tips));
-}
-
-#endif
-
 GtkWidget *pref_toolbar_new(GtkWidget *parent_box, GtkToolbarStyle style)
 {
        GtkWidget *tbar;
-#if ! GTK_CHECK_VERSION(2,12,0)
-       GtkTooltips *tips;
-#endif
-       
+
        tbar = gtk_toolbar_new();
        gtk_toolbar_set_style(GTK_TOOLBAR(tbar), style);
 
@@ -762,27 +721,6 @@ GtkWidget *pref_toolbar_new(GtkWidget *parent_box, GtkToolbarStyle style)
                gtk_box_pack_start(GTK_BOX(parent_box), tbar, FALSE, FALSE, 0);
                gtk_widget_show(tbar);
                }
-
-#if ! GTK_CHECK_VERSION(2,12,0)
-       tips = gtk_tooltips_new();
-
-       /* take ownership of tooltips */
-#  ifdef GTK_OBJECT_FLOATING
-       /* GTK+ < 2.10 */
-       g_object_ref(G_OBJECT(tips));
-       gtk_object_sink(GTK_OBJECT(tips));
-#  else
-       /* GTK+ >= 2.10 */
-       g_object_ref_sink(G_OBJECT(tips));
-#  endif
-
-       g_object_set_data(G_OBJECT(tbar), "tooltips", tips);
-       g_signal_connect(G_OBJECT(tbar), "destroy",
-                        G_CALLBACK(pref_toolbar_destroy_cb), tips);
-
-       gtk_tooltips_enable(tips);
-#endif
-
        return tbar;
 }
 
@@ -825,18 +763,8 @@ GtkWidget *pref_toolbar_button(GtkWidget *toolbar,
 
        if (description)
                {
-
-#if GTK_CHECK_VERSION(2,12,0)
-
                gtk_widget_set_tooltip_text(item, description);
-                       
-#else
-               GtkTooltips *tips;
-
-               tips = g_object_get_data(G_OBJECT(toolbar), "tooltips");
-               gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(item), tips, description, NULL);
-#endif
-       }
+               }
 
        return item;
 }
@@ -894,11 +822,7 @@ static void date_selection_popup_hide(DateSelection *ds)
 {
        if (!ds->window) return;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_has_grab(ds->window))
-#else
-       if (GTK_WIDGET_HAS_GRAB(ds->window))
-#endif
                {
                gtk_grab_remove(ds->window);
                gdk_keyboard_ungrab(GDK_CURRENT_TIME);
@@ -928,12 +852,15 @@ static gboolean date_selection_popup_press_cb(GtkWidget *widget, GdkEventButton
        gint x, y;
        gint w, h;
        gint xr, yr;
+       GdkWindow *window;
 
        xr = (gint)event->x_root;
        yr = (gint)event->y_root;
 
-       gdk_window_get_origin(ds->window->window, &x, &y);
-       gdk_drawable_get_size(ds->window->window, &w, &h);
+       window = gtk_widget_get_window(ds->window);
+       gdk_window_get_origin(window, &x, &y);
+       w = gdk_window_get_width(window);
+       h = gdk_window_get_height(window);
 
        if (xr < x || yr < y || xr > x + w || yr > y + h)
                {
@@ -959,14 +886,14 @@ static gboolean date_selection_popup_keypress_cb(GtkWidget *widget, GdkEventKey
 
        switch (event->keyval)
                {
-               case GDK_Return:
-               case GDK_KP_Enter:
-               case GDK_Tab:
-               case GDK_ISO_Left_Tab:
+               case GDK_KEY_Return:
+               case GDK_KEY_KP_Enter:
+               case GDK_KEY_Tab:
+               case GDK_KEY_ISO_Left_Tab:
                        date_selection_popup_sync(ds);
                        date_selection_popup_hide(ds);
                        break;
-               case GDK_Escape:
+               case GDK_KEY_Escape:
                        date_selection_popup_hide(ds);
                        break;
                default:
@@ -995,6 +922,8 @@ static void date_selection_popup(DateSelection *ds)
        gint x, y;
        gint wx, wy;
        gint day, month, year;
+       GtkAllocation button_allocation;
+       GtkAllocation window_allocation;
 
        if (ds->window) return;
 
@@ -1020,14 +949,17 @@ static void date_selection_popup(DateSelection *ds)
 
        gtk_widget_realize(ds->window);
 
-       gdk_window_get_origin(ds->button->window, &wx, &wy);
+       gdk_window_get_origin(gtk_widget_get_window(ds->button), &wx, &wy);
+
+       gtk_widget_get_allocation(ds->button, &button_allocation);
+       gtk_widget_get_allocation(ds->window, &window_allocation);
 
-       x = wx + ds->button->allocation.x + ds->button->allocation.width - ds->window->allocation.width;
-       y = wy + ds->button->allocation.y + ds->button->allocation.height;
+       x = wx + button_allocation.x + button_allocation.width - window_allocation.width;
+       y = wy + button_allocation.y + button_allocation.height;
 
-       if (y + ds->window->allocation.height > gdk_screen_height())
+       if (y + window_allocation.height > gdk_screen_height())
                {
-               y = wy + ds->button->allocation.y - ds->window->allocation.height;
+               y = wy + button_allocation.y - window_allocation.height;
                }
        if (x < 0) x = 0;
        if (y < 0) y = 0;
@@ -1036,10 +968,10 @@ static void date_selection_popup(DateSelection *ds)
        gtk_widget_show(ds->window);
 
        gtk_widget_grab_focus(ds->calendar);
-       gdk_pointer_grab(ds->window->window, TRUE,
+       gdk_pointer_grab(gtk_widget_get_window(ds->window), TRUE,
                         GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_MOTION_MASK,
                         NULL, NULL, GDK_CURRENT_TIME);
-       gdk_keyboard_grab(ds->window->window, TRUE, GDK_CURRENT_TIME);
+       gdk_keyboard_grab(gtk_widget_get_window(ds->window), TRUE, GDK_CURRENT_TIME);
        gtk_grab_add(ds->window);
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ds->button), TRUE);
@@ -1058,15 +990,19 @@ static void date_selection_button_cb(GtkWidget *widget, gpointer data)
 static void button_size_allocate_cb(GtkWidget *button, GtkAllocation *allocation, gpointer data)
 {
        GtkWidget *spin = data;
+       GtkRequisition spin_requisition;
+       gtk_widget_get_requisition(spin, &spin_requisition);
 
-       if (allocation->height > spin->requisition.height)
+       if (allocation->height > spin_requisition.height)
                {
                GtkAllocation button_allocation;
+               GtkAllocation spin_allocation;
 
-               button_allocation = button->allocation;
-               button_allocation.height = spin->requisition.height;
-               button_allocation.y = spin->allocation.y +
-                       (spin->allocation.height - spin->requisition.height) / 2;
+               gtk_widget_get_allocation(button, &button_allocation);
+               gtk_widget_get_allocation(spin, &spin_allocation);
+               button_allocation.height = spin_requisition.height;
+               button_allocation.y = spin_allocation.y +
+                       (spin_allocation.height - spin_requisition.height) / 2;
                gtk_widget_size_allocate(button, &button_allocation);
                }
 }
@@ -1232,6 +1168,7 @@ static gboolean sizer_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpoin
        SizerData *sd = data;
        gint x, y;
        gint w, h;
+       GtkAllocation parent_allocation;
 
        if (!sd->in_drag) return FALSE;
 
@@ -1264,20 +1201,27 @@ static gboolean sizer_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpoin
 
        if (sd->bounding_widget)
                {
-               w = CLAMP(w, sd->sizer->allocation.width, sd->bounding_widget->allocation.width);
-               h = CLAMP(h, sd->sizer->allocation.height, sd->bounding_widget->allocation.height);
+               GtkAllocation sizer_allocation;
+               GtkAllocation bounding_allocation;
+               gtk_widget_get_allocation(sd->sizer, &sizer_allocation);
+               gtk_widget_get_allocation(sd->bounding_widget, &bounding_allocation);
+               w = CLAMP(w, sizer_allocation.width, bounding_allocation.width);
+               h = CLAMP(h, sizer_allocation.height, bounding_allocation.height);
                }
        else
                {
-               if (w < sd->sizer->allocation.width) w = sd->sizer->allocation.width;
-               if (h < sd->sizer->allocation.height) h = sd->sizer->allocation.height;
+               GtkAllocation sizer_allocation;
+               gtk_widget_get_allocation(sd->sizer, &sizer_allocation);
+               if (w < sizer_allocation.width) w = sizer_allocation.width;
+               if (h < sizer_allocation.height) h = sizer_allocation.height;
                }
 
        if (sd->hsize_max >= 0) w = MIN(w, sd->hsize_max);
        if (sd->vsize_max >= 0) h = MIN(h, sd->vsize_max);
 
-       if (w == sd->parent->allocation.width) w = -1;
-       if (h == sd->parent->allocation.height) h = -1;
+       gtk_widget_get_allocation(sd->parent, &parent_allocation);
+       if (w == parent_allocation.width) w = -1;
+       if (h == parent_allocation.height) h = -1;
 
        if (w > 0 || h > 0) gtk_widget_set_size_request(sd->parent, w, h);
 
@@ -1287,6 +1231,7 @@ static gboolean sizer_motion_cb(GtkWidget *widget, GdkEventButton *bevent, gpoin
 static gboolean sizer_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
 {
        SizerData *sd = data;
+       GtkAllocation parent_allocation;
 
        if (bevent->button != MOUSE_BUTTON_LEFT) return FALSE;
 
@@ -1294,10 +1239,11 @@ static gboolean sizer_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpoint
        sd->press_x = bevent->x_root;
        sd->press_y = bevent->y_root;
 
-       sd->press_width = sd->parent->allocation.width;
-       sd->press_height = sd->parent->allocation.height;
+       gtk_widget_get_allocation(sd->parent, &parent_allocation);
+       sd->press_width = parent_allocation.width;
+       sd->press_height = parent_allocation.height;
 
-       gdk_pointer_grab(sd->sizer->window, FALSE,
+       gdk_pointer_grab(gtk_widget_get_window(sd->sizer), FALSE,
                         GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
                         NULL, NULL, bevent->time);
        gtk_grab_add(sd->sizer);
@@ -1311,11 +1257,7 @@ static gboolean sizer_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpoi
 
        if (bevent->button != MOUSE_BUTTON_LEFT) return FALSE;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gdk_pointer_is_grabbed() && gtk_widget_has_grab(sd->sizer))
-#else
-       if (gdk_pointer_is_grabbed() && GTK_WIDGET_HAS_GRAB(sd->sizer))
-#endif
                {
                gtk_grab_remove(sd->sizer);
                gdk_pointer_ungrab(bevent->time);
@@ -1328,9 +1270,12 @@ static gboolean sizer_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpoi
 
 static void sizer_set_prelight(SizerData *sd, gboolean prelit)
 {
+       GtkAllocation sizer_allocation;
+       gtk_widget_get_allocation(sd->sizer, &sizer_allocation);
+
        sd->handle_prelit = prelit;
        gtk_widget_queue_draw_area(sd->sizer, 0, 0,
-                                  sd->sizer->allocation.width, sd->sizer->allocation.height);
+                                  sizer_allocation.width, sizer_allocation.height);
 }
 
 static gboolean sizer_enter_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer data)
@@ -1351,12 +1296,24 @@ static gboolean sizer_leave_cb(GtkWidget *widget, GdkEventCrossing *event, gpoin
 
 static gboolean sizer_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
 {
+#if GTK_CHECK_VERSION(3,0,0)
+       GtkAllocation allocation;
+
+       gtk_widget_get_allocation(widget, &allocation);
+
+       cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget));
+
+       gtk_render_handle (gtk_widget_get_style_context (widget),
+                          cr, allocation.x, allocation.y, allocation.width, allocation.height);
+       cairo_destroy(cr);
+#else
        SizerData *sd = data;
        GdkRectangle clip;
        GtkOrientation orientation;
        GtkStateType state;
+       GtkAllocation allocation;
 
-       gdk_region_get_clipbox(event->region, &clip);
+       gtk_widget_get_allocation(widget, &allocation);
 
        if (sd->position & SIZER_POS_LEFT || sd->position & SIZER_POS_RIGHT)
                {
@@ -1373,14 +1330,17 @@ static gboolean sizer_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpoint
                }
        else
                {
-               state = widget->state;
+               state = gtk_widget_get_state(widget);
                }
 
-       gtk_paint_handle(widget->style, widget->window, state,
+       gdk_region_get_clipbox(event->region, &clip);
+
+       gtk_paint_handle(gtk_widget_get_style(widget), gtk_widget_get_window(widget), state,
                         GTK_SHADOW_NONE, &clip, widget, "paned",
                         0, 0,
-                        widget->allocation.width, widget->allocation.height,
+                        allocation.width, allocation.height,
                         orientation);
+#endif
 
        return TRUE;
 }
@@ -1400,11 +1360,11 @@ static void sizer_realize_cb(GtkWidget *widget, gpointer data)
                n = (n != 0) ? GDK_FLEUR : GDK_SB_H_DOUBLE_ARROW;
                }
 
-       if (n != 0 && widget->window)
+       if (n != 0 && gtk_widget_get_window(widget))
                {
                GdkCursor *cursor;
                cursor = gdk_cursor_new(n);
-               gdk_window_set_cursor(widget->window, cursor);
+               gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
                gdk_cursor_unref(cursor);
                }
 }
index d940cd6..899e1ef 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index d58c5ac..23c153b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -291,7 +291,7 @@ static void dest_change_dir(Dest_Data *dd, const gchar *path, gboolean retain_na
                new_directory = g_path_get_dirname(full_path);
        else
                new_directory = g_strdup(full_path);
-       
+
        gtk_entry_set_text(GTK_ENTRY(dd->entry), full_path);
 
        dest_populate(dd, new_directory);
@@ -331,9 +331,7 @@ static void dest_dnd_set_data(GtkWidget *view,
                              guint info, guint time, gpointer data)
 {
        gchar *path = NULL;
-       gchar *uri_text = NULL;
        GList *list = NULL;
-       gint length = 0;
        GtkTreeModel *model;
        GtkTreeSelection *selection;
        GtkTreeIter iter;
@@ -346,23 +344,16 @@ static void dest_dnd_set_data(GtkWidget *view,
 
        list = g_list_append(list, path);
 
-       switch (info)
+       gchar **uris = uris_from_filelist(list);
+       gboolean ret = gtk_selection_data_set_uris(selection_data, uris);
+       if (!ret)
                {
-               case TARGET_URI_LIST:
-                       uri_text = uri_text_from_list(list, &length, FALSE);
-                       break;
-               case TARGET_TEXT_PLAIN:
-                       uri_text = uri_text_from_list(list, &length, TRUE);
-                       break;
+               char *str = g_strjoinv("\r\n", uris);
+               ret = gtk_selection_data_set_text(selection_data, str, -1);
+               g_free(str);
                }
 
        string_list_free(list);
-
-       if (!uri_text) return;
-
-       gtk_selection_data_set(selection_data, selection_data->target,
-                              8, (guchar *)uri_text, length);
-       g_free(uri_text);
 }
 
 static void dest_dnd_init(Dest_Data *dd)
@@ -696,9 +687,9 @@ static gboolean dest_keypress_cb(GtkWidget *view, GdkEventKey *event, gpointer d
 
        switch (event->keyval)
                {
-               case GDK_F10:
+               case GDK_KEY_F10:
                        if (!(event->state & GDK_CONTROL_MASK)) return FALSE;
-               case GDK_Menu:
+               case GDK_KEY_Menu:
                        dest_view_store_selection(dd, GTK_TREE_VIEW(view));
                        dest_popup_menu(dd, GTK_TREE_VIEW(view), 0, event->time, TRUE);
                        return TRUE;
@@ -711,7 +702,7 @@ static gboolean dest_keypress_cb(GtkWidget *view, GdkEventKey *event, gpointer d
                                return TRUE;
                                }
                        break;
-               case GDK_Delete:
+               case GDK_KEY_Delete:
                        dest_view_store_selection(dd, GTK_TREE_VIEW(view));
                        dest_view_delete(dd, GTK_TREE_VIEW(view));
                        return TRUE;
@@ -905,7 +896,7 @@ static void dest_filter_list_sync(Dest_Data *dd)
 
        if (!dd->filter_list || !dd->filter_combo) return;
 
-       entry = GTK_BIN(dd->filter_combo)->child;
+       entry = gtk_bin_get_child(GTK_BIN(dd->filter_combo));
        old_text = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
 
        store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(dd->filter_combo)));
@@ -972,7 +963,7 @@ static void dest_filter_add(Dest_Data *dd, const gchar *filter, const gchar *des
                }
        dd->filter_text_list = uig_list_insert_link(dd->filter_text_list, g_list_last(dd->filter_text_list), buf);
 
-       if (set) gtk_entry_set_text(GTK_ENTRY(GTK_BIN(dd->filter_combo)->child), filter);
+       if (set) gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(dd->filter_combo))), filter);
        dest_filter_list_sync(dd);
 }
 
@@ -994,7 +985,7 @@ static void dest_filter_changed_cb(GtkEditable *editable, gpointer data)
        const gchar *buf;
        gchar *path;
 
-       entry = GTK_BIN(dd->filter_combo)->child;
+       entry = gtk_bin_get_child(GTK_BIN(dd->filter_combo));
        buf = gtk_entry_get_text(GTK_ENTRY(entry));
 
        g_free(dd->filter);
@@ -1144,17 +1135,13 @@ GtkWidget *path_selection_new_with_files(GtkWidget *entry, const gchar *path,
 
                store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
 
-               dd->filter_combo = gtk_combo_box_entry_new_with_model(GTK_TREE_MODEL(store),
-                                                                     FILTER_COLUMN_FILTER);
+               dd->filter_combo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(store));
                g_object_unref(store);
                gtk_cell_layout_clear(GTK_CELL_LAYOUT(dd->filter_combo));
                renderer = gtk_cell_renderer_text_new();
                gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dd->filter_combo), renderer, TRUE);
                gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dd->filter_combo), renderer,
                                               "text", FILTER_COLUMN_NAME, NULL);
-#if 0
-               gtk_combo_set_case_sensitive(GTK_COMBO(dd->filter_combo), TRUE);
-#endif
                gtk_box_pack_start(GTK_BOX(hbox2), dd->filter_combo, TRUE, TRUE, 0);
                gtk_widget_show(dd->filter_combo);
 
@@ -1208,7 +1195,7 @@ GtkWidget *path_selection_new_with_files(GtkWidget *entry, const gchar *path,
                dest_filter_clear(dd);
                dest_filter_add(dd, filter, filter_desc, TRUE);
 
-               dd->filter = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(dd->filter_combo)->child)));
+               dd->filter = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(dd->filter_combo)))));
                }
 
        if (path && path[0] == G_DIR_SEPARATOR && isdir(path))
@@ -1235,7 +1222,7 @@ GtkWidget *path_selection_new_with_files(GtkWidget *entry, const gchar *path,
 
        if (dd->filter_combo)
                {
-               g_signal_connect(G_OBJECT(GTK_BIN(dd->filter_combo)->child), "changed",
+               g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(dd->filter_combo))), "changed",
                                 G_CALLBACK(dest_filter_changed_cb), dd);
                }
        g_signal_connect(G_OBJECT(dd->entry), "changed",
index a6518d1..17abad6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 693a9e9..e1d5a54 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index f033431..80ecd3f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 4d537fa..d7cea9e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -68,7 +68,7 @@ struct _TabCompData
        gpointer enter_data;
        gpointer tab_data;
        gpointer tab_append_data;
-       
+
        GtkWidget *combo;
        gboolean has_history;
        gchar *history_key;
@@ -206,11 +206,7 @@ void tab_completion_iter_menu_items(GtkWidget *widget, gpointer data)
        TabCompData *td = data;
        GtkWidget *child;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_get_visible(widget)) return;
-#else
-       if (!GTK_WIDGET_VISIBLE(widget)) return;
-#endif
 
        child = gtk_bin_get_child(GTK_BIN(widget));
        if (GTK_IS_LABEL(child)) {
@@ -218,7 +214,7 @@ void tab_completion_iter_menu_items(GtkWidget *widget, gpointer data)
                const gchar *entry_text = gtk_entry_get_text(GTK_ENTRY(td->entry));
                const gchar *prefix = filename_from_path(entry_text);
                guint prefix_len = strlen(prefix);
-               
+
                if (strlen(text) < prefix_len || strncmp(text, prefix, prefix_len))
                        {
                        /* Hide menu items not matching */
@@ -236,8 +232,8 @@ static gboolean tab_completion_popup_key_press(GtkWidget *widget, GdkEventKey *e
 {
        TabCompData *td = data;
 
-       if (event->keyval == GDK_Tab ||
-           event->keyval == GDK_BackSpace ||
+       if (event->keyval == GDK_KEY_Tab ||
+           event->keyval == GDK_KEY_BackSpace ||
            (event->keyval >= 0x20 && event->keyval <= 0xFF) )
                {
                if (event->keyval >= 0x20 && event->keyval <= 0xFF)
@@ -249,22 +245,18 @@ static gboolean tab_completion_popup_key_press(GtkWidget *widget, GdkEventKey *e
                        buf[1] = '\0';
                        gtk_editable_insert_text(GTK_EDITABLE(td->entry), buf, 1, &p);
                        gtk_editable_set_position(GTK_EDITABLE(td->entry), -1);
-               
+
                        /* Reduce the number of entries in the menu */
                        td->choices = 0;
                        gtk_container_foreach(GTK_CONTAINER(widget), tab_completion_iter_menu_items, (gpointer) td);
                        if (td->choices > 1) return TRUE; /* multiple choices */
                        if (td->choices > 0) tab_completion_do(td); /* one choice */
                        }
-               
+
                /* close the menu */
                gtk_menu_popdown(GTK_MENU(widget));
                /* doing this does not emit the "selection done" signal, unref it ourselves */
-#if GTK_CHECK_VERSION(2,12,0)
                g_object_unref(widget);
-#else
-               gtk_widget_unref(widget);
-#endif
                return TRUE;
                }
 
@@ -300,11 +292,13 @@ static void tab_completion_popup_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolea
        GdkScreen *screen;
        gint monitor_num;
        GdkRectangle monitor;
+       GtkRequisition requisition;
+       GtkAllocation allocation;
 
-       gdk_window_get_origin(td->entry->window, x, y);
+       gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(td->entry)), x, y);
 
        screen = gtk_widget_get_screen(GTK_WIDGET(menu));
-       monitor_num = gdk_screen_get_monitor_at_window(screen, td->entry->window);
+       monitor_num = gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(GTK_WIDGET(td->entry)));
        gdk_screen_get_monitor_geometry(screen, monitor_num, &monitor);
 
        gtk_widget_size_request(GTK_WIDGET(menu), &req);
@@ -317,7 +311,10 @@ static void tab_completion_popup_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolea
 
        *x += strong_pos.x / PANGO_SCALE + xoffset;
 
-       height = MIN(td->entry->requisition.height, td->entry->allocation.height);
+       gtk_widget_get_requisition(td->entry, &requisition);
+       gtk_widget_get_allocation(td->entry, &allocation);
+
+       height = MIN(requisition.height, allocation.height);
 
        if (req.height > monitor.y + monitor.height - *y - height &&
            *y - monitor.y >  monitor.y + monitor.height - *y)
@@ -504,7 +501,7 @@ static gboolean tab_completion_do(TabCompData *td)
        ptr = (gchar *)filename_from_path(entry_dir);
        if (ptr > entry_dir) ptr--;
        ptr[0] = '\0';
-       
+
        if (strlen(entry_dir) == 0)
                {
                g_free(entry_dir);
@@ -610,7 +607,7 @@ static gboolean tab_completion_key_pressed(GtkWidget *widget, GdkEventKey *event
 
        switch (event->keyval)
                {
-               case GDK_Tab:
+               case GDK_KEY_Tab:
                        if (!(event->state & GDK_CONTROL_MASK))
                                {
                                if (tab_completion_do(td))
@@ -620,7 +617,7 @@ static gboolean tab_completion_key_pressed(GtkWidget *widget, GdkEventKey *event
                                stop_signal = TRUE;
                                }
                        break;
-               case GDK_Return: case GDK_KP_Enter:
+               case GDK_KEY_Return: case GDK_KEY_KP_Enter:
                        if (td->fd_button &&
                            (event->state & GDK_CONTROL_MASK))
                                {
@@ -650,11 +647,7 @@ static void tab_completion_button_pressed(GtkWidget *widget, gpointer data)
 
        if (!td) return;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_has_focus(entry))
-#else
-       if (!GTK_WIDGET_HAS_FOCUS(entry))
-#endif
                {
                gtk_widget_grab_focus(entry);
                }
@@ -668,15 +661,17 @@ static void tab_completion_button_pressed(GtkWidget *widget, gpointer data)
 static void tab_completion_button_size_allocate(GtkWidget *button, GtkAllocation *allocation, gpointer data)
 {
        GtkWidget *parent = data;
+       GtkAllocation parent_allocation;
+       gtk_widget_get_allocation(parent, &parent_allocation);
 
-       if (allocation->height > parent->allocation.height)
+       if (allocation->height > parent_allocation.height)
                {
                GtkAllocation button_allocation;
 
-               button_allocation = button->allocation;
-               button_allocation.height = parent->allocation.height;
-               button_allocation.y = parent->allocation.y +
-                       (parent->allocation.height - parent->allocation.height) / 2;
+               gtk_widget_get_allocation(button, &button_allocation);
+               button_allocation.height = parent_allocation.height;
+               button_allocation.y = parent_allocation.y +
+                       (parent_allocation.height - parent_allocation.height) / 2;
                gtk_widget_size_allocate(button, &button_allocation);
                }
 }
@@ -688,7 +683,7 @@ static GtkWidget *tab_completion_create_complete_button(GtkWidget *entry, GtkWid
        GdkPixbuf *pixbuf;
 
        button = gtk_button_new();
-       GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
+       gtk_widget_set_can_focus(button, FALSE);
        g_signal_connect(G_OBJECT(button), "size_allocate",
                         G_CALLBACK(tab_completion_button_size_allocate), parent);
        g_signal_connect(G_OBJECT(button), "clicked",
@@ -724,15 +719,11 @@ GtkWidget *tab_completion_new_with_history(GtkWidget **entry, const gchar *text,
 
        box = gtk_hbox_new(FALSE, 0);
 
-       combo = gtk_combo_box_entry_new_text();
+       combo = gtk_combo_box_text_new_with_entry();
        gtk_box_pack_start(GTK_BOX(box), combo, TRUE, TRUE, 0);
        gtk_widget_show(combo);
 
-       combo_entry = GTK_BIN(combo)->child;
-#if 0
-       gtk_combo_set_case_sensitive(GTK_COMBO(combo), TRUE);
-       gtk_combo_set_use_arrows(GTK_COMBO(combo), FALSE);
-#endif
+       combo_entry = gtk_bin_get_child(GTK_BIN(combo));
 
        button = tab_completion_create_complete_button(combo_entry, combo);
        gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
@@ -753,7 +744,7 @@ GtkWidget *tab_completion_new_with_history(GtkWidget **entry, const gchar *text,
        work = history_list_get_by_key(history_key);
        while (work)
                {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(combo), (gchar *)work->data);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), (gchar *)work->data);
                work = work->next;
                n++;
                }
@@ -810,7 +801,7 @@ void tab_completion_append_to_history(GtkWidget *entry, const gchar *path)
        work = history_list_get_by_key(td->history_key);
        while (work)
                {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(td->combo), (gchar *)work->data);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(td->combo), (gchar *)work->data);
                work = work->next;
                n++;
                }
index 25939d7..d109776 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 2d04513..afb5686 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -22,6 +22,8 @@
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 
+#include "compat.h"
+
 #include "ui_tree_edit.h"
 
 /*
@@ -74,6 +76,7 @@ static gboolean tree_edit_click_end_cb(GtkWidget *widget, GdkEventButton *event,
 static gboolean tree_edit_click_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
        TreeEditData *ted = data;
+       GdkWindow *window = gtk_widget_get_window(ted->window);
 
        gint x, y;
        gint w, h;
@@ -83,8 +86,9 @@ static gboolean tree_edit_click_cb(GtkWidget *widget, GdkEventButton *event, gpo
        xr = (gint)event->x_root;
        yr = (gint)event->y_root;
 
-       gdk_window_get_origin(ted->window->window, &x, &y);
-       gdk_drawable_get_size(ted->window->window, &w, &h);
+       gdk_window_get_origin(window, &x, &y);
+       w = gdk_window_get_width(window);
+       h = gdk_window_get_height(window);
 
        if (xr < x || yr < y || xr > x + w || yr > y + h)
                {
@@ -102,21 +106,21 @@ static gboolean tree_edit_key_press_cb(GtkWidget *widget, GdkEventKey *event, gp
 
        switch (event->keyval)
                {
-               case GDK_Return:
-               case GDK_KP_Enter:
-               case GDK_Tab:           /* ok, we are going to intercept the focus change
+               case GDK_KEY_Return:
+               case GDK_KEY_KP_Enter:
+               case GDK_KEY_Tab:               /* ok, we are going to intercept the focus change
                                           from keyboard and act like return was hit */
-               case GDK_ISO_Left_Tab:
-               case GDK_Up:
-               case GDK_Down:
-               case GDK_KP_Up:
-               case GDK_KP_Down:
-               case GDK_KP_Left:
-               case GDK_KP_Right:
+               case GDK_KEY_ISO_Left_Tab:
+               case GDK_KEY_Up:
+               case GDK_KEY_Down:
+               case GDK_KEY_KP_Up:
+               case GDK_KEY_KP_Down:
+               case GDK_KEY_KP_Left:
+               case GDK_KEY_KP_Right:
                        tree_edit_do(ted);
                        tree_edit_close(ted);
                        break;
-               case GDK_Escape:
+               case GDK_KEY_Escape:
                        tree_edit_close(ted);
                        break;
                default:
@@ -164,12 +168,12 @@ static gboolean tree_edit_by_path_idle_cb(gpointer data)
        /* explicitely set the focus flag for the entry, for some reason on popup windows this
         * is not set, and causes no edit cursor to appear ( popups not allowed focus? )
         */
-       GTK_WIDGET_SET_FLAGS(ted->entry, GTK_HAS_FOCUS);
+       gtk_widget_grab_focus(ted->entry);
        gtk_grab_add(ted->window);
-       gdk_pointer_grab(ted->window->window, TRUE,
+       gdk_pointer_grab(gtk_widget_get_window(ted->window), TRUE,
                         GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_MOTION_MASK,
                         NULL, NULL, GDK_CURRENT_TIME);
-       gdk_keyboard_grab(ted->window->window, TRUE, GDK_CURRENT_TIME);
+       gdk_keyboard_grab(gtk_widget_get_window(ted->window), TRUE, GDK_CURRENT_TIME);
 
        return FALSE;
 }
@@ -184,20 +188,12 @@ gboolean tree_edit_by_path(GtkTreeView *tree, GtkTreePath *tpath, gint column, c
        GList *work;
 
        if (!edit_func) return FALSE;
-#if GTK_CHECK_VERSION(2,20,0)
-       if (!gtk_widget_get_visible(tree)) return FALSE;
-#else
-       if (!GTK_WIDGET_VISIBLE(tree)) return FALSE;
-#endif
+       if (!gtk_widget_get_visible(GTK_WIDGET(tree))) return FALSE;
 
        tcolumn = gtk_tree_view_get_column(tree, column);
        if (!tcolumn) return FALSE;
 
-#if GTK_CHECK_VERSION(2,18,0)
        list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(tcolumn));
-#else
-       list = gtk_tree_view_column_get_cell_renderers(tcolumn);
-#endif
        work = list;
        while (work && !cell)
                {
@@ -273,16 +269,18 @@ gboolean tree_view_get_cell_origin(GtkTreeView *widget, GtkTreePath *tpath, gint
         * use x_offset instead for X scroll (sigh)
         */
        gtk_tree_view_get_cell_area(widget, tpath, tv_column, &rect);
-#if GTK_CHECK_VERSION(2,12,0)
        gtk_tree_view_convert_tree_to_widget_coords(widget, 0, 0, &x_offset, &y_offset);
-#else
-       gtk_tree_view_tree_to_widget_coords(widget, 0, 0, &x_offset, &y_offset);
-#endif
-       gdk_window_get_origin(GTK_WIDGET(widget)->window, &x_origin, &y_origin);
+       gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(widget)), &x_origin, &y_origin);
 
        if (gtk_tree_view_get_headers_visible(widget))
                {
-               header_size = tv_column->button->allocation.height;
+               GtkAllocation allocation;
+#if GTK_CHECK_VERSION(3,0,0)
+               gtk_widget_get_allocation(gtk_tree_view_column_get_button(tv_column), &allocation);
+#else
+               gtk_widget_get_allocation(tv_column->button, &allocation);
+#endif
+               header_size = allocation.height;
                }
        else
                {
@@ -297,11 +295,7 @@ gboolean tree_view_get_cell_origin(GtkTreeView *widget, GtkTreePath *tpath, gint
                gint cell_x;
                gint cell_width;
 
-#if GTK_CHECK_VERSION(2,18,0)
                renderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(tv_column));
-#else
-               renderers = gtk_tree_view_column_get_cell_renderers(tv_column);
-#endif
                work = renderers;
                while (work && !cell)
                        {
@@ -337,9 +331,12 @@ void tree_view_get_cell_clamped(GtkTreeView *widget, GtkTreePath *tpath, gint co
        gint wx, wy, ww, wh;
        GdkWindow *window;
 
-       window = GTK_WIDGET(widget)->window;
+       window = gtk_widget_get_window(GTK_WIDGET(widget));
        gdk_window_get_origin(window, &wx, &wy);
-       gdk_drawable_get_size(window, &ww, &wh);
+
+       ww = gdk_window_get_width(window);
+       wh = gdk_window_get_height(window);
+
        if (!tree_view_get_cell_origin(widget, tpath, column, text_cell_only, x,  y, width, height))
                {
                *x = wx;
@@ -355,7 +352,6 @@ void tree_view_get_cell_clamped(GtkTreeView *widget, GtkTreePath *tpath, gint co
        *height = MIN(*height, wy + wh - (*y));
 }
 
-#if GTK_CHECK_VERSION(2,8,0)
 /* an implementation that uses gtk_tree_view_get_visible_range */
 gint tree_view_row_get_visibility(GtkTreeView *widget, GtkTreeIter *iter, gboolean fully_visible)
 {
@@ -397,47 +393,6 @@ gint tree_view_row_get_visibility(GtkTreeView *widget, GtkTreeIter *iter, gboole
        return ret;
 }
 
-#else 
-/* an implementation that uses gtk_tree_view_get_visible_rect, it seems to be more error prone than the variant above */
-
-gint tree_view_row_get_visibility(GtkTreeView *widget, GtkTreeIter *iter, gboolean fully_visible)
-{
-       GtkTreeModel *store;
-       GtkTreePath *tpath;
-       gint cx, cy;
-
-       GdkRectangle vrect;
-       GdkRectangle crect;
-
-       if (!GTK_WIDGET_REALIZED(GTK_WIDGET(widget))) return -1; /* we will most probably scroll down, needed for tree_view_row_make_visible */
-
-       store = gtk_tree_view_get_model(widget);
-       tpath = gtk_tree_model_get_path(store, iter);
-
-       gtk_tree_view_get_visible_rect(widget, &vrect);
-       gtk_tree_view_get_cell_area(widget, tpath, NULL, &crect);
-       gtk_tree_path_free(tpath);
-
-
-#if GTK_CHECK_VERSION(2,12,0)
-       gtk_tree_view_convert_widget_to_tree_coords(widget, crect.x, crect.y, &cx, &cy);
-#else
-       gtk_tree_view_widget_to_tree_coords(widget, crect.x, crect.y, &cx, &cy);
-#endif
-
-       if (fully_visible)
-               {
-               if (cy < vrect.y) return -1;
-               if (cy + crect.height > vrect.y + vrect.height) return 1;
-               return 0;
-               }
-
-       if (cy + crect.height < vrect.y) return -1;
-       if (cy > vrect.y + vrect.height) return 1;
-       return 0;
-}
-#endif
-
 gint tree_view_row_make_visible(GtkTreeView *widget, GtkTreeIter *iter, gboolean center)
 {
        GtkTreePath *tpath;
@@ -617,9 +572,10 @@ static gboolean widget_auto_scroll_cb(gpointer data)
                sd->max_step = MIN(sd->region_size, sd->max_step + 2);
                }
 
-       window = sd->widget->window;
+       window = gtk_widget_get_window(sd->widget);
        gdk_window_get_pointer(window, &x, &y, NULL);
-       gdk_drawable_get_size(window, &w, &h);
+       w = gdk_window_get_width(window);
+       h = gdk_window_get_height(window);
 
        if (x < 0 || x >= w || y < 0 || y >= h)
                {
@@ -649,7 +605,7 @@ static gboolean widget_auto_scroll_cb(gpointer data)
                {
                amt = CLAMP(amt, 0 - sd->max_step, sd->max_step);
 
-               if (sd->adj->value != CLAMP(sd->adj->value + amt, sd->adj->lower, sd->adj->upper - sd->adj->page_size))
+               if (gtk_adjustment_get_value(sd->adj) != CLAMP(gtk_adjustment_get_value(sd->adj) + amt, gtk_adjustment_get_lower(sd->adj), gtk_adjustment_get_upper(sd->adj) - gtk_adjustment_get_page_size(sd->adj)))
                        {
                        /* only notify when scrolling is needed */
                        if (sd->notify_func && !sd->notify_func(sd->widget, x, y, sd->notify_data))
@@ -660,7 +616,7 @@ static gboolean widget_auto_scroll_cb(gpointer data)
                                }
 
                        gtk_adjustment_set_value(sd->adj,
-                               CLAMP(sd->adj->value + amt, sd->adj->lower, sd->adj->upper - sd->adj->page_size));
+                               CLAMP(gtk_adjustment_get_value(sd->adj) + amt, gtk_adjustment_get_lower(sd->adj), gtk_adjustment_get_upper(sd->adj) - gtk_adjustment_get_page_size(sd->adj)));
                        }
                }
 
index 7eef0b3..981bebf 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index 0e85b89..108c121 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -62,11 +62,7 @@ static gboolean generic_dialog_default_key_press_cb(GtkWidget *widget, GdkEventK
 {
        GenericDialog *gd = data;
 
-#if GTK_CHECK_VERSION(2,20,0)
-       if (event->keyval == GDK_Return && gtk_widget_has_focus(widget)
-#else
-       if (event->keyval == GDK_Return && GTK_WIDGET_HAS_FOCUS(widget)
-#endif
+       if (event->keyval == GDK_KEY_Return && gtk_widget_has_focus(widget)
            && gd->default_cb)
                {
                gboolean auto_close;
@@ -91,7 +87,7 @@ static gboolean generic_dialog_key_press_cb(GtkWidget *widget, GdkEventKey *even
 {
        GenericDialog *gd = data;
 
-       if (event->keyval == GDK_Escape)
+       if (event->keyval == GDK_KEY_Escape)
                {
                if (gd->cancel_cb) gd->cancel_cb(gd, gd->data);
                if (gd->auto_close) generic_dialog_click_cb(widget, data);
@@ -150,7 +146,7 @@ GtkWidget *generic_dialog_add_button(GenericDialog *gd, const gchar *stock_id, c
        button = pref_button_new(NULL, stock_id, text, FALSE,
                                 G_CALLBACK(generic_dialog_click_cb), gd);
 
-       GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+       gtk_widget_set_can_default(button, TRUE);
        g_object_set_data(G_OBJECT(button), "dialog_function", func_cb);
 
        gtk_container_add(GTK_CONTAINER(gd->hbox), button);
@@ -238,11 +234,7 @@ static void generic_dialog_setup(GenericDialog *gd,
                        GtkWidget *top;
 
                        top = gtk_widget_get_toplevel(parent);
-#if GTK_CHECK_VERSION(2,20,0)
                        if (GTK_IS_WINDOW(top) && gtk_widget_is_toplevel(top)) window = GTK_WINDOW(top);
-#else
-                       if (GTK_IS_WINDOW(top) && GTK_WIDGET_TOPLEVEL(top)) window = GTK_WINDOW(top);
-#endif
                        }
 
                if (window) gtk_window_set_transient_for(GTK_WINDOW(gd->dialog), window);
index 192017e..b0168bd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * (SLIK) SimpLIstic sKin functions
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index d46b481..a60e492 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: John Ellis, Vladimir Nadvornik, Laurent Monin
  *
 #include "filedata.h"
 #include "ui_fileops.h"
 
-/*
- *-----------------------------------------------------------------------------
- * drag and drop uri utils
- *-----------------------------------------------------------------------------
- */
-
-/* the following characters are allowed to be unencoded for pathnames:
- *     $ & + , / : = @
- */
-static gint escape_char_list[] = {
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /*   0 */
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /*  10 */
-       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /*  20 */
-/*          spc !  "  #  $  %  &  '           */
-       1, 1, 0, 0, 1, 1, 0, 1, 0, 0,   /*  30 */
-/*     (  )  *  +  ,  -  .  /  0  1           */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /*  40 */
-/*     2  3  4  5  6  7  8  9  :  ;           */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 1,   /*  50 */
-/*     <  =  >  ?  @  A  B  C  D  E           */
-       1, 0, 1, 1, 0, 0, 0, 0, 0, 0,   /*  60 */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /*  70 */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /*  80 */
-/*     Z  [  \  ]  ^  _  `  a  b  c           */
-       0, 1, 1, 1, 1, 0, 1, 0, 0, 0,   /*  90 */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 100 */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 110 */
-/*     x  y  z  {  |  }  ~ del                */
-       0, 0, 0, 1, 1, 1, 0, 0          /* 120, 127 is end */
-};
-
-static gchar *hex_char = "0123456789ABCDEF";
-
-static gboolean escape_test(guchar c)
-{
-       if (c < 32 || c > 127) return TRUE;
-       return (escape_char_list[c] != 0);
-}
-
-static const gchar *escape_code(guchar c)
+gchar **uris_from_pathlist(GList *list)
 {
-       static gchar text[4];
-
-       text[0] = '%';
-       text[1] = hex_char[c>>4];
-       text[2] = hex_char[c%16];
-       text[3] = '\0';
-
-       return text;
-}
-
-gchar *uri_text_escape(const gchar *text)
-{
-       GString *string;
-       gchar *result;
-       const gchar *p;
-
-       if (!text) return NULL;
-
-       string = g_string_new("");
-
-       p = text;
-       while (*p != '\0')
-               {
-               if (escape_test(*p))
-                       {
-                       g_string_append(string, escape_code(*p));
-                       }
-               else
-                       {
-                       g_string_append_c(string, *p);
-                       }
-               p++;
-               }
-
-       result = string->str;
-       g_string_free(string, FALSE);
+       GList *work;
+       guint i = 0;
+       guint num = g_list_length(list);
+       gchar **uris = g_new0(gchar *, num + 1);
 
-       /* dropped filenames are expected to be utf-8 compatible */
-       if (!g_utf8_validate(result, -1, NULL))
+       work = list;
+       while (work)
                {
-               gchar *tmp;
+               const gchar *path = work->data;
+               gchar *local_path = path_from_utf8(path);
+               uris[i] = g_filename_to_uri(local_path, NULL, NULL);
+               g_free(local_path);
 
-               tmp = g_locale_to_utf8(result, -1, NULL, NULL, NULL);
-               if (tmp)
-                       {
-                       g_free(result);
-                       result = tmp;
-                       }
+               i++;
+               work = work->next;
                }
 
-       return result;
+       uris[i] = NULL;
+       return uris;
 }
 
-/* this operates on the passed string, decoding escaped characters */
-void uri_text_decode(gchar *text)
+gchar **uris_from_filelist(GList *list)
 {
-       if (strchr(text, '%'))
-               {
-               gchar *w;
-               gchar *r;
-
-               w = r = text;
-
-               while (*r != '\0')
-                       {
-                       if (*r == '%' && *(r + 1) != '\0' && *(r + 2) != '\0')
-                               {
-                               gchar t[3];
-                               gint n;
-
-                               r++;
-                               t[0] = *r;
-                               r++;
-                               t[1] = *r;
-                               t[2] = '\0';
-                               n = (gint)strtol(t, NULL, 16);
-                               if (n > 0 && n < 256)
-                                       {
-                                       *w = (gchar)n;
-                                       }
-                               else
-                                       {
-                                       /* invalid number, rewind and ignore this escape */
-                                       r -= 2;
-                                       *w = *r;
-                                       }
-                               }
-                       else if (w != r)
-                               {
-                               *w = *r;
-                               }
-                       r++;
-                       w++;
-                       }
-               if (*w != '\0') *w = '\0';
-               }
+       GList *path_list = filelist_to_path_list(list);
+       gchar **ret = uris_from_pathlist(path_list);
+       string_list_free(path_list);
+       return ret;
 }
 
-static void uri_list_parse_encoded_chars(GList *list)
+gboolean uri_selection_data_set_uris_from_filelist(GtkSelectionData *selection_data, GList *list)
 {
-       GList *work = list;
-
-       while (work)
+       gchar **uris = uris_from_filelist(list);
+       gboolean ret = gtk_selection_data_set_uris(selection_data, uris);
+       if (!ret)
                {
-               gchar *text = work->data;
-
-               uri_text_decode(text);
-
-               work = work->next;
+               char *str = g_strjoinv("\r\n", uris);
+               ret = gtk_selection_data_set_text(selection_data, str, -1);
+               g_free(str);
                }
+
+       g_strfreev(uris);
+       return ret;
 }
 
-GList *uri_list_from_text(gchar *data, gboolean files_only)
+GList *uri_pathlist_from_uris(gchar **uris)
 {
        GList *list = NULL;
-       gint b, e;
+       guint i = 0;
 
-       b = e = 0;
-
-       while (data[b] != '\0')
+       while (uris[i])
                {
-               while (data[e] != '\r' && data[e] != '\n' && data[e] != '\0') e++;
-               if (strncmp(data + b, "file:", 5) == 0)
-                       {
-                       gchar *path;
-                       b += 5;
-                       while (data[b] == '/' && data[b+1] == '/') b++;
-                       path = g_strndup(data + b, e - b);
-                       list = g_list_append(list, path_to_utf8(path));
-                       g_free(path);
-                       }
-               else if (!files_only && strncmp(data + b, "http:", 5) == 0)
-                       {
-                       list = g_list_append(list, g_strndup(data + b, e - b));
-                       }
-               else if (!files_only && strncmp(data + b, "ftp:", 3) == 0)
-                       {
-                       list = g_list_append(list, g_strndup(data + b, e - b));
-                       }
-               while (data[e] == '\r' || data[e] == '\n') e++;
-               b = e;
+               gchar *local_path = g_filename_from_uri(uris[i], NULL, NULL);
+               gchar *path = path_to_utf8(local_path);
+               g_free(local_path);
+               list = g_list_prepend(list, path);
+               i++;
                }
 
-       uri_list_parse_encoded_chars(list);
-
-       return list;
+       return g_list_reverse(list);
 }
 
-GList *uri_filelist_from_text(gchar *data, gboolean files_only)
+
+
+GList *uri_filelist_from_uris(gchar **uris)
 {
-       GList *path_list = uri_list_from_text(data, files_only);
+       GList *path_list = uri_pathlist_from_uris(uris);
        GList *filelist = filelist_from_path_list(path_list);
        string_list_free(path_list);
        return filelist;
 }
 
-gchar *uri_text_from_list(GList *list, gint *len, gboolean plain_text)
+GList *uri_filelist_from_gtk_selection_data(GtkSelectionData *selection_data)
 {
-       gchar *uri_text = NULL;
-       GString *string;
-       GList *work;
-
-       if (!list)
-               {
-               if (len) *len = 0;
-               return NULL;
-               }
-
-       string = g_string_new("");
-
-       work = list;
-       while (work)
-               {
-               const gchar *name8;     /* dnd filenames are in utf-8 */
-
-               name8 = work->data;
-
-               if (!plain_text)
-                       {
-                       gchar *escaped;
-
-                       escaped = uri_text_escape(name8);
-                       g_string_append(string, "file:");
-                       g_string_append(string, escaped);
-                       g_free(escaped);
-
-                       g_string_append(string, "\r\n");
-                       }
-               else
-                       {
-                       g_string_append(string, name8);
-                       if (work->next) g_string_append(string, "\n");
-                       }
-
-               work = work->next;
-               }
+       gchar **uris = gtk_selection_data_get_uris(selection_data);
+       GList *ret = uri_filelist_from_uris(uris);
+       g_strfreev(uris);
+       return ret;
+}
 
-       uri_text = string->str;
-       if (len) *len = string->len;
-       g_string_free(string, FALSE);
 
-       return uri_text;
-}
 
-gchar *uri_text_from_filelist(GList *list, gint *len, gboolean plain_text)
-{
-       GList *path_list = filelist_to_path_list(list);
-       gchar *ret = uri_text_from_list(path_list, len, plain_text);
-       string_list_free(path_list);
-       return ret;
-}
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 73a0234..5c3139a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis, Vladimir Nadvornik, Laurent Monin
  *
 #ifndef URI_UTILS_H
 #define URI_UTILS_H
 
-/* dnd data parsers (uris) */
-
-gchar *uri_text_escape(const gchar *text);
-void uri_text_decode(gchar *text);
-
-GList *uri_list_from_text(gchar *data, gboolean files_only);
-GList *uri_filelist_from_text(gchar *data, gboolean files_only);
-gchar *uri_text_from_list(GList *list, gint *len, gboolean plain_text);
-gchar *uri_text_from_filelist(GList *list, gint *len, gboolean plain_text);
+GList *uri_filelist_from_uris(gchar **uris);
+gchar **uris_from_pathlist(GList *list);
+gchar **uris_from_filelist(GList *list);
+GList *uri_pathlist_from_uris(gchar **uris);
+gboolean uri_selection_data_set_uris_from_filelist(GtkSelectionData *selection_data, GList *list);
+GList *uri_filelist_from_gtk_selection_data(GtkSelectionData *selection_data);
 
 #endif /* URI_UTILS_H */
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index d8a0ccd..709dc9e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -278,22 +278,22 @@ typedef struct _UtilityData UtilityData;
 struct _UtilityData {
        UtilityType type;
        UtilityPhase phase;
-       
+
        FileData *dir_fd;
        GList *content_list;
        GList *flist;
-       
+
        FileData *sel_fd;
 
        GtkWidget *parent;
        GenericDialog *gd;
        FileDialog *fdlg;
-       
+
        guint update_idle_id; /* event source id */
        guint perform_idle_id; /* event source id */
 
        gboolean with_sidecars; /* operate on grouped or single files; TRUE = use file_data_sc_, FALSE = use file_data_ functions */
-       
+
        /* alternative dialog parts */
        GtkWidget *notebook;
 
@@ -316,10 +316,10 @@ struct _UtilityData {
 
        /* data for the operation itself, internal or external */
        gboolean external; /* TRUE for external command, FALSE for internal */
-       
+
        gchar *external_command;
        gpointer resume_data;
-       
+
        FileUtilDoneFunc done_func;
        void (*details_func)(UtilityData *ud, FileData *fd);
        gboolean (*finalize_func)(FileData *fd);
@@ -363,10 +363,10 @@ static UtilityData *file_util_data_new(UtilityType type)
        UtilityData *ud;
 
        ud = g_new0(UtilityData, 1);
-       
+
        ud->type = type;
        ud->phase = UTILITY_PHASE_START;
-       
+
        return ud;
 }
 
@@ -382,7 +382,7 @@ static void file_util_data_free(UtilityData *ud)
        filelist_free(ud->flist);
 
        if (ud->gd) generic_dialog_close(ud->gd);
-       
+
        g_free(ud->dest_path);
        g_free(ud->external_command);
 
@@ -471,7 +471,7 @@ static GtkWidget *file_util_dialog_add_list(GtkWidget *box, GList *list, gboolea
                FileData *fd = list->data;
                GtkTreeIter iter;
                gchar *sidecars;
-               
+
                sidecars = with_sidecars ? file_data_sc_list_to_string(fd) : NULL;
                GdkPixbuf *icon = file_util_get_error_icon(fd, view);
                gtk_list_store_append(store, &iter);
@@ -526,7 +526,7 @@ static gint file_util_perform_ci_cb(gpointer resume_data, EditorFlags flags, GLi
        gint ret = EDITOR_CB_CONTINUE;
 
        ud->resume_data = resume_data;
-       
+
        if (EDITOR_ERRORS_BUT_SKIPPED(flags))
                {
                GString *msg = g_string_new(editor_get_error_str(flags));
@@ -571,32 +571,32 @@ static gint file_util_perform_ci_cb(gpointer resume_data, EditorFlags flags, GLi
 
                if (!EDITOR_ERRORS(flags)) /* files were successfully deleted, call the maint functions */
                        {
-                       if (ud->with_sidecars) 
+                       if (ud->with_sidecars)
                                file_data_sc_apply_ci(fd);
                        else
                                file_data_apply_ci(fd);
                        }
-               
+
                ud->flist = g_list_remove(ud->flist, fd);
-               
+
                if (ud->finalize_func)
                        {
                        ud->finalize_func(fd);
                        }
 
-               if (ud->with_sidecars) 
+               if (ud->with_sidecars)
                        file_data_sc_free_ci(fd);
                else
                        file_data_free_ci(fd);
                file_data_unref(fd);
                }
-               
+
        if (!resume_data) /* end of the list */
                {
                ud->phase = UTILITY_PHASE_DONE;
                file_util_dialog_run(ud);
                }
-       
+
        return ret;
 }
 
@@ -611,44 +611,44 @@ static gboolean file_util_perform_ci_internal(gpointer data)
 {
        UtilityData *ud = data;
 
-       if (!ud->perform_idle_id) 
+       if (!ud->perform_idle_id)
                {
                /* this function was called directly
                   just setup idle callback and wait until we are called again
                */
-               
+
                /* this is removed when ud is destroyed */
                ud->perform_idle_id = g_idle_add(file_util_perform_ci_internal, ud);
                return TRUE;
                }
 
        g_assert(ud->flist);
-       
+
        if (ud->flist)
                {
                gint ret;
-               
+
                /* take a single entry each time, this allows better control over the operation */
                GList *single_entry = g_list_append(NULL, ud->flist->data);
                gboolean last = !ud->flist->next;
                EditorFlags status = EDITOR_ERROR_STATUS;
-       
-               if (ud->with_sidecars ? file_data_sc_perform_ci(single_entry->data) 
+
+               if (ud->with_sidecars ? file_data_sc_perform_ci(single_entry->data)
                                      : file_data_perform_ci(single_entry->data))
                        status = 0; /* OK */
-               
+
                ret = file_util_perform_ci_cb(GINT_TO_POINTER(!last), status, single_entry, ud);
                g_list_free(single_entry);
-               
+
                if (ret == EDITOR_CB_SUSPEND || last) return FALSE;
-               
+
                if (ret == EDITOR_CB_SKIP)
                        {
                        file_util_perform_ci_cb(NULL, EDITOR_ERROR_SKIPPED, ud->flist, ud);
                        return FALSE;
                        }
                }
-       
+
        return TRUE;
 }
 
@@ -686,7 +686,7 @@ static void file_util_perform_ci_dir(UtilityData *ud, gboolean internal, gboolea
 
                                fd = work->data;
                                work = work->next;
-                               
+
                                if (!fail)
                                        {
                                        if ((internal && file_data_sc_perform_ci(fd)) ||
@@ -715,7 +715,7 @@ static void file_util_perform_ci_dir(UtilityData *ud, gboolean internal, gboolea
                                        fail = file_data_ref(ud->dir_fd);
                                        }
                                }
-                       
+
                        if (fail)
                                {
                                gchar *text;
@@ -753,7 +753,7 @@ static void file_util_perform_ci_dir(UtilityData *ud, gboolean internal, gboolea
                                {
                                fail = file_data_ref(ud->dir_fd);
                                }
-                       
+
 
                        work = ud->content_list;
                        while (work)
@@ -762,21 +762,20 @@ static void file_util_perform_ci_dir(UtilityData *ud, gboolean internal, gboolea
 
                                fd = work->data;
                                work = work->next;
-                               
+
                                if (!fail)
                                        {
                                        file_data_sc_apply_ci(fd);
                                        }
                                file_data_sc_free_ci(fd);
                                }
-                       
+
                        if (fail)
                                {
                                gchar *text;
-                               GenericDialog *gd;
 
                                text = g_strdup_printf("%s:\n\n%s", ud->messages.fail, ud->dir_fd->path);
-                               gd = file_util_warning_dialog(ud->messages.fail, text, GTK_STOCK_DIALOG_ERROR, NULL);
+                               (void) file_util_warning_dialog(ud->messages.fail, text, GTK_STOCK_DIALOG_ERROR, NULL);
                                g_free(text);
 
                                file_data_unref(fail);
@@ -793,13 +792,12 @@ static void file_util_perform_ci_dir(UtilityData *ud, gboolean internal, gboolea
                        else
                                {
                                gchar *text;
-                               GenericDialog *gd;
 
                                text = g_strdup_printf("%s:\n\n%s", ud->messages.fail, ud->dir_fd->path);
-                               gd = file_util_warning_dialog(ud->messages.fail, text, GTK_STOCK_DIALOG_ERROR, NULL);
+                               (void) file_util_warning_dialog(ud->messages.fail, text, GTK_STOCK_DIALOG_ERROR, NULL);
                                g_free(text);
                                }
-                       
+
                        break;
                        }
                default:
@@ -849,9 +847,9 @@ void file_util_perform_ci(UtilityData *ud)
        if (is_valid_editor_command(ud->external_command))
                {
                EditorFlags flags;
-               
+
                ud->external = TRUE;
-               
+
                if (ud->dir_fd)
                        {
                        flags = start_editor_from_file_full(ud->external_command, ud->dir_fd, file_util_perform_ci_dir_cb, ud);
@@ -899,7 +897,7 @@ static GdkPixbuf *file_util_get_error_icon(FileData *fd, GtkWidget *widget)
        static GdkPixbuf *pb_error;
        static GdkPixbuf *pb_apply;
        gint error;
-       
+
        if (!pb_warning)
                {
                pb_warning = gtk_widget_render_icon(widget, GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_MENU, NULL);
@@ -914,9 +912,9 @@ static GdkPixbuf *file_util_get_error_icon(FileData *fd, GtkWidget *widget)
                {
                pb_apply = gtk_widget_render_icon(widget, GTK_STOCK_APPLY, GTK_ICON_SIZE_MENU, NULL);
                }
-       
+
        error = file_data_sc_verify_ci(fd);
-       
+
        if (!error) return pb_apply;
 
        if (error & CHANGE_ERROR_MASK)
@@ -947,7 +945,7 @@ void file_util_check_ci(UtilityData *ud)
 {
        gint error = CHANGE_OK;
        gchar *desc = NULL;
-       
+
        if (ud->type != UTILITY_TYPE_CREATE_FOLDER &&
            ud->type != UTILITY_TYPE_RENAME_FOLDER)
                {
@@ -1012,11 +1010,11 @@ void file_util_check_ci(UtilityData *ud)
 static void file_util_cancel_cb(GenericDialog *gd, gpointer data)
 {
        UtilityData *ud = data;
-       
+
        generic_dialog_close(gd);
 
        ud->gd = NULL;
-       
+
        ud->phase = UTILITY_PHASE_CANCEL;
        file_util_dialog_run(ud);
 }
@@ -1024,11 +1022,11 @@ static void file_util_cancel_cb(GenericDialog *gd, gpointer data)
 static void file_util_discard_cb(GenericDialog *gd, gpointer data)
 {
        UtilityData *ud = data;
-       
+
        generic_dialog_close(gd);
 
        ud->gd = NULL;
-       
+
        ud->phase = UTILITY_PHASE_DISCARD;
        file_util_dialog_run(ud);
 }
@@ -1036,9 +1034,9 @@ static void file_util_discard_cb(GenericDialog *gd, gpointer data)
 static void file_util_ok_cb(GenericDialog *gd, gpointer data)
 {
        UtilityData *ud = data;
-       
+
        generic_dialog_close(gd);
-       
+
        ud->gd = NULL;
 
        file_util_dialog_run(ud);
@@ -1047,11 +1045,11 @@ static void file_util_ok_cb(GenericDialog *gd, gpointer data)
 static void file_util_fdlg_cancel_cb(FileDialog *fdlg, gpointer data)
 {
        UtilityData *ud = data;
-       
+
        file_dialog_close(fdlg);
 
        ud->fdlg = NULL;
-       
+
        ud->phase = UTILITY_PHASE_CANCEL;
        file_util_dialog_run(ud);
 }
@@ -1060,7 +1058,7 @@ static void file_util_dest_folder_update_path(UtilityData *ud)
 {
        g_free(ud->dest_path);
        ud->dest_path = g_strdup(gtk_entry_get_text(GTK_ENTRY(ud->fdlg->entry)));
-       
+
        switch (ud->type)
                {
                case UTILITY_TYPE_COPY:
@@ -1089,11 +1087,11 @@ static void file_util_dest_folder_update_path(UtilityData *ud)
 static void file_util_fdlg_ok_cb(FileDialog *fdlg, gpointer data)
 {
        UtilityData *ud = data;
-       
+
        file_util_dest_folder_update_path(ud);
        if (isdir(ud->dest_path)) file_dialog_sync_history(fdlg, TRUE);
        file_dialog_close(fdlg);
-       
+
        ud->fdlg = NULL;
 
        file_util_dialog_run(ud);
@@ -1189,7 +1187,7 @@ static void file_util_rename_preview_update(UtilityData *ud)
                        {
                        FileData *fd;
                        const gchar *dest = gtk_entry_get_text(GTK_ENTRY(ud->rename_entry));
-                       
+
                        gtk_tree_model_get(store, &iter, UTILITY_COLUMN_FD, &fd, -1);
                        g_assert(ud->with_sidecars); /* sidecars must be renamed too, it would break the pairing otherwise */
                        file_data_sc_update_ci_rename(fd, dest);
@@ -1297,9 +1295,9 @@ static gboolean file_util_preview_cb(GtkTreeSelection *selection, GtkTreeModel *
 
        gtk_tree_model_get(store, &iter, UTILITY_COLUMN_FD, &fd, -1);
        generic_dialog_image_set(ud->gd, fd);
-       
+
        ud->sel_fd = fd;
-       
+
        if (ud->type == UTILITY_TYPE_RENAME)
                {
                const gchar *name = filename_from_path(fd->change->dest);
@@ -1374,13 +1372,13 @@ static void file_util_dialog_init_simple_list(UtilityData *ud)
                {
                dir_msg = g_strdup("");
                }
-               
+
        box = generic_dialog_add_message(ud->gd, GTK_STOCK_DIALOG_QUESTION,
                                         ud->messages.question,
                                         dir_msg);
 
        g_free(dir_msg);
-       
+
        box = pref_group_new(box, TRUE, ud->messages.desc_flist, GTK_ORIENTATION_HORIZONTAL);
 
        ud->listview = file_util_dialog_add_list(box, ud->flist, FALSE, ud->with_sidecars);
@@ -1421,9 +1419,9 @@ static void file_util_dialog_init_dest_folder(UtilityData *ud)
 
        fdlg = file_util_file_dlg(ud->messages.title, "dlg_dest_folder", ud->parent,
                                  file_util_fdlg_cancel_cb, ud);
-       
+
        ud->fdlg = fdlg;
-       
+
        generic_dialog_add_message(GENERIC_DIALOG(fdlg), NULL, ud->messages.question, NULL);
 
        label = pref_label_new(GENERIC_DIALOG(fdlg)->vbox, _("Choose the destination folder."));
@@ -1495,7 +1493,7 @@ static void file_util_dialog_init_source_dest(UtilityData *ud)
 //     gtk_tree_view_column_set_visible(column, FALSE);
 
        gtk_tree_view_set_reorderable(GTK_TREE_VIEW(ud->listview), TRUE);
-       
+
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(ud->listview));
        g_signal_connect(G_OBJECT(store), "row_changed",
                         G_CALLBACK(file_util_rename_preview_order_cb), ud);
@@ -1508,15 +1506,15 @@ static void file_util_dialog_init_source_dest(UtilityData *ud)
 
 
        ud->notebook = gtk_notebook_new();
-       
+
        gtk_box_pack_start(GTK_BOX(ud->gd->vbox), ud->notebook, FALSE, FALSE, 0);
        gtk_widget_show(ud->notebook);
-       
+
 
        page = gtk_vbox_new(FALSE, PREF_PAD_GAP);
        gtk_notebook_append_page(GTK_NOTEBOOK(ud->notebook), page, gtk_label_new(_("Manual rename")));
        gtk_widget_show(page);
-       
+
        table = pref_table_new(page, 2, 2, FALSE, FALSE);
 
        pref_table_label(table, 0, 0, _("Original name:"), 1.0);
@@ -1595,11 +1593,11 @@ static void file_util_dialog_init_source_dest(UtilityData *ud)
 static void file_util_finalize_all(UtilityData *ud)
 {
        GList *work = ud->flist;
-       
+
        if (ud->phase == UTILITY_PHASE_CANCEL) return;
        if (ud->phase == UTILITY_PHASE_DONE && !ud->finalize_func) return;
        if (ud->phase == UTILITY_PHASE_DISCARD && !ud->discard_func) return;
-       
+
        while (work)
                {
                FileData *fd = work->data;
@@ -1638,7 +1636,7 @@ static gboolean file_util_exclude_fd(UtilityData *ud, FileData *fd)
                file_data_sc_free_ci(fd);
        else
                file_data_free_ci(fd);
-       
+
        file_data_unref(fd);
        return TRUE;
 }
@@ -1677,7 +1675,7 @@ void file_util_dialog_run(UtilityData *ud)
                case UTILITY_PHASE_ENTERING:
                        file_util_check_ci(ud);
                        break;
-               
+
                        ud->phase = UTILITY_PHASE_CHECKED;
                case UTILITY_PHASE_CHECKED:
                        file_util_perform_ci(ud);
@@ -1687,19 +1685,19 @@ void file_util_dialog_run(UtilityData *ud)
                case UTILITY_PHASE_DISCARD:
 
                        file_util_finalize_all(ud);
-                       
+
                        /* both DISCARD and DONE finishes the operation for good */
                        if (ud->done_func)
                                ud->done_func((ud->phase != UTILITY_PHASE_CANCEL), ud->dest_path, ud->done_data);
-                               
+
                        if (ud->with_sidecars)
                                file_data_sc_free_ci_list(ud->flist);
                        else
                                file_data_free_ci_list(ud->flist);
-                       
+
                        /* directory content is always handled including sidecars */
                        file_data_sc_free_ci_list(ud->content_list);
-                       
+
                        if (ud->dir_fd) file_data_free_ci(ud->dir_fd);
                        file_util_data_free(ud);
                        break;
@@ -1736,14 +1734,14 @@ static void file_util_details_dialog_exclude(GenericDialog *gd, gpointer data, g
 {
        UtilityData *ud = data;
        FileData *fd = g_object_get_data(G_OBJECT(gd->dialog), "file_data");
-       
+
        if (!fd) return;
        file_util_exclude_fd(ud, fd);
-       
+
        if (discard && ud->discard_func) ud->discard_func(fd);
-       
+
        /* all files were excluded, this has the same effect as pressing the cancel button in the confirmation dialog*/
-       if (!ud->flist) 
+       if (!ud->flist)
                {
                /* both dialogs will be closed anyway, the signals would cause duplicate calls */
                g_signal_handlers_disconnect_by_func(ud->gd->dialog, G_CALLBACK(file_util_details_dialog_close_cb), gd->dialog);
@@ -1768,12 +1766,12 @@ static gchar *file_util_details_get_message(UtilityData *ud, FileData *fd, const
        GString *message = g_string_new("");
        gint error;
        g_string_append_printf(message, _("File: '%s'\n"), fd->path);
-       
+
        if (ud->with_sidecars && fd->sidecar_files)
                {
                GList *work = fd->sidecar_files;
                g_string_append(message, _("with sidecar files:\n"));
-               
+
                while (work)
                        {
                        FileData *sfd = work->data;
@@ -1781,9 +1779,9 @@ static gchar *file_util_details_get_message(UtilityData *ud, FileData *fd, const
                        g_string_append_printf(message, _(" '%s'\n"), sfd->path);
                        }
                }
-       
+
        g_string_append(message, _("\nStatus: "));
-       
+
        error = ud->with_sidecars ? file_data_sc_verify_ci(fd) : file_data_verify_ci(fd);
 
        if (error)
@@ -1807,7 +1805,7 @@ static void file_util_details_dialog(UtilityData *ud, FileData *fd)
        GtkWidget *box;
        gchar *message;
        const gchar *stock_id;
-       
+
        gd = file_util_gen_dlg(_("File details"), "details", ud->gd->dialog, TRUE, NULL, ud);
        generic_dialog_add_button(gd, GTK_STOCK_CLOSE, NULL, file_util_details_dialog_ok_cb, TRUE);
        generic_dialog_add_button(gd, GTK_STOCK_REMOVE, _("Exclude file"), file_util_details_dialog_exclude_cb, FALSE);
@@ -1829,7 +1827,7 @@ static void file_util_details_dialog(UtilityData *ud, FileData *fd)
        generic_dialog_add_image(gd, box, fd, NULL, NULL, NULL, FALSE);
 
        gtk_widget_show(gd->dialog);
-       
+
        g_free(message);
 }
 
@@ -1846,15 +1844,15 @@ static void file_util_write_metadata_details_dialog(UtilityData *ud, FileData *f
        gchar *message2;
        gint i;
        const gchar *stock_id;
-       
+
        if (fd && fd->modified_xmp)
                {
-               keys = hash_table_get_keys(fd->modified_xmp);
+               keys = g_hash_table_get_keys(fd->modified_xmp);
                }
-       
+
        g_assert(keys);
-       
-       
+
+
        gd = file_util_gen_dlg(_("Overview of changed metadata"), "details", ud->gd->dialog, TRUE, NULL, ud);
        generic_dialog_add_button(gd, GTK_STOCK_CLOSE, NULL, file_util_details_dialog_ok_cb, TRUE);
        generic_dialog_add_button(gd, GTK_STOCK_REMOVE, _("Exclude file"), file_util_details_dialog_exclude_cb, FALSE);
@@ -1896,8 +1894,8 @@ static void file_util_write_metadata_details_dialog(UtilityData *ud, FileData *f
                gchar *title_f = g_strdup_printf("%s:", title);
                gchar *value = metadata_read_string(fd, key, METADATA_FORMATTED);
                work = work->next;
-               
-               
+
+
                label = gtk_label_new(title_f);
                gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.0);
                pref_label_bold(label, TRUE, FALSE);
@@ -1908,7 +1906,7 @@ static void file_util_write_metadata_details_dialog(UtilityData *ud, FileData *f
                gtk_widget_show(label);
 
                label = gtk_label_new(value);
-               
+
                gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
                gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
                gtk_table_attach(GTK_TABLE(table), label,
@@ -1927,7 +1925,7 @@ static void file_util_write_metadata_details_dialog(UtilityData *ud, FileData *f
 
        gtk_widget_set_size_request(gd->dialog, DIALOG_WIDTH, -1);
        gtk_widget_show(gd->dialog);
-       
+
        g_list_free(keys);
        g_free(message1);
        g_free(message2);
@@ -1949,14 +1947,14 @@ static void file_util_delete_full(FileData *source_fd, GList *flist, GtkWidget *
 {
        UtilityData *ud;
        GList *ungrouped = NULL;
-       
+
        if (source_fd)
                flist = g_list_append(flist, file_data_ref(source_fd));
 
        if (!flist) return;
-       
+
        flist = file_data_process_groups_in_selection(flist, TRUE, &ungrouped);
-       
+
        if (!file_data_sc_add_ci_delete_list(flist))
                {
                file_util_warn_op_in_progress(_("File deletion failed"));
@@ -1965,21 +1963,21 @@ static void file_util_delete_full(FileData *source_fd, GList *flist, GtkWidget *
                filelist_free(ungrouped);
                return;
                }
-       
+
        file_util_mark_ungrouped_files(ungrouped);
        filelist_free(ungrouped);
 
        ud = file_util_data_new(UTILITY_TYPE_DELETE);
-       
+
        ud->phase = phase;
-       
+
        ud->with_sidecars = TRUE;
 
        ud->dir_fd = NULL;
        ud->flist = flist;
        ud->content_list = NULL;
        ud->parent = parent;
-       
+
        ud->details_func = file_util_details_dialog;
 
        ud->messages.title = _("Delete");
@@ -1995,12 +1993,12 @@ static void file_util_delete_full(FileData *source_fd, GList *flist, GtkWidget *
 static void file_util_write_metadata_full(FileData *source_fd, GList *flist, GtkWidget *parent, UtilityPhase phase, FileUtilDoneFunc done_func, gpointer done_data)
 {
        UtilityData *ud;
-       
+
        if (source_fd)
                flist = g_list_append(flist, file_data_ref(source_fd));
 
        if (!flist) return;
-       
+
        if (!file_data_add_ci_write_metadata_list(flist))
                {
                file_util_warn_op_in_progress(_("Can't write metadata"));
@@ -2009,7 +2007,7 @@ static void file_util_write_metadata_full(FileData *source_fd, GList *flist, Gtk
                }
 
        ud = file_util_data_new(UTILITY_TYPE_WRITE_METADATA);
-       
+
        ud->phase = phase;
 
        ud->with_sidecars = FALSE; /* operate on individual files, not groups */
@@ -2018,19 +2016,19 @@ static void file_util_write_metadata_full(FileData *source_fd, GList *flist, Gtk
        ud->flist = flist;
        ud->content_list = NULL;
        ud->parent = parent;
-       
+
        ud->done_func = done_func;
        ud->done_data = done_data;
-       
+
        ud->details_func = file_util_write_metadata_details_dialog;
        ud->finalize_func = metadata_write_queue_remove;
        ud->discard_func = metadata_write_queue_remove;
-       
+
        ud->messages.title = _("Write metadata");
        ud->messages.question = _("Write metadata?");
        ud->messages.desc_flist = _("This will write the changed metadata into the following files");
        ud->messages.desc_source_fd = "";
-       ud->messages.fail = _("Metadata writting failed");
+       ud->messages.fail = _("Metadata writing failed");
 
        file_util_dialog_run(ud);
 }
@@ -2039,7 +2037,7 @@ static void file_util_move_full(FileData *source_fd, GList *flist, const gchar *
 {
        UtilityData *ud;
        GList *ungrouped = NULL;
-       
+
        if (source_fd)
                flist = g_list_append(flist, file_data_ref(source_fd));
 
@@ -2055,7 +2053,7 @@ static void file_util_move_full(FileData *source_fd, GList *flist, const gchar *
                filelist_free(ungrouped);
                return;
                }
-       
+
        file_util_mark_ungrouped_files(ungrouped);
        filelist_free(ungrouped);
 
@@ -2071,7 +2069,7 @@ static void file_util_move_full(FileData *source_fd, GList *flist, const gchar *
        ud->parent = parent;
 
        if (dest_path) ud->dest_path = g_strdup(dest_path);
-       
+
        ud->messages.title = _("Move");
        ud->messages.question = _("Move files?");
        ud->messages.desc_flist = _("This will move the following files");
@@ -2085,7 +2083,7 @@ static void file_util_copy_full(FileData *source_fd, GList *flist, const gchar *
 {
        UtilityData *ud;
        GList *ungrouped = NULL;
-       
+
        if (source_fd)
                flist = g_list_append(flist, file_data_ref(source_fd));
 
@@ -2120,7 +2118,7 @@ static void file_util_copy_full(FileData *source_fd, GList *flist, const gchar *
        ud->parent = parent;
 
        if (dest_path) ud->dest_path = g_strdup(dest_path);
-       
+
        ud->messages.title = _("Copy");
        ud->messages.question = _("Copy files?");
        ud->messages.desc_flist = _("This will copy the following files");
@@ -2134,7 +2132,7 @@ static void file_util_rename_full(FileData *source_fd, GList *flist, const gchar
 {
        UtilityData *ud;
        GList *ungrouped = NULL;
-       
+
        if (source_fd)
                flist = g_list_append(flist, file_data_ref(source_fd));
 
@@ -2166,7 +2164,7 @@ static void file_util_rename_full(FileData *source_fd, GList *flist, const gchar
        ud->parent = parent;
 
        ud->details_func = file_util_details_dialog;
-       
+
        ud->messages.title = _("Rename");
        ud->messages.question = _("Rename files?");
        ud->messages.desc_flist = _("This will rename the following files");
@@ -2180,7 +2178,7 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
 {
        UtilityData *ud;
        GList *ungrouped = NULL;
-       
+
        if (editor_no_param(key))
                {
                gchar *file_directory = NULL;
@@ -2194,15 +2192,15 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
                                file_directory = remove_level_from_path(((FileData *)flist->data)->path);
                        working_directory = file_directory;
                        }
-               
+
                /* just start the editor, don't care about files */
                start_editor(key, working_directory);
                g_free(file_directory);
                filelist_free(flist);
                return;
                }
-       
-       
+
+
        if (source_fd)
                {
                /* flist is most probably NULL
@@ -2213,7 +2211,7 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
                }
 
        if (!flist) return;
-       
+
        if (file_util_write_metadata_first(UTILITY_TYPE_FILTER, phase, flist, dest_path, key, parent))
                return;
 
@@ -2235,15 +2233,15 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
                ud = file_util_data_new(UTILITY_TYPE_FILTER);
        else
                ud = file_util_data_new(UTILITY_TYPE_EDITOR);
-               
-               
+
+
        /* ask for destination if we don't have it */
        if (ud->type == UTILITY_TYPE_FILTER && dest_path == NULL) phase = UTILITY_PHASE_START;
-       
+
        ud->phase = phase;
 
        ud->with_sidecars = TRUE;
-       
+
        ud->external_command = g_strdup(key);
 
        ud->dir_fd = NULL;
@@ -2254,7 +2252,7 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
        ud->details_func = file_util_details_dialog;
 
        if (dest_path) ud->dest_path = g_strdup(dest_path);
-       
+
        ud->messages.title = _("Editor");
        ud->messages.question = _("Run editor?");
        ud->messages.desc_flist = _("This will copy the following files");
@@ -2292,7 +2290,7 @@ static gboolean file_util_delete_dir_empty_path(UtilityData *ud, FileData *fd, g
        GList *dlist;
        GList *flist;
        GList *work;
-       
+
        gboolean ok = TRUE;
 
        DEBUG_1("deltree into: %s", fd->path);
@@ -2390,7 +2388,7 @@ static gboolean file_util_delete_dir_prepare(UtilityData *ud, GList *flist, GLis
                {
                ok = file_data_sc_add_ci_delete(ud->dir_fd);
                }
-       
+
        if (!ok)
                {
                work = ud->content_list;
@@ -2403,7 +2401,7 @@ static gboolean file_util_delete_dir_prepare(UtilityData *ud, GList *flist, GLis
                        file_data_sc_free_ci(fd);
                        }
                }
-       
+
        return ok;
 }
 
@@ -2427,7 +2425,7 @@ static void file_util_delete_dir_full(FileData *fd, GtkWidget *parent, UtilityPh
                ud->flist = NULL;
 
                ud->parent = parent;
-       
+
                ud->messages.title = _("Delete folder");
                ud->messages.question = _("Delete symbolic link?");
                ud->messages.desc_flist = "";
@@ -2500,14 +2498,14 @@ static void file_util_delete_dir_full(FileData *fd, GtkWidget *parent, UtilityPh
                ud->flist = flist = filelist_sort_path(flist);
 
                ud->parent = parent;
-       
+
                ud->messages.title = _("Delete folder");
                ud->messages.question = _("Delete folder?");
                ud->messages.desc_flist = _("The folder contains these files:");
                ud->messages.desc_source_fd = _("This will delete the folder.\n"
                                                "The contents of this folder will also be deleted.");
                ud->messages.fail = _("File deletion failed");
-               
+
                if (!file_util_delete_dir_prepare(ud, flist, dlist))
                        {
                        gchar *text;
@@ -2536,7 +2534,7 @@ static gboolean file_util_rename_dir_scan(UtilityData *ud, FileData *fd)
        GList *dlist;
        GList *flist;
        GList *work;
-       
+
        gboolean ok = TRUE;
 
        if (!filelist_read_lstat(fd, &flist, &dlist))
@@ -2569,11 +2567,11 @@ static gboolean file_util_rename_dir_prepare(UtilityData *ud, const gchar *new_p
        gboolean ok;
        GList *work;
        gint orig_len = strlen(ud->dir_fd->path);
-       
+
        ok = file_util_rename_dir_scan(ud, ud->dir_fd);
-       
+
        work = ud->content_list;
-       
+
        while (ok && work)
                {
                gchar *np;
@@ -2581,22 +2579,22 @@ static gboolean file_util_rename_dir_prepare(UtilityData *ud, const gchar *new_p
 
                fd = work->data;
                work = work->next;
-               
+
                g_assert(strncmp(fd->path, ud->dir_fd->path, orig_len) == 0);
-               
+
                np = g_strconcat(new_path, fd->path + orig_len, NULL);
-               
+
                ok = file_data_sc_add_ci_rename(fd, np);
-               
+
                DEBUG_1("Dir rename: %s -> %s", fd->path, np);
                g_free(np);
                }
-       
+
        if (ok)
                {
                ok = file_data_sc_add_ci_rename(ud->dir_fd, new_path);
                }
-       
+
        if (!ok)
                {
                work = ud->content_list;
@@ -2612,7 +2610,7 @@ static gboolean file_util_rename_dir_prepare(UtilityData *ud, const gchar *new_p
 
        return ok;
 }
-       
+
 
 static void file_util_rename_dir_full(FileData *fd, const gchar *new_path, GtkWidget *parent, UtilityPhase phase, FileUtilDoneFunc done_func, gpointer done_data)
 {
@@ -2621,7 +2619,7 @@ static void file_util_rename_dir_full(FileData *fd, const gchar *new_path, GtkWi
        ud = file_util_data_new(UTILITY_TYPE_RENAME_FOLDER);
 
        ud->phase = phase;
-       ud->with_sidecars = TRUE; /* does not matter, the directory should not have sidecars 
+       ud->with_sidecars = TRUE; /* does not matter, the directory should not have sidecars
                                    and the content must be handled including sidecars */
 
        ud->dir_fd = file_data_ref(fd);
@@ -2632,7 +2630,7 @@ static void file_util_rename_dir_full(FileData *fd, const gchar *new_path, GtkWi
        ud->done_func = done_func;
        ud->done_data = done_data;
        ud->dest_path = g_strdup(new_path);
-       
+
        ud->messages.title = _("Rename");
        ud->messages.question = _("Rename folder?");
        ud->messages.desc_flist = _("The folder contains the following files");
@@ -2653,7 +2651,7 @@ static void file_util_rename_dir_full(FileData *fd, const gchar *new_path, GtkWi
 
 static void file_util_create_dir_full(FileData *fd, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase, FileUtilDoneFunc done_func, gpointer done_data)
 {
-       UtilityData *ud; 
+       UtilityData *ud;
 
        ud = file_util_data_new(UTILITY_TYPE_CREATE_FOLDER);
 
@@ -2675,12 +2673,12 @@ static void file_util_create_dir_full(FileData *fd, const gchar *dest_path, GtkW
                ud->dest_path = unique_filename(buf, NULL, " ", FALSE);
                g_free(buf);
                }
-       
+
        ud->dir_fd = file_data_new_dir(ud->dest_path);
 
        ud->done_func = done_func;
        ud->done_data = done_data;
-       
+
        ud->messages.title = _("Create Folder");
        ud->messages.question = _("Create folder?");
        ud->messages.desc_flist = "";
@@ -2694,7 +2692,7 @@ static void file_util_create_dir_full(FileData *fd, const gchar *dest_path, GtkW
 static gboolean file_util_write_metadata_first_after_done(gpointer data)
 {
        UtilityDelayData *dd = data;
-       
+
        /* start the delayed operation with original arguments */
        switch (dd->type)
                {
@@ -2723,7 +2721,7 @@ static void file_util_write_metadata_first_done(gboolean success, const gchar *d
                dd->idle_id = g_idle_add(file_util_write_metadata_first_after_done, dd);
                return;
                }
-       
+
        /* the operation was cancelled */
        filelist_free(dd->flist);
        g_free(dd->dest_path);
@@ -2735,40 +2733,40 @@ static gboolean file_util_write_metadata_first(UtilityType type, UtilityPhase ph
 {
        GList *unsaved = NULL;
        UtilityDelayData *dd;
-       
+
        GList *work;
-       
+
        work = flist;
        while (work)
                {
                FileData *fd = work->data;
                work = work->next;
-               
-               if (fd->change) 
+
+               if (fd->change)
                        {
                        filelist_free(unsaved);
                        return FALSE; /* another op. in progress, let the caller handle it */
                        }
-               
+
                if (fd->modified_xmp) /* has unsaved metadata */
                        {
                        unsaved = g_list_prepend(unsaved, file_data_ref(fd));
                        }
                }
-       
+
        if (!unsaved) return FALSE;
-       
+
        /* save arguments of the original operation */
-       
+
        dd = g_new0(UtilityDelayData, 1);
-       
+
        dd->type = type;
        dd->phase = phase;
        dd->flist = flist;
        dd->dest_path = g_strdup(dest_path);
        dd->editor_key = g_strdup(editor_key);
        dd->parent = parent;
-       
+
        file_util_write_metadata(NULL, unsaved, parent, FALSE, file_util_write_metadata_first_done, dd);
        return TRUE;
 }
@@ -2784,7 +2782,7 @@ void file_util_delete(FileData *source_fd, GList *source_list, GtkWidget *parent
 
 void file_util_write_metadata(FileData *source_fd, GList *source_list, GtkWidget *parent, gboolean force_dialog, FileUtilDoneFunc done_func, gpointer done_data)
 {
-       file_util_write_metadata_full(source_fd, source_list, parent, 
+       file_util_write_metadata_full(source_fd, source_list, parent,
                                      ((options->metadata.save_in_image_file && options->metadata.confirm_write) || force_dialog) ? UTILITY_PHASE_START : UTILITY_PHASE_ENTERING,
                                      done_func, done_data);
 }
@@ -2876,7 +2874,7 @@ void file_util_copy_path_list_to_clipboard(GList *list)
        GString *new;
 
        clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
-       
+
        new = g_string_new("");
        work = list;
        while (work) {
@@ -2884,11 +2882,11 @@ void file_util_copy_path_list_to_clipboard(GList *list)
                work = work->next;
 
                if (!fd || !*fd->path) continue;
-       
+
                g_string_append(new, g_shell_quote(fd->path));
                if (work) g_string_append_c(new, ' ');
                }
-       
+
        gtk_clipboard_set_text(clipboard, new->str, new->len);
        g_string_free(new, TRUE);
        filelist_free(list);
index ea347bb..d1b07fe 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index a9f473f..77446ce 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Laurent Monin
  *
@@ -31,7 +31,7 @@
 static PixmapFolders *folder_icons_new(GtkWidget *widget)
 {
        PixmapFolders *pf = g_new0(PixmapFolders, 1);
-       
+
 #if 1
        GtkIconSize size = GTK_ICON_SIZE_MENU;
 
@@ -268,7 +268,7 @@ static gboolean vd_rename_cb(TreeEditData *td, const gchar *old, const gchar *ne
        g_free(base);
 
        file_util_rename_dir(fd, new_path, vd->view, vd_rename_finished_cb, vd);
-       
+
        g_free(new_path);
 
        return FALSE;
@@ -366,9 +366,9 @@ static void vd_drop_menu_filter_cb(GtkWidget *widget, gpointer data)
        const gchar *path;
        GList *list;
        const gchar *key;
-       
+
        if (!vd->drop_fd) return;
-       
+
        key = g_object_get_data(G_OBJECT(widget), "filter_key");
 
        path = vd->drop_fd->path;
@@ -404,13 +404,13 @@ GtkWidget *vd_drop_menu(ViewDir *vd, gint active)
                const EditorDescription *editor = work->data;
                gchar *key;
                work = work->next;
-               
+
                if (!editor_is_filter(editor->key)) continue;
                key = g_strdup(editor->key);
                item = menu_item_add_sensitive(menu, editor->name, active, G_CALLBACK(vd_drop_menu_filter_cb), vd);
                g_object_set_data_full(G_OBJECT(item), "filter_key", key, vd_drop_menu_edit_item_free);
                }
-       
+
        g_list_free(editors_list);
 
        menu_item_add_divider(menu);
@@ -604,7 +604,6 @@ static void vd_pop_menu_rename_cb(GtkWidget *widget, gpointer data)
 GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)
 {
        GtkWidget *menu;
-       GtkWidget *item;
        gboolean active;
        gboolean rename_delete_active = FALSE;
        gboolean new_folder_active = FALSE;
@@ -674,11 +673,11 @@ GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)
        menu_item_add_divider(menu);
 
 
-       item = menu_item_add_radio(menu, _("View as _List"), GINT_TO_POINTER(DIRVIEW_LIST), vd->type == DIRVIEW_LIST,
-                                           G_CALLBACK(vd_pop_submenu_dir_view_as_cb), vd);
+       menu_item_add_radio(menu, _("View as _List"), GINT_TO_POINTER(DIRVIEW_LIST), vd->type == DIRVIEW_LIST,
+                        G_CALLBACK(vd_pop_submenu_dir_view_as_cb), vd);
 
-       item = menu_item_add_radio(menu, _("View as _Tree"), GINT_TO_POINTER(DIRVIEW_TREE), vd->type == DIRVIEW_TREE,
-                                           G_CALLBACK(vd_pop_submenu_dir_view_as_cb), vd);
+       menu_item_add_radio(menu, _("View as _Tree"), GINT_TO_POINTER(DIRVIEW_TREE), vd->type == DIRVIEW_TREE,
+                        G_CALLBACK(vd_pop_submenu_dir_view_as_cb), vd);
 
        menu_item_add_divider(menu);
 
@@ -728,8 +727,6 @@ static void vd_dnd_get(GtkWidget *widget, GdkDragContext *context,
 {
        ViewDir *vd = data;
        GList *list;
-       gchar *uritext = NULL;
-       gint length = 0;
 
        if (!vd->click_fd) return;
 
@@ -738,16 +735,10 @@ static void vd_dnd_get(GtkWidget *widget, GdkDragContext *context,
                case TARGET_URI_LIST:
                case TARGET_TEXT_PLAIN:
                        list = g_list_prepend(NULL, vd->click_fd);
-                       uritext = uri_text_from_filelist(list, &length, (info == TARGET_TEXT_PLAIN));
+                       uri_selection_data_set_uris_from_filelist(selection_data, list);
                        g_list_free(list);
                        break;
                }
-       if (uritext)
-               {
-               gtk_selection_data_set(selection_data, selection_data->target,
-                                      8, (guchar *)uritext, length);
-               g_free(uritext);
-               }
 }
 
 static void vd_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
@@ -764,7 +755,7 @@ static void vd_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data
 
        vd_color_set(vd, vd->click_fd, FALSE);
 
-       if (vd->type == DIRVIEW_LIST && context->action == GDK_ACTION_MOVE)
+       if (vd->type == DIRVIEW_LIST && gdk_drag_context_get_selected_action(context) == GDK_ACTION_MOVE)
                {
                vd_refresh(vd);
                }
@@ -797,7 +788,7 @@ static void vd_dnd_drop_receive(GtkWidget *widget,
                gint active;
                gboolean done = FALSE;
 
-               list = uri_filelist_from_text((gchar *)selection_data->data, TRUE);
+               list = uri_filelist_from_gtk_selection_data(selection_data);
                if (!list) return;
 
                active = access_file(fd->path, W_OK | X_OK);
@@ -806,13 +797,13 @@ static void vd_dnd_drop_receive(GtkWidget *widget,
 
                if (active)
                        {
-                       if (context->actions == GDK_ACTION_COPY)
+                       if (gdk_drag_context_get_actions(context) == GDK_ACTION_COPY)
                                {
                                file_util_copy_simple(list, fd->path, vd->widget);
                                done = TRUE;
                                list = NULL;
                                }
-                       else if (context->actions == GDK_ACTION_MOVE)
+                       else if (gdk_drag_context_get_actions(context) == GDK_ACTION_MOVE)
                                {
                                file_util_move_simple(list, fd->path, vd->widget);
                                done = TRUE;
@@ -872,9 +863,10 @@ static gboolean vd_auto_scroll_idle_cb(gpointer data)
                gint x, y;
                gint w, h;
 
-               window = vd->view->window;
+               window = gtk_widget_get_window(vd->view);
                gdk_window_get_pointer(window, &x, &y, NULL);
-               gdk_drawable_get_size(window, &w, &h);
+               w = gdk_window_get_width(window);
+               h = gdk_window_get_height(window);
                if (x >= 0 && x < w && y >= 0 && y < h)
                        {
                        vd_dnd_drop_update(vd, x, y);
@@ -911,7 +903,7 @@ static gboolean vd_dnd_drop_motion(GtkWidget *widget, GdkDragContext *context,
                }
        else
                {
-               gdk_drag_status(context, context->suggested_action, time);
+               gdk_drag_status(context, gdk_drag_context_get_suggested_action(context), time);
                }
 
        vd_dnd_drop_update(vd, x, y);
@@ -1110,7 +1102,7 @@ static void vd_notify_cb(FileData *fd, NotifyType type, gpointer data)
                                g_free(source_base);
                                }
                        }
-               
+
                if (refresh) vd_refresh(vd);
                }
 
index 2b1ffe2..3e9cd4a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Laurent Monin
  *
index 8c8ba09..fa65a74 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -96,11 +96,7 @@ static void vdlist_scroll_to_row(ViewDir *vd, FileData *fd, gfloat y_align)
 {
        GtkTreeIter iter;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_get_realized(vd->view) && vd_find_row(vd, fd, &iter))
-#else
-       if (GTK_WIDGET_REALIZED(vd->view) && vd_find_row(vd, fd, &iter))
-#endif
                {
                GtkTreeModel *store;
                GtkTreePath *tpath;
@@ -111,11 +107,7 @@ static void vdlist_scroll_to_row(ViewDir *vd, FileData *fd, gfloat y_align)
                gtk_tree_view_set_cursor(GTK_TREE_VIEW(vd->view), tpath, NULL, FALSE);
                gtk_tree_path_free(tpath);
 
-#if GTK_CHECK_VERSION(2,20,0)
                if (!gtk_widget_has_focus(vd->view)) gtk_widget_grab_focus(vd->view);
-#else
-               if (!GTK_WIDGET_HAS_FOCUS(vd->view)) gtk_widget_grab_focus(vd->view);
-#endif
                }
 }
 
@@ -184,7 +176,7 @@ static gboolean vdlist_populate(ViewDir *vd, gboolean clear)
                GdkPixbuf *pixbuf;
                const gchar *date = "";
                gboolean done = FALSE;
-               
+
                fd = work->data;
 
                if (access_file(fd->path, R_OK | X_OK) && fd->name)
@@ -229,7 +221,7 @@ static gboolean vdlist_populate(ViewDir *vd, gboolean clear)
 
                                        if (match == 0) g_warning("multiple fd for the same path");
                                        }
-                                       
+
                                }
                        else
                                {
@@ -285,7 +277,7 @@ static gboolean vdlist_populate(ViewDir *vd, gboolean clear)
 
                valid = gtk_list_store_remove(store, &iter);
                }
-               
+
 
        vd->click_fd = NULL;
        vd->drop_fd = NULL;
@@ -339,11 +331,7 @@ gboolean vdlist_set_fd(ViewDir *vd, FileData *dir_fd)
                return ret;
                }
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_get_realized(vd->view))
-#else
-       if (GTK_WIDGET_REALIZED(vd->view))
-#endif
                {
                gtk_tree_view_scroll_to_point(GTK_TREE_VIEW(vd->view), 0, 0);
                }
@@ -361,7 +349,7 @@ gboolean vdlist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
        ViewDir *vd = data;
        GtkTreePath *tpath;
 
-       if (event->keyval != GDK_Menu) return FALSE;
+       if (event->keyval != GDK_KEY_Menu) return FALSE;
 
        gtk_tree_view_get_cursor(GTK_TREE_VIEW(vd->view), &tpath, NULL);
        if (tpath)
index 7d8b7fe..2a2830b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index ab8f469..7a5feea 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -53,10 +53,10 @@ static void set_cursor(GtkWidget *widget, GdkCursorType cursor_type)
 {
        GdkCursor *cursor = NULL;
 
-       if (!widget || !widget->window) return;
+       if (!widget || !gtk_widget_get_window(widget)) return;
 
        if (cursor_type > -1) cursor = gdk_cursor_new(cursor_type);
-       gdk_window_set_cursor(widget->window, cursor);
+       gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
        if (cursor) gdk_cursor_unref(cursor);
        gdk_flush();
 }
@@ -307,27 +307,6 @@ static GList *parts_list_add_node_points(ViewDir *vd, GList *list)
        return list;
 }
 
-/*
- *----------------------------------------------------------------------------
- * misc
- *----------------------------------------------------------------------------
- */
-
-#if 0
-static void vdtree_row_deleted_cb(GtkTreeModel *tree_model, GtkTreePath *tpath, gpointer data)
-{
-       GtkTreeIter iter;
-       NodeData *nd;
-
-       gtk_tree_model_get_iter(tree_model, &iter, tpath);
-       gtk_tree_model_get(tree_model, &iter, DIR_COLUMN_POINTER, &nd, -1);
-
-       if (!nd) return;
-
-       file_data_unref(nd->fd);
-       g_free(nd);
-}
-#endif
 
 /*
  *----------------------------------------------------------------------------
@@ -475,6 +454,7 @@ gboolean vdtree_populate_path_by_iter(ViewDir *vd, GtkTreeIter *iter, gboolean f
                        DEBUG_1("Too frequent update of %s", nd->fd->path);
                        return TRUE;
                        }
+               file_data_check_changed_files(nd->fd); /* make sure we have recent info */
                if (nd->fd->version == nd->version) return TRUE;
                }
 
@@ -714,12 +694,12 @@ gboolean vdtree_set_fd(ViewDir *vd, FileData *dir_fd)
 
                gtk_tree_view_get_cursor(GTK_TREE_VIEW(vd->view), &old_tpath, NULL);
                tpath = gtk_tree_model_get_path(store, &iter);
-               
+
                if (!old_tpath || gtk_tree_path_compare(tpath, old_tpath) != 0)
                        {
                        /* setting the cursor scrolls the view; do not do that unless it is necessary */
                        gtk_tree_view_set_cursor(GTK_TREE_VIEW(vd->view), tpath, NULL, FALSE);
-                       
+
                        /* gtk_tree_view_set_cursor scrolls the window itself, but it sometimes
                           does not work (switch from dir_list to dir_tree) */
                        tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE);
@@ -731,13 +711,6 @@ gboolean vdtree_set_fd(ViewDir *vd, FileData *dir_fd)
        return TRUE;
 }
 
-#if 0
-const gchar *vdtree_get_path(ViewDir *vd)
-{
-       return vd->path;
-}
-#endif
-
 void vdtree_refresh(ViewDir *vd)
 {
        vdtree_populate_path(vd, vd->dir_fd, FALSE, TRUE);
@@ -779,7 +752,7 @@ gboolean vdtree_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
 
        switch (event->keyval)
                {
-               case GDK_Menu:
+               case GDK_KEY_Menu:
                        vd->click_fd = fd;
                        vd_color_set(vd, vd->click_fd, TRUE);
 
@@ -788,9 +761,9 @@ gboolean vdtree_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
 
                        return TRUE;
                        break;
-               case GDK_plus:
-               case GDK_Right:
-               case GDK_KP_Add:
+               case GDK_KEY_plus:
+               case GDK_KEY_Right:
+               case GDK_KEY_KP_Add:
                        if (fd)
                                {
                                vdtree_populate_path_by_iter(vd, &iter, FALSE, vd->dir_fd);
index 6d34be9..91d768e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index e0c2419..dbc53e4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Laurent Monin
  *
@@ -633,7 +633,7 @@ GtkWidget *vf_pop_menu(ViewFile *vf)
                                    G_CALLBACK(vficon_pop_menu_show_names_cb), vf);
                break;
        }
-       
+
        menu_item_add_stock(menu, _("Re_fresh"), GTK_STOCK_REFRESH, G_CALLBACK(vf_pop_menu_refresh_cb), vf);
 
        return menu;
@@ -661,7 +661,7 @@ gboolean vf_set_fd(ViewFile *vf, FileData *dir_fd)
        case FILEVIEW_LIST: ret = vflist_set_fd(vf, dir_fd); break;
        case FILEVIEW_ICON: ret = vficon_set_fd(vf, dir_fd); break;
        }
-       
+
        return ret;
 }
 
@@ -698,9 +698,9 @@ static GtkWidget *vf_marks_filter_init(ViewFile *vf)
 {
        GtkWidget *frame = gtk_frame_new(NULL);
        GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
-       
+
        gint i;
-       
+
        for (i = 0; i < FILEDATA_MARKS_SIZE ; i++)
                {
                GtkWidget *check = gtk_check_button_new();
@@ -728,7 +728,7 @@ ViewFile *vf_new(FileViewType type, FileData *dir_fd)
        ViewFile *vf;
 
        vf = g_new0(ViewFile, 1);
-       
+
        vf->type = type;
        vf->sort_method = SORT_NAME;
        vf->sort_ascend = TRUE;
@@ -737,14 +737,14 @@ ViewFile *vf_new(FileViewType type, FileData *dir_fd)
        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vf->scrolled), GTK_SHADOW_IN);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vf->scrolled),
                                       GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-       
+
        vf->filter = vf_marks_filter_init(vf);
 
        vf->widget = gtk_vbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vf->widget), vf->filter, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vf->widget), vf->scrolled, TRUE, TRUE, 0);
        gtk_widget_show(vf->scrolled);
-       
+
        g_signal_connect(G_OBJECT(vf->widget), "destroy",
                         G_CALLBACK(vf_destroy_cb), vf);
 
@@ -799,19 +799,19 @@ static gdouble vf_thumb_progress(ViewFile *vf)
 {
        gint count = 0;
        gint done = 0;
-       
+
        switch (vf->type)
        {
        case FILEVIEW_LIST: vflist_thumb_progress_count(vf->list, &count, &done); break;
        case FILEVIEW_ICON: vficon_thumb_progress_count(vf->list, &count, &done); break;
        }
-       
+
        DEBUG_1("thumb progress: %d of %d", done, count);
        return (gdouble)done / count;
 }
 
 static void vf_set_thumb_fd(ViewFile *vf, FileData *fd)
-{      
+{
        switch (vf->type)
        {
        case FILEVIEW_LIST: vflist_set_thumb_fd(vf, fd); break;
@@ -878,11 +878,7 @@ static gboolean vf_thumb_next(ViewFile *vf)
 {
        FileData *fd = NULL;
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_get_realized(vf->listview))
-#else
-       if (!GTK_WIDGET_REALIZED(vf->listview))
-#endif
                {
                vf_thumb_status(vf, 0.0, NULL);
                return FALSE;
@@ -936,7 +932,7 @@ static void vf_thumb_reset_all(ViewFile *vf)
 void vf_thumb_update(ViewFile *vf)
 {
        vf_thumb_stop(vf);
-       
+
        if (vf->type == FILEVIEW_LIST && !VFLIST(vf)->thumbs_enabled) return;
 
        vf_thumb_status(vf, 0.0, _("Loading thumbs..."));
@@ -976,7 +972,7 @@ guint vf_marks_get_filter(ViewFile *vf)
        guint ret = 0;
        gint i;
        if (!vf->marks_enabled) return 0;
-       
+
        for (i = 0; i < FILEDATA_MARKS_SIZE ; i++)
                {
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(vf->filter_check[i])))
@@ -1045,7 +1041,7 @@ void vf_notify_cb(FileData *fd, NotifyType type, gpointer data)
        /* FIXME: NOTIFY_METADATA should be checked by the keyword-to-mark functions and converted to NOTIFY_MARKS only if there was a change */
 
        if (!(type & interested) || vf->refresh_idle_id || !vf->dir_fd) return;
-       
+
        refresh = (fd == vf->dir_fd);
 
        if (!refresh)
@@ -1071,7 +1067,7 @@ void vf_notify_cb(FileData *fd, NotifyType type, gpointer data)
                        g_free(source_base);
                        }
                }
-       
+
        if (refresh)
                {
                DEBUG_1("Notify vf: %s %04x", fd->path, type);
index 17ab50d..b643c4e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: Laurent Monin
  *
index d26d261..e9e343d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2006 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -83,38 +83,6 @@ static IconData *vficon_icon_data(ViewFile *vf, FileData *fd)
        return id;
 }
 
-#if 0
-/* not used */
-static gint iconlist_read(FileData *dir_fd, GList **list)
-{
-       GList *temp;
-       GList *work;
-
-       if (!filelist_read(dir_fd, &temp, NULL)) return FALSE;
-
-       work = temp;
-       while (work)
-               {
-               FileData *fd;
-               IconData *id;
-
-               fd = work->data;
-               g_assert(fd->magick == 0x12345678);
-               id = g_new0(IconData, 1);
-
-               id->selected = SELECTION_NONE;
-               id->fd = fd;
-
-               work->data = id;
-               work = work->next;
-               }
-
-       *list = temp;
-
-       return TRUE;
-}
-#endif
-
 static void iconlist_free(GList *list)
 {
        GList *work = list;
@@ -267,10 +235,12 @@ static void vficon_send_layout_select(ViewFile *vf, IconData *id)
 
 static void vficon_toggle_filenames(ViewFile *vf)
 {
+       GtkAllocation allocation;
        VFICON(vf)->show_text = !VFICON(vf)->show_text;
        options->show_icon_names = VFICON(vf)->show_text;
 
-       vficon_populate_at_new_size(vf, vf->listview->allocation.width, vf->listview->allocation.height, TRUE);
+       gtk_widget_get_allocation(vf->listview, &allocation);
+       vficon_populate_at_new_size(vf, allocation.width, allocation.height, TRUE);
 }
 
 static gint vficon_get_icon_width(ViewFile *vf)
@@ -431,11 +401,7 @@ static void tip_show(ViewFile *vf)
 
        gdk_window_get_pointer(NULL, &x, &y, NULL);
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (!gtk_widget_get_realized(VFICON(vf)->tip_window)) gtk_widget_realize(VFICON(vf)->tip_window);
-#else
-       if (!GTK_WIDGET_REALIZED(VFICON(vf)->tip_window)) gtk_widget_realize(VFICON(vf)->tip_window);
-#endif
        gtk_window_move(GTK_WINDOW(VFICON(vf)->tip_window), x + 16, y + 16);
        gtk_widget_show(VFICON(vf)->tip_window);
 }
@@ -455,12 +421,8 @@ static gboolean tip_schedule_cb(gpointer data)
 
        window = gtk_widget_get_toplevel(vf->listview);
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (gtk_widget_get_sensitive(window) &&
-#else
-       if (GTK_WIDGET_SENSITIVE(window) &&
-#endif
-           GTK_WINDOW(window)->has_focus)
+           gtk_window_has_toplevel_focus(GTK_WINDOW(window)))
                {
                tip_show(vf);
                }
@@ -540,8 +502,6 @@ static void vficon_dnd_get(GtkWidget *widget, GdkDragContext *context,
 {
        ViewFile *vf = data;
        GList *list = NULL;
-       gchar *uri_text = NULL;
-       gint total;
 
        if (!VFICON(vf)->click_id) return;
 
@@ -555,14 +515,8 @@ static void vficon_dnd_get(GtkWidget *widget, GdkDragContext *context,
                }
 
        if (!list) return;
-       uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN));
+       uri_selection_data_set_uris_from_filelist(selection_data, list);
        filelist_free(list);
-
-       DEBUG_1("%s", uri_text);
-
-       gtk_selection_data_set(selection_data, selection_data->target,
-                              8, (guchar *)uri_text, total);
-       g_free(uri_text);
 }
 
 static void vficon_drag_data_received(GtkWidget *entry_widget, GdkDragContext *context,
@@ -577,18 +531,12 @@ static void vficon_drag_data_received(GtkWidget *entry_widget, GdkDragContext *c
                if (id && id->fd) {
                        /* Add keywords to file */
                        FileData *fd = id->fd;
-                       gchar *str = g_strndup((gchar *)selection->data, selection->length);
+                       gchar *str = (gchar *) gtk_selection_data_get_text(selection);
                        GList *kw_list = string_to_keywords_list(str);
-                       
+
                        metadata_append_list(fd, KEYWORD_KEY, kw_list);
                        string_list_free(kw_list);
                        g_free(str);
-/*
-file notification should handle this automatically                     
-                       if (vf->layout && vf->layout->bar_info) {
-                               bar_set_fd(vf->layout->bar_info, id->fd);
-                       }
-*/
                }
        }
 }
@@ -618,7 +566,7 @@ static void vficon_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer
 
        vficon_selection_remove(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, NULL);
 
-       if (context->action == GDK_ACTION_MOVE)
+       if (gdk_drag_context_get_selected_action(context) == GDK_ACTION_MOVE)
                {
                vf_refresh(vf);
                }
@@ -696,7 +644,9 @@ static void vficon_selection_remove(ViewFile *vf, IconData *id, SelectionType ma
 
 void vficon_marks_set(ViewFile *vf, gint enable)
 {
-       vficon_populate_at_new_size(vf, vf->listview->allocation.width, vf->listview->allocation.height, TRUE);
+       GtkAllocation allocation;
+       gtk_widget_get_allocation(vf->listview, &allocation);
+       vficon_populate_at_new_size(vf, allocation.width, allocation.height, TRUE);
 }
 
 /*
@@ -733,7 +683,7 @@ void vficon_select_all(ViewFile *vf)
                {
                IconData *id = work->data;
                work = work->next;
-               
+
                VFICON(vf)->selection = g_list_append(VFICON(vf)->selection, id);
                vficon_selection_add(vf, id, SELECTION_SELECTED, NULL);
                }
@@ -905,7 +855,7 @@ guint vficon_selection_count(ViewFile *vf, gint64 *bytes)
                        {
                        IconData *id = work->data;
                        FileData *fd = id->fd;
-                       g_assert(fd->magick == 0x12345678);
+                       g_assert(fd->magick == FD_MAGICK);
                        b += fd->size;
 
                        work = work->next;
@@ -927,10 +877,10 @@ GList *vficon_selection_get_list(ViewFile *vf)
                {
                IconData *id = work->data;
                FileData *fd = id->fd;
-               g_assert(fd->magick == 0x12345678);
+               g_assert(fd->magick == FD_MAGICK);
 
                list = g_list_prepend(list, file_data_ref(fd));
-               
+
                work2 = fd->sidecar_files;
                while (work2)
                        {
@@ -1005,7 +955,7 @@ void vficon_mark_to_selection(ViewFile *vf, gint mark, MarkToSelectionMode mode)
                FileData *fd = id->fd;
                gboolean mark_val, selected;
 
-               g_assert(fd->magick == 0x12345678);
+               g_assert(fd->magick == FD_MAGICK);
 
                mark_val = file_data_get_mark(fd, n);
                selected = (id->selected & SELECTION_SELECTED);
@@ -1060,24 +1010,24 @@ static void vficon_select_closest(ViewFile *vf, FileData *sel_fd)
 {
        GList *work;
        IconData *id = NULL;
-       
+
        if (sel_fd->parent) sel_fd = sel_fd->parent;
        work = vf->list;
-       
+
        while (work)
                {
                gint match;
                FileData *fd;
-               
+
                id = work->data;
                fd = id->fd;
                work = work->next;
 
                match = filelist_sort_compare_filedata_full(fd, sel_fd, vf->sort_method, vf->sort_ascend);
-               
+
                if (match >= 0) break;
                }
-       
+
        if (id)
                {
                vficon_select(vf, id);
@@ -1221,27 +1171,6 @@ static void vficon_set_focus(ViewFile *vf, IconData *id)
                }
 }
 
-#if 0
-static void vficon_update_focus(ViewFile *vf)
-{
-       gint new_row = 0;
-       gint new_col = 0;
-
-       if (VFICON(vf)->focus_id && vficon_find_position(vf, VFICON(vf)->focus_id, &new_row, &new_col))
-               {
-               /* first find the old focus, if it exists and is valid */
-               }
-       else
-               {
-               /* (try to) stay where we were */
-               new_row = VFICON(vf)->focus_row;
-               new_col = VFICON(vf)->focus_column;
-               }
-
-       vficon_move_focus(vf, new_row, new_col, FALSE);
-}
-#endif
-
 /* used to figure the page up/down distances */
 static gint page_height(ViewFile *vf)
 {
@@ -1251,7 +1180,7 @@ static gint page_height(ViewFile *vf)
        gint ret;
 
        adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(vf->listview));
-       page_size = (gint)adj->page_increment;
+       page_size = (gint)gtk_adjustment_get_page_increment(adj);
 
        row_height = options->thumbnails.max_height + THUMB_BORDER_PADDING * 2;
        if (VFICON(vf)->show_text) row_height += options->thumbnails.max_height / 3;
@@ -1297,33 +1226,33 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
        stop_signal = TRUE;
        switch (event->keyval)
                {
-               case GDK_Left: case GDK_KP_Left:
+               case GDK_KEY_Left: case GDK_KEY_KP_Left:
                        focus_col = -1;
                        break;
-               case GDK_Right: case GDK_KP_Right:
+               case GDK_KEY_Right: case GDK_KEY_KP_Right:
                        focus_col = 1;
                        break;
-               case GDK_Up: case GDK_KP_Up:
+               case GDK_KEY_Up: case GDK_KEY_KP_Up:
                        focus_row = -1;
                        break;
-               case GDK_Down: case GDK_KP_Down:
+               case GDK_KEY_Down: case GDK_KEY_KP_Down:
                        focus_row = 1;
                        break;
-               case GDK_Page_Up: case GDK_KP_Page_Up:
+               case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
                        focus_row = -page_height(vf);
                        break;
-               case GDK_Page_Down: case GDK_KP_Page_Down:
+               case GDK_KEY_Page_Down: case GDK_KEY_KP_Page_Down:
                        focus_row = page_height(vf);
                        break;
-               case GDK_Home: case GDK_KP_Home:
+               case GDK_KEY_Home: case GDK_KEY_KP_Home:
                        focus_row = -VFICON(vf)->focus_row;
                        focus_col = -VFICON(vf)->focus_column;
                        break;
-               case GDK_End: case GDK_KP_End:
+               case GDK_KEY_End: case GDK_KEY_KP_End:
                        focus_row = VFICON(vf)->rows - 1 - VFICON(vf)->focus_row;
                        focus_col = VFICON(vf)->columns - 1 - VFICON(vf)->focus_column;
                        break;
-               case GDK_space:
+               case GDK_KEY_space:
                        id = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
                        if (id)
                                {
@@ -1351,7 +1280,7 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                                        }
                                }
                        break;
-               case GDK_Menu:
+               case GDK_KEY_Menu:
                        id = vficon_find_data(vf, VFICON(vf)->focus_row, VFICON(vf)->focus_column, NULL);
                        VFICON(vf)->click_id = id;
 
@@ -1406,9 +1335,6 @@ gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
 
        if (stop_signal)
                {
-#if 0
-               g_signal_stop_emission_by_name(GTK_OBJECT(widget), "key_press_event");
-#endif
                tip_unschedule(vf);
                }
 
@@ -1448,22 +1374,17 @@ gboolean vficon_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
        switch (bevent->button)
                {
                case MOUSE_BUTTON_LEFT:
-#if GTK_CHECK_VERSION(2,20,0)
                        if (!gtk_widget_has_focus(vf->listview))
-#else
-                       if (!GTK_WIDGET_HAS_FOCUS(vf->listview))
-#endif
                                {
                                gtk_widget_grab_focus(vf->listview);
                                }
-#if 1
+
                        if (bevent->type == GDK_2BUTTON_PRESS &&
                            vf->layout)
                                {
                                vficon_selection_remove(vf, VFICON(vf)->click_id, SELECTION_PRELIGHT, &iter);
                                layout_image_full_screen_start(vf->layout);
                                }
-#endif
                        break;
                case MOUSE_BUTTON_RIGHT:
                        vf->popup = vf_pop_menu(vf);
@@ -1571,6 +1492,10 @@ static gboolean vficon_destroy_node_cb(GtkTreeModel *store, GtkTreePath *tpath,
        GList *list;
 
        gtk_tree_model_get(store, iter, FILE_COLUMN_POINTER, &list, -1);
+
+       /* it seems that gtk_list_store_clear may call some callbacks
+          that use the column. Set the pointer to NULL to be safe. */
+       gtk_list_store_set(GTK_LIST_STORE(store), iter, FILE_COLUMN_POINTER, NULL, -1);
        g_list_free(list);
 
        return FALSE;
@@ -1615,11 +1540,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
 
        store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
 
-#if GTK_CHECK_VERSION(2,20,0)
        if (keep_position && gtk_widget_get_realized(vf->listview) &&
-#else
-       if (keep_position && GTK_WIDGET_REALIZED(vf->listview) &&
-#endif
            gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL))
                {
                GtkTreeIter iter;
@@ -1637,7 +1558,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                {
                gint i;
                gint thumb_width;
-               
+
                vficon_clear_store(vf);
 
                thumb_width = vficon_get_icon_width(vf);
@@ -1652,11 +1573,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                        gtk_tree_view_column_set_visible(column, (i < VFICON(vf)->columns));
                        gtk_tree_view_column_set_fixed_width(column, thumb_width + (THUMB_BORDER_PADDING * 6));
 
-#if GTK_CHECK_VERSION(2,18,0)
                        list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
-#else
-                       list = gtk_tree_view_column_get_cell_renderers(column);
-#endif
                        cell = (list) ? list->data : NULL;
                        g_list_free(list);
 
@@ -1670,11 +1587,7 @@ static void vficon_populate(ViewFile *vf, gboolean resize, gboolean keep_positio
                                                             NULL);
                                }
                        }
-#if GTK_CHECK_VERSION(2,20,0)
                if (gtk_widget_get_realized(vf->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vf->listview));
-#else
-               if (GTK_WIDGET_REALIZED(vf->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vf->listview));
-#endif
                }
 
        r = -1;
@@ -1772,20 +1685,6 @@ static void vficon_populate_at_new_size(ViewFile *vf, gint w, gint h, gboolean f
        DEBUG_1("col tab pop cols=%d rows=%d", VFICON(vf)->columns, VFICON(vf)->rows);
 }
 
-
-#if 0
-static void vficon_sync_idle(ViewFile *vf)
-{
-       if (VFICON(vf)->sync_idle_id == -1)
-               {
-               /* high priority, the view needs to be resynced before a redraw
-                * may contain invalid pointers at this time
-                */
-               VFICON(vf)->sync_idle_id = g_idle_add_full(G_PRIORITY_HIGH, vficon_sync_idle_cb, vf, NULL);
-               }
-}
-#endif
-
 static void vficon_sized_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
 {
        ViewFile *vf = data;
@@ -2041,7 +1940,7 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                file_data_ref(first_selected);
                g_list_free(VFICON(vf)->selection);
                VFICON(vf)->selection = NULL;
-               
+
 
                }
 
@@ -2054,26 +1953,26 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                FileData *fd = NULL;
                FileData *new_fd = NULL;
                gint match;
-               
+
                if (work && work_fd)
                        {
                        id = work->data;
                        fd = id->fd;
-                       
+
                        new_fd = work_fd->data;
-                       
+
                        if (fd == new_fd)
                                {
                                /* not changed, go to next */
                                work = work->next;
                                work_fd = work_fd->next;
-                               if (id->selected & SELECTION_SELECTED) 
+                               if (id->selected & SELECTION_SELECTED)
                                        {
                                        VFICON(vf)->selection = g_list_prepend(VFICON(vf)->selection, id);
                                        }
                                continue;
                                }
-                       
+
                        match = filelist_sort_compare_filedata_full(fd, new_fd, vf->sort_method, vf->sort_ascend);
                        if (match == 0) g_warning("multiple fd for the same path");
                        }
@@ -2088,7 +1987,7 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                        new_fd = work_fd->data;
                        match = 1;
                        }
-               
+
                if (match < 0)
                        {
                        /* file no longer exists, delete from vf->list */
@@ -2111,7 +2010,7 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                                vf->list = g_list_insert_before(vf->list, work, id);
                        else
                                new_iconlist = g_list_prepend(new_iconlist, id); /* it is faster to append all new entries together later */
-                               
+
                        work_fd = work_fd->next;
                        }
 
@@ -2121,7 +2020,7 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                {
                vf->list = g_list_concat(vf->list, g_list_reverse(new_iconlist));
                }
-       
+
        VFICON(vf)->selection = g_list_reverse(VFICON(vf)->selection);
 
        filelist_free(new_filelist);
@@ -2134,7 +2033,7 @@ static gboolean vficon_refresh_real(ViewFile *vf, gboolean keep_position)
                vficon_select_closest(vf, first_selected);
                }
        file_data_unref(first_selected);
-       
+
        /* attempt to keep focus on same icon when refreshing */
        if (focus_id && g_list_find(vf->list, focus_id))
                {
@@ -2175,7 +2074,7 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
        gtk_tree_model_get(tree_model, iter, FILE_COLUMN_POINTER, &list, -1);
 
        id = g_list_nth_data(list, cd->number);
-       
+
        if (id)
                {
                GdkColor color_fg;
@@ -2185,7 +2084,7 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
                gchar *link;
                GtkStateType state = GTK_STATE_NORMAL;
 
-               g_assert(id->fd->magick == 0x12345678);
+               g_assert(id->fd->magick == FD_MAGICK);
 
                link = islink(id->fd->path) ? GQ_LINK_STR : "";
                if (id->fd->sidecar_files)
@@ -2199,13 +2098,13 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
                        gchar *disabled_grouping = id->fd->disable_grouping ? _(" [NO GROUPING]") : "";
                        name_sidecars = g_strdup_printf("%s%s%s", link, id->fd->name, disabled_grouping);
                        }
-               
+
                style = gtk_widget_get_style(vf->listview);
                if (id->selected & SELECTION_SELECTED)
                        {
                        state = GTK_STATE_SELECTED;
                        }
-               
+
                memcpy(&color_fg, &style->text[state], sizeof(color_fg));
                memcpy(&color_bg, &style->base[state], sizeof(color_bg));
 
@@ -2213,7 +2112,7 @@ static void vficon_cell_data_cb(GtkTreeViewColumn *tree_column, GtkCellRenderer
                        {
                        shift_color(&color_bg, -1, 0);
                        }
-               
+
                g_object_set(cell,      "pixbuf", id->fd->thumb_pixbuf,
                                        "text", name_sidecars,
                                        "marks", file_data_get_marks(id->fd),
@@ -2263,7 +2162,7 @@ static void vficon_append_column(ViewFile *vf, gint n)
        gtk_tree_view_column_set_cell_data_func(column, renderer, vficon_cell_data_cb, cd, g_free);
 
        gtk_tree_view_append_column(GTK_TREE_VIEW(vf->listview), column);
-       
+
        g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(vficon_mark_toggled_cb), vf);
 }
 
@@ -2303,7 +2202,7 @@ void vficon_destroy_cb(GtkWidget *widget, gpointer data)
        ViewFile *vf = data;
 
        vf_refresh_idle_cancel(vf);
-       
+
        file_data_unregister_notify_func(vf_notify_cb, vf);
 
        tip_unschedule(vf);
index 6183531..c2c4e09 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index c290587..c8a1cd6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
@@ -136,55 +136,14 @@ static FileData *vflist_find_data_by_coord(ViewFile *vf, gint x, gint y, GtkTree
        return NULL;
 }
 
-#if 0
-static gint vflist_find_sidecar_list_idx(GList *work, FileData *fd)
-{
-       gint i = 0;
-       while (work)
-               {
-               FileData *fd_p = work->data;
-               if (fd == fd_p) return i;
-
-               i++;
-
-               GList *work2 = fd_p->sidecar_files;
-               while (work2)
-                       {
-                       fd_p = work2->data;
-                       if (fd == fd_p) return i;
-
-                       i++;
-                       work2 = work2->next;
-                       }
-               work = work->next;
-               }
-       return -1;
-}
-
-static gint vflist_sidecar_list_count(GList *work)
-{
-       gint i = 0;
-       while (work)
-               {
-               FileData *fd = work->data;
-               i++;
-
-               GList *work2 = fd->sidecar_files;
-               while (work2)
-                       {
-                       i++;
-                       work2 = work2->next;
-                       }
-               work = work->next;
-               }
-       return i;
-}
-#endif
-
 static gboolean vflist_store_clear_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
 {
        FileData *fd;
        gtk_tree_model_get(model, iter, FILE_COLUMN_POINTER, &fd, -1);
+
+       /* it seems that gtk_tree_store_clear may call some callbacks
+          that use the column. Set the pointer to NULL to be safe. */
+       gtk_tree_store_set(GTK_TREE_STORE(model), iter, FILE_COLUMN_POINTER, NULL, -1);
        file_data_unref(fd);
        return FALSE;
 }
@@ -219,27 +178,6 @@ static void vflist_move_cursor(ViewFile *vf, GtkTreeIter *iter)
        gtk_tree_path_free(tpath);
 }
 
-#if 0
-static gint vflist_column_idx(ViewFile *vf, gint store_idx)
-{
-       GList *columns, *work;
-       gint i = 0;
-
-       columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(vf->listview));
-       work = columns;
-       while (work)
-               {
-               GtkTreeViewColumn *column = work->data;
-               if (store_idx == GPOINTER_TO_INT(g_object_get_data(G_OBJECT(column), "column_store_idx")))
-                       break;
-               work = work->next;
-               i++;
-               }
-
-       g_list_free(columns);
-       return i;
-}
-#endif
 
 /*
  *-----------------------------------------------------------------------------
@@ -253,8 +191,6 @@ static void vflist_dnd_get(GtkWidget *widget, GdkDragContext *context,
 {
        ViewFile *vf = data;
        GList *list = NULL;
-       gchar *uri_text = NULL;
-       gint total;
 
        if (!VFLIST(vf)->click_fd) return;
 
@@ -268,15 +204,8 @@ static void vflist_dnd_get(GtkWidget *widget, GdkDragContext *context,
                }
 
        if (!list) return;
-
-       uri_text = uri_text_from_filelist(list, &total, (info == TARGET_TEXT_PLAIN));
+       uri_selection_data_set_uris_from_filelist(selection_data, list);
        filelist_free(list);
-
-       DEBUG_1("%s", uri_text);
-
-       gtk_selection_data_set(selection_data, selection_data->target,
-                              8, (guchar *)uri_text, total);
-       g_free(uri_text);
 }
 
 static void vflist_dnd_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
@@ -305,7 +234,7 @@ static void vflist_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer
 
        vflist_color_set(vf, VFLIST(vf)->click_fd, FALSE);
 
-       if (context->action == GDK_ACTION_MOVE)
+       if (gdk_drag_context_get_selected_action(context) == GDK_ACTION_MOVE)
                {
                vf_refresh(vf);
                }
@@ -322,18 +251,12 @@ static void vflist_drag_data_received(GtkWidget *entry_widget, GdkDragContext *c
 
                if (fd) {
                        /* Add keywords to file */
-                       gchar *str = g_strndup((gchar *)selection->data, selection->length);
+                       gchar *str = (gchar *) gtk_selection_data_get_text(selection);
                        GList *kw_list = string_to_keywords_list(str);
-                       
+
                        metadata_append_list(fd, KEYWORD_KEY, kw_list);
                        string_list_free(kw_list);
                        g_free(str);
-/*
-file notification should handle this automatically
-                       if (vf->layout && vf->layout->bar_info) {
-                               bar_set_fd(vf->layout->bar_info, fd);
-                       }
-*/
                }
        }
 }
@@ -372,7 +295,7 @@ GList *vflist_selection_get_one(ViewFile *vf, FileData *fd)
                /* check if the row is expanded */
                GtkTreeModel *store;
                GtkTreeIter iter;
-               
+
                store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
                if (vflist_find_row(vf, fd, &iter) >= 0)
                        {
@@ -521,7 +444,7 @@ static gboolean vflist_row_rename_cb(TreeEditData *td, const gchar *old, const g
                file_data_unref(fd);
                g_free(old_path);
                }
-       
+
        g_free(new_path);
 
        return FALSE;
@@ -549,7 +472,7 @@ gboolean vflist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
        ViewFile *vf = data;
        GtkTreePath *tpath;
 
-       if (event->keyval != GDK_Menu) return FALSE;
+       if (event->keyval != GDK_KEY_Menu) return FALSE;
 
        gtk_tree_view_get_cursor(GTK_TREE_VIEW(vf->listview), &tpath, NULL);
        if (tpath)
@@ -580,7 +503,7 @@ gboolean vflist_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
        GtkTreeIter iter;
        FileData *fd = NULL;
        GtkTreeViewColumn *column;
-       
+
        vf->clicked_mark = 0;
 
        if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,
@@ -600,9 +523,6 @@ gboolean vflist_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
 
                gtk_tree_model_get_iter(store, &iter, tpath);
                gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1);
-#if 0
-               gtk_tree_view_set_cursor(GTK_TREE_VIEW(widget), tpath, NULL, FALSE);
-#endif
                gtk_tree_path_free(tpath);
                }
 
@@ -646,12 +566,10 @@ gboolean vflist_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
                return (gtk_tree_selection_count_selected_rows(selection) > 1);
                }
 
-#if 1
        if (bevent->button == MOUSE_BUTTON_LEFT && bevent->type == GDK_2BUTTON_PRESS)
                {
                if (vf->layout) layout_image_full_screen_start(vf->layout);
                }
-#endif
 
        return FALSE;
 }
@@ -715,7 +633,6 @@ gboolean vflist_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer d
                gtk_tree_selection_unselect_all(selection);
                gtk_tree_selection_select_iter(selection, &iter);
                vflist_move_cursor(vf, &iter);
-//             return TRUE;// FIXME - expand
                }
 
        return FALSE;
@@ -825,13 +742,6 @@ static void vflist_collapse_cb(GtkTreeView *tree_view, GtkTreeIter *iter, GtkTre
  *-----------------------------------------------------------------------------
  */
 
-/*
-static gboolean vflist_dummy_select_cb(GtkTreeSelection *selection, GtkTreeModel *store, GtkTreePath *tpath,
-                                       gboolean path_currently_selected, gpointer data)
-{
-       return TRUE;
-}
-*/
 
 static gchar* vflist_get_formatted(ViewFile *vf, const gchar *name, const gchar *sidecars, const gchar *size, const gchar *time, gboolean expanded)
  {
@@ -888,7 +798,7 @@ static void vflist_setup_iter(ViewFile *vf, GtkTreeStore *store, GtkTreeIter *it
        const gchar *disabled_grouping;
        gchar *formatted;
        gboolean expanded = FALSE;
-       
+
        if (fd->sidecar_files) /* expanded has no effect on files without sidecars */
                {
                gtk_tree_model_get(GTK_TREE_MODEL(store), iter, FILE_COLUMN_EXPANDED, &expanded, -1);
@@ -899,9 +809,9 @@ static void vflist_setup_iter(ViewFile *vf, GtkTreeStore *store, GtkTreeIter *it
        disabled_grouping = fd->disable_grouping ? _(" [NO GROUPING]") : "";
        name = g_strdup_printf("%s%s%s", link, fd->name, disabled_grouping);
        size = text_from_size(fd->size);
-       
+
        formatted = vflist_get_formatted(vf, name, sidecars, size, time, expanded);
-       
+
        gtk_tree_store_set(store, iter, FILE_COLUMN_POINTER, fd,
                                        FILE_COLUMN_VERSION, fd->version,
                                        FILE_COLUMN_THUMB, fd->thumb_pixbuf,
@@ -980,7 +890,7 @@ static void vflist_setup_iter_recursive(ViewFile *vf, GtkTreeStore *store, GtkTr
 
                                        if (match == 0) g_warning("multiple fd for the same path");
                                        }
-                                       
+
                                }
                        else
                                {
@@ -1008,7 +918,7 @@ static void vflist_setup_iter_recursive(ViewFile *vf, GtkTreeStore *store, GtkTr
 
                                vflist_setup_iter(vf, store, &new, file_data_ref(fd));
                                vflist_setup_iter_recursive(vf, store, &new, fd->sidecar_files, selected, force);
-                               
+
                                if (g_list_find(selected, fd))
                                        {
                                        /* renamed files - the same fd appears at different position - select it again*/
@@ -1049,14 +959,14 @@ static void vflist_setup_iter_recursive(ViewFile *vf, GtkTreeStore *store, GtkTr
 
                valid = gtk_tree_store_remove(store, &iter);
                }
-               
+
        /* move the prepended entries to the correct position */
        if (num_prepended)
                {
                gint i;
                gint num_total = num_prepended + num_ordered;
                gint *new_order = g_malloc(num_total * sizeof(gint));
-               
+
                for (i = 0; i < num_total; i++)
                        {
                        if (i < num_ordered)
@@ -1131,7 +1041,7 @@ void vflist_thumb_progress_count(GList *list, gint *count, gint *done)
                work = work->next;
 
                if (fd->thumb_pixbuf) (*done)++;
-               
+
                if (fd->sidecar_files)
                        {
                        vflist_thumb_progress_count(fd->sidecar_files, count, done);
@@ -1163,7 +1073,7 @@ FileData *vflist_thumb_next_fd(ViewFile *vf)
                GtkTreeModel *store;
                GtkTreeIter iter;
                gboolean valid = TRUE;
-       
+
                store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
                gtk_tree_model_get_iter(store, &iter, tpath);
                gtk_tree_path_free(tpath);
@@ -1245,19 +1155,19 @@ gint vflist_index_by_fd(ViewFile *vf, FileData *fd)
                {
                FileData *list_fd = work->data;
                if (list_fd == fd) return p;
-               
+
                work2 = list_fd->sidecar_files;
                while (work2)
                        {
                        /* FIXME: return the same index also for sidecars
-                          it is sufficient for next/prev navigation but it should be rewritten 
+                          it is sufficient for next/prev navigation but it should be rewritten
                           without using indexes at all
                        */
                        FileData *sidecar_fd = work2->data;
                        if (sidecar_fd == fd) return p;
                        work2 = work2->next;
                        }
-               
+
                work = work->next;
                p++;
                }
@@ -1405,7 +1315,7 @@ GList *vflist_selection_get_list(ViewFile *vf)
                gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1);
 
                list = g_list_prepend(list, file_data_ref(fd));
-               
+
                if (!fd->parent && !gtk_tree_view_row_expanded(GTK_TREE_VIEW(vf->listview), tpath))
                        {
                        /* unexpanded - add whole group */
@@ -1497,13 +1407,13 @@ static gboolean tree_model_get_iter_last(GtkTreeModel *store, GtkTreeIter *iter)
        while (TRUE)
                {
                GtkTreeIter next = *iter;
-               
+
                if (gtk_tree_model_iter_next(store, &next))
                        *iter = next;
                else
                        break;
                }
-       
+
        return TRUE;
 }
 
@@ -1529,7 +1439,7 @@ void vflist_select_invert(ViewFile *vf)
                        gtk_tree_selection_unselect_iter(selection, &iter);
                else
                        gtk_tree_selection_select_iter(selection, &iter);
-                               
+
                valid = tree_model_iter_prev(store, &iter);
                }
 }
@@ -1564,10 +1474,10 @@ static void vflist_select_closest(ViewFile *vf, FileData *sel_fd)
 {
        GList *work;
        FileData *fd = NULL;
-       
+
        if (sel_fd->parent) sel_fd = sel_fd->parent;
        work = vf->list;
-       
+
        while (work)
                {
                gint match;
@@ -1575,7 +1485,7 @@ static void vflist_select_closest(ViewFile *vf, FileData *sel_fd)
                work = work->next;
 
                match = filelist_sort_compare_filedata_full(fd, sel_fd, vf->sort_method, vf->sort_ascend);
-               
+
                if (match >= 0) break;
                }
 
@@ -1662,7 +1572,7 @@ void vflist_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode)
                        case STM_MODE_TOGGLE: file_data_set_mark(fd, n, !file_data_get_mark(fd, n));
                                break;
                        }
-               
+
                if (!file_data_filter_marks(fd, vf_marks_get_filter(vf))) /* file no longer matches the filter -> remove it */
                        {
                        vf_refresh_idle(vf);
@@ -1675,7 +1585,7 @@ void vflist_selection_to_mark(ViewFile *vf, gint mark, SelectionToMarkMode mode)
                        vflist_setup_iter_recursive(vf, GTK_TREE_STORE(store), &iter, fd->sidecar_files, NULL, FALSE);
                        }
 
-               
+
                file_data_register_notify_func(vf_notify_cb, vf, NOTIFY_PRIORITY_MEDIUM);
 
                work = work->next;
@@ -1701,11 +1611,7 @@ static void vflist_listview_set_columns(GtkWidget *listview, gboolean thumb, gbo
 
        gtk_tree_view_column_set_fixed_width(column, options->thumbnails.max_width + 4);
 
-#if GTK_CHECK_VERSION(2,18,0)
        list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
-#else
-       list = gtk_tree_view_column_get_cell_renderers(column);
-#endif
        if (!list) return;
        cell = list->data;
        g_list_free(list);
@@ -1751,7 +1657,7 @@ static void vflist_populate_view(ViewFile *vf, gboolean force)
        vflist_listview_set_columns(vf->listview, VFLIST(vf)->thumbs_enabled, vflist_is_multiline(vf));
 
        selected = vflist_selection_get_list(vf);
-       
+
        vflist_setup_iter_recursive(vf, store, NULL, vf->list, selected, force);
 
        if (selected && vflist_selection_count(vf, NULL) == 0)
@@ -1761,7 +1667,7 @@ static void vflist_populate_view(ViewFile *vf, gboolean force)
                }
 
        filelist_free(selected);
-       
+
        vf_send_update(vf);
        vf_thumb_update(vf);
 }
@@ -1905,7 +1811,7 @@ static void vflist_listview_mark_toggled_cb(GtkCellRendererToggle *cell, gchar *
 
        gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, col_idx, &marked, -1);
        marked = !marked;
-       
+
        /* the change has a very limited range and the standard notification would trigger
           complete re-read of the directory - try to do only minimal update instead */
        file_data_unregister_notify_func(vf_notify_cb, vf);
@@ -1930,10 +1836,6 @@ static void vflist_listview_add_column_toggle(ViewFile *vf, gint n, const gchar
 {
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
-       GtkTreeStore *store;
-       gint index;
-
-       store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview)));
 
        renderer = gtk_cell_renderer_toggle_new();
        column = gtk_tree_view_column_new_with_attributes(title, renderer, "active", n, NULL);
@@ -1942,7 +1844,7 @@ static void vflist_listview_add_column_toggle(ViewFile *vf, gint n, const gchar
        g_object_set_data(G_OBJECT(column), "column_store_idx", GUINT_TO_POINTER(n));
        g_object_set_data(G_OBJECT(renderer), "column_store_idx", GUINT_TO_POINTER(n));
 
-       index = gtk_tree_view_append_column(GTK_TREE_VIEW(vf->listview), column);
+       gtk_tree_view_append_column(GTK_TREE_VIEW(vf->listview), column);
        gtk_tree_view_column_set_fixed_width(column, 22);
        gtk_tree_view_column_set_visible(column, vf->marks_enabled);
 
@@ -1998,7 +1900,7 @@ ViewFile *vflist_new(ViewFile *vf, FileData *dir_fd)
        gint column;
 
        vf->info = g_new0(ViewFileInfoList, 1);
-       
+
        flist_types[FILE_COLUMN_POINTER] = G_TYPE_POINTER;
        flist_types[FILE_COLUMN_VERSION] = G_TYPE_INT;
        flist_types[FILE_COLUMN_THUMB] = GDK_TYPE_PIXBUF;
@@ -2042,7 +1944,7 @@ ViewFile *vflist_new(ViewFile *vf, FileData *dir_fd)
        vflist_listview_add_column(vf, FILE_COLUMN_THUMB, "", TRUE, FALSE, FALSE);
        g_assert(column == FILE_VIEW_COLUMN_THUMB);
        column++;
-       
+
        vflist_listview_add_column(vf, FILE_COLUMN_FORMATTED, _("Name"), FALSE, FALSE, TRUE);
        g_assert(column == FILE_VIEW_COLUMN_FORMATTED);
        column++;
@@ -2064,12 +1966,12 @@ void vflist_thumb_set(ViewFile *vf, gboolean enable)
        if (VFLIST(vf)->thumbs_enabled == enable) return;
 
        VFLIST(vf)->thumbs_enabled = enable;
-       
+
        /* vflist_populate_view is better than vf_refresh:
           - no need to re-read the directory
           - force update because the formatted string has changed
        */
-       if (vf->layout) 
+       if (vf->layout)
                {
                vflist_populate_view(vf, TRUE);
                gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vf->listview));
@@ -2094,7 +1996,6 @@ void vflist_marks_set(ViewFile *vf, gboolean enable)
                }
 
        g_list_free(columns);
-       //vf_refresh(vf);
 }
 
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index d45845a..0e91d32 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Geeqie
  * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Author: John Ellis
  *
index c1887f4..0ef337f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik / Laurent Monin
  *
@@ -69,9 +69,9 @@ gboolean window_maximized(GtkWidget *window)
 {
        GdkWindowState state;
 
-       if (!window || !window->window) return FALSE;
+       if (!window || !gtk_widget_get_window(window)) return FALSE;
 
-       state = gdk_window_get_state(window->window);
+       state = gdk_window_get_state(gtk_widget_get_window(window));
        return !!(state & GDK_WINDOW_STATE_MAXIMIZED);
 }
 
@@ -187,7 +187,7 @@ static void help_browser_run(void)
        gchar *result = NULL;
        gint i;
 
-       i = 0;  
+       i = 0;
        while (!result)
                {
                if ((name && *name) || (cmd && *cmd)) {
@@ -197,7 +197,7 @@ static void help_browser_run(void)
                        if (result)
                                {
                                int ret = help_browser_command(result, path);
-                               
+
                                if (ret == 0) break;
                                g_free(result);
                                result = NULL;
index 426fc15..68218be 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Geeqie
- * Copyright (C) 2008 - 2010 The Geeqie Team
+ * Copyright (C) 2008 - 2012 The Geeqie Team
  *
  * Authors: Vladimir Nadvornik / Laurent Monin
  *