From 86eac2cca2bc726afc895398e87b40a1dc4b02a3 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Mon, 14 May 2007 16:31:50 +0000 Subject: [PATCH] added check for OSX' Carbon framework. 2007-05-14 Michael Natterer * configure.in: added check for OSX' Carbon framework. * libgimpbase/Makefile.am (libgimpbase_2_0_la_LDFLAGS): add $(CARBON_LDFLAGS) * libgimpbase/gimpenv.c (gimp_user_directory): add Carbon version. (find_folder): new Crabon-only utility function. svn path=/trunk/; revision=22488 --- ChangeLog | 11 +++++++ configure.in | 18 ++++++++++++ libgimpbase/Makefile.am | 3 +- libgimpbase/gimpenv.c | 65 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 95 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e6f0f3b3f7..2e93ca42e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-05-14 Michael Natterer + + * configure.in: added check for OSX' Carbon framework. + + * libgimpbase/Makefile.am (libgimpbase_2_0_la_LDFLAGS): add + $(CARBON_LDFLAGS) + + * libgimpbase/gimpenv.c (gimp_user_directory): add Carbon version. + + (find_folder): new Crabon-only utility function. + 2007-05-14 Sven Neumann * app/display/gimpdisplayshell-transform.c: fixed gtk-doc comment. diff --git a/configure.in b/configure.in index 777d417440..49828a78dc 100644 --- a/configure.in +++ b/configure.in @@ -1641,6 +1641,24 @@ AC_MSG_RESULT($mac_twain_ok) AM_CONDITIONAL(HAVE_MAC_TWAIN, test x$mac_twain_ok = xyes) +############################################################# +# Check for Mac OS X Carbon framework (can't build on Darwin) +############################################################# + +carbon_ok=no +AC_MSG_CHECKING([checking for Mac OS X Carbon support]) +AC_TRY_CPP([ +#include +#include +], carbon_ok=yes) +AC_MSG_RESULT($carbon_ok) +if test "x$carbon_ok" = "xyes"; then + AC_DEFINE(HAVE_CARBON, 1, [define to 1 if Carbon is available]) + CARBON_LDFLAGS="-framework Carbon" + AC_SUBST(CARBON_LDFLAGS) +fi + + ########################################################## # Determine where to install the desktop & mime info files ########################################################## diff --git a/libgimpbase/Makefile.am b/libgimpbase/Makefile.am index 890886e3fa..697cd45e6f 100644 --- a/libgimpbase/Makefile.am +++ b/libgimpbase/Makefile.am @@ -149,7 +149,8 @@ libgimpbaseinclude_HEADERS = \ libgimpbase_2_0_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ $(no_undefined) \ - $(libgimpbase_export_symbols) + $(libgimpbase_export_symbols) \ + $(CARBON_LDFLAGS) libgimpbase_2_0_la_DEPENDENCIES = $(gimpbase_def) diff --git a/libgimpbase/gimpenv.c b/libgimpbase/gimpenv.c index 3bef5d3d7a..5363282d16 100644 --- a/libgimpbase/gimpenv.c +++ b/libgimpbase/gimpenv.c @@ -42,7 +42,6 @@ #include "gimpversion.h" #include "gimpreloc.h" - #ifdef G_OS_WIN32 #define STRICT #define WIN32_LEAN_AND_MEAN @@ -66,8 +65,14 @@ #endif #ifndef G_OS_WIN32 +#ifndef HAVE_CARBON #include "xdg-user-dir.h" #endif +#endif + +#ifdef HAVE_CARBON +#include "CoreServices/CoreServices.h" +#endif static gchar * gimp_env_get_dir (const gchar *gimp_env_name, @@ -444,6 +449,45 @@ get_special_folder (int csidl) } #endif +#ifdef HAVE_CARBON +static gchar * +find_folder (OSType type) +{ + gchar *filename = NULL; + FSRef found; + + if (FSFindFolder (kUserDomain, type, kDontCreateFolder, &found) == noErr) + { + CFURLRef url = CFURLCreateFromFSRef (kCFAllocatorSystemDefault, &found); + + if (url) + { + CFStringRef path = CFURLCopyFileSystemPath (url, kCFURLPOSIXPathStyle); + + if (path) + { + filename = g_strdup (CFStringGetCStringPtr (path, kCFStringEncodingUTF8)); + + if (! filename) + { + filename = g_new0 (gchar, CFStringGetLength (path) * 3 + 1); + + CFStringGetCString (path, filename, + CFStringGetLength (path) * 3 + 1, + kCFStringEncodingUTF8); + } + + CFRelease (path); + } + + CFRelease (url); + } + } + + return filename; +} +#endif + /** * gimp_user_directory: * @type: the type of user directory to retrieve @@ -483,6 +527,25 @@ gimp_user_directory (GimpUserDirectory type) case GIMP_USER_DIRECTORY_VIDEOS: return get_special_folder (CSIDL_MYVIDEO); +#elif HAVE_CARBON + case GIMP_USER_DIRECTORY_DESKTOP: + return find_folder (kDesktopFolderType); + + case GIMP_USER_DIRECTORY_DOCUMENTS: + return find_folder (kDocumentsFolderType); + + case GIMP_USER_DIRECTORY_MUSIC: + return find_folder (kMusicDocumentsFolderType); + + case GIMP_USER_DIRECTORY_PICTURES: + return find_folder (kPictureDocumentsFolderType); + + case GIMP_USER_DIRECTORY_TEMPLATES: + return NULL; + + case GIMP_USER_DIRECTORY_VIDEOS: + return find_folder (kMovieDocumentsFolderType); + #else case GIMP_USER_DIRECTORY_DESKTOP: return _xdg_user_dir_lookup ("DESKTOP");