GtkWidget *vpane, *hpane;
int error_count;
-#define DIVELIST_DEFAULT_FONT "Sans 8"
const char *divelist_font;
struct units output_units;
divelist_font = subsurface_get_conf("divelist_font", PREF_STRING);
- if (!divelist_font)
- divelist_font = DIVELIST_DEFAULT_FONT;
-
error_info_bar = NULL;
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_set_application_name ("subsurface");
main_vbox = vbox;
menubar = get_menubar_menu(win);
- gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
+
+ subsurface_ui_setup(settings, menubar, vbox);
vpane = gtk_vpaned_new();
gtk_box_pack_start(GTK_BOX(vbox), vpane, TRUE, TRUE, 3);
#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
(_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;
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?
resourceData, kCFPropertyListImmutable,
&errorString);
CFRelease(resourceData);
+ } else {
+ show_error(errorCode, "reading");
}
}
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);
}
return "/dev/tty.SLAB_USBtoUART";
}
-#define REL_ICON_PATH "Resources/Subsurface.icns"
const char *subsurface_icon_name()
{
static char path[1024];
}
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);
+
+}