diff options
author | Berke Viktor <bviktor@hexchat.org> | 2012-10-07 03:00:52 +0200 |
---|---|---|
committer | Berke Viktor <bviktor@hexchat.org> | 2012-10-07 03:00:52 +0200 |
commit | 59f32ccb3a1f192c9faf8f51330db918c4ee3d46 (patch) | |
tree | d37b82f478310815d6e86805e42efd9fe6228445 | |
parent | b4e78e04551fb9836d320f01143d6aa2661cc7f3 (diff) |
Fix URL detection
-rw-r--r-- | src/common/url.c | 10 | ||||
-rw-r--r-- | src/common/url.h | 2 | ||||
-rw-r--r-- | src/fe-gtk/fe-gtk.c | 12 | ||||
-rw-r--r-- | src/fe-gtk/maingui.c | 1 |
4 files changed, 20 insertions, 5 deletions
diff --git a/src/common/url.c b/src/common/url.c index 31a45d49..9b4751ae 100644 --- a/src/common/url.c +++ b/src/common/url.c @@ -202,6 +202,16 @@ url_check_word (char *word, int len) const char *at, *dot; int i, dots; + /* this is pretty much the same as in logmask_is_fullpath() except with length checks */ +#ifdef WIN32 + if ((len > 1 && word[0] == '\\') || (len > 2 && (((word[0] >= 'A' && word[0] <= 'Z') || (word[0] >= 'a' && word[0] <= 'z')) && word[1] == ':'))) +#else + if (len > 1 && word[0] != '/') +#endif + { + return WORD_PATH; + } + if (len > 1 && word[1] == '#' && strchr("@+^%*#", word[0])) return WORD_CHANNEL; diff --git a/src/common/url.h b/src/common/url.h index 487a2007..ab4247e0 100644 --- a/src/common/url.h +++ b/src/common/url.h @@ -8,7 +8,9 @@ extern void *url_tree; #define WORD_CHANNEL 3 #define WORD_HOST 4 #define WORD_EMAIL 5 +/* anything >0 will be displayed as a link by gtk_xtext_motion_notify() */ #define WORD_DIALOG -1 +#define WORD_PATH -2 void url_clear (void); void url_save (const char *fname, const char *mode, gboolean fullpath); diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c index ad401bca..29748f0b 100644 --- a/src/fe-gtk/fe-gtk.c +++ b/src/fe-gtk/fe-gtk.c @@ -1080,16 +1080,18 @@ fe_open_url_inner (const char *url) static void fe_open_url_locale (const char *url) { -#ifndef WIN32 - if (url[0] != '/' && strchr (url, ':') == NULL) + /* the http:// part's missing, prepend it, otherwise it won't always work */ + if (strchr (url, ':') == NULL) { url = g_strdup_printf ("http://%s", url); fe_open_url_inner (url); g_free ((char *)url); - return; } -#endif - fe_open_url_inner (url); + /* we have a sane URL, send it to the browser untouched */ + else + { + fe_open_url_inner (url); + } } void diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index 32fa83cb..41cbb2a6 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -2291,6 +2291,7 @@ mg_word_clicked (GtkWidget *xtext, char *word, GdkEventButton *even) switch (mg_word_check (xtext, word, strlen (word))) { case 0: + case WORD_PATH: menu_middlemenu (sess, even); break; case WORD_URL: |