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