X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/735b92da4f2a7d100a6641349b8daff4d3a3c045..23d6216c871ca648a093bd992f25fd9ce18f971d:/src/util.c?ds=inline diff --git a/src/util.c b/src/util.c index 8b188d72..ee842870 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,19 +17,27 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + /* + * Ideally dependencies should just be on Glib, Gtk, + * see vikutils for things that further depend on other Viking types + */ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#ifdef WINDOWS -#include -#endif - +#include #include #include +#include "util.h" #include "dialog.h" +/* +#ifdef WINDOWS +#include +#endif + +#ifndef WINDOWS static gboolean spawn_command_line_async(const gchar * cmd, const gchar * arg) { @@ -45,51 +53,39 @@ static gboolean spawn_command_line_async(const gchar * cmd, return status; } +#endif +*/ void open_url(GtkWindow *parent, const gchar * url) { -#ifdef WINDOWS - 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", - NULL - }; - gint i=0; - - const gchar *browser = g_getenv("BROWSER"); - if (browser == NULL || browser[0] == '\0') { - /* $BROWSER not set -> use first entry */ - browser = browsers[i++]; + GError *error = NULL; + gtk_show_uri ( gtk_widget_get_screen (GTK_WIDGET(parent)), url, GDK_CURRENT_TIME, &error ); + if ( error ) { + a_dialog_error_msg_extra ( parent, _("Could not launch web browser. %s"), error->message ); + g_error_free ( error ); } - do { - if (spawn_command_line_async(browser, url)) { - return; - } - - 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); + GError *error = NULL; + gtk_show_uri ( gtk_widget_get_screen (GTK_WIDGET(parent)), uri, GDK_CURRENT_TIME, &error ); + if ( error ) { + a_dialog_error_msg_extra ( parent, _("Could not create new email. %s"), error->message ); + g_error_free ( error ); + } + /* #ifdef WINDOWS ShellExecute(NULL, NULL, (char *) uri, NULL, ".\\", 0); -#else /* WINDOWS */ +#else if (!spawn_command_line_async("xdg-email", uri)) a_dialog_error_msg ( parent, _("Could not create new email.") ); -#endif /* WINDOWS */ +#endif + */ g_free(uri); uri = NULL; } - gchar *uri_escape(gchar *str) { gchar *esc_str = g_malloc(3*strlen(str)); @@ -111,3 +107,58 @@ gchar *uri_escape(gchar *str) return(esc_str); } + +GList * str_array_to_glist(gchar* data[]) +{ + GList *gl = NULL; + gpointer * p; + for (p = (gpointer)data; *p; p++) + gl = g_list_prepend(gl, *p); + return g_list_reverse(gl); +} + +/** + * split_string_from_file_on_equals: + * + * @buf: the input string + * @key: newly allocated string that is before the '=' + * @val: newly allocated string after the '=' + * + * Designed for file line processing, so it ignores strings beginning with special + * characters, such as '#'; returns false in such situations. + * Also returns false if no equals character is found + * + * e.g. if buf = "GPS.parameter=42" + * key = "GPS.parameter" + * val = "42" + */ +gboolean split_string_from_file_on_equals ( const gchar *buf, gchar **key, gchar **val ) +{ + // comments, special characters in viking file format + if ( buf == NULL || buf[0] == '\0' || buf[0] == '~' || buf[0] == '=' || buf[0] == '#' ) + return FALSE; + + if ( ! strchr ( buf, '=' ) ) + return FALSE; + + gchar **strv = g_strsplit ( buf, "=", 2 ); + + gint gi = 0; + gchar *str = strv[gi]; + while ( str ) { + if ( gi == 0 ) + *key = g_strdup ( str ); + else + *val = g_strdup ( str ); + gi++; + str = strv[gi]; + } + + g_strfreev ( strv ); + + // Remove newline from val and also any other whitespace + *key = g_strstrip ( *key ); + *val = g_strstrip ( *val ); + + return TRUE; +}