diff --git a/ui/widgets/menu/menu_action.cpp b/ui/widgets/menu/menu_action.cpp index 8035deb..2442bb9 100644 --- a/ui/widgets/menu/menu_action.cpp +++ b/ui/widgets/menu/menu_action.cpp @@ -71,23 +71,7 @@ Action::Action( paint(p); }, lifetime()); - events( - ) | rpl::filter([=](not_null e) { - return _action->isEnabled() - && ((e->type() == QEvent::Leave) - || (e->type() == QEvent::Enter)); - }) | rpl::map([=](not_null e) { - return (e->type() == QEvent::Enter); - }) | rpl::start_with_next([=](bool selected) { - setSelected(selected); - }, lifetime()); - - events( - ) | rpl::filter([=](not_null e) { - return _action->isEnabled() && (e->type() == QEvent::MouseMove); - }) | rpl::start_with_next([=](not_null e) { - setSelected(true); - }, lifetime()); + enableMouseSelecting(); connect(_action, &QAction::changed, [=] { processAction(); }); } diff --git a/ui/widgets/menu/menu_item_base.cpp b/ui/widgets/menu/menu_item_base.cpp index 222806c..d9e28b5 100644 --- a/ui/widgets/menu/menu_item_base.cpp +++ b/ui/widgets/menu/menu_item_base.cpp @@ -115,4 +115,17 @@ void ItemBase::finishAnimating() { RippleButton::finishAnimating(); } +void ItemBase::enableMouseSelecting() { + events( + ) | rpl::filter([=](not_null e) { + return action()->isEnabled() + && ((e->type() == QEvent::Leave) + || (e->type() == QEvent::Enter)); + }) | rpl::map([=](not_null e) { + return (e->type() == QEvent::Enter); + }) | rpl::start_with_next([=](bool selected) { + setSelected(selected); + }, lifetime()); +} + } // namespace Ui::Menu diff --git a/ui/widgets/menu/menu_item_base.h b/ui/widgets/menu/menu_item_base.h index d74219c..c52ed30 100644 --- a/ui/widgets/menu/menu_item_base.h +++ b/ui/widgets/menu/menu_item_base.h @@ -48,6 +48,8 @@ protected: void init(); void initResizeHook(rpl::producer &&size); + void enableMouseSelecting(); + virtual int contentHeight() const = 0; private: