diff --git a/Telegram/SourceFiles/calls/calls_group_members.cpp b/Telegram/SourceFiles/calls/calls_group_members.cpp index 2d1535df58..be356e31bd 100644 --- a/Telegram/SourceFiles/calls/calls_group_members.cpp +++ b/Telegram/SourceFiles/calls/calls_group_members.cpp @@ -1275,10 +1275,11 @@ base::unique_qptr MembersController::createRowContextMenu( not_null row) { Expects(row->peer()->isUser()); - if (row->peer()->isSelf()) { + const auto real = static_cast(row.get()); + if (row->peer()->isSelf() + && (!_peer->canManageGroupCall() || !real->ssrc())) { return nullptr; } - const auto real = static_cast(row.get()); const auto user = row->peer()->asUser(); auto result = base::make_unique_q( parent, @@ -1358,27 +1359,29 @@ base::unique_qptr MembersController::createRowContextMenu( addMuteActionsToContextMenu(result, user, real); } - result->addAction( - tr::lng_context_view_profile(tr::now), - showProfile); - result->addAction( - tr::lng_context_send_message(tr::now), - showHistory); - const auto canKick = [&] { - if (static_cast(row.get())->state() == Row::State::Invited) { - return false; - } else if (const auto chat = _peer->asChat()) { - return chat->amCreator() - || (chat->canBanMembers() && !chat->admins.contains(user)); - } else if (const auto group = _peer->asMegagroup()) { - return group->canRestrictUser(user); - } - return false; - }(); - if (canKick) { + if (!user->isSelf()) { result->addAction( - tr::lng_context_remove_from_group(tr::now), - removeFromGroup); + tr::lng_context_view_profile(tr::now), + showProfile); + result->addAction( + tr::lng_context_send_message(tr::now), + showHistory); + const auto canKick = [&] { + if (static_cast(row.get())->state() == Row::State::Invited) { + return false; + } else if (const auto chat = _peer->asChat()) { + return chat->amCreator() + || (chat->canBanMembers() && !chat->admins.contains(user)); + } else if (const auto group = _peer->asMegagroup()) { + return group->canRestrictUser(user); + } + return false; + }(); + if (canKick) { + result->addAction( + tr::lng_context_remove_from_group(tr::now), + removeFromGroup); + } } return result; } @@ -1422,7 +1425,7 @@ void MembersController::addMuteActionsToContextMenu( auto mutesFromVolume = rpl::never() | rpl::type_erased(); - if (!isMuted) { + if (!isMuted || user->isSelf()) { const auto call = _call.get(); auto otherParticipantStateValue = call ? call->otherParticipantStateValue( @@ -1448,7 +1451,9 @@ void MembersController::addMuteActionsToContextMenu( volumeItem->toggleMuteLocallyRequests( ) | rpl::start_with_next([=](bool muted) { - toggleMute(muted, true); + if (!user->isSelf()) { + toggleMute(muted, true); + } }, volumeItem->lifetime()); volumeItem->changeVolumeRequests( @@ -1458,14 +1463,16 @@ void MembersController::addMuteActionsToContextMenu( volumeItem->changeVolumeLocallyRequests( ) | rpl::start_with_next([=](int volume) { - changeVolume(volume, true); + if (!user->isSelf()) { + changeVolume(volume, true); + } }, volumeItem->lifetime()); menu->addAction(std::move(volumeItem)); }; const auto muteAction = [&]() -> QAction* { - if (muteState == Row::State::Invited) { + if (muteState == Row::State::Invited || user->isSelf()) { return nullptr; } auto callback = [=] {