X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/7d02a0b0145c8c6cd8fc69ad6fd27d49dd394ed8..1d0351050d93479f131ca47509751a4c3dcadce5:/src/util.c diff --git a/src/util.c b/src/util.c index 655fed8e..cddb13d7 100644 --- a/src/util.c +++ b/src/util.c @@ -1,8 +1,8 @@ /* * Viking - GPS data editor - * Copyright (C) 2007 Guilhem Bonnefille + * Copyright (C) 2007, Guilhem Bonnefille * Based on: - * Copyright (C) 2003-2007 Leandro A. F. Pereira + * Copyright (C) 2003-2007, Leandro A. F. Pereira * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,42 +17,100 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef WINDOWS +#include +#endif + +#include +#include + +#include "util.h" #include "dialog.h" +static gboolean spawn_command_line_async(const gchar * cmd, + const gchar * arg) +{ + gchar *cmdline = NULL; + gboolean status; + + cmdline = g_strdup_printf("%s '%s'", cmd, arg); + g_debug("Running: %s", cmdline); + + status = g_spawn_command_line_async(cmdline, NULL); + + g_free(cmdline); + + return status; +} + void open_url(GtkWindow *parent, const gchar * url) { #ifdef WINDOWS - ShellExecute(NULL, NULL, (char *) webpage, NULL, ".\\", 0); + ShellExecute(NULL, NULL, (char *) url, NULL, ".\\", 0); #else /* WINDOWS */ const gchar *browsers[] = { "xdg-open", "gnome-open", "kfmclient openURL", "sensible-browser", "firefox", "epiphany", "iceweasel", "seamonkey", "galeon", "mozilla", "opera", "konqueror", "netscape", "links -g", + "chromium-browser", "chromium", "chrome", + "safari", "camino", "omniweb", "icab", NULL }; gint i=0; - gchar *cmdline = NULL; - gchar *browser = g_getenv("BROWSER"); + const gchar *browser = g_getenv("BROWSER"); if (browser == NULL || browser[0] == '\0') { /* $BROWSER not set -> use first entry */ browser = browsers[i++]; } do { - cmdline = g_strdup_printf("%s '%s'", browser, url); - g_debug("Running: %s", cmdline); - - if (g_spawn_command_line_async(cmdline, NULL)) { - g_free(cmdline); + if (spawn_command_line_async(browser, url)) { return; } - g_free(cmdline); browser = browsers[i++]; } while(browser); - a_dialog_error_msg ( parent, "Could not launch web browser." ); + a_dialog_error_msg ( parent, _("Could not launch web browser.") ); +#endif /* WINDOWS */ +} + +void new_email(GtkWindow *parent, const gchar * address) +{ + gchar *uri = g_strdup_printf("mailto:%s", address); +#ifdef WINDOWS + ShellExecute(NULL, NULL, (char *) uri, NULL, ".\\", 0); +#else /* WINDOWS */ + if (!spawn_command_line_async("xdg-email", uri)) + a_dialog_error_msg ( parent, _("Could not create new email.") ); #endif /* WINDOWS */ + g_free(uri); + uri = NULL; } + +gchar *uri_escape(gchar *str) +{ + gchar *esc_str = g_malloc(3*strlen(str)); + gchar *dst = esc_str; + gchar *src; + + for (src = str; *src; src++) { + if (*src == ' ') + *dst++ = '+'; + else if (g_ascii_isalnum(*src)) + *dst++ = *src; + else { + g_sprintf(dst, "%%%02hhX", *src); + dst += 3; + } + } + *dst = '\0'; + + return(esc_str); +} +