From e0680fc2a5e2e874d5f4083227d5f42b4313da6f Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 29 Jan 2021 20:56:56 +0400 Subject: [PATCH] Fix voice chat menu for admins editing admins. --- Telegram/SourceFiles/calls/calls_group_call.cpp | 4 ++-- .../SourceFiles/calls/calls_group_members.cpp | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/calls/calls_group_call.cpp b/Telegram/SourceFiles/calls/calls_group_call.cpp index 77d119d478..4b190dde56 100644 --- a/Telegram/SourceFiles/calls/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/calls_group_call.cpp @@ -409,11 +409,11 @@ void GroupCall::applyParticipantLocally( const auto mutedCount = 0/*participant->mutedCount*/; using Flag = MTPDgroupCallParticipant::Flag; const auto flags = (canSelfUnmute ? Flag::f_can_self_unmute : Flag(0)) - | (volume.has_value() ? Flag::f_volume : Flag(0)) + | Flag::f_volume // Without flag the volume is reset to 100%. | (participant->lastActive ? Flag::f_active_date : Flag(0)) | (!mute ? Flag(0) - : user->canManageGroupCall() + : _peer->canManageGroupCall() ? Flag::f_muted : Flag::f_muted_by_you); _peer->groupCall()->applyUpdateChecked( diff --git a/Telegram/SourceFiles/calls/calls_group_members.cpp b/Telegram/SourceFiles/calls/calls_group_members.cpp index e1cabf7c49..a31061f149 100644 --- a/Telegram/SourceFiles/calls/calls_group_members.cpp +++ b/Telegram/SourceFiles/calls/calls_group_members.cpp @@ -295,6 +295,7 @@ private: void addMuteActionsToContextMenu( not_null menu, not_null user, + bool userIsCallAdmin, not_null row); void setupListChangeViewers(not_null call); void subscribeToChanges(not_null real); @@ -1356,7 +1357,7 @@ base::unique_qptr MembersController::createRowContextMenu( }); if (real->ssrc() != 0) { - addMuteActionsToContextMenu(result, user, real); + addMuteActionsToContextMenu(result, user, admin, real); } if (!user->isSelf()) { @@ -1389,6 +1390,7 @@ base::unique_qptr MembersController::createRowContextMenu( void MembersController::addMuteActionsToContextMenu( not_null menu, not_null user, + bool userIsCallAdmin, not_null row) { const auto muteString = [=] { return (_peer->canManageGroupCall() @@ -1446,6 +1448,13 @@ void MembersController::addMuteActionsToContextMenu( volumeItem->toggleMuteRequests( ) | rpl::start_with_next([=](bool muted) { + if (muted) { + // Slider value is changed after the callback is called. + // To capture good state inside the slider frame we postpone. + crl::on_main(menu, [=] { + menu->hideMenu(); + }); + } toggleMute(muted, false); }, volumeItem->lifetime()); @@ -1472,7 +1481,9 @@ void MembersController::addMuteActionsToContextMenu( }; const auto muteAction = [&]() -> QAction* { - if (muteState == Row::State::Invited || user->isSelf()) { + if (muteState == Row::State::Invited + || user->isSelf() + || (userIsCallAdmin && row->state() != Row::State::Active)) { return nullptr; } auto callback = [=] {