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); } }