From: Dirk Hohndel Date: Wed, 28 Dec 2011 23:57:36 +0000 (-0800) Subject: Make icon file name OS helper function X-Git-Url: http://git.tdb.fi/?p=ext%2Fsubsurface.git;a=commitdiff_plain;h=565736a471e9ba66cbc68ce76c90d5e0c2fa57cf Make icon file name OS helper function This way we can load the correct icon on the Mac without ugly hacks in the OS independent code. Signed-off-by: Dirk Hohndel --- diff --git a/display-gtk.h b/display-gtk.h index b204957..23fea91 100644 --- a/display-gtk.h +++ b/display-gtk.h @@ -33,6 +33,7 @@ extern const void *subsurface_get_conf(char *name, pref_type_t type); extern void subsurface_close_conf(void); extern const char *subsurface_USB_name(void); +extern const char *subsurface_icon_name(void); extern visible_cols_t visible_cols; diff --git a/gtk-gui.c b/gtk-gui.c index 41e862e..acaa9c4 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -523,11 +523,7 @@ static void about_dialog(GtkWidget *w, gpointer data) GdkPixbuf *logo = NULL; if (need_icon) { -#if defined __linux__ || defined __APPLE__ - GtkWidget *image = gtk_image_new_from_file("subsurface.svg"); -#elif defined WIN32 - GtkWidget *image = gtk_image_new_from_file("subsurface.ico"); -#endif + GtkWidget *image = gtk_image_new_from_file(subsurface_icon_name()); if (image) { logo = gtk_image_get_pixbuf(GTK_IMAGE(image)); @@ -703,11 +699,7 @@ void init_ui(int *argcp, char ***argvp) } } if (need_icon) -#if defined __linux__ || defined __APPLE__ - gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.svg", NULL); -#elif defined WIN32 - gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.ico", NULL); -#endif + gtk_window_set_icon_from_file(GTK_WINDOW(win), subsurface_icon_name(), NULL); g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(on_delete), NULL); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL); main_window = win; diff --git a/linux.c b/linux.c index ac5cf55..d2a9259 100644 --- a/linux.c +++ b/linux.c @@ -51,3 +51,8 @@ const char *subsurface_USB_name() { return "/dev/ttyUSB0"; } + +const char *subsurface_icon_name() +{ + return "subsurface.svg"; +} diff --git a/macos.c b/macos.c index 25f946c..4c856ce 100644 --- a/macos.c +++ b/macos.c @@ -2,6 +2,7 @@ /* implements Mac OS X specific functions */ #include "display-gtk.h" #include +#include static CFURLRef fileURL; static CFPropertyListRef propertyList; @@ -94,3 +95,23 @@ 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]; + char *ptr1, *ptr2; + uint32_t size = sizeof(path); /* need extra space to copy icon path */ + if (_NSGetExecutablePath(path, &size) == 0) { + ptr1 = strcasestr(path,"MacOS/subsurface"); + ptr2 = strcasestr(path,"Contents"); + if (ptr1 && ptr2) { + /* we are running as installed app from a bundle */ + if (ptr1 - path < size - strlen(REL_ICON_PATH)) { + strcpy(ptr1,REL_ICON_PATH); + return path; + } + } + } + return "packaging/macosx/Subsurface.icns"; +} diff --git a/windows.c b/windows.c index 8a81737..beb775a 100644 --- a/windows.c +++ b/windows.c @@ -83,3 +83,8 @@ const char *subsurface_USB_name() { return "COM3"; } + +const char *subsurface_icon_name() +{ + return "subsurface.ico"; +}