Fixed filling menu with send options for inline bots and autocomplete.

This commit is contained in:
23rd 2020-11-19 05:58:23 +03:00 committed by John Preston
parent a6e4ac679c
commit e1017380ec
7 changed files with 46 additions and 2 deletions

View File

@ -68,6 +68,7 @@ public:
Api::SendOptions options = Api::SendOptions()) const;
void setRecentInlineBotsInRows(int32 bots);
void setSendMenuType(Fn<SendMenu::Type()> &&callback);
void rowsUpdated();
rpl::producer<FieldAutocomplete::MentionChosen> mentionChosen() const;
@ -121,6 +122,8 @@ private:
bool _previewShown = false;
Fn<SendMenu::Type()> _sendMenuType;
rpl::event_stream<FieldAutocomplete::MentionChosen> _mentionChosen;
rpl::event_stream<FieldAutocomplete::HashtagChosen> _hashtagChosen;
rpl::event_stream<FieldAutocomplete::BotCommandChosen> _botCommandChosen;
@ -686,6 +689,10 @@ bool FieldAutocomplete::chooseSelected(ChooseMethod method) const {
return _inner->chooseSelected(method);
}
void FieldAutocomplete::setSendMenuType(Fn<SendMenu::Type()> &&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<Ui::PopupMenu>(this);
@ -1301,6 +1310,11 @@ void FieldAutocomplete::Inner::showPreview() {
}
}
void FieldAutocomplete::Inner::setSendMenuType(
Fn<SendMenu::Type()> &&callback) {
_sendMenuType = std::move(callback);
}
auto FieldAutocomplete::Inner::mentionChosen() const
-> rpl::producer<FieldAutocomplete::MentionChosen> {
return _mentionChosen.events();

View File

@ -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<bool(int)> callback) {
_moderateKeyActivateCallback = std::move(callback);
}
void setSendMenuType(Fn<SendMenu::Type()> &&callback);
void hideFast();

View File

@ -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);

View File

@ -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<Ui::PopupMenu>(this);
@ -765,5 +767,9 @@ void Inner::switchPm() {
}
}
void Inner::setSendMenuType(Fn<SendMenu::Type()> &&callback) {
_sendMenuType = std::move(callback);
}
} // namespace Layout
} // namespace InlineBots

View File

@ -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<SendMenu::Type()> &&callback);
// Ui::AbstractTooltipShower interface.
QString tooltipText() const override;
@ -179,6 +184,7 @@ private:
bool _previewShown = false;
Fn<void(ResultSelected)> _resultSelectedCallback;
Fn<SendMenu::Type()> _sendMenuType;
};

View File

@ -237,6 +237,10 @@ void Widget::setResultSelectedCallback(Fn<void(ResultSelected)> callback) {
_inner->setResultSelectedCallback(std::move(callback));
}
void Widget::setSendMenuType(Fn<SendMenu::Type()> &&callback) {
_inner->setSendMenuType(std::move(callback));
}
void Widget::setCurrentDialogsEntryState(Dialogs::EntryState state) {
_inner->setCurrentDialogsEntryState(state);
}

View File

@ -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<void(ResultSelected)> callback);
void setSendMenuType(Fn<SendMenu::Type()> &&callback);
void setCurrentDialogsEntryState(Dialogs::EntryState state);
[[nodiscard]] rpl::producer<bool> requesting() const {