diff options
author | Gabriel Millaire <millaire.gabriel@gmail.com> | 2009-07-02 01:17:00 +0800 |
---|---|---|
committer | Gabriel Millaire <gabriel.millaire@collabora.co.uk> | 2009-10-01 02:14:10 +0800 |
commit | 3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb (patch) | |
tree | c17c455dd3d0284bc5081157e372716dd8fe69f9 | |
parent | d038bcbb47ea96e4c128f85f64897d557ea380b9 (diff) | |
download | gsoc2013-empathy-3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb.tar gsoc2013-empathy-3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb.tar.gz gsoc2013-empathy-3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb.tar.bz2 gsoc2013-empathy-3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb.tar.lz gsoc2013-empathy-3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb.tar.xz gsoc2013-empathy-3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb.tar.zst gsoc2013-empathy-3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb.zip |
Fix copy clipboard to show smileys and to show name and time when using themes other than Classic
Adds an association string to hbox for name and time in themes, adds an association string to pixbuf smiley
-rw-r--r-- | libempathy-gtk/empathy-chat-text-view.c | 47 | ||||
-rw-r--r-- | libempathy-gtk/empathy-smiley-manager.c | 2 | ||||
-rw-r--r-- | libempathy-gtk/empathy-theme-boxes.c | 11 |
3 files changed, 59 insertions, 1 deletions
diff --git a/libempathy-gtk/empathy-chat-text-view.c b/libempathy-gtk/empathy-chat-text-view.c index d7ebda647..2e83cdfb8 100644 --- a/libempathy-gtk/empathy-chat-text-view.c +++ b/libempathy-gtk/empathy-chat-text-view.c @@ -1159,14 +1159,59 @@ 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 flag_return = FALSE; + + str = g_string_new (""); 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)) { + iter = start; + while ((c = gtk_text_iter_get_char (&iter)) != 0 && + !gtk_text_iter_equal (&iter, &end)) { + if (c == 0xFFFC) { + flag_return = 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 (!flag_return) { + flag_return = TRUE; + str = g_string_append_unichar (str, c); + } + } else { + flag_return = FALSE; + str = g_string_append_unichar (str, c); + } + gtk_text_iter_forward_char (&iter); + } + } + + gtk_clipboard_set_text (clipboard, g_string_free (str, FALSE), -1); } 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..0c989ba11 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- "); + str_obj = g_string_append (str_obj, name); + str_obj = g_string_append (str_obj, ", "); + str_obj = g_string_append (str_obj, tmp); + str_obj = 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); |