Fix URL detection

This commit is contained in:
Berke Viktor 2012-10-07 03:00:52 +02:00
parent b4e78e0455
commit 59f32ccb3a
4 changed files with 20 additions and 5 deletions

View File

@ -202,6 +202,16 @@ url_check_word (char *word, int len)
const char *at, *dot; const char *at, *dot;
int i, dots; 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])) if (len > 1 && word[1] == '#' && strchr("@+^%*#", word[0]))
return WORD_CHANNEL; return WORD_CHANNEL;

View File

@ -8,7 +8,9 @@ extern void *url_tree;
#define WORD_CHANNEL 3 #define WORD_CHANNEL 3
#define WORD_HOST 4 #define WORD_HOST 4
#define WORD_EMAIL 5 #define WORD_EMAIL 5
/* anything >0 will be displayed as a link by gtk_xtext_motion_notify() */
#define WORD_DIALOG -1 #define WORD_DIALOG -1
#define WORD_PATH -2
void url_clear (void); void url_clear (void);
void url_save (const char *fname, const char *mode, gboolean fullpath); void url_save (const char *fname, const char *mode, gboolean fullpath);

View File

@ -1080,16 +1080,18 @@ fe_open_url_inner (const char *url)
static void static void
fe_open_url_locale (const char *url) fe_open_url_locale (const char *url)
{ {
#ifndef WIN32 /* the http:// part's missing, prepend it, otherwise it won't always work */
if (url[0] != '/' && strchr (url, ':') == NULL) if (strchr (url, ':') == NULL)
{ {
url = g_strdup_printf ("http://%s", url); url = g_strdup_printf ("http://%s", url);
fe_open_url_inner (url); fe_open_url_inner (url);
g_free ((char *)url); g_free ((char *)url);
return;
} }
#endif /* we have a sane URL, send it to the browser untouched */
fe_open_url_inner (url); else
{
fe_open_url_inner (url);
}
} }
void void

View File

@ -2291,6 +2291,7 @@ mg_word_clicked (GtkWidget *xtext, char *word, GdkEventButton *even)
switch (mg_word_check (xtext, word, strlen (word))) switch (mg_word_check (xtext, word, strlen (word)))
{ {
case 0: case 0:
case WORD_PATH:
menu_middlemenu (sess, even); menu_middlemenu (sess, even);
break; break;
case WORD_URL: case WORD_URL: