mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
565736a471
commit
605e063203
7 changed files with 81 additions and 10 deletions
58
macos.c
58
macos.c
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue