diff --git a/ui/widgets/menu/menu.cpp b/ui/widgets/menu/menu.cpp index 217e8f0..616236a 100644 --- a/ui/widgets/menu/menu.cpp +++ b/ui/widgets/menu/menu.cpp @@ -281,20 +281,20 @@ void Menu::clearMouseSelection() { } void Menu::setSelected(int selected) { - if (selected >= _actions.size()) { + if (selected >= _actionWidgets.size()) { selected = -1; } - if (_selected != selected) { - const auto source = _mouseSelection - ? TriggeredSource::Mouse - : TriggeredSource::Keyboard; - if (_selected >= 0) { - _actionWidgets[_selected]->setSelected(false, source); - } - _selected = selected; - if (_selected >= 0) { - _actionWidgets[_selected]->setSelected(true, source); + const auto source = _mouseSelection + ? TriggeredSource::Mouse + : TriggeredSource::Keyboard; + if (const auto selectedItem = findSelectedAction()) { + if (selectedItem->index() == selected) { + return; } + selectedItem->setSelected(false, source); + } + if (selected >= 0) { + _actionWidgets[selected]->setSelected(true, source); } } diff --git a/ui/widgets/menu/menu.h b/ui/widgets/menu/menu.h index 9f3d265..511fa8d 100644 --- a/ui/widgets/menu/menu.h +++ b/ui/widgets/menu/menu.h @@ -119,7 +119,6 @@ private: bool _mouseSelection = false; - int _selected = -1; bool _childShown = false; rpl::event_stream<> _resizesFromInner;