aboutsummaryrefslogtreecommitdiffstats
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
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
-rw-r--r--libempathy-gtk/empathy-chat-text-view.c47
-rw-r--r--libempathy-gtk/empathy-smiley-manager.c2
-rw-r--r--libempathy-gtk/empathy-theme-boxes.c11
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);