From 6be506ef455234df554f6a5bc48febfc335397eb Mon Sep 17 00:00:00 2001 From: joncruz Date: Fri, 12 Jun 2009 08:27:21 +0000 Subject: [PATCH] Cleaning up icc profile locations and adding OS X and Windows specifics. Work for bug #214198. --- src/color-profile.cpp | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/color-profile.cpp b/src/color-profile.cpp index 20e870242..5868a9582 100644 --- a/src/color-profile.cpp +++ b/src/color-profile.cpp @@ -12,6 +12,10 @@ #include #include +// #ifdef WIN32 +// #include +// #include +// #endif #include "xml/repr.h" #include "color-profile.h" #include "color-profile-fns.h" @@ -23,6 +27,7 @@ #include "dom/uri.h" #include "dom/util/digest.h" + using Inkscape::ColorProfile; using Inkscape::ColorProfileClass; @@ -578,13 +583,43 @@ std::list ColorProfile::getProfileDirs() { // first try user's local dir sources.push_back( g_build_filename(g_get_user_data_dir(), "color", "icc", NULL) ); - sources.push_back( g_build_filename(base, ".color", "icc", NULL) ); // OpenICC recommends to deprecate this + const gchar* const * dataDirs = g_get_system_data_dirs(); for ( int i = 0; dataDirs[i]; i++ ) { - sources.push_back(g_build_filename(dataDirs[i], "color", "icc", NULL)); + gchar* path = g_build_filename(dataDirs[i], "color", "icc", NULL); + sources.push_back(path); + g_free(path); + } + + // On OS X: + if ( g_file_test("/Library/ColorSync/Profiles", G_FILE_TEST_EXISTS) && g_file_test("/Library/ColorSync/Profiles", G_FILE_TEST_IS_DIR) ) { + sources.push_back("/Library/ColorSync/Profiles"); + + gchar* path = g_build_filename(g_get_home_dir(), "Library", "ColorSync", "Profiles", NULL); + if ( g_file_test(path, G_FILE_TEST_EXISTS) && g_file_test(path, G_FILE_TEST_IS_DIR) ) { + sources.push_back(path); + } + g_free(path); } + +// #ifdef WIN32 +// wchar_t pathBuf[MAX_PATH + 1]; +// pathBuf[0] = 0; +// DWORD pathSize = sizeof(pathBuf); +// g_assert(sizeof(wchar_t) == sizeof(gunichar2)); +// if ( GetColorDirectoryW( NULL, &pathBuf, &pathSize ) ) { +// gchar * utf8Path = g_utf16_to_utf8( (gunichar2*)(&pathBuf[0]), -1, NULL, NULL, NULL ); +// if ( !g_utf8_validate(utf8Path, -1, NULL) ) { +// g_warning( "GetColorDirectoryW() resulted in invalid UTF-8" ); +// } else { +// sources.pushback(utf8Path); +// } +// g_free( utf8Path ); +// } +// #endif // WIN32 + return sources; } -- 2.30.2