]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-log-window.c
Merge branch 'gnome-3-8'
[empathy.git] / libempathy-gtk / empathy-log-window.c
index 526569a510fd78e6da29ab7945f81ef64654dde6..a815c45fe870564ddbeb0823c32b8e25ede5481d 100644 (file)
@@ -354,7 +354,9 @@ insert_or_change_row (EmpathyLogWindow *self,
 {
   char *str = gtk_tree_path_to_string (path);
   char *script, *text, *date, *stock_icon;
+  GString *escaped_text;
   char *icon = NULL;
+  gint i;
 
   gtk_tree_model_get (model, iter,
       COL_EVENTS_TEXT, &text,
@@ -375,16 +377,34 @@ insert_or_change_row (EmpathyLogWindow *self,
       gtk_icon_info_free (icon_info);
     }
 
+  escaped_text = g_string_new (NULL);
+
+  /* Only need to deal with «'» and «\».
+   *
+   * Note that these never appear in non-ascii utf8 characters, so just
+   * pretend like we have an ascii string...
+   */
+  for (i = 0; text && text[i]; i++)
+    {
+      gchar c = text[i];
+
+      if (c == '\'' || c == '\\')
+        g_string_append_c (escaped_text, '\\');
+
+      g_string_append_c (escaped_text, c);
+    }
+
   script = g_strdup_printf ("javascript:%s([%s], '%s', '%s', '%s');",
       method,
       g_strdelimit (str, ":", ','),
-      text,
+      escaped_text->str,
       icon != NULL ? icon : "",
       date);
 
   webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
       script);
 
+  g_string_free (escaped_text, TRUE);
   g_free (str);
   g_free (text);
   g_free (date);
@@ -1244,7 +1264,6 @@ log_window_append_chat_message (TplEvent *event,
   GtkTreeStore *store = log_window->priv->store_events;
   GtkTreeIter iter, parent;
   gchar *pretty_date, *alias, *body;
-  gchar *msg_escaped;
   GDateTime *date;
   EmpathyStringParser *parsers;
   GString *msg;
@@ -1268,23 +1287,19 @@ log_window_append_chat_message (TplEvent *event,
   empathy_string_parser_substr (empathy_message_get_body (message), -1,
       parsers, msg);
 
-  msg_escaped = g_strescape (msg->str, NULL);
-
   if (tpl_text_event_get_message_type (TPL_TEXT_EVENT (event))
       == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION)
     {
       /* Translators: this is an emote: '* Danielle waves' */
-      body = g_strdup_printf (_("<i>* %s %s</i>"), alias, msg_escaped);
+      body = g_strdup_printf (_("<i>* %s %s</i>"), alias, msg->str);
     }
   else
     {
       /* Translators: this is a message: 'Danielle: hello'
        * The string in bold is the sender's name */
-      body = g_strdup_printf (_("<b>%s:</b> %s"), alias, msg_escaped);
+      body = g_strdup_printf (_("<b>%s:</b> %s"), alias, msg->str);
     }
 
-  g_free (msg_escaped);
-
   gtk_tree_store_append (store, &iter, &parent);
   gtk_tree_store_set (store, &iter,
       COL_EVENTS_TS, tpl_event_get_timestamp (event),