From 77659c64e0584fd72021d3495ec54d33b9890eb6 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 28 Mar 2022 20:59:54 +0300 Subject: [PATCH] Replaced DropdownMenu with PopupMenu in top bar of sections. --- .../view/history_view_top_bar_widget.cpp | 41 ++++++------------- .../view/history_view_top_bar_widget.h | 4 +- Telegram/SourceFiles/info/info.style | 4 +- 3 files changed, 17 insertions(+), 32 deletions(-) diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index c777ce5bee..50769b9080 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -25,7 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/application.h" #include "core/core_settings.h" #include "ui/widgets/buttons.h" -#include "ui/widgets/dropdown_menu.h" +#include "ui/widgets/popup_menu.h" #include "ui/effects/radial_animation.h" #include "ui/toasts/common_toasts.h" #include "ui/boxes/report_box.h" // Ui::ReportReason @@ -283,8 +283,8 @@ bool TopBarWidget::createMenu(not_null button) { if (!_activeChat.key || _menu) { return false; } - _menu.create(parentWidget(), st::dropdownMenuWithIcons); - _menu->setHiddenCallback([ + _menu.create(this, st::popupMenuWithIcons); + _menu->setDestroyedCallback([ weak = Ui::MakeWeak(this), weakButton = Ui::MakeWeak(button), menu = _menu.data()] { @@ -296,17 +296,7 @@ bool TopBarWidget::createMenu(not_null button) { } } }); - _menu->setShowStartCallback(crl::guard(this, [=, menu = _menu.data()] { - if (_menu == menu) { - button->setForceRippled(true); - } - })); - _menu->setHideStartCallback(crl::guard(this, [=, menu = _menu.data()] { - if (_menu == menu) { - button->setForceRippled(false); - } - })); - button->installEventFilter(_menu); + button->setForceRippled(true); return true; } @@ -323,10 +313,10 @@ void TopBarWidget::showPeerMenu() { if (_menu->empty()) { _menu.destroy(); } else { - _menu->moveToRight( - (parentWidget()->width() - width()) + st::topBarMenuPosition.x(), - st::topBarMenuPosition.y()); - _menu->showAnimated(Ui::PanelAnimation::Origin::TopRight); + _menu->setForcedOrigin(Ui::PanelAnimation::Origin::TopRight); + _menu->popup(mapToGlobal(QPoint( + width() + st::topBarMenuPosition.x(), + st::topBarMenuPosition.y()))); } } @@ -358,14 +348,10 @@ void TopBarWidget::showGroupCallMenu(not_null peer) { : tr::lng_menu_start_group_call_with(tr::now), [=] { callback({ .rtmpNeeded = true }); }, &st::menuIconStartStreamWith); - _menu->moveToRight( - (parentWidget()->width() - width()) - + (width() - - _groupCall->x() - - _groupCall->width() - - st::topBarMenuGroupCallSkip), - st::topBarMenuPosition.y()); - _menu->showAnimated(Ui::PanelAnimation::Origin::TopRight); + _menu->setForcedOrigin(Ui::PanelAnimation::Origin::TopRight); + _menu->popup(mapToGlobal(QPoint( + _groupCall->x() + _groupCall->width() + st::topBarMenuGroupCallSkip, + st::topBarMenuPosition.y()))); } void TopBarWidget::toggleInfoSection() { @@ -729,8 +715,7 @@ void TopBarWidget::setActiveChat( updateUnreadBadge(); refreshInfoButton(); if (_menu) { - _menuToggle->removeEventFilter(_menu); - _menu->hideFast(); + _menu = nullptr; } updateOnlineDisplay(); updateControlsVisibility(); diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h index 1384f03f0b..adcabdce9b 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h @@ -21,7 +21,7 @@ namespace Ui { class AbstractButton; class RoundButton; class IconButton; -class DropdownMenu; +class PopupMenu; class UnreadBadge; class InfiniteRadialAnimation; enum class ReportReason; @@ -179,7 +179,7 @@ private: object_ptr _search; object_ptr _infoToggle; object_ptr _menuToggle; - object_ptr _menu = { nullptr }; + object_ptr _menu = { nullptr }; object_ptr _membersShowArea = { nullptr }; rpl::event_stream _membersShowAreaActive; diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index 21df80975a..7f64c09eaa 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -664,8 +664,8 @@ historyTopBarBack: IconButton(infoTopBarBack) { width: 52px; } topBarHeight: 54px; -topBarMenuPosition: point(-2px, 35px); -topBarMenuGroupCallSkip: 40px; +topBarMenuPosition: point(-6px, 45px); +topBarMenuGroupCallSkip: 20px; topBarDuration: 200; topBarBackward: icon {{ "title_back", menuIconFg }}; topBarForwardAlpha: 0.6;