From d805dca4c7aaea2e089da8ccd3c7549072498de4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 10 Mar 2021 17:49:59 +0400 Subject: [PATCH] Allow menu items to update height. --- ui/widgets/dropdown_menu.h | 8 ++++++-- ui/widgets/menu/menu.cpp | 27 ++++++++++++++------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/ui/widgets/dropdown_menu.h b/ui/widgets/dropdown_menu.h index d852875..214ecdd 100644 --- a/ui/widgets/dropdown_menu.h +++ b/ui/widgets/dropdown_menu.h @@ -27,8 +27,12 @@ public: _hiddenCallback = std::move(callback); } - const std::vector> &actions() const; - bool empty() const; + [[nodiscard]] const std::vector> &actions() const; + [[nodiscard]] bool empty() const; + + [[nodiscard]] not_null menu() const { + return _menu; + } ~DropdownMenu(); diff --git a/ui/widgets/menu/menu.cpp b/ui/widgets/menu/menu.cpp index 61ee9a4..a87a642 100644 --- a/ui/widgets/menu/menu.cpp +++ b/ui/widgets/menu/menu.cpp @@ -129,28 +129,29 @@ not_null Menu::addAction(base::unique_qptr widget) { const auto raw = widget.get(); _actionWidgets.push_back(std::move(widget)); - raw->minWidthValue( + rpl::combine( + raw->minWidthValue(), + raw->heightValue() ) | rpl::start_with_next([=] { const auto newWidth = _forceWidth ? _forceWidth : std::clamp( _actionWidgets.empty() - ? 0 - : (*ranges::max_element( - _actionWidgets, - std::less<>(), - &ItemBase::minWidth))->minWidth(), + ? 0 + : (*ranges::max_element( + _actionWidgets, + std::less<>(), + &ItemBase::minWidth))->minWidth(), _st.widthMin, _st.widthMax); - resizeFromInner(newWidth, height()); + const auto newHeight = ranges::accumulate( + _actionWidgets, + 0, + ranges::plus(), + &ItemBase::height); + resizeFromInner(newWidth, newHeight); }, raw->lifetime()); - const auto newHeight = ranges::accumulate( - _actionWidgets, - 0, - ranges::plus(), - &ItemBase::height); - resizeFromInner(width(), newHeight); updateSelected(QCursor::pos()); return action;