diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2012-01-01 13:41:47 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2012-01-01 14:01:38 -0800 |
commit | 605e063203f8a2a35a5c3be1e7129e80099dd68a (patch) | |
tree | 6685618f4c773ad901d33708ed4468f6210447bd /macos.c | |
parent | 565736a471e9ba66cbc68ce76c90d5e0c2fa57cf (diff) | |
download | subsurface-605e063203f8a2a35a5c3be1e7129e80099dd68a.tar.gz |
Turn subsurface into a real Mac application
To do this a few things needed to move into the os specific files, but the
overall change is fairly small and the difference on the Mac is amazing.
Subsurface now becomes a Mac app with Mac toolbar and useful default
fonts.
Changed the CFBundleIdentifier to be the reverse DNS of the subsurface
site (sadly, 'torvalds' is not yet a TLD).
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'macos.c')
-rw-r--r-- | macos.c | 58 |
1 files changed, 55 insertions, 3 deletions
@@ -3,10 +3,13 @@ #include "display-gtk.h" #include <CoreFoundation/CoreFoundation.h> #include <mach-o/dyld.h> +#include "gtkosxapplication.h" + static CFURLRef fileURL; static CFPropertyListRef propertyList; static CFMutableDictionaryRef dict = NULL; +static GtkOSXApplication *theApp; /* macos defines CFSTR to create a CFString object from a constant, * but no similar macros if a C string variable is supposed to be @@ -16,6 +19,37 @@ static CFMutableDictionaryRef dict = NULL; (_var), kCFStringEncodingMacRoman, \ kCFAllocatorNull) +#define SUBSURFACE_PREFERENCES "~/Library/Preferences/org.hohndel.subsurface.plist" +#define REL_ICON_PATH "Resources/Subsurface.icns" +#define UI_FONT "Arial Unicode MS 12" +#define DIVELIST_MAC_DEFAULT_FONT "Arial Unicode MS 9" + +static void show_error(SInt32 errorCode, char *action) +{ + char *errortext; + + switch(errorCode) { + case -11: errortext = "kCFURLUnknownSchemeError"; + break; + case -12: errortext = "kCFURLResourceNotFoundError"; + break; + case -13: errortext = "kCFURLResourceAccessViolationError"; + break; + case -14: errortext = "kCFURLRemoteHostUnavailableError"; + break; + case -15: errortext = "kCFURLImproperArgumentsError"; + break; + case -16: errortext = "kCFURLUnknownPropertyKeyError"; + break; + case -17: errortext = "kCFURLPropertyKeyUnavailableError"; + break; + case -18: errortext = "kCFURLTimeoutError"; + break; + default: errortext = "kCFURLUnknownError"; + }; + fprintf(stderr, "Error %s preferences: %s\n", action, errortext); +} + void subsurface_open_conf(void) { CFStringRef errorString; @@ -24,7 +58,7 @@ void subsurface_open_conf(void) SInt32 errorCode; fileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, - CFSTR("subsurface.pref"),// file path name + CFSTR(SUBSURFACE_PREFERENCES),// file path name kCFURLPOSIXPathStyle, // interpret as POSIX path false ); // is it a directory? @@ -36,6 +70,8 @@ void subsurface_open_conf(void) resourceData, kCFPropertyListImmutable, &errorString); CFRelease(resourceData); + } else { + show_error(errorCode, "reading"); } } @@ -86,7 +122,9 @@ void subsurface_close_conf(void) dict = NULL; xmlData = CFPropertyListCreateXMLData(kCFAllocatorDefault, propertyList); status = CFURLWriteDataAndPropertiesToResource (fileURL, xmlData, NULL, &errorCode); - // some error handling - but really, what can we do? + if (!status) { + show_error(errorCode, "writing"); + } CFRelease(xmlData); CFRelease(propertyList); } @@ -96,7 +134,6 @@ const char *subsurface_USB_name() return "/dev/tty.SLAB_USBtoUART"; } -#define REL_ICON_PATH "Resources/Subsurface.icns" const char *subsurface_icon_name() { static char path[1024]; @@ -115,3 +152,18 @@ const char *subsurface_icon_name() } return "packaging/macosx/Subsurface.icns"; } + +void subsurface_ui_setup(GtkSettings *settings, GtkWidget *menubar, + GtkWidget *vbox) +{ + if (!divelist_font) + divelist_font = DIVELIST_MAC_DEFAULT_FONT; + g_object_set(G_OBJECT(settings), "gtk-font-name", UI_FONT, NULL); + + theApp = g_object_new(GTK_TYPE_OSX_APPLICATION, NULL); + gtk_widget_hide (menubar); + gtk_osxapplication_set_menu_bar(theApp, GTK_MENU_SHELL(menubar)); + gtk_osxapplication_set_use_quartz_accelerators(theApp, TRUE); + gtk_osxapplication_ready(theApp); + +} |