From b42a7331a851093d2370b852527e9aeb2a84509a Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Thu, 9 Jul 2020 13:13:16 +0300 Subject: [PATCH] One-click forward to Saved Messages --- Telegram/SourceFiles/boxes/share_box.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Telegram/SourceFiles/boxes/share_box.cpp b/Telegram/SourceFiles/boxes/share_box.cpp index 884a046b1..09d8af0c3 100644 --- a/Telegram/SourceFiles/boxes/share_box.cpp +++ b/Telegram/SourceFiles/boxes/share_box.cpp @@ -50,6 +50,7 @@ public: void setPeerSelectedChangedCallback( Fn callback); + void setSubmitRequest(Fn callback); void peerUnselected(not_null peer); std::vector> selected() const; @@ -141,6 +142,7 @@ private: base::flat_set> _selected; Fn _peerSelectedChangedCallback; + Fn _submitRequest; bool _searching = false; QString _lastQuery; @@ -150,6 +152,7 @@ private: rpl::event_stream _scrollToRequests; rpl::event_stream<> _searchRequests; + bool _hadSelection = false; }; ShareBox::ShareBox( @@ -269,6 +272,10 @@ void ShareBox::prepare() { innerSelectedChanged(peer, checked); }); + _inner->setSubmitRequest([=] { + submit({}); + }); + Ui::Emoji::SuggestionsController::Init( getDelegate()->outerContainer(), _comment->entity(), @@ -923,6 +930,15 @@ void ShareBox::Inner::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { updateUpon(e->pos()); changeCheckState(getChatAtIndex(_upon)); + if (!_hadSelection + && _submitRequest + && !(e->modifiers() & Qt::ControlModifier) + && _selected.size() == 1 + && _selected.front()->isSelf()) { + _submitRequest(); + } else if (!_hadSelection) { + _hadSelection = true; + } } } @@ -970,6 +986,10 @@ void ShareBox::Inner::setPeerSelectedChangedCallback( _peerSelectedChangedCallback = std::move(callback); } +void ShareBox::Inner::setSubmitRequest(Fn callback) { + _submitRequest = std::move(callback); +} + void ShareBox::Inner::changePeerCheckState( not_null chat, bool checked,