Have "make install" act more as expected for a desktop application

I'm trying to get subsurface to get closer to becoming a "regular desktop
application"; so far this is based on the recommendations and guidelines
on OpenSUSE and Fedora.

The icon is now named subsurface.svg and make install installs it in the
correct location. At runtime subsurface first checks if an icon is
installed and if it is it uses that - otherwise it falls back to the old
code that tries to read the svg file from the current directory.

We also install a subsurface.desktop file

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2011-10-11 15:58:38 -07:00
parent 089ab5e97c
commit 7df7518625
4 changed files with 50 additions and 6 deletions

View file

@ -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

View file

@ -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,12 +429,15 @@ 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 (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,
"program-name", "SubSurface",
@ -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;

10
subsurface.desktop Normal file
View file

@ -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;

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB