diff options
author | Dafydd Harries <daf@rhydd.org> | 2009-10-01 22:32:28 +0800 |
---|---|---|
committer | Dafydd Harries <daf@rhydd.org> | 2009-10-01 22:32:31 +0800 |
commit | 908127a87ff5647ff00aa54ece3ec85c48c7ffe3 (patch) | |
tree | 9be8a6999643a4d5fb2586115953f046258efffd | |
parent | 267e769eda9406c324b19c308330143fde287cc8 (diff) | |
parent | 0e914b5142f3ca7c6f283edbbfda986dd570deaa (diff) | |
download | gsoc2013-empathy-908127a87ff5647ff00aa54ece3ec85c48c7ffe3.tar gsoc2013-empathy-908127a87ff5647ff00aa54ece3ec85c48c7ffe3.tar.gz gsoc2013-empathy-908127a87ff5647ff00aa54ece3ec85c48c7ffe3.tar.bz2 gsoc2013-empathy-908127a87ff5647ff00aa54ece3ec85c48c7ffe3.tar.lz gsoc2013-empathy-908127a87ff5647ff00aa54ece3ec85c48c7ffe3.tar.xz gsoc2013-empathy-908127a87ff5647ff00aa54ece3ec85c48c7ffe3.tar.zst gsoc2013-empathy-908127a87ff5647ff00aa54ece3ec85c48c7ffe3.zip |
Merge commit 'gabriel/fix-581488'
-rw-r--r-- | libempathy-gtk/empathy-chat-text-view.c | 46 | ||||
-rw-r--r-- | libempathy-gtk/empathy-smiley-manager.c | 2 | ||||
-rw-r--r-- | libempathy-gtk/empathy-theme-boxes.c | 11 |
3 files changed, 58 insertions, 1 deletions
diff --git a/libempathy-gtk/empathy-chat-text-view.c b/libempathy-gtk/empathy-chat-text-view.c index d7ebda647..5b0a35680 100644 --- a/libempathy-gtk/empathy-chat-text-view.c +++ b/libempathy-gtk/empathy-chat-text-view.c @@ -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 diff --git a/libempathy-gtk/empathy-smiley-manager.c b/libempathy-gtk/empathy-smiley-manager.c index 900e9211c..0d3e4c512 100644 --- a/libempathy-gtk/empathy-smiley-manager.c +++ b/libempathy-gtk/empathy-smiley-manager.c @@ -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); } diff --git a/libempathy-gtk/empathy-theme-boxes.c b/libempathy-gtk/empathy-theme-boxes.c index f5224278c..3d8b8ae7d 100644 --- a/libempathy-gtk/empathy-theme-boxes.c +++ b/libempathy-gtk/empathy-theme-boxes.c @@ -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); |