From bbb2a2d5aff02d054cbf0208d2a532f11b860545 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Tue, 9 Oct 2012 16:16:19 +0000 Subject: [PATCH] support 'mailto:address' SVN revision: 77661 --- src/bin/termio.c | 16 ++++++++++++++-- src/bin/utils.c | 5 ++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/bin/termio.c b/src/bin/termio.c index 7fcc5468..d023a1bf 100644 --- a/src/bin/termio.c +++ b/src/bin/termio.c @@ -113,7 +113,7 @@ _activate_link(Evas_Object *obj) if (!sd->link.string) return; if (link_is_url(sd->link.string)) { - if (!strncasecmp(sd->link.string, "file://", 7)) + if (casestartswith(sd->link.string, "file://")) // TODO: decode string: %XX -> char path = sd->link.string + sizeof("file://") - 1; else @@ -124,17 +124,29 @@ _activate_link(Evas_Object *obj) else if (link_is_email(sd->link.string)) email = EINA_TRUE; + if (url && casestartswith(sd->link.string, "mailto:")) + { + email = EINA_TRUE; + url = EINA_FALSE; + } + s = eina_str_escape(sd->link.string); if (!s) return; if (email) { + const char *p = s; + // run mail client cmd = "xdg-email"; if ((config->helper.email) && (config->helper.email[0])) cmd = config->helper.email; - snprintf(buf, sizeof(buf), "%s %s", cmd, s); + + if (casestartswith(s, "mailto:")) + p += sizeof("mailto:") - 1; + + snprintf(buf, sizeof(buf), "%s %s", cmd, p); } else if (path) { diff --git a/src/bin/utils.c b/src/bin/utils.c index 0e735fa4..215be619 100644 --- a/src/bin/utils.c +++ b/src/bin/utils.c @@ -57,7 +57,8 @@ link_is_protocol(const char *str) if (casestartswith(str, "http://") || casestartswith(str, "https://") || casestartswith(str, "ftp://") || - casestartswith(str, "file://")) + casestartswith(str, "file://") || + casestartswith(str, "mailto:")) return EINA_TRUE; return EINA_FALSE; } @@ -78,5 +79,7 @@ link_is_email(const char *str) const char *at = strchr(str, '@'); if (at && strchr(at + 1, '.')) return EINA_TRUE; + if (casestartswith(str, "mailto:")) + return EINA_TRUE; return EINA_FALSE; }