diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index aae110eba..cc4a91a1f 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -139,6 +139,8 @@ public: void previewReady(rpl::producer parsed); void previewUnregister(); + void mediaEditManagerApply(SendMenu::Action action); + [[nodiscard]] bool isDisplayed() const; [[nodiscard]] bool isEditingMessage() const; [[nodiscard]] bool readyToForward() const; @@ -150,6 +152,7 @@ public: [[nodiscard]] rpl::producer<> editPhotoRequests() const; [[nodiscard]] rpl::producer<> editOptionsRequests() const; [[nodiscard]] MessageToEdit queryToEdit(); + [[nodiscard]] SendMenu::Details saveMenuDetails(bool hasSendText) const; [[nodiscard]] FullReplyTo getDraftReply() const; [[nodiscard]] rpl::producer<> editCancelled() const { @@ -529,6 +532,10 @@ void FieldHeader::previewUnregister() { _previewLifetime.destroy(); } +void FieldHeader::mediaEditManagerApply(SendMenu::Action action) { + _mediaEditManager.apply(action); +} + void FieldHeader::paintWebPage(Painter &p, not_null context) { Expects(!!_preview.parsed); @@ -736,8 +743,12 @@ void FieldHeader::updateControlsGeometry(QSize size) { void FieldHeader::editMessage(FullMsgId id, bool photoEditAllowed) { _photoEditAllowed = photoEditAllowed; _editMsgId = id; - if (!photoEditAllowed) { + if (!id) { _mediaEditManager.cancel(); + } else if (const auto item = _show->session().data().message(id)) { + _mediaEditManager.start(item); + } + if (!photoEditAllowed) { _inPhotoEdit = false; _inPhotoEditOver.stop(); } @@ -790,6 +801,12 @@ MessageToEdit FieldHeader::queryToEdit() { }; } +SendMenu::Details FieldHeader::saveMenuDetails(bool hasSendText) const { + return isEditingMessage() + ? _mediaEditManager.sendMenuDetails(hasSendText) + : SendMenu::Details(); +} + ComposeControls::ComposeControls( not_null parent, ComposeControlsDescriptor descriptor) @@ -2208,6 +2225,19 @@ void ComposeControls::initSendButton() { _sendCustomRequests.fire(std::move(options)); }); + using namespace SendMenu; + const auto sendAction = [=](Action action, Details details) { + if (action.type == ActionType::CaptionUp + || action.type == ActionType::CaptionDown + || action.type == ActionType::SpoilerOn + || action.type == ActionType::SpoilerOff) { + _header->mediaEditManagerApply(action); + } else { + SendMenu::DefaultCallback(_show, send)(action, details); + } + }; + + SendMenu::SetupMenuAndShortcuts( _send.get(), _show, @@ -2529,8 +2559,14 @@ SendMenu::Details ComposeControls::sendMenuDetails() const { return !_history ? SendMenu::Details() : _sendMenuDetails(); } +SendMenu::Details ComposeControls::saveMenuDetails() const { + return _header->saveMenuDetails(HasSendText(_field)); +} + SendMenu::Details ComposeControls::sendButtonMenuDetails() const { - return (computeSendButtonType() == Ui::SendButton::Type::Send) + return (computeSendButtonType() == Ui::SendButton::Type::Save) + ? saveMenuDetails() + : (computeSendButtonType() == Ui::SendButton::Type::Send) ? sendMenuDetails() : SendMenu::Details(); } diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h index 11e7429e2..fb373a0f7 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h @@ -283,6 +283,7 @@ private: [[nodiscard]] auto computeSendButtonType() const; [[nodiscard]] SendMenu::Details sendMenuDetails() const; + [[nodiscard]] SendMenu::Details saveMenuDetails() const; [[nodiscard]] SendMenu::Details sendButtonMenuDetails() const; [[nodiscard]] auto sendContentRequests(