summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile16
-rw-r--r--gtk-gui.c30
-rw-r--r--subsurface.desktop10
-rw-r--r--subsurface.svg (renamed from icon.svg)0
4 files changed, 50 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 0c67f40f7..e05b44e94 100644
--- a/Makefile
+++ b/Makefile
@@ -4,9 +4,18 @@ CC=gcc
CFLAGS=-Wall -Wno-pointer-sign -g
INSTALL=install
-prefix = $(HOME)
+# these locations seem to work for SuSE and Fedora
+# prefix = $(HOME)
+prefix = /usr
DESTDIR = $(prefix)/bin
+DESKTOPDIR = $(prefix)/share/applications
+ICONPATH = $(prefix)/share/icons/hicolor
+ICONDIR = $(ICONPATH)/scalable/apps
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(ICONPATH)
+
NAME = subsurface
+ICONFILE = $(NAME).svg
+DESKTOPFILE = $(NAME).desktop
# find libdivecomputer; we don't trust pkg-config here given how young
# libdivecomputer still is - so we check /usr/local and /usr and then we
@@ -49,6 +58,11 @@ $(NAME): $(OBJS)
install: $(NAME)
$(INSTALL) -d -m 755 $(DESTDIR)
$(INSTALL) $(NAME) $(DESTDIR)
+ $(INSTALL) -d -m 755 $(DESKTOPDIR)
+ $(INSTALL) $(DESKTOPFILE) $(DESKTOPDIR)
+ $(INSTALL) -d -m 755 $(ICONDIR)
+ $(INSTALL) $(ICONFILE) $(ICONDIR)
+ $(gtk_update_icon_cache)
parse-xml.o: parse-xml.c dive.h
$(CC) $(CFLAGS) `pkg-config --cflags glib-2.0` -c `xml2-config --cflags` parse-xml.c
diff --git a/gtk-gui.c b/gtk-gui.c
index 4ac538a06..d3de7a649 100644
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -43,6 +43,7 @@ void repaint_dive(void)
}
static char *existing_filename;
+static gboolean need_icon = TRUE;
static void on_info_bar_response(GtkWidget *widget, gint response,
gpointer data)
@@ -428,11 +429,14 @@ static void about_dialog(GtkWidget *w, gpointer data)
{
const char *logo_property = NULL;
GdkPixbuf *logo = NULL;
- GtkWidget *image = gtk_image_new_from_file("icon.svg");
- if (image) {
- logo = gtk_image_get_pixbuf(GTK_IMAGE(image));
- logo_property = "logo";
+ if (need_icon) {
+ GtkWidget *image = gtk_image_new_from_file("subsurface.svg");
+
+ if (image) {
+ logo = gtk_image_get_pixbuf(GTK_IMAGE(image));
+ logo_property = "logo";
+ }
}
gtk_show_about_dialog(NULL,
@@ -441,6 +445,7 @@ static void about_dialog(GtkWidget *w, gpointer data)
"license", "GPLv2",
"version", VERSION_STRING,
"copyright", "Linus Torvalds 2011",
+ "logo-icon-name", "subsurface",
/* Must be last: */
logo_property, logo,
NULL);
@@ -596,6 +601,8 @@ void init_ui(int argc, char **argv)
GtkWidget *equipment;
GtkWidget *menubar;
GtkWidget *vbox;
+ GdkScreen *screen;
+ GtkIconTheme *icon_theme=NULL;
GtkSettings *settings;
static const GtkTargetEntry notebook_target = {
"GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, 0
@@ -627,7 +634,20 @@ void init_ui(int argc, char **argv)
error_info_bar = NULL;
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_icon_from_file(GTK_WINDOW(win), "icon.svg", NULL);
+ g_set_application_name ("subsurface");
+ /* Let's check if the subsurface icon has been installed or if
+ * we need to try to load it from the current directory */
+ screen = gdk_screen_get_default();
+ if (screen)
+ icon_theme = gtk_icon_theme_get_for_screen(screen);
+ if (icon_theme) {
+ if (gtk_icon_theme_has_icon(icon_theme, "subsurface")) {
+ need_icon = FALSE;
+ gtk_window_set_default_icon_name ("subsurface");
+ }
+ }
+ if (need_icon)
+ gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.svg", 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/subsurface.desktop b/subsurface.desktop
new file mode 100644
index 000000000..6fdec1053
--- /dev/null
+++ b/subsurface.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Name=subsurface
+GenericName=dive log program
+Comment=manage and display dive computer data
+Icon=subsurface
+Exec=subsurface
+Terminal=false
+Categories=Accessories;
+
diff --git a/icon.svg b/subsurface.svg
index 29410c8ee..29410c8ee 100644
--- a/icon.svg
+++ b/subsurface.svg