From f457a9d109452a040938cf8f786d3c711b7a3747 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 11 Oct 2023 21:06:23 +0300 Subject: [PATCH] Added ability to fast change forward options with right click on panel. --- .../SourceFiles/history/history_widget.cpp | 6 +- .../controls/history_view_forward_panel.cpp | 79 +++++++++++++------ .../controls/history_view_forward_panel.h | 1 + 3 files changed, 59 insertions(+), 27 deletions(-) diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 8e2f08809..82390ece5 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -6195,7 +6195,11 @@ void HistoryWidget::mousePressEvent(QMouseEvent *e) { crl::guard(_list, [=] { cancelEdit(); })); } else if (_inReplyEditForward) { if (isReadyToForward) { - _forwardPanel->editOptions(controller()->uiShow()); + if (e->button() != Qt::LeftButton) { + _forwardPanel->editToNextOption(); + } else { + _forwardPanel->editOptions(controller()->uiShow()); + } } else { controller()->showPeerHistory( _peer, diff --git a/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.cpp b/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.cpp index 136d52712..9ed8bc49a 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.cpp @@ -36,6 +36,31 @@ constexpr auto kUnknownVersion = -1; constexpr auto kNameWithCaptionsVersion = -2; constexpr auto kNameNoCaptionsVersion = -3; +[[nodiscard]] bool HasCaptions(const HistoryItemsList &list) { + for (const auto &item : list) { + if (const auto media = item->media()) { + if (!item->originalText().text.isEmpty() + && media->allowsEditCaption()) { + return true; + } + } + } + return false; +} + +[[nodiscard]] bool HasOnlyForcedForwardedInfo(const HistoryItemsList &list) { + for (const auto &item : list) { + if (const auto media = item->media()) { + if (!media->forceForwardedInfo()) { + return false; + } + } else { + return false; + } + } + return true; +} + } // namespace ForwardPanel::ForwardPanel(Fn repaint) @@ -224,32 +249,10 @@ void ForwardPanel::editOptions(std::shared_ptr show) { const auto now = _data.options; const auto count = _data.items.size(); const auto dropNames = (now != Options::PreserveInfo); - const auto hasCaptions = [&] { - for (const auto item : _data.items) { - if (const auto media = item->media()) { - if (!item->originalText().text.isEmpty() - && media->allowsEditCaption()) { - return true; - } - } - } - return false; - }(); - const auto hasOnlyForcedForwardedInfo = [&] { - if (hasCaptions) { - return false; - } - for (const auto item : _data.items) { - if (const auto media = item->media()) { - if (!media->forceForwardedInfo()) { - return false; - } - } else { - return false; - } - } - return true; - }(); + const auto hasCaptions = HasCaptions(_data.items); + const auto hasOnlyForcedForwardedInfo = hasCaptions + ? false + : HasOnlyForcedForwardedInfo(_data.items); const auto dropCaptions = (now == Options::NoNamesAndCaptions); const auto weak = base::make_weak(this); const auto changeRecipient = crl::guard(this, [=] { @@ -299,6 +302,30 @@ void ForwardPanel::editOptions(std::shared_ptr show) { changeRecipient)); } +void ForwardPanel::editToNextOption() { + using Options = Data::ForwardOptions; + const auto hasCaptions = HasCaptions(_data.items); + const auto hasOnlyForcedForwardedInfo = hasCaptions + ? false + : HasOnlyForcedForwardedInfo(_data.items); + if (hasOnlyForcedForwardedInfo) { + return; + } + + const auto now = _data.options; + const auto next = (now == Options::PreserveInfo) + ? Options::NoSenderNames + : ((now == Options::NoSenderNames) && hasCaptions) + ? Options::NoNamesAndCaptions + : Options::PreserveInfo; + + _to->owningHistory()->setForwardDraft(_to->topicRootId(), { + .ids = _to->owner().itemsToIds(_data.items), + .options = next, + }); + _repaint(); +} + void ForwardPanel::paint( Painter &p, int x, diff --git a/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.h b/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.h index b178e27d0..038a0fbf7 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_forward_panel.h @@ -47,6 +47,7 @@ public: [[nodiscard]] rpl::producer<> itemsUpdated() const; void editOptions(std::shared_ptr show); + void editToNextOption(); [[nodiscard]] const HistoryItemsList &items() const; [[nodiscard]] bool empty() const;