Removed redundant property of mouse selection item from menu.

This commit is contained in:
23rd 2021-01-19 23:41:59 +03:00
parent fedeac3f08
commit 70aa4833b7
2 changed files with 14 additions and 20 deletions

View file

@ -6,8 +6,6 @@
// //
#include "ui/widgets/menu/menu.h" #include "ui/widgets/menu/menu.h"
#include "ui/widgets/buttons.h"
#include "ui/widgets/checkbox.h"
#include "ui/widgets/menu/menu_action.h" #include "ui/widgets/menu/menu_action.h"
#include "ui/widgets/menu/menu_item_base.h" #include "ui/widgets/menu/menu_item_base.h"
#include "ui/widgets/menu/menu_separator.h" #include "ui/widgets/menu/menu_separator.h"
@ -157,7 +155,6 @@ not_null<QAction*> Menu::addSeparator() {
} }
void Menu::clearActions() { void Menu::clearActions() {
setSelected(-1);
_actionWidgets.clear(); _actionWidgets.clear();
for (auto action : base::take(_actions)) { for (auto action : base::take(_actions)) {
if (action->parent() == this) { if (action->parent() == this) {
@ -190,8 +187,10 @@ rpl::producer<> Menu::resizesFromInner() const {
} }
void Menu::setShowSource(TriggeredSource source) { void Menu::setShowSource(TriggeredSource source) {
_mouseSelection = (source == TriggeredSource::Mouse); const auto mouseSelection = (source == TriggeredSource::Mouse);
setSelected((source == TriggeredSource::Mouse || _actions.empty()) ? -1 : 0); setSelected(
(mouseSelection || _actions.empty()) ? -1 : 0,
mouseSelection);
} }
const std::vector<not_null<QAction*>> &Menu::actions() const { const std::vector<not_null<QAction*>> &Menu::actions() const {
@ -204,10 +203,6 @@ void Menu::setForceWidth(int forceWidth) {
} }
void Menu::updateSelected(QPoint globalPosition) { void Menu::updateSelected(QPoint globalPosition) {
if (!_mouseSelection) {
return;
}
const auto p = mapFromGlobal(globalPosition) - QPoint(0, _st.skip); const auto p = mapFromGlobal(globalPosition) - QPoint(0, _st.skip);
for (const auto &widget : _actionWidgets) { for (const auto &widget : _actionWidgets) {
const auto widgetRect = QRect(widget->pos(), widget->size()); const auto widgetRect = QRect(widget->pos(), widget->size());
@ -264,27 +259,29 @@ void Menu::handleKeyPress(not_null<QKeyEvent*> e) {
} while (newSelected != start && (!_actionWidgets[newSelected]->isEnabled())); } while (newSelected != start && (!_actionWidgets[newSelected]->isEnabled()));
if (_actionWidgets[newSelected]->isEnabled()) { if (_actionWidgets[newSelected]->isEnabled()) {
_mouseSelection = false; setSelected(newSelected, false);
setSelected(newSelected);
} }
} }
void Menu::clearSelection() { void Menu::clearSelection() {
_mouseSelection = false; setSelected(-1, false);
setSelected(-1);
} }
void Menu::clearMouseSelection() { void Menu::clearMouseSelection() {
if (_mouseSelection && !_childShown) { const auto selected = findSelectedAction();
const auto mouseSelection = selected
? (selected->lastTriggeredSource() == TriggeredSource::Mouse)
: false;
if (mouseSelection && !_childShown) {
clearSelection(); clearSelection();
} }
} }
void Menu::setSelected(int selected) { void Menu::setSelected(int selected, bool isMouseSelection) {
if (selected >= _actionWidgets.size()) { if (selected >= _actionWidgets.size()) {
selected = -1; selected = -1;
} }
const auto source = _mouseSelection const auto source = isMouseSelection
? TriggeredSource::Mouse ? TriggeredSource::Mouse
: TriggeredSource::Keyboard; : TriggeredSource::Keyboard;
if (const auto selectedItem = findSelectedAction()) { if (const auto selectedItem = findSelectedAction()) {
@ -307,7 +304,6 @@ void Menu::handleMouseMove(QPoint globalPosition) {
const auto inner = rect().marginsRemoved(margins); const auto inner = rect().marginsRemoved(margins);
const auto localPosition = mapFromGlobal(globalPosition); const auto localPosition = mapFromGlobal(globalPosition);
if (inner.contains(localPosition)) { if (inner.contains(localPosition)) {
_mouseSelection = true;
updateSelected(globalPosition); updateSelected(globalPosition);
} else { } else {
clearMouseSelection(); clearMouseSelection();

View file

@ -93,7 +93,7 @@ private:
const style::icon *icon = nullptr, const style::icon *icon = nullptr,
const style::icon *iconOver = nullptr); const style::icon *iconOver = nullptr);
void setSelected(int selected); void setSelected(int selected, bool isMouseSelection);
void clearMouseSelection(); void clearMouseSelection();
void itemPressed(TriggeredSource source); void itemPressed(TriggeredSource source);
@ -117,8 +117,6 @@ private:
int _forceWidth = 0; int _forceWidth = 0;
bool _mouseSelection = false;
bool _childShown = false; bool _childShown = false;
rpl::event_stream<> _resizesFromInner; rpl::event_stream<> _resizesFromInner;