# HG changeset patch # User zas_ # Date 1235930299 0 # Node ID d87deb05d59f94669c1e3d6f46e9616d2020e28a # Parent b3156b2ec4c5f62e0566dd8c2dcd81f8b4da6602 Enable 'Use profile from image' item of color management menu only if such profile information is available from image. diff -r b3156b2ec4c5 -r d87deb05d59f src/image.c --- a/src/image.c Sun Mar 01 17:13:14 2009 +0000 +++ b/src/image.c Sun Mar 01 17:58:19 2009 +0000 @@ -198,6 +198,7 @@ const gchar *screen_file; guchar *profile = NULL; guint profile_len; + ExifData *exif; if (imd->cm) return FALSE; @@ -237,52 +238,61 @@ { return FALSE; } + + imd->color_profile_from_image = COLOR_PROFILE_NONE; - if (imd->color_profile_use_image) - { - ExifData *exif = exif_read_fd(imd->image_fd); + exif = exif_read_fd(imd->image_fd); - if (exif) + if (exif) + { + gint cs; + gchar *interop_index; + + /* ColorSpace == 1 specifies sRGB per EXIF 2.2 */ + if (!exif_get_integer(exif, "Exif.Photo.ColorSpace", &cs)) cs = 0; + interop_index = exif_get_data_as_text(exif, "Exif.Iop.InteroperabilityIndex"); + + if (cs == 1) { - profile = exif_get_color_profile(exif, &profile_len); - if (!profile) + if (imd->color_profile_use_image) { - gint cs; - gchar *interop_index; - - /* ColorSpace == 1 specifies sRGB per EXIF 2.2 */ - if (!exif_get_integer(exif, "Exif.Photo.ColorSpace", &cs)) cs = 0; - interop_index = exif_get_data_as_text(exif, "Exif.Iop.InteroperabilityIndex"); - - if (cs == 1) - { - input_type = COLOR_PROFILE_SRGB; - input_file = NULL; - imd->color_profile_from_image = COLOR_PROFILE_SRGB; + input_type = COLOR_PROFILE_SRGB; + input_file = NULL; + } + imd->color_profile_from_image = COLOR_PROFILE_SRGB; - DEBUG_1("Found EXIF ColorSpace of sRGB"); - } - if (cs == 2 || (interop_index && !strcmp(interop_index, "R03"))) - { - input_type = COLOR_PROFILE_ADOBERGB; - input_file = NULL; - imd->color_profile_from_image = COLOR_PROFILE_ADOBERGB; + DEBUG_1("Found EXIF ColorSpace of sRGB"); + } + if (cs == 2 || (interop_index && !strcmp(interop_index, "R03"))) + { + if (imd->color_profile_use_image) + { + input_type = COLOR_PROFILE_ADOBERGB; + input_file = NULL; + } + imd->color_profile_from_image = COLOR_PROFILE_ADOBERGB; - DEBUG_1("Found EXIF ColorSpace of AdobeRGB"); - } + DEBUG_1("Found EXIF ColorSpace of AdobeRGB"); + } - g_free(interop_index); - } - else + g_free(interop_index); + + profile = exif_get_color_profile(exif, &profile_len); + if (profile) + { + if (!imd->color_profile_use_image) { - DEBUG_1("Found embedded color profile"); - imd->color_profile_from_image = COLOR_PROFILE_MEM; + g_free(profile); + profile = NULL; } - - exif_free_fd(imd->image_fd, exif); + DEBUG_1("Found embedded color profile"); + imd->color_profile_from_image = COLOR_PROFILE_MEM; } + + exif_free_fd(imd->image_fd, exif); } + if (profile) { diff -r b3156b2ec4c5 -r d87deb05d59f src/layout.c --- a/src/layout.c Sun Mar 01 17:13:14 2009 +0000 +++ b/src/layout.c Sun Mar 01 17:58:19 2009 +0000 @@ -444,7 +444,7 @@ item = menu_item_add_check(menu, _("Use profile from _image"), use_image, G_CALLBACK(layout_color_menu_use_image_cb), lw); - gtk_widget_set_sensitive(item, active); + gtk_widget_set_sensitive(item, image_profile == COLOR_PROFILE_MEM || (image_profile > COLOR_PROFILE_NONE && image_profile < COLOR_PROFILE_FILE)); for (i = COLOR_PROFILE_SRGB; i < COLOR_PROFILE_FILE; i++) {