Package: ristretto
Version: 0.0.22-2
Severity: normal
Tags: l10n upstream patch

Using LANG=fr_FR.UTF-8, ristretto doesn't display image properly if it contains
exif orientation data. If LANG=C ristretto displays the image correctly.

The orientation code in ristretto depends on exif_entry_get_value (from
libexif12) that returns a localized textual representation of the orientation (
http://libexif.sourceforge.net/api/exif-
entry_8h.html#24425f48dd75ec56f9ac758aaa6ef9c4 ).
This textual representation is than compared with english strings ("top - left"
for example). It will fails with non-english locale.



-- System Information:
Debian Release: 6.0.5
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'proposed-updates'), (500, 
'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages ristretto depends on:
ii  libc6                         2.11.3-3   Embedded GNU C Library: Shared lib
ii  libdbus-glib-1-2              0.88-2.1   simple interprocess messaging syst
ii  libexif12                     0.6.19-1   library to parse EXIF files
ii  libglib2.0-0                  2.24.2-1   The GLib library of C routines
ii  libgtk2.0-0                   2.20.1-2   The GTK+ graphical user interface 
ii  libthunar-vfs-1-2             1.0.2-1+b1 VFS abstraction used in thunar
ii  libx11-6                      2:1.3.3-4  X11 client-side library
ii  libxfce4util4                 4.6.2-1    Utility functions library for Xfce
ii  libxfcegui4-4                 4.6.4-1    Basic GUI C functions for Xfce4

ristretto recommends no packages.

ristretto suggests no packages.

-- no debconf information
Index: ristretto-0.0.22/src/navigator.c
===================================================================
--- ristretto-0.0.22.orig/src/navigator.c	2012-06-09 10:03:45.000000000 +0200
+++ ristretto-0.0.22/src/navigator.c	2012-06-09 10:31:02.000000000 +0200
@@ -823,59 +823,54 @@
             if (entry->exif_data) {
                 exifentry = exif_data_get_entry(entry->exif_data, EXIF_TAG_ORIENTATION);
             }
+
             if (exifentry)
             {
-                gchar *val = g_new0(gchar, 20);
-                exif_entry_get_value(exifentry, val, 20);
-                if (!strcmp(val, "top - left"))
-                {
+                short orientation = exif_get_short(
+                    exifentry->data,
+                    exif_data_get_byte_order(entry->exif_data));
+
+                switch (orientation) {
+                case 1:
                     entry->v_flipped = FALSE;
                     entry->h_flipped = FALSE;
                     entry->rotation = GDK_PIXBUF_ROTATE_NONE;
-                }
-                if (!strcmp(val, "top - right"))
-                {
+                    break;
+                case 2:
                     entry->v_flipped = FALSE;
                     entry->h_flipped = TRUE;
                     entry->rotation = GDK_PIXBUF_ROTATE_NONE;
-                }
-                if (!strcmp(val, "bottom - left"))
-                {
+                    break;
+                case 4:
                     entry->v_flipped = TRUE;
                     entry->h_flipped = FALSE;
                     entry->rotation = GDK_PIXBUF_ROTATE_NONE;
-                }
-                if (!strcmp(val, "bottom - right"))
-                {
+                    break;
+                case 3:
                     entry->v_flipped = FALSE;
                     entry->h_flipped = FALSE;
                     entry->rotation = GDK_PIXBUF_ROTATE_UPSIDEDOWN;
-                }
-                if (!strcmp(val, "right - top"))
-                {
+                    break;
+                case 6:
                     entry->v_flipped = FALSE;
                     entry->h_flipped = FALSE;
                     entry->rotation = GDK_PIXBUF_ROTATE_CLOCKWISE;
-                }
-                if (!strcmp(val, "right - bottom"))
-                {
+                    break;
+                case 7:
                     entry->v_flipped = FALSE;
                     entry->h_flipped = TRUE;
                     entry->rotation = GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE;
-                }
-                if (!strcmp(val, "left - top"))
-                {
+                    break;
+                case 5:
                     entry->v_flipped = FALSE;
                     entry->h_flipped = TRUE;
                     entry->rotation = GDK_PIXBUF_ROTATE_CLOCKWISE;
-                }
-                if (!strcmp(val, "left - bottom"))
-                {
+                    break;
+                case 8:
                     entry->v_flipped = FALSE;
                     entry->h_flipped = FALSE;
                     entry->rotation = GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE;
                 }
-                g_free(val);
             }
         }

Reply via email to