From 5b0278847def57b97e8c77dd537282f3e7c12f50 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 27 May 2021 23:20:16 +0400 Subject: [PATCH] Add context menu to video tile right click. --- .../SourceFiles/calls/group/calls_group_members.cpp | 12 +++++++++--- .../calls/group/calls_group_members_row.cpp | 4 ++++ .../calls/group/calls_group_members_row.h | 6 +++++- .../SourceFiles/calls/group/calls_group_viewport.cpp | 9 ++++----- Telegram/ThirdParty/tgcalls | 2 +- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/calls/group/calls_group_members.cpp b/Telegram/SourceFiles/calls/group/calls_group_members.cpp index 580e3b0fd7..6d146cdf7f 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_members.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_members.cpp @@ -96,6 +96,7 @@ public: not_null row, const IconState &state) override; bool rowIsNarrow() override; + void rowShowContextMenu(not_null row); //void rowPaintNarrowBackground( // Painter &p, // int x, @@ -1156,6 +1157,10 @@ bool Members::Controller::rowIsNarrow() { return (_mode == PanelMode::Wide); } +void Members::Controller::rowShowContextMenu(not_null row) { + showRowMenu(row); +} + //void Members::Controller::rowPaintNarrowBackground( // Painter &p, // int x, @@ -1366,15 +1371,16 @@ base::unique_qptr Members::Controller::createRowContextMenu( } return getCurrentWindow(); }; + const auto weakMenu = Ui::MakeWeak(result.get()); const auto performOnMainWindow = [=](auto callback) { if (const auto window = getWindow()) { - if (_menu) { - _menu->discardParentReActivate(); + if (const auto menu = weakMenu.data()) { + menu->discardParentReActivate(); // We must hide PopupMenu before we activate the MainWindow, // otherwise we set focus in field inside MainWindow and then // PopupMenu::hide activates back the group call panel :( - _menu = nullptr; + delete weakMenu; } callback(window); window->widget()->activate(); diff --git a/Telegram/SourceFiles/calls/group/calls_group_members_row.cpp b/Telegram/SourceFiles/calls/group/calls_group_members_row.cpp index 753bcca476..e4e4167bff 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_members_row.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_members_row.cpp @@ -869,6 +869,10 @@ MembersRowDelegate::IconState MembersRow::computeIconState( }; } +void MembersRow::showContextMenu() { + return _delegate->rowShowContextMenu(this); +} + void MembersRow::refreshStatus() { setCustomStatus( (_speaking diff --git a/Telegram/SourceFiles/calls/group/calls_group_members_row.h b/Telegram/SourceFiles/calls/group/calls_group_members_row.h index 7d0d8f6702..ea6ad9af90 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_members_row.h +++ b/Telegram/SourceFiles/calls/group/calls_group_members_row.h @@ -50,7 +50,8 @@ public: virtual bool rowIsMe(not_null participantPeer) = 0; virtual bool rowCanMuteMembers() = 0; virtual void rowUpdateRow(not_null row) = 0; - virtual void rowScheduleRaisedHandStatusRemove(not_null row) = 0; + virtual void rowScheduleRaisedHandStatusRemove( + not_null row) = 0; virtual void rowPaintIcon( Painter &p, QRect rect, @@ -63,6 +64,7 @@ public: not_null row, const IconState &state) = 0; virtual bool rowIsNarrow() = 0; + virtual void rowShowContextMenu(not_null row) = 0; //virtual void rowPaintNarrowBackground( // Painter &p, // int x, @@ -182,6 +184,8 @@ public: [[nodiscard]] MembersRowDelegate::IconState computeIconState( MembersRowStyle style = MembersRowStyle::None) const; + void showContextMenu(); + private: struct BlobsAnimation; struct StatusIcon; diff --git a/Telegram/SourceFiles/calls/group/calls_group_viewport.cpp b/Telegram/SourceFiles/calls/group/calls_group_viewport.cpp index af69d1e9a1..54dc70d86c 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_viewport.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_viewport.cpp @@ -148,10 +148,7 @@ void Viewport::setMode(PanelMode mode, not_null parent) { void Viewport::handleMousePress(QPoint position, Qt::MouseButton button) { handleMouseMove(position); - - if (button == Qt::LeftButton) { - setPressed(_selected); - } + setPressed(_selected); } void Viewport::handleMouseRelease(QPoint position, Qt::MouseButton button) { @@ -160,7 +157,9 @@ void Viewport::handleMouseRelease(QPoint position, Qt::MouseButton button) { setPressed({}); if (const auto tile = pressed.tile) { if (pressed == _selected) { - if (!wide()) { + if (button == Qt::RightButton) { + tile->row()->showContextMenu(); + } else if (!wide()) { _clicks.fire_copy(tile->endpoint()); } else if (pressed.element == Selection::Element::PinButton) { _pinToggles.fire({ diff --git a/Telegram/ThirdParty/tgcalls b/Telegram/ThirdParty/tgcalls index d3eab9af84..11cd08b142 160000 --- a/Telegram/ThirdParty/tgcalls +++ b/Telegram/ThirdParty/tgcalls @@ -1 +1 @@ -Subproject commit d3eab9af84bad9dd9a0853078feee3e53d365ef5 +Subproject commit 11cd08b14206a2ce3669cebafb6e693a30ef14ab