diff options
author | fiaxh <git@lightrise.org> | 2020-06-04 14:03:34 +0200 |
---|---|---|
committer | fiaxh <git@lightrise.org> | 2020-06-04 14:07:51 +0200 |
commit | cdc505f550242801ef53894f21e2dfa1a263be48 (patch) | |
tree | 6466cfe81d6ed4af85243dedbea85990803d29c3 /main | |
parent | 8a64c8501d028ead3fe85a3378cc127db67392a7 (diff) | |
download | dino-cdc505f550242801ef53894f21e2dfa1a263be48.tar.gz dino-cdc505f550242801ef53894f21e2dfa1a263be48.zip |
Add image sending via clipboard paste
fixes #385
Diffstat (limited to 'main')
-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) { |