]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-theme-adium.c
Merge back from master
[empathy.git] / libempathy-gtk / empathy-theme-adium.c
index 2889aa304bf0526e0ba9e8e423dac157c29588ef..e1094f1be6da498f292158a6b99f724e02c87c72 100644 (file)
@@ -298,33 +298,6 @@ theme_adium_parse_body (EmpathyThemeAdium *theme,
                               EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
                               &use_smileys);
 
-       if (use_smileys) {
-               /* Replace smileys by a <img/> tag */
-               string = g_string_sized_new (strlen (text));
-               smileys = empathy_smiley_manager_parse (priv->smiley_manager, text);
-               for (l = smileys; l; l = l->next) {
-                       EmpathySmiley *smiley;
-
-                       smiley = l->data;
-                       if (smiley->path) {
-                               g_string_append_printf (string,
-                                                       "<abbr title='%s'><img src=\"%s\"/ alt=\"%s\"/></abbr>",
-                                                       smiley->str, smiley->path, smiley->str);
-                       } else {
-                               gchar *str;
-
-                               str = g_markup_escape_text (smiley->str, -1);
-                               g_string_append (string, str);
-                               g_free (str);
-                       }
-                       empathy_smiley_free (smiley);
-               }
-               g_slist_free (smileys);
-
-               g_free (ret);
-               text = ret = g_string_free (string, FALSE);
-       }
-
        /* Add <a href></a> arround links */
        uri_regex = empathy_uri_regex_dup_singleton ();
        match = g_regex_match (uri_regex, text, 0, &match_info);
@@ -334,6 +307,8 @@ theme_adium_parse_body (EmpathyThemeAdium *theme,
 
                string = g_string_sized_new (strlen (text));
                do {
+                       gchar *real_url;
+
                        g_match_info_fetch_pos (match_info, 0, &s, &e);
 
                        if (s > last) {
@@ -343,12 +318,15 @@ theme_adium_parse_body (EmpathyThemeAdium *theme,
                        }
 
                        /* Append the link inside <a href=""></a> tag */
+                       real_url = empathy_make_absolute_url (text + s);
+
                        g_string_append (string, "<a href=\"");
-                       g_string_append_len (string, text + s, e - s);
+                       g_string_append (string, real_url);
                        g_string_append (string, "\">");
                        g_string_append_len (string, text + s, e - s);
                        g_string_append (string, "</a>");
 
+                       g_free (real_url);
                        last = e;
                } while (g_match_info_next (match_info, NULL));
 
@@ -357,9 +335,35 @@ theme_adium_parse_body (EmpathyThemeAdium *theme,
                        g_string_append_len (string, text + e, strlen (text) - e);
                }
 
+               g_free (ret);
+               text = ret = g_string_free (string, FALSE);
+       } else if (use_smileys) {
+               /* Replace smileys by a <img/> tag */
+               string = g_string_sized_new (strlen (text));
+               smileys = empathy_smiley_manager_parse (priv->smiley_manager, text);
+               for (l = smileys; l; l = l->next) {
+                       EmpathySmiley *smiley;
+
+                       smiley = l->data;
+                       if (smiley->path) {
+                               g_string_append_printf (string,
+                                                       "<abbr title='%s'><img src=\"%s\"/ alt=\"%s\"/></abbr>",
+                                                       smiley->str, smiley->path, smiley->str);
+                       } else {
+                               gchar *str;
+
+                               str = g_markup_escape_text (smiley->str, -1);
+                               g_string_append (string, str);
+                               g_free (str);
+                       }
+                       empathy_smiley_free (smiley);
+               }
+               g_slist_free (smileys);
+
                g_free (ret);
                text = ret = g_string_free (string, FALSE);
        }
+
        g_match_info_free (match_info);
        g_regex_unref (uri_regex);