X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/7d02a0b0145c8c6cd8fc69ad6fd27d49dd394ed8..4e53f3dcd47d9208cff59bdacefdacf554b37962:/src/util.c?ds=sidebyside diff --git a/src/util.c b/src/util.c index 655fed8e..975fce06 100644 --- a/src/util.c +++ b/src/util.c @@ -17,13 +17,38 @@ * 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 "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", @@ -33,26 +58,55 @@ void open_url(GtkWindow *parent, const gchar * url) 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, "%%%02X", *src); + dst += 3; + } + } + *dst = '\0'; + + return(esc_str); +} +