diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp index db5076952..b59145ec0 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp @@ -1221,18 +1221,14 @@ void PeerListContent::setSearchNoResults(object_ptr noResults) { } } -void PeerListContent::setAboveWidget(object_ptr widget) { +void PeerListContent::setAboveWidget(object_ptr widget) { _aboveWidget = std::move(widget); - if (_aboveWidget) { - _aboveWidget->setParent(this); - } + initDecorateWidget(_aboveWidget.data()); } -void PeerListContent::setAboveSearchWidget(object_ptr widget) { +void PeerListContent::setAboveSearchWidget(object_ptr widget) { _aboveSearchWidget = std::move(widget); - if (_aboveSearchWidget) { - _aboveSearchWidget->setParent(this); - } + initDecorateWidget(_aboveSearchWidget.data()); } void PeerListContent::setHideEmpty(bool hide) { @@ -1240,10 +1236,20 @@ void PeerListContent::setHideEmpty(bool hide) { resizeToWidth(width()); } -void PeerListContent::setBelowWidget(object_ptr widget) { +void PeerListContent::setBelowWidget(object_ptr widget) { _belowWidget = std::move(widget); - if (_belowWidget) { - _belowWidget->setParent(this); + initDecorateWidget(_belowWidget.data()); +} + +void PeerListContent::initDecorateWidget(Ui::RpWidget *widget) { + if (widget) { + widget->setParent(this); + widget->events( + ) | rpl::filter([=](not_null e) { + return (e->type() == QEvent::Enter) && widget->isVisible(); + }) | rpl::start_with_next([=] { + mouseLeftGeometry(); + }, widget->lifetime()); } } diff --git a/Telegram/SourceFiles/boxes/peer_list_box.h b/Telegram/SourceFiles/boxes/peer_list_box.h index 1f1c0e10a..c641fc33c 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.h +++ b/Telegram/SourceFiles/boxes/peer_list_box.h @@ -298,9 +298,9 @@ public: virtual void peerListSetHideEmpty(bool hide) = 0; virtual void peerListSetDescription(object_ptr description) = 0; virtual void peerListSetSearchNoResults(object_ptr noResults) = 0; - virtual void peerListSetAboveWidget(object_ptr aboveWidget) = 0; - virtual void peerListSetAboveSearchWidget(object_ptr aboveWidget) = 0; - virtual void peerListSetBelowWidget(object_ptr belowWidget) = 0; + virtual void peerListSetAboveWidget(object_ptr aboveWidget) = 0; + virtual void peerListSetAboveSearchWidget(object_ptr aboveWidget) = 0; + virtual void peerListSetBelowWidget(object_ptr belowWidget) = 0; virtual void peerListMouseLeftGeometry() = 0; virtual void peerListSetSearchMode(PeerListSearchMode mode) = 0; virtual void peerListAppendRow(std::unique_ptr row) = 0; @@ -618,9 +618,9 @@ public: void setDescription(object_ptr description); void setSearchLoading(object_ptr loading); void setSearchNoResults(object_ptr noResults); - void setAboveWidget(object_ptr widget); - void setAboveSearchWidget(object_ptr widget); - void setBelowWidget(object_ptr width); + void setAboveWidget(object_ptr widget); + void setAboveSearchWidget(object_ptr widget); + void setBelowWidget(object_ptr width); void setHideEmpty(bool hide); void refreshRows(); @@ -781,6 +781,7 @@ private: void clearAllContent(); void handleMouseMove(QPoint globalPosition); void mousePressReleased(Qt::MouseButton button); + void initDecorateWidget(Ui::RpWidget *widget); const style::PeerList &_st; not_null _controller; @@ -815,9 +816,9 @@ private: int _aboveHeight = 0; int _belowHeight = 0; bool _hideEmpty = false; - object_ptr _aboveWidget = { nullptr }; - object_ptr _aboveSearchWidget = { nullptr }; - object_ptr _belowWidget = { nullptr }; + object_ptr _aboveWidget = { nullptr }; + object_ptr _aboveSearchWidget = { nullptr }; + object_ptr _belowWidget = { nullptr }; object_ptr _description = { nullptr }; object_ptr _searchNoResults = { nullptr }; object_ptr _searchLoading = { nullptr }; @@ -901,13 +902,13 @@ public: void peerListSetSearchNoResults(object_ptr noResults) override { _content->setSearchNoResults(std::move(noResults)); } - void peerListSetAboveWidget(object_ptr aboveWidget) override { + void peerListSetAboveWidget(object_ptr aboveWidget) override { _content->setAboveWidget(std::move(aboveWidget)); } - void peerListSetAboveSearchWidget(object_ptr aboveWidget) override { + void peerListSetAboveSearchWidget(object_ptr aboveWidget) override { _content->setAboveSearchWidget(std::move(aboveWidget)); } - void peerListSetBelowWidget(object_ptr belowWidget) override { + void peerListSetBelowWidget(object_ptr belowWidget) override { _content->setBelowWidget(std::move(belowWidget)); } void peerListSetSearchMode(PeerListSearchMode mode) override {