summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--display-gtk.h1
-rw-r--r--gtk-gui.c12
-rw-r--r--linux.c5
-rw-r--r--macos.c21
-rw-r--r--windows.c5
5 files changed, 34 insertions, 10 deletions
diff --git a/display-gtk.h b/display-gtk.h
index b20495731..23fea912a 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 41e862eb9..acaa9c4f6 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 ac5cf55f9..d2a92596e 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 25f946c81..4c856ce03 100644
--- a/macos.c
+++ b/macos.c
@@ -2,6 +2,7 @@
/* implements Mac OS X specific functions */
#include "display-gtk.h"
#include <CoreFoundation/CoreFoundation.h>
+#include <mach-o/dyld.h>
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 8a81737b0..beb775aa6 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";
+}