X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/0654760a65cb754c4254faa7b38171921ccfb64a..bf5cef4139b16cc3d036bb3b7c3495e9653b0a18:/src/util.c diff --git a/src/util.c b/src/util.c index 6a019a18..5c9823b8 100644 --- a/src/util.c +++ b/src/util.c @@ -21,14 +21,35 @@ #include "config.h" #endif +#ifdef WINDOWS +#include +#endif + #include +#include #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", @@ -38,7 +59,6 @@ void open_url(GtkWindow *parent, const gchar * url) NULL }; gint i=0; - gchar *cmdline = NULL; const gchar *browser = g_getenv("BROWSER"); if (browser == NULL || browser[0] == '\0') { @@ -46,18 +66,48 @@ void open_url(GtkWindow *parent, const gchar * url) 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.") ); #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, "%%%02X", *src); + dst += 3; + } + } + *dst = '\0'; + + return(esc_str); +} +