diff options
Diffstat (limited to 'main/src/ui')
-rw-r--r-- | main/src/ui/chat_input/chat_input_controller.vala | 2 | ||||
-rw-r--r-- | main/src/ui/conversation_view_controller.vala | 14 |
2 files changed, 16 insertions, 0 deletions
diff --git a/main/src/ui/chat_input/chat_input_controller.vala b/main/src/ui/chat_input/chat_input_controller.vala index 533f6f0d..bd38067d 100644 --- a/main/src/ui/chat_input/chat_input_controller.vala +++ b/main/src/ui/chat_input/chat_input_controller.vala @@ -11,6 +11,7 @@ public class ChatInputController : Object { public signal void activate_last_message_correction(); public signal void file_picker_selected(); + public signal void clipboard_pasted(); public new string? conversation_display_name { get; set; } public string? conversation_topic { get; set; } @@ -35,6 +36,7 @@ public class ChatInputController : Object { chat_input.chat_text_view.text_view.buffer.changed.connect(on_text_input_changed); chat_input.chat_text_view.text_view.key_press_event.connect(on_text_input_key_press); + chat_input.chat_text_view.text_view.paste_clipboard.connect(() => clipboard_pasted()); chat_text_view_controller.send_text.connect(send_text); diff --git a/main/src/ui/conversation_view_controller.vala b/main/src/ui/conversation_view_controller.vala index 1745593f..d830fc9e 100644 --- a/main/src/ui/conversation_view_controller.vala +++ b/main/src/ui/conversation_view_controller.vala @@ -39,6 +39,7 @@ public class ConversationViewController : Object { this.chat_input_controller = new ChatInputController(view.chat_input, stream_interactor); chat_input_controller.activate_last_message_correction.connect(() => view.conversation_frame.activate_last_message_correction()); chat_input_controller.file_picker_selected.connect(() => open_file_picker()); + chat_input_controller.clipboard_pasted.connect(on_clipboard_paste); view.conversation_frame.init(stream_interactor); @@ -165,6 +166,19 @@ public class ConversationViewController : Object { } } + private void on_clipboard_paste() { + Clipboard clipboard = Clipboard.get(Gdk.SELECTION_CLIPBOARD); + if (clipboard.wait_is_image_available()) { + clipboard.request_image((_, pixbuf) => { + File file = File.new_for_path(Path.build_filename(FileManager.get_storage_dir(), Xmpp.random_uuid() + ".png")); + DataOutputStream fos = new DataOutputStream(file.create(FileCreateFlags.REPLACE_DESTINATION)); + pixbuf.save_to_stream_async.begin(fos, "png", null, () => { + open_send_file_overlay(file); + }); + }); + } + } + private void on_drag_data_received(Widget widget, Gdk.DragContext context, int x, int y, SelectionData selection_data, uint target_type, uint time) { if ((selection_data != null) && (selection_data.get_length() >= 0)) { switch (target_type) { |