diff --git a/ui/widgets/input_fields.cpp b/ui/widgets/input_fields.cpp index b16f66b..1df821b 100644 --- a/ui/widgets/input_fields.cpp +++ b/ui/widgets/input_fields.cpp @@ -1278,6 +1278,15 @@ void InputField::scrollTo(int top) { _inner->verticalScrollBar()->setValue(top); } + +bool InputField::menuShown() const { + return _contextMenu != nullptr; +} + +rpl::producer InputField::menuShownValue() const { + return _menuShownChanges.events_starting_with(menuShown()); +} + bool InputField::viewportEventInner(QEvent *e) { if (e->type() == QEvent::TouchBegin || e->type() == QEvent::TouchUpdate @@ -3634,6 +3643,10 @@ void InputField::contextMenuEventInner(QContextMenuEvent *e, QMenu *m) { if (const auto menu = m ? m : _inner->createStandardContextMenu()) { addMarkdownActions(menu, e); _contextMenu = base::make_unique_q(this, menu, _st.menu); + QObject::connect(_contextMenu.get(), &QObject::destroyed, [=] { + _menuShownChanges.fire(false); + }); + _menuShownChanges.fire(true); _contextMenu->popup(e->globalPos()); } } diff --git a/ui/widgets/input_fields.h b/ui/widgets/input_fields.h index 8d7de73..b6b8dad 100644 --- a/ui/widgets/input_fields.h +++ b/ui/widgets/input_fields.h @@ -312,6 +312,9 @@ public: return _markdownTagApplies.events(); } + [[nodiscard]] bool menuShown() const; + [[nodiscard]] rpl::producer menuShownValue() const; + ~InputField(); private Q_SLOTS: @@ -543,6 +546,7 @@ private: bool _correcting = false; MimeDataHook _mimeDataHook; + rpl::event_stream _menuShownChanges; base::unique_qptr _contextMenu; QTextCharFormat _defaultCharFormat;