aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-chat.c
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-06-27 22:05:02 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-06-27 22:05:02 +0800
commitdfa4c7069189ead061488b3057fd56f86f6d89a2 (patch)
tree43b4dc91486eeebdee2ab3729ecec67a315a62d2 /libempathy-gtk/empathy-chat.c
parenta4f0fc24f06f82f4792836e8e37c5d9d97e92f07 (diff)
downloadgsoc2013-empathy-dfa4c7069189ead061488b3057fd56f86f6d89a2.tar
gsoc2013-empathy-dfa4c7069189ead061488b3057fd56f86f6d89a2.tar.gz
gsoc2013-empathy-dfa4c7069189ead061488b3057fd56f86f6d89a2.tar.bz2
gsoc2013-empathy-dfa4c7069189ead061488b3057fd56f86f6d89a2.tar.lz
gsoc2013-empathy-dfa4c7069189ead061488b3057fd56f86f6d89a2.tar.xz
gsoc2013-empathy-dfa4c7069189ead061488b3057fd56f86f6d89a2.tar.zst
gsoc2013-empathy-dfa4c7069189ead061488b3057fd56f86f6d89a2.zip
factor out empathy_chat_copy()
Much easier to understand its logic that way.
Diffstat (limited to 'libempathy-gtk/empathy-chat.c')
-rw-r--r--libempathy-gtk/empathy-chat.c95
1 files changed, 58 insertions, 37 deletions
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index e9ec8467b..fc2100ba7 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -4216,51 +4216,72 @@ empathy_chat_cut (EmpathyChat *chat)
}
}
-void
-empathy_chat_copy (EmpathyChat *chat)
+static gboolean
+copy_from_chat_view (EmpathyChat *chat)
+{
+ if (!empathy_chat_view_get_has_selection (chat->view))
+ return FALSE;
+
+ empathy_chat_view_copy_clipboard (chat->view);
+ return TRUE;
+}
+
+static gboolean
+copy_from_input (EmpathyChat *chat)
{
GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+ if (!gtk_text_buffer_get_has_selection (buffer))
+ return FALSE;
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ gtk_text_buffer_copy_clipboard (buffer, clipboard);
+ return TRUE;
+}
+
+static gboolean
+copy_from_topic (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+ gint start_offset;
+ gint end_offset;
+ gchar *start;
+ gchar *end;
+ gchar *selection;
+ const gchar *topic;
+ GtkClipboard *clipboard;
+
+ if (!gtk_label_get_selection_bounds (GTK_LABEL (priv->label_topic),
+ &start_offset,
+ &end_offset))
+ return FALSE;
+
+ topic = gtk_label_get_text (GTK_LABEL (priv->label_topic));
+ start = g_utf8_offset_to_pointer (topic, start_offset);
+ end = g_utf8_offset_to_pointer (topic, end_offset);
+ selection = g_strndup (start, end - start);
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text (clipboard, selection, -1);
+ g_free (selection);
+ return TRUE;
+}
+
+void
+empathy_chat_copy (EmpathyChat *chat)
+{
g_return_if_fail (EMPATHY_IS_CHAT (chat));
- if (empathy_chat_view_get_has_selection (chat->view)) {
- empathy_chat_view_copy_clipboard (chat->view);
+ if (copy_from_chat_view (chat))
return;
- }
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
- if (gtk_text_buffer_get_has_selection (buffer)) {
- GtkClipboard *clipboard;
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ if (copy_from_input (chat))
+ return;
- gtk_text_buffer_copy_clipboard (buffer, clipboard);
- }
- else {
- gint start_offset;
- gint end_offset;
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (gtk_label_get_selection_bounds (GTK_LABEL (priv->label_topic),
- &start_offset,
- &end_offset)) {
- gchar *start;
- gchar *end;
- gchar *selection;
- const gchar *topic;
- GtkClipboard *clipboard;
-
- topic = gtk_label_get_text (GTK_LABEL (priv->label_topic));
- start = g_utf8_offset_to_pointer (topic, start_offset);
- end = g_utf8_offset_to_pointer (topic, end_offset);
- selection = g_strndup (start, end - start);
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_text (clipboard, selection, -1);
-
- g_free (selection);
- }
- }
+ copy_from_topic (chat);
}
void