]> git.0d.be Git - empathy.git/commitdiff
Merge commit 'gabriel/fix-581488'
authorDafydd Harries <daf@rhydd.org>
Thu, 1 Oct 2009 14:32:28 +0000 (15:32 +0100)
committerDafydd Harries <daf@rhydd.org>
Thu, 1 Oct 2009 14:32:31 +0000 (15:32 +0100)
libempathy-gtk/empathy-chat-text-view.c
libempathy-gtk/empathy-smiley-manager.c
libempathy-gtk/empathy-theme-boxes.c

index d7ebda647f0bd763663728bbcb7e3c4315cbccf1..5b0a3568055c31a165418de0e86b79f35a123c98 100644 (file)
@@ -1159,14 +1159,58 @@ static void
 chat_text_view_copy_clipboard (EmpathyChatView *view)
 {
        GtkTextBuffer *buffer;
+       GtkTextIter start, iter, end;
        GtkClipboard  *clipboard;
+       GdkPixbuf *pixbuf;
+       gunichar c;
+       GtkTextChildAnchor *anchor = NULL;
+       GString *str;
+       GList *list;
+       gboolean ignore_newlines = FALSE;
 
        g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view));
 
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
 
-       gtk_text_buffer_copy_clipboard (buffer, clipboard);
+       if (!gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
+               return;
+
+       str = g_string_new ("");
+
+       for (iter = start; !gtk_text_iter_equal (&iter, &end); gtk_text_iter_forward_char (&iter)) {
+               c = gtk_text_iter_get_char (&iter);
+               if (c == 0xFFFC) {
+                       ignore_newlines = FALSE;
+                       if ((pixbuf = gtk_text_iter_get_pixbuf (&iter))) {
+                               gchar *text;
+                               text = g_object_get_data (G_OBJECT(pixbuf),
+                                                         "smiley_str");
+                               if (text)
+                                       str = g_string_append (str, text);
+                       } else if ((anchor = gtk_text_iter_get_child_anchor (&iter))) {
+                               gchar *text;
+                               list = gtk_text_child_anchor_get_widgets (anchor);
+                               if (list) {
+                                       text = g_object_get_data (G_OBJECT(list->data),
+                                                                 "str_obj");
+                                       if (text)
+                                               str = g_string_append (str, text);
+                               }
+                               g_list_free (list);
+                       }
+               } else if (c == '\n') {
+                       if (!ignore_newlines) {
+                               ignore_newlines = TRUE;
+                               str = g_string_append_unichar (str, c);
+                       }
+               } else {
+                       ignore_newlines = FALSE;
+                       str = g_string_append_unichar (str, c);
+               }
+       }
+
+       gtk_clipboard_set_text (clipboard, g_string_free (str, FALSE), str->len);
 }
 
 static void
index 900e9211c3953289421939f5a4dd9d6b5c647185..0d3e4c512f77689fe52949996a3e057272496174 100644 (file)
@@ -245,6 +245,8 @@ smiley_manager_add_valist (EmpathySmileyManager *manager,
        }
 
        /* We give the ownership of path to the smiley */
+       g_object_set_data_full (G_OBJECT (pixbuf), "smiley_str",
+                               g_strdup (first_str), g_free);
        smiley = smiley_new (pixbuf, g_strdup (first_str), path);
        priv->smileys = g_slist_prepend (priv->smileys, smiley);
 }
index f5224278caace526613ea0891e515e5fa2b0ac06..3d8b8ae7ddab7a4b24494516cc5d614365de998b 100644 (file)
@@ -199,6 +199,7 @@ theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme,
        gboolean              color_set;
        GtkTextTagTable      *table;
        GtkTextTag           *tag;
+       GString              *str_obj;
 
        contact = empathy_message_get_sender (msg);
        name = empathy_contact_get_name (contact);
@@ -267,6 +268,12 @@ theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme,
                               "use-markup", TRUE,
                               "xalign", 1.0,
                               NULL);
+
+       str_obj = g_string_new ("\n- ");
+       g_string_append (str_obj, name);
+       g_string_append (str_obj, ", ");
+       g_string_append (str_obj, tmp);
+       g_string_append (str_obj, " -");
        g_free (tmp);
        g_free (str);
 
@@ -290,6 +297,10 @@ theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme,
        gtk_box_pack_start (GTK_BOX (box), label2, TRUE, TRUE, 0);
 
        /* Add the header box to the text view */
+       g_object_set_data_full (G_OBJECT (box),
+                               "str_obj",
+                               g_string_free (str_obj, FALSE),
+                               g_free);
        gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (view),
                                           box,
                                           anchor);