From e1017380ec96bac6c67005d01d96cd836c8c62df Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 19 Nov 2020 05:58:23 +0300 Subject: [PATCH] Fixed filling menu with send options for inline bots and autocomplete. --- .../chat_helpers/field_autocomplete.cpp | 16 +++++++++++++++- .../chat_helpers/field_autocomplete.h | 6 ++++++ .../controls/history_view_compose_controls.cpp | 3 +++ .../inline_bots/inline_results_inner.cpp | 8 +++++++- .../inline_bots/inline_results_inner.h | 6 ++++++ .../inline_bots/inline_results_widget.cpp | 4 ++++ .../inline_bots/inline_results_widget.h | 5 +++++ 7 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp b/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp index 3c6100de80..95b68324b5 100644 --- a/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp +++ b/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp @@ -68,6 +68,7 @@ public: Api::SendOptions options = Api::SendOptions()) const; void setRecentInlineBotsInRows(int32 bots); + void setSendMenuType(Fn &&callback); void rowsUpdated(); rpl::producer mentionChosen() const; @@ -121,6 +122,8 @@ private: bool _previewShown = false; + Fn _sendMenuType; + rpl::event_stream _mentionChosen; rpl::event_stream _hashtagChosen; rpl::event_stream _botCommandChosen; @@ -686,6 +689,10 @@ bool FieldAutocomplete::chooseSelected(ChooseMethod method) const { return _inner->chooseSelected(method); } +void FieldAutocomplete::setSendMenuType(Fn &&callback) { + _inner->setSendMenuType(std::move(callback)); +} + bool FieldAutocomplete::eventFilter(QObject *obj, QEvent *e) { auto hidden = isHidden(); auto moderate = Core::App().settings().moderateModeEnabled(); @@ -1116,7 +1123,9 @@ void FieldAutocomplete::Inner::contextMenuEvent(QContextMenuEvent *e) { return; } const auto index = _sel; - const auto type = SendMenu::Type::Scheduled; + const auto type = _sendMenuType + ? _sendMenuType() + : SendMenu::Type::Disabled; const auto method = FieldAutocomplete::ChooseMethod::ByClick; _menu = base::make_unique_q(this); @@ -1301,6 +1310,11 @@ void FieldAutocomplete::Inner::showPreview() { } } +void FieldAutocomplete::Inner::setSendMenuType( + Fn &&callback) { + _sendMenuType = std::move(callback); +} + auto FieldAutocomplete::Inner::mentionChosen() const -> rpl::producer { return _mentionChosen.events(); diff --git a/Telegram/SourceFiles/chat_helpers/field_autocomplete.h b/Telegram/SourceFiles/chat_helpers/field_autocomplete.h index 8adbaa2c39..cbd5932753 100644 --- a/Telegram/SourceFiles/chat_helpers/field_autocomplete.h +++ b/Telegram/SourceFiles/chat_helpers/field_autocomplete.h @@ -33,6 +33,11 @@ class DocumentMedia; class CloudImageView; } // namespace Data +namespace SendMenu { +enum class Type; +} // namespace SendMenu + + class FieldAutocomplete final : public Ui::RpWidget { public: FieldAutocomplete( @@ -98,6 +103,7 @@ public: void setModerateKeyActivateCallback(Fn callback) { _moderateKeyActivateCallback = std::move(callback); } + void setSendMenuType(Fn &&callback); void hideFast(); 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 bc753817b1..74af9ba309 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -1120,6 +1120,8 @@ void ComposeControls::initAutocomplete() { }); }, _autocomplete->lifetime()); + _autocomplete->setSendMenuType([=] { return sendMenuType(); }); + //_autocomplete->setModerateKeyActivateCallback([=](int key) { // return _keyboard->isHidden() // ? false @@ -2187,6 +2189,7 @@ void ComposeControls::applyInlineBotQuery( InlineBots::ResultSelected result) { _inlineResultChosen.fire_copy(result); }); + _inlineResults->setSendMenuType([=] { return sendMenuType(); }); _inlineResults->requesting( ) | rpl::start_with_next([=](bool requesting) { _tabbedSelectorToggle->setLoading(requesting); diff --git a/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp b/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp index 6074ab1f36..e36111c433 100644 --- a/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp @@ -290,7 +290,9 @@ void Inner::contextMenuEvent(QContextMenuEvent *e) { } const auto row = _selected / MatrixRowShift; const auto column = _selected % MatrixRowShift; - const auto type = SendMenu::Type::Scheduled; + const auto type = _sendMenuType + ? _sendMenuType() + : SendMenu::Type::Disabled; _menu = base::make_unique_q(this); @@ -765,5 +767,9 @@ void Inner::switchPm() { } } +void Inner::setSendMenuType(Fn &&callback) { + _sendMenuType = std::move(callback); +} + } // namespace Layout } // namespace InlineBots diff --git a/Telegram/SourceFiles/inline_bots/inline_results_inner.h b/Telegram/SourceFiles/inline_bots/inline_results_inner.h index 6f2e1ab3a6..bcf58a49d0 100644 --- a/Telegram/SourceFiles/inline_bots/inline_results_inner.h +++ b/Telegram/SourceFiles/inline_bots/inline_results_inner.h @@ -40,6 +40,10 @@ class Result; struct ResultSelected; } // namespace InlineBots +namespace SendMenu { +enum class Type; +} // namespace SendMenu + namespace InlineBots { namespace Layout { @@ -87,6 +91,7 @@ public: void setCurrentDialogsEntryState(Dialogs::EntryState state) { _currentDialogsEntryState = state; } + void setSendMenuType(Fn &&callback); // Ui::AbstractTooltipShower interface. QString tooltipText() const override; @@ -179,6 +184,7 @@ private: bool _previewShown = false; Fn _resultSelectedCallback; + Fn _sendMenuType; }; diff --git a/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp b/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp index 7f94c480a0..2878c3166b 100644 --- a/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp @@ -237,6 +237,10 @@ void Widget::setResultSelectedCallback(Fn callback) { _inner->setResultSelectedCallback(std::move(callback)); } +void Widget::setSendMenuType(Fn &&callback) { + _inner->setSendMenuType(std::move(callback)); +} + void Widget::setCurrentDialogsEntryState(Dialogs::EntryState state) { _inner->setCurrentDialogsEntryState(state); } diff --git a/Telegram/SourceFiles/inline_bots/inline_results_widget.h b/Telegram/SourceFiles/inline_bots/inline_results_widget.h index 62c4acd4fc..d8fe739bf9 100644 --- a/Telegram/SourceFiles/inline_bots/inline_results_widget.h +++ b/Telegram/SourceFiles/inline_bots/inline_results_widget.h @@ -43,6 +43,10 @@ class Result; struct ResultSelected; } // namespace InlineBots +namespace SendMenu { +enum class Type; +} // namespace SendMenu + namespace InlineBots { namespace Layout { @@ -70,6 +74,7 @@ public: void hideAnimated(); void setResultSelectedCallback(Fn callback); + void setSendMenuType(Fn &&callback); void setCurrentDialogsEntryState(Dialogs::EntryState state); [[nodiscard]] rpl::producer requesting() const {