summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Griffis <tingping@tingping.se>2018-06-08 12:01:25 -0400
committerPatrick Griffis <tingping@tingping.se>2018-06-08 12:11:30 -0400
commit4a4d7188f60eeb5375753d3f6f4b855b18132df2 (patch)
treeb61d319e2786324c082fa2f9510ea7cb6612564b
parente1eaea3eea4c9fab312ef9aab794618849d4a138 (diff)
downloadglib-wip/tingping/osx-user-dirs.tar.gz
Fix special user dir lookup on OSXwip/tingping/osx-user-dirs
This uses newer methods that support more folders such as Downloads. Closes #1048
-rw-r--r--glib/Makefile.am5
-rw-r--r--glib/gutils.c58
-rw-r--r--meson.build3
3 files changed, 28 insertions, 38 deletions
diff --git a/glib/Makefile.am b/glib/Makefile.am
index 049706126..e21c97566 100644
--- a/glib/Makefile.am
+++ b/glib/Makefile.am
@@ -357,6 +357,11 @@ libglib_2_0_la_LDFLAGS = $(GLIB_LINK_FLAGS) \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
-export-dynamic $(no_undefined)
+if OS_COCOA
+libglib_2_0_la_CFLAGS += -xobjective-c
+libglib_2_0_la_LDFLAGS += -Wl,-framework,Foundation
+endif
+
INSTALL_PROGS=
if ENABLE_DTRACE
diff --git a/glib/gutils.c b/glib/gutils.c
index 2b750aba9..18cd31ff2 100644
--- a/glib/gutils.c
+++ b/glib/gutils.c
@@ -119,8 +119,8 @@
# include <process.h>
#endif
-#ifdef HAVE_CARBON
-#include <CoreServices/CoreServices.h>
+#ifdef HAVE_COCOA
+#include <Cocoa/Cocoa.h>
#endif
#ifdef HAVE_CODESET
@@ -1402,56 +1402,38 @@ g_get_user_runtime_dir (void)
return runtime_dir;
}
-#ifdef HAVE_CARBON
+#ifdef HAVE_COCOA
static gchar *
-find_folder (OSType type)
+find_folder (NSSearchPathDirectory type)
{
- gchar *filename = NULL;
- FSRef found;
+ gchar *filename;
+ NSString *path;
+ NSArray *paths;
- if (FSFindFolder (kUserDomain, type, kDontCreateFolder, &found) == noErr)
+ paths = NSSearchPathForDirectoriesInDomains (type, NSUserDomainMask, YES);
+ path = [paths firstObject];
+ if (path == nil)
{
- 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 NULL;
}
+ filename = g_strdup ([path UTF8String]);
+
return filename;
}
static void
load_user_special_dirs (void)
{
- g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = find_folder (kDesktopFolderType);
- g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = find_folder (kDocumentsFolderType);
- g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = find_folder (kDesktopFolderType); /* XXX correct ? */
- g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = find_folder (kMusicDocumentsFolderType);
- g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = find_folder (kPictureDocumentsFolderType);
- g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = NULL;
+ g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = find_folder (NSDesktopDirectory);
+ g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = find_folder (NSDocumentDirectory);
+ g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = find_folder (NSDownloadsDirectory);
+ g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = find_folder (NSMusicDirectory);
+ g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = find_folder (NSPicturesDirectory);
+ g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = find_folder (NSSharedPublicDirectory);
g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = NULL;
- g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = find_folder (kMovieDocumentsFolderType);
+ g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = find_folder (NSMoviesDirectory);
}
#elif defined(G_OS_WIN32)
diff --git a/meson.build b/meson.build
index 91b8721a1..752c8f0a8 100644
--- a/meson.build
+++ b/meson.build
@@ -569,6 +569,7 @@ if host_system == 'linux'
endif
osx_ldflags = []
+osx_cargs = []
glib_have_os_x_9_or_later = false
glib_have_carbon = false
glib_have_cocoa = false
@@ -603,12 +604,14 @@ if host_system == 'darwin'
if glib_have_cocoa
glib_conf.set('HAVE_COCOA', true)
osx_ldflags += ['-Wl,-framework,Foundation', '-Wl,-framework,AppKit']
+ osx_cargs += ['-xobjective-c']
endif
# FIXME: libgio mix C and objC source files and there is no way to reliably
# know which language flags it's going to use to link. Add to both languages
# for now. See https://github.com/mesonbuild/meson/issues/3585.
add_project_link_arguments(osx_ldflags, language : ['objc', 'c'])
+ add_project_arguments(osx_cargs, language : ['c'])
endif
# Check for futex(2)