diff options
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); + +} |