diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp index ca53058c5..9e109e3e9 100644 --- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp +++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.cpp @@ -185,4 +185,33 @@ void ChatsFiltersTabs::paintEvent(QPaintEvent *e) { } } +void ChatsFiltersTabs::mousePressEvent(QMouseEvent *e) { + const auto mouseButton = e->button(); + if (mouseButton == Qt::MouseButton::LeftButton) { + Ui::SettingsSlider::mousePressEvent(e); + } else { + Ui::RpWidget::mousePressEvent(e); + } +} + +void ChatsFiltersTabs::contextMenuEvent(QContextMenuEvent *e) { + const auto pos = e->pos(); + auto left = 0; + auto index = 0; + enumerateSections([&](const Section §ion) { + const auto currentRight = section.left + section.width; + if (pos.x() > left && pos.x() < currentRight) { + return false; + } + left = currentRight; + index++; + return true; + }); + _contextMenuRequested.fire_copy(index); +} + +rpl::producer ChatsFiltersTabs::contextMenuRequested() const { + return _contextMenuRequested.events(); +} + } // namespace Ui diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h index a4d0e3191..786368581 100644 --- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h +++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_slider.h @@ -29,8 +29,12 @@ public: void fitWidthToSections(); void setUnreadCount(int index, int unreadCount); + [[nodiscard]] rpl::producer contextMenuRequested() const; + protected: void paintEvent(QPaintEvent *e) override; + void mousePressEvent(QMouseEvent *e) override; + void contextMenuEvent(QContextMenuEvent *e) override; private: [[nodiscard]] QImage cacheUnreadCount(int count) const; @@ -50,6 +54,8 @@ private: std::optional _bar; std::optional _barActive; + rpl::event_stream _contextMenuRequested; + }; } // namespace Ui