diff --git a/src/transcript/layouts/bubble-layout.vala b/src/transcript/layouts/bubble-layout.vala index c812cbe..dbda1a6 100644 --- a/src/transcript/layouts/bubble-layout.vala +++ b/src/transcript/layouts/bubble-layout.vala @@ -28,7 +28,7 @@ private abstract class BubbleLayout : Object, ChatItemLayout public bool from_me { get; set; } public float vertical_padding { get; set; } public string id { get; set; } - + protected float max_width; protected Widget parent; protected BubbleLayoutConstants constants; @@ -63,6 +63,8 @@ private abstract class BubbleLayout : Object, ChatItemLayout public abstract void draw_content(Snapshot snapshot); + public abstract void copy(Gdk.Clipboard clipboard); + private void draw_background(Snapshot snapshot) { var width = get_width(); diff --git a/src/transcript/layouts/chat-item-layout.vala b/src/transcript/layouts/chat-item-layout.vala index 8623e03..40c5f1e 100644 --- a/src/transcript/layouts/chat-item-layout.vala +++ b/src/transcript/layouts/chat-item-layout.vala @@ -10,4 +10,5 @@ interface ChatItemLayout : Object public abstract float get_width(); public abstract void draw(Snapshot snapshot); + public abstract void copy(Gdk.Clipboard clipboard); } diff --git a/src/transcript/layouts/date-item-layout.vala b/src/transcript/layouts/date-item-layout.vala index c9661ce..b147cd0 100644 --- a/src/transcript/layouts/date-item-layout.vala +++ b/src/transcript/layouts/date-item-layout.vala @@ -47,4 +47,8 @@ class DateItemLayout : Object, ChatItemLayout { snapshot.restore(); } + + public void copy(Gdk.Clipboard clipboard) { + clipboard.set_text(layout.get_text()); + } } \ No newline at end of file diff --git a/src/transcript/layouts/image-bubble-layout.vala b/src/transcript/layouts/image-bubble-layout.vala index ea3feea..09f5f4b 100644 --- a/src/transcript/layouts/image-bubble-layout.vala +++ b/src/transcript/layouts/image-bubble-layout.vala @@ -132,4 +132,8 @@ private class ImageBubbleLayout : BubbleLayout snapshot.restore(); } + + public override void copy(Gdk.Clipboard clipboard) { + clipboard.set_texture(cached_texture); + } } \ No newline at end of file diff --git a/src/transcript/layouts/sender-annotation-layout.vala b/src/transcript/layouts/sender-annotation-layout.vala index d442836..13f6fe6 100644 --- a/src/transcript/layouts/sender-annotation-layout.vala +++ b/src/transcript/layouts/sender-annotation-layout.vala @@ -54,4 +54,8 @@ private class SenderAnnotationLayout : Object, ChatItemLayout snapshot.restore(); } + + public void copy(Gdk.Clipboard clipboard) { + clipboard.set_text(sender); + } } \ No newline at end of file diff --git a/src/transcript/layouts/text-bubble-layout.vala b/src/transcript/layouts/text-bubble-layout.vala index a46d0ee..4b3fce2 100644 --- a/src/transcript/layouts/text-bubble-layout.vala +++ b/src/transcript/layouts/text-bubble-layout.vala @@ -91,6 +91,10 @@ private class TextBubbleLayout : BubbleLayout snapshot.restore(); } + + public override void copy(Gdk.Clipboard clipboard) { + clipboard.set_text(message.text); + } } diff --git a/src/transcript/transcript-drawing-area.vala b/src/transcript/transcript-drawing-area.vala index 8a002f7..2169cde 100644 --- a/src/transcript/transcript-drawing-area.vala +++ b/src/transcript/transcript-drawing-area.vala @@ -195,11 +195,7 @@ private class TranscriptDrawingArea : Widget y_offset += chat_item.get_height() + chat_item.vertical_padding; if (y_offset > bounding_box.y) { - var text_bubble = chat_item as TextBubbleLayout; - var text = text_bubble.message.text; - - var clipboard = get_clipboard(); - clipboard.set_text(text); + chat_item.copy(get_clipboard()); break; } }