diff -r -u eog/src/eog-file-chooser.c eog-2.32.1/src/eog-file-chooser.c --- eog/src/eog-file-chooser.c 2011-07-12 21:15:08.453658000 +0200 +++ eog-2.32.1/src/eog-file-chooser.c 2010-11-13 14:16:52.000000000 +0100 @@ -338,11 +338,13 @@ file = g_file_new_for_uri (uri); file_info = g_file_query_info (file, G_FILE_ATTRIBUTE_TIME_MODIFIED "," + G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_STANDARD_SIZE, 0, NULL, NULL); g_object_unref (file); - if ((file_info != NULL) && (priv->thumb_factory != NULL)) { + if ((file_info != NULL) && (priv->thumb_factory != NULL) + && g_file_info_get_file_type (file_info) != G_FILE_TYPE_SPECIAL) { guint64 mtime; mtime = g_file_info_get_attribute_uint64 (file_info, diff -r -u eog/src/eog-image.c eog-2.32.1/src/eog-image.c --- eog/src/eog-image.c 2011-07-12 21:15:08.453658000 +0200 +++ eog-2.32.1/src/eog-image.c 2010-11-13 14:16:52.000000000 +0100 @@ -1253,9 +1253,11 @@ #ifdef HAVE_EXIF /* Check that the metadata was loaded at least once before - * trying to autorotate. */ + * trying to autorotate. Also only an image load job should try to + * autorotate an image. */ if (priv->autorotate && - priv->metadata_status == EOG_IMAGE_METADATA_READY) { + priv->metadata_status == EOG_IMAGE_METADATA_READY && + data2read & EOG_IMAGE_DATA_IMAGE) { eog_image_real_autorotate (img); } #endif diff -r -u eog/src/eog-image-jpeg.c eog-2.32.1/src/eog-image-jpeg.c --- eog/src/eog-image-jpeg.c 2011-07-12 21:15:08.453658000 +0200 +++ eog-2.32.1/src/eog-image-jpeg.c 2010-10-16 23:02:24.000000000 +0200 @@ -150,7 +150,16 @@ case EOG_TRANSFORM_FLIP_VERTICAL: trans_code = JXFORM_FLIP_V; break; + case EOG_TRANSFORM_TRANSPOSE: + trans_code = JXFORM_TRANSPOSE; + break; + case EOG_TRANSFORM_TRANSVERSE: + trans_code = JXFORM_TRANSVERSE; + break; default: + g_warning("EogTransformType not supported!"); + /* Fallthrough intended here. */ + case EOG_TRANSFORM_NONE: trans_code = JXFORM_NONE; break; } diff -r -u eog/src/eog-transform.c eog-2.32.1/src/eog-transform.c --- eog/src/eog-transform.c 2011-07-12 21:15:08.453658000 +0200 +++ eog-2.32.1/src/eog-transform.c 2010-10-16 23:02:12.000000000 +0200 @@ -357,7 +357,7 @@ EogTransformType eog_transform_get_transform_type (EogTransform *trans) { - cairo_matrix_t affine; + cairo_matrix_t affine, a1, a2; EogTransformPrivate *priv; g_return_val_if_fail (EOG_IS_TRANSFORM (trans), EOG_TRANSFORM_NONE); @@ -391,15 +391,19 @@ return EOG_TRANSFORM_FLIP_VERTICAL; } - cairo_matrix_init_rotate (&affine, EOG_DEG_TO_RAD(90)); - _eog_cairo_matrix_flip (&affine, &affine, TRUE, FALSE); + cairo_matrix_init_rotate (&a1, EOG_DEG_TO_RAD(90)); + cairo_matrix_init_identity (&a2); + _eog_cairo_matrix_flip (&a2, &a2, TRUE, FALSE); + cairo_matrix_multiply(&affine, &a1, &a2); if (_eog_cairo_matrix_equal (&affine, &priv->affine)) { return EOG_TRANSFORM_TRANSPOSE; } - cairo_matrix_init_rotate (&affine, EOG_DEG_TO_RAD(90)); - _eog_cairo_matrix_flip (&affine, &affine, FALSE, TRUE); - if (_eog_cairo_matrix_equal (&affine, &priv->affine)) { + /* A transversion is a 180° rotation followed by a transposition */ + /* Reuse the transposition from the previous step for this. */ + cairo_matrix_init_rotate (&a1, EOG_DEG_TO_RAD(180)); + cairo_matrix_multiply(&a2, &a1, &affine); + if (_eog_cairo_matrix_equal (&a2, &priv->affine)) { return EOG_TRANSFORM_TRANSVERSE; }