--- gimp-2.6.11.orig/app/config/gimpdisplayconfig.h 2010-07-03 07:51:55 +0900 +++ gimp-2.6.11/app/config/gimpdisplayconfig.h 2010-10-10 03:49:36 +0900 @@ -27,7 +27,7 @@ #include "config/gimpcoreconfig.h" -#define GIMP_CONFIG_DEFAULT_IMAGE_TITLE_FORMAT "%D*%f-%p.%i (%t, %L) %wx%h" +#define GIMP_CONFIG_DEFAULT_IMAGE_TITLE_FORMAT "%D*%f-%p.%i (%t[%c], %L) %wx%h" #define GIMP_CONFIG_DEFAULT_IMAGE_STATUS_FORMAT "%n (%m)" --- gimp-2.6.11.orig/app/core/gimpimage-convert.c 2010-07-03 07:51:55 +0900 +++ gimp-2.6.11/app/core/gimpimage-convert.c 2010-10-10 03:49:36 +0900 @@ -1068,6 +1068,21 @@ break; } + /* TODO: attach or remove the ICC profile */ + switch (new_type) + { + case GIMP_RGB: + case GIMP_INDEXED: + if (old_type == GIMP_GRAY) + gimp_image_parasite_detach (image, "icc-profile"); + break; + case GIMP_GRAY: + gimp_image_parasite_detach (image, "icc-profile"); + break; + default: + break; + } + /* Delete the quantizer object, if there is one */ if (quantobj) quantobj->delete_func (quantobj); --- gimp-2.6.11.orig/app/display/gimpdisplayshell-title.c 2010-07-03 07:51:55 +0900 +++ gimp-2.6.11/app/display/gimpdisplayshell-title.c 2010-10-10 03:49:36 +0900 @@ -30,6 +30,7 @@ #include "config/gimpdisplayconfig.h" +#include "core/gimp.h" #include "core/gimpcontainer.h" #include "core/gimpimage.h" #include "core/gimpitem.h" @@ -37,6 +38,8 @@ #include "file/file-utils.h" +#include "plug-in/plug-in-icc-profile.h" + #include "gimpdisplay.h" #include "gimpdisplayshell.h" #include "gimpdisplayshell-title.h" @@ -188,6 +191,44 @@ title[i++] = '%'; break; + case 'c': /* attached color profile */ + { + GimpParasite *p; + + if (gimp_image_base_type (image) == GIMP_GRAY) + { + i += print (title, title_len, i, "n/a"); + break; + } + + p = gimp_image_parasite_find (image, "icc-profile"); + + if (shell->icc_profile != p) + { + g_free (shell->profile_desc); + shell->profile_desc = NULL; + + if (p) + { + GError *error = NULL; + + if (!plug_in_icc_profile_info (image, + gimp_get_user_context (image->gimp), + NULL, + NULL, &shell->profile_desc, NULL, + &error)) + shell->profile_desc = g_strdup (_("Unknown")); + } + else + shell->profile_desc = g_strdup (_("No profiles embedded")); + + shell->icc_profile = p; + } + + i += print (title, title_len, i, shell->profile_desc); + + break; + } case 'f': /* pruned filename */ { const gchar *uri = gimp_image_get_uri (image); --- gimp-2.6.11.orig/app/display/gimpdisplayshell.c 2010-07-03 07:51:55 +0900 +++ gimp-2.6.11/app/display/gimpdisplayshell.c 2010-10-10 03:49:36 +0900 @@ -353,6 +353,9 @@ shell->last_motion_distance = 0.0; shell->last_motion_delta_time = 0.0; + shell->icc_profile = NULL; + shell->profile_desc = g_strdup (_("No profiles embedded")); + gtk_window_set_role (GTK_WINDOW (shell), "gimp-image-window"); gtk_window_set_resizable (GTK_WINDOW (shell), TRUE); @@ -407,6 +410,8 @@ if (shell->no_image_options) g_object_unref (shell->no_image_options); + g_free (shell->profile_desc); + G_OBJECT_CLASS (parent_class)->finalize (object); } --- gimp-2.6.11.orig/app/display/gimpdisplayshell.h 2010-07-03 07:51:55 +0900 +++ gimp-2.6.11/app/display/gimpdisplayshell.h 2010-10-10 03:49:36 +0900 @@ -198,6 +198,8 @@ gdouble last_motion_delta_y; gdouble last_motion_distance; + GimpParasite *icc_profile; + gchar *profile_desc; }; struct _GimpDisplayShellClass --- gimp-2.6.11.orig/app/widgets/gimpimageparasiteview.c 2010-07-03 07:51:55 +0900 +++ gimp-2.6.11/app/widgets/gimpimageparasiteview.c 2010-10-10 14:21:57 +0900 @@ -66,7 +66,10 @@ static void gimp_image_parasite_view_parasite_changed (GimpImageParasiteView *view, const gchar *name); -static void gimp_image_parasite_view_update (GimpImageParasiteView *view); +static void gimp_image_parasite_view_undo_event (GimpImageParasiteView *view, + GimpUndoEvent event, + GimpUndo *arg2); +static void gimp_image_parasite_view_update (GimpImageParasiteView *view); G_DEFINE_TYPE (GimpImageParasiteView, gimp_image_parasite_view, GTK_TYPE_VBOX) @@ -182,6 +185,10 @@ G_CALLBACK (gimp_image_parasite_view_parasite_changed), G_OBJECT (view), G_CONNECT_SWAPPED); + g_signal_connect_object (view->image, "undo-event", + G_CALLBACK (gimp_image_parasite_view_undo_event), + G_OBJECT (view), + G_CONNECT_SWAPPED); gimp_image_parasite_view_update (view); @@ -245,7 +252,23 @@ } static void +gimp_image_parasite_view_undo_event (GimpImageParasiteView *view, + GimpUndoEvent event, + GimpUndo *arg2) +{ + if (event == GIMP_UNDO_EVENT_UNDO || event == GIMP_UNDO_EVENT_REDO) + { + GimpParasite *parasite = gimp_image_parasite_find (view->image, view->parasite); + + if (parasite != view->parasite_ptr) + gimp_image_parasite_view_update (view); + } +} + +static void gimp_image_parasite_view_update (GimpImageParasiteView *view) { + view->parasite_ptr = gimp_image_parasite_find (view->image, view->parasite); + g_signal_emit (view, view_signals[UPDATE], 0); } --- gimp-2.6.11.orig/app/widgets/gimpimageparasiteview.h 2010-07-03 07:51:55 +0900 +++ gimp-2.6.11/app/widgets/gimpimageparasiteview.h 2010-10-10 12:16:38 +0900 @@ -39,6 +39,7 @@ GimpImage *image; gchar *parasite; + gchar *parasite_ptr; }; struct _GimpImageParasiteViewClass --- gimp-2.6.11.orig/docs/gimprc.5.in 2010-07-03 07:51:56 +0900 +++ gimp-2.6.11/docs/gimprc.5.in 2010-10-10 03:49:36 +0900 @@ -418,7 +418,7 @@ paint tool. Possible values are yes and no. .TP -(image-title-format "%D*%f-%p.%i (%t, %L) %wx%h") +(image-title-format "%D*%f-%p.%i (%t[%c], %L) %wx%h") Sets the text to appear in image window titles. This is a format string; certain % character sequences are recognised and expanded as follows: @@ -473,6 +473,8 @@ .br %U unit abbreviation .br +%c attached color profile +.br .br --- gimp-2.6.11.orig/etc/gimprc 2010-07-03 07:51:56 +0900 +++ gimp-2.6.11/etc/gimprc 2010-10-10 03:49:36 +0900 @@ -367,9 +367,10 @@ # %H image height in real-world units # %u unit symbol # %U unit abbreviation +# %c attached color profile # # -# (image-title-format "%D*%f-%p.%i (%t, %L) %wx%h") +# (image-title-format "%D*%f-%p.%i (%t[%c], %L) %wx%h") # Sets the text to appear in image window status bars. This is a format # string; certain % character sequences are recognised and expanded as --- gimp-2.6.11.orig/plug-ins/common/lcms.c 2010-07-03 07:51:56 +0900 +++ gimp-2.6.11/plug-ins/common/lcms.c 2010-10-10 14:26:56 +0900 @@ -107,7 +107,8 @@ static cmsHPROFILE lcms_image_get_profile (GimpColorConfig *config, gint32 image, - guchar *checksum); + guchar *checksum, + gboolean *not_embeded); static gboolean lcms_image_set_profile (gint32 image, cmsHPROFILE profile, const gchar *filename, @@ -577,7 +578,7 @@ } } - src_profile = lcms_image_get_profile (config, image, src_md5); + src_profile = lcms_image_get_profile (config, image, src_md5, NULL); if (src_profile && ! lcms_icc_profile_is_rgb (src_profile)) { @@ -649,34 +650,89 @@ gchar **info) { cmsHPROFILE profile; + gboolean not_embedded; + GimpImageBaseType base_type; g_return_val_if_fail (GIMP_IS_COLOR_CONFIG (config), GIMP_PDB_CALLING_ERROR); g_return_val_if_fail (image != -1, GIMP_PDB_CALLING_ERROR); - profile = lcms_image_get_profile (config, image, NULL); - - if (profile && ! lcms_icc_profile_is_rgb (profile)) - { - g_printerr ("lcms: attached color profile is not for RGB color space " - "(skipping)\n"); + base_type = gimp_image_base_type (image); - cmsCloseProfile (profile); - profile = NULL; - } + profile = lcms_image_get_profile (config, image, NULL, ¬_embedded); if (profile) { - if (name) *name = lcms_icc_profile_get_name (profile); - if (desc) *desc = lcms_icc_profile_get_desc (profile); - if (info) *info = lcms_icc_profile_get_info (profile); + if (!not_embedded) + { + if (name) *name = lcms_icc_profile_get_name (profile); + if (desc) *desc = lcms_icc_profile_get_desc (profile); + if (info) + { + if (base_type != GIMP_GRAY) + { + if (lcms_icc_profile_is_rgb (profile)) + *info = lcms_icc_profile_get_info (profile); + else + { + gchar *tmp = lcms_icc_profile_get_info (profile); + + *info = g_strdup_printf (_("%s\n\nWarning : this profile is not RGB colorspace!"), tmp); + + g_free (tmp); + } + } + else + { + gchar *tmp = lcms_icc_profile_get_info (profile); + + *info = g_strdup_printf (_("%s\n\nNote that the GIMP doesn't support any profiles at this mode."), tmp); + + g_free (tmp); + } + } + } + else if (base_type != GIMP_GRAY) + { + if (name) *name = g_strdup (_("No profiles embedded")); + if (desc) *desc = g_strdup (_("No profiles embedded")); + if (info) + { + gchar *tmp = lcms_icc_profile_get_desc (profile); + + *info = g_strdup_printf (_("GIMP assumes that \"%s\" (workspace profile) is embedded."), tmp); + + g_free (tmp); + } + } + else + { + if (name) *name = g_strdup (_("Not available")); + if (desc) *name = g_strdup (_("Not available")); + if (info) *info = g_strdup (_("The GIMP doesn't support any profiles at this mode.")); + } cmsCloseProfile (profile); } + else if (base_type != GIMP_GRAY) + { + if (!not_embedded) + { + if (name) *name = g_strdup ("Unknown/broken profile"); + if (desc) *desc = g_strdup ("Unknown/broken profile"); + if (info) *info = g_strdup (_("GIMP assumes that sRGB (built-in workspace) is embedded.")); + } + else + { + if (name) *name = g_strdup (_("No profiles embedded")); + if (desc) *desc = g_strdup (_("No profiles embedded")); + if (info) *info = g_strdup (_("GIMP assumes that sRGB (built-in workspace) is embedded.")); + } + } else { - if (name) *name = g_strdup ("sRGB"); - if (desc) *desc = g_strdup ("sRGB built-in"); - if (info) *info = g_strdup (_("Default RGB working space")); + if (name) *name = g_strdup (_("Not available")); + if (desc) *desc = g_strdup (_("Not available")); + if (info) *info = g_strdup (_("The GIMP doesn't support any profiles at this mode.")); } return GIMP_PDB_SUCCESS; @@ -750,10 +806,12 @@ static cmsHPROFILE lcms_image_get_profile (GimpColorConfig *config, gint32 image, - guchar *checksum) + guchar *checksum, + gboolean *not_embedded) { GimpParasite *parasite; cmsHPROFILE profile = NULL; + gboolean _not_embedded = FALSE; g_return_val_if_fail (image != -1, NULL); @@ -778,11 +836,17 @@ gimp_parasite_free (parasite); } - else if (config->rgb_profile) + else { - profile = lcms_load_profile (config->rgb_profile, checksum); + _not_embedded = TRUE; + + if (config->rgb_profile) + profile = lcms_load_profile (config->rgb_profile, checksum); } + if (not_embedded) + *not_embedded = _not_embedded; + return profile; } @@ -1340,15 +1404,46 @@ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); -#ifndef G_OS_WIN32 { - const gchar folder[] = "/usr/share/color/icc"; +#ifdef G_OS_WIN32 + const gchar *folder = g_strdup_printf ("%s\\System32\\spool\\drivers\\color", g_getenv ("SYSTEMROOT")); + + if (g_file_test (folder, G_FILE_TEST_IS_DIR)) + gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), + folder, NULL); + + g_free (folder); +#elif defined (PLATFORM_OSX) + const gchar *folder = "/Library/ColorSync/Profiles"; + + if (g_file_test (folder, G_FILE_TEST_IS_DIR)) + { + gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), + folder, NULL); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), folder); + } + + folder = "/System/Library/ColorSync/Profiles"; + + if (g_file_test (folder, G_FILE_TEST_IS_DIR)) + gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), + folder, NULL); + + folder = g_strdup_printf ("%s/Library/ColorSync/Profiles", g_getenv ("HOME")); + + if (g_file_test (folder, G_FILE_TEST_IS_DIR)) + gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), + folder, NULL); + + g_free (folder); +#else + const gchar *folder = "/usr/share/color/icc"; if (g_file_test (folder, G_FILE_TEST_IS_DIR)) gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), folder, NULL); - } #endif + } filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("All files (*.*)")); @@ -1431,8 +1526,9 @@ gchar *name; gboolean success = FALSE; gboolean run; + gboolean not_embedded; - src_profile = lcms_image_get_profile (config, image, NULL); + src_profile = lcms_image_get_profile (config, image, NULL, ¬_embedded); if (src_profile && ! lcms_icc_profile_is_rgb (src_profile)) { @@ -1479,9 +1575,15 @@ gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - name = lcms_icc_profile_get_desc (src_profile); - if (! name) - name = lcms_icc_profile_get_name (src_profile); + if (! apply && not_embedded) + name = g_strdup (_("None")); + else + { + name = lcms_icc_profile_get_desc (src_profile); + + if (! name) + name = lcms_icc_profile_get_name (src_profile); + } label = gtk_label_new (name); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); --- gimp-2.6.11.orig/po/ja.po 2010-07-03 07:52:00 +0900 +++ gimp-2.6.11/po/ja.po 2010-10-10 03:49:36 +0900 @@ -13533,3 +13533,17 @@ #~ msgid "keyboard label|Backslash" #~ msgstr "バックスラッシュ(\\)" + +######################################################################## + +#: ../app/display/gimpdisplayshell.c:1033 +#: ../app/display/gimpdisplayshell.c:357 +#: ../app/display/gimpdisplayshell-title.c:238 +#: ../app/display/gimpdisplayshell-title.c:272 +msgid "No profiles embedded" +msgstr "埋め込みプロファイルなし" + +#: ../app/display/gimpdisplayshell-title.c:233 +#: ../app/display/gimpdisplayshell-title.c:214 +msgid "Not available" +msgstr "利用不可" --- gimp-2.6.11.orig/po-plug-ins/ja.po 2010-08-05 05:17:23 +0900 +++ gimp-2.6.11/po-plug-ins/ja.po 2010-10-10 03:49:36 +0900 @@ -19085,3 +19085,50 @@ #, fuzzy #~ msgid "Searching by type - please wait" #~ msgstr "名前で検索中 - お待ち下さい" + +######################################################################## + +#, c-format +msgid "" +"%s\n" +"\n" +"Warning : this profile is not RGB colorspace!" +msgstr "" +"%s\n" +"\n" +"警告:このプロファイルはRGBカラースペースではありません!" + +#: ../plug-ins/common/lcms.c:686 +#, c-format +msgid "" +"%s\n" +"\n" +"Note that the GIMP doesn't support any profiles at this mode." +msgstr "" +"%s\n" +"\n" +"注:GIMPはこのモードではプロファイルをサポートしません。" + +#: ../plug-ins/common/lcms.c:694 ../plug-ins/common/lcms.c:695 +#: ../plug-ins/common/lcms.c:724 ../plug-ins/common/lcms.c:725 +msgid "No profiles embedded" +msgstr "埋め込みプロファイルなし" + +#: ../plug-ins/common/lcms.c:700 +#, c-format +msgid "GIMP assumes that \"%s\" (workspace profile) is embedded." +msgstr "GIMPは\"%s\"(ワークスペースプロファイル)が埋め込まれていると見なします。" + +#: ../plug-ins/common/lcms.c:707 ../plug-ins/common/lcms.c:708 +#: ../plug-ins/common/lcms.c:731 ../plug-ins/common/lcms.c:732 +msgid "Not available" +msgstr "利用不可" + +#: ../plug-ins/common/lcms.c:773 +#: ../plug-ins/common/lcms.c:709 ../plug-ins/common/lcms.c:733 +msgid "The GIMP doesn't support any profiles at this mode." +msgstr "GIMPはこのモードではプロファイルをサポートしません。" + +#: ../plug-ins/common/lcms.c:720 ../plug-ins/common/lcms.c:726 +msgid "GIMP assumes that sRGB (built-in workspace) is embedded." +msgstr "GIMPはsRGB(ワークスペースプロファイル)が埋め込まれていると見なします。"