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;