aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-chat-text-view.c
diff options
context:
space:
mode:
authorGabriel Millaire <millaire.gabriel@gmail.com>2009-07-02 01:17:00 +0800
committerGabriel Millaire <gabriel.millaire@collabora.co.uk>2009-10-01 02:14:10 +0800
commit3f4adb1dc22d89c35b56ea5fa99a5976cfc101bb (patch)
treec17c455dd3d0284bc5081157e372716dd8fe69f9 /libempathy-gtk/empathy-chat-text-view.c
parentd038bcbb47ea96e4c128f85f64897d557ea380b9 (diff)
downloadgsoc2013-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
Diffstat (limited to 'libempathy-gtk/empathy-chat-text-view.c')
-rw-r--r--libempathy-gtk/empathy-chat-text-view.c47
1 files changed, 46 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