Move group call menu to a separate module.

This commit is contained in:
John Preston 2021-03-10 16:29:09 +04:00
parent 506cd8c7ad
commit 84e8053cd0
13 changed files with 381 additions and 279 deletions

View file

@ -270,6 +270,8 @@ PRIVATE
calls/calls_group_common.h
calls/calls_group_members.cpp
calls/calls_group_members.h
calls/calls_group_menu.cpp
calls/calls_group_menu.h
calls/calls_group_panel.cpp
calls/calls_group_panel.h
calls/calls_group_settings.cpp

View file

@ -407,7 +407,7 @@ groupCallMenu: Menu(defaultMenu) {
itemFgShortcutOver: groupCallMemberNotJoinedStatus;
itemFgShortcutDisabled: groupCallMemberNotJoinedStatus;
separatorFg: groupCallMemberNotJoinedStatus;
separatorFg: groupCallMenuBgOver;
arrow: icon {{ "dropdown_submenu_arrow", groupCallMemberNotJoinedStatus }};

View file

@ -147,7 +147,10 @@ void ChooseJoinAsBox(
style::margins());
delegate->setContent(content);
controller->setDelegate(delegate);
box->addButton(tr::lng_continue(), [=] {
auto next = (context == Context::Switch)
? tr::lng_settings_save()
: tr::lng_continue();
box->addButton(std::move(next), [=] {
auto copy = info;
copy.joinAs = controller->selected();
done(std::move(copy));
@ -230,8 +233,7 @@ void ChooseJoinAsProcess::start(
return list;
});
if (list.empty()) {
// #TODO calls in case of anonymous group admin show lng_group_call_no_anonymous
_request->showToast("No way to join this voice chat :(");
_request->showToast(Lang::Hard::ServerError());
return;
} else if (list.size() == 1
&& list.front() == self

View file

@ -313,6 +313,12 @@ void GroupCall::playConnectingSoundOnce() {
_delegate->groupCallPlaySound(Delegate::GroupCallSound::Connecting);
}
bool GroupCall::showChooseJoinAs() const {
return (_possibleJoinAs.size() > 1)
|| (_possibleJoinAs.size() == 1
&& !_possibleJoinAs.front()->isSelf());
}
void GroupCall::start() {
_createRequestId = _api.request(MTPphone_CreateGroupCall(
_peer->input,

View file

@ -107,10 +107,7 @@ public:
[[nodiscard]] not_null<PeerData*> joinAs() const {
return _joinAs;
}
[[nodiscard]] auto possibleJoinAs() const
-> const std::vector<not_null<PeerData*>>& {
return _possibleJoinAs;
}
[[nodiscard]] bool showChooseJoinAs() const;
void start();
void hangup();

View file

@ -1838,12 +1838,6 @@ rpl::producer<int> GroupMembers::fullCountValue() const {
_listController.get())->fullCountValue();
}
//tr::lng_chat_status_members(
// lt_count_decimal,
// controller->fullCountValue() | tr::to_count(),
// Ui::Text::Upper
//),
void GroupMembers::setupList() {
_listController->setStyleOverrides(&st::groupCallMembersList);
_list = _scroll->setOwnedWidget(object_ptr<ListWidget>(

View file

@ -0,0 +1,291 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "calls/calls_group_menu.h"
#include "calls/calls_group_call.h"
#include "calls/calls_group_settings.h"
#include "calls/calls_group_panel.h"
#include "data/data_peer.h"
#include "data/data_group_call.h"
#include "ui/widgets/dropdown_menu.h"
#include "ui/widgets/labels.h"
#include "ui/widgets/checkbox.h"
#include "ui/widgets/input_fields.h"
#include "ui/layers/generic_box.h"
#include "lang/lang_keys.h"
#include "base/unixtime.h"
#include "base/timer_rpl.h"
#include "styles/style_calls.h"
#include "styles/style_layers.h"
#include "styles/style_boxes.h"
namespace Calls::Group {
namespace {
void EditGroupCallTitleBox(
not_null<Ui::GenericBox*> box,
const QString &placeholder,
const QString &title,
Fn<void(QString)> done) {
box->setTitle(tr::lng_group_call_edit_title());
const auto input = box->addRow(object_ptr<Ui::InputField>(
box,
st::groupCallField,
rpl::single(placeholder),
title));
box->setFocusCallback([=] {
input->setFocusFast();
});
box->addButton(tr::lng_settings_save(), [=] {
const auto result = input->getLastText().trimmed();
box->closeBox();
done(result);
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
void StartGroupCallRecordingBox(
not_null<Ui::GenericBox*> box,
const QString &title,
Fn<void(QString)> done) {
box->setTitle(tr::lng_group_call_recording_start());
box->addRow(
object_ptr<Ui::FlatLabel>(
box.get(),
tr::lng_group_call_recording_start_sure(),
st::groupCallBoxLabel));
const auto input = box->addRow(object_ptr<Ui::InputField>(
box,
st::groupCallField,
tr::lng_group_call_recording_start_field(),
title));
box->setFocusCallback([=] {
input->setFocusFast();
});
box->addButton(tr::lng_group_call_recording_start_button(), [=] {
const auto result = input->getLastText().trimmed();
if (result.isEmpty()) {
input->showError();
return;
}
box->closeBox();
done(result);
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
void StopGroupCallRecordingBox(
not_null<Ui::GenericBox*> box,
Fn<void(QString)> done) {
box->addRow(
object_ptr<Ui::FlatLabel>(
box.get(),
tr::lng_group_call_recording_stop_sure(),
st::groupCallBoxLabel),
style::margins(
st::boxRowPadding.left(),
st::boxPadding.top(),
st::boxRowPadding.right(),
st::boxPadding.bottom()));
box->addButton(tr::lng_box_ok(), [=] {
box->closeBox();
done(QString());
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
[[nodiscard]] auto ToDurationFrom(TimeId startDate) {
return [=] {
const auto now = base::unixtime::now();
const auto elapsed = std::max(now - startDate, 0);
const auto hours = elapsed / 3600;
const auto minutes = (elapsed % 3600) / 60;
const auto seconds = (elapsed % 60);
return hours
? QString("%1:%2:%3"
).arg(hours
).arg(minutes, 2, 10, QChar('0')
).arg(seconds, 2, 10, QChar('0'))
: QString("%1:%2"
).arg(minutes
).arg(seconds, 2, 10, QChar('0'));
};
}
[[nodiscard]] rpl::producer<QString> ToRecordDuration(TimeId startDate) {
return !startDate
? (rpl::single(QString()) | rpl::type_erased())
: rpl::single(
rpl::empty_value()
) | rpl::then(base::timer_each(
crl::time(1000)
)) | rpl::map(ToDurationFrom(startDate));
}
} // namespace
void LeaveBox(
not_null<Ui::GenericBox*> box,
not_null<GroupCall*> call,
bool discardChecked,
BoxContext context) {
box->setTitle(tr::lng_group_call_leave_title());
const auto inCall = (context == BoxContext::GroupCallPanel);
box->addRow(object_ptr<Ui::FlatLabel>(
box.get(),
tr::lng_group_call_leave_sure(),
(inCall ? st::groupCallBoxLabel : st::boxLabel)));
const auto discard = call->peer()->canManageGroupCall()
? box->addRow(object_ptr<Ui::Checkbox>(
box.get(),
tr::lng_group_call_end(),
discardChecked,
(inCall ? st::groupCallCheckbox : st::defaultBoxCheckbox),
(inCall ? st::groupCallCheck : st::defaultCheck)),
style::margins(
st::boxRowPadding.left(),
st::boxRowPadding.left(),
st::boxRowPadding.right(),
st::boxRowPadding.bottom()))
: nullptr;
const auto weak = base::make_weak(call.get());
box->addButton(tr::lng_group_call_leave(), [=] {
const auto discardCall = (discard && discard->checked());
box->closeBox();
if (!weak) {
return;
} else if (discardCall) {
call->discard();
} else {
call->hangup();
}
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
void ConfirmBox(
not_null<Ui::GenericBox*> box,
const QString &text,
rpl::producer<QString> button,
Fn<void()> callback) {
box->addRow(
object_ptr<Ui::FlatLabel>(
box.get(),
text,
st::groupCallBoxLabel),
st::boxPadding);
box->addButton(std::move(button), callback);
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
void FillMenu(
not_null<Ui::DropdownMenu*> menu,
not_null<PeerData*> peer,
not_null<GroupCall*> call,
Fn<void()> chooseJoinAs,
Fn<void(object_ptr<Ui::BoxContent>)> showBox) {
const auto weak = base::make_weak(call.get());
const auto resolveReal = [=] {
const auto real = peer->groupCall();
const auto strong = weak.get();
return (real && strong && (real->id() == strong->id()))
? real
: nullptr;
};
const auto real = resolveReal();
if (!real) {
return;
}
const auto addEditJoinAs = call->showChooseJoinAs();
const auto addEditTitle = peer->canManageGroupCall();
const auto addEditRecording = peer->canManageGroupCall();
if (addEditJoinAs) {
menu->addAction(
tr::lng_group_call_display_as_header(tr::now),
chooseJoinAs);
menu->addSeparator();
}
if (addEditTitle) {
menu->addAction(tr::lng_group_call_edit_title(tr::now), [=] {
const auto done = [=](const QString &title) {
if (const auto strong = weak.get()) {
strong->changeTitle(title);
}
};
if (const auto real = resolveReal()) {
showBox(Box(
EditGroupCallTitleBox,
peer->name,
real->title(),
done));
}
});
}
if (addEditRecording) {
const auto label = (real->recordStartDate() != 0)
? tr::lng_group_call_recording_stop(tr::now)
: tr::lng_group_call_recording_start(tr::now);
const auto action = menu->addAction(label, [=] {
const auto real = resolveReal();
if (!real) {
return;
}
const auto recordStartDate = real->recordStartDate();
const auto done = [=](QString title) {
if (const auto strong = weak.get()) {
strong->toggleRecording(!recordStartDate, title);
}
};
if (recordStartDate) {
showBox(Box(
StopGroupCallRecordingBox,
done));
} else {
showBox(Box(
StartGroupCallRecordingBox,
real->title(),
done));
}
});
rpl::combine(
real->recordStartDateValue(),
tr::lng_group_call_recording_stop(),
tr::lng_group_call_recording_start()
) | rpl::map([=](TimeId startDate, QString stop, QString start) {
using namespace rpl::mappers;
return startDate
? ToRecordDuration(
startDate
) | rpl::map(stop + '\t' + _1) : rpl::single(start);
}) | rpl::flatten_latest() | rpl::start_with_next([=](QString text) {
action->setText(text);
}, menu->lifetime());
}
menu->addAction(tr::lng_group_call_settings(tr::now), [=] {
if (const auto strong = weak.get()) {
showBox(Box(SettingsBox, strong));
}
});
menu->addAction(tr::lng_group_call_end(tr::now), [=] {
if (const auto strong = weak.get()) {
showBox(Box(
LeaveBox,
strong,
true,
BoxContext::GroupCallPanel));
}
});
}
} // namespace Calls::Group

View file

@ -0,0 +1,48 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "base/object_ptr.h"
namespace Ui {
class DropdownMenu;
class GenericBox;
class BoxContent;
} // namespace Ui
namespace Calls {
class GroupCall;
} // namespace Calls
namespace Calls::Group {
enum class BoxContext {
GroupCallPanel,
MainWindow,
};
void LeaveBox(
not_null<Ui::GenericBox*> box,
not_null<GroupCall*> call,
bool discardChecked,
BoxContext context);
void ConfirmBox(
not_null<Ui::GenericBox*> box,
const QString &text,
rpl::producer<QString> button,
Fn<void()> callback);
void FillMenu(
not_null<Ui::DropdownMenu*> menu,
not_null<PeerData*> peer,
not_null<GroupCall*> call,
Fn<void()> chooseJoinAs,
Fn<void(object_ptr<Ui::BoxContent>)> showBox);
} // namespace Calls::Group

View file

@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "calls/calls_group_common.h"
#include "calls/calls_group_members.h"
#include "calls/calls_group_settings.h"
#include "calls/calls_group_menu.h"
#include "ui/platform/ui_platform_window_title.h"
#include "ui/widgets/buttons.h"
#include "ui/widgets/window.h"
@ -34,8 +35,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_changes.h"
#include "main/main_session.h"
#include "base/event_filter.h"
#include "base/unixtime.h"
#include "base/timer_rpl.h"
#include "boxes/peers/edit_participants_box.h"
#include "boxes/peers/add_participants_box.h"
#include "boxes/peer_lists_box.h"
@ -142,81 +141,6 @@ private:
return result;
}
void EditGroupCallTitleBox(
not_null<Ui::GenericBox*> box,
const QString &placeholder,
const QString &title,
Fn<void(QString)> done) {
box->setTitle(tr::lng_group_call_edit_title());
const auto input = box->addRow(object_ptr<Ui::InputField>(
box,
st::groupCallField,
rpl::single(placeholder),
title));
box->setFocusCallback([=] {
input->setFocusFast();
});
box->addButton(tr::lng_settings_save(), [=] {
const auto result = input->getLastText().trimmed();
box->closeBox();
done(result);
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
void StartGroupCallRecordingBox(
not_null<Ui::GenericBox*> box,
const QString &title,
Fn<void(QString)> done) {
box->setTitle(tr::lng_group_call_recording_start());
box->addRow(
object_ptr<Ui::FlatLabel>(
box.get(),
tr::lng_group_call_recording_start_sure(),
st::groupCallBoxLabel));
const auto input = box->addRow(object_ptr<Ui::InputField>(
box,
st::groupCallField,
tr::lng_group_call_recording_start_field(),
title));
box->setFocusCallback([=] {
input->setFocusFast();
});
box->addButton(tr::lng_group_call_recording_start_button(), [=] {
const auto result = input->getLastText().trimmed();
if (result.isEmpty()) {
input->showError();
return;
}
box->closeBox();
done(result);
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
void StopGroupCallRecordingBox(
not_null<Ui::GenericBox*> box,
Fn<void(QString)> done) {
box->addRow(
object_ptr<Ui::FlatLabel>(
box.get(),
tr::lng_group_call_recording_stop_sure(),
st::groupCallBoxLabel),
style::margins(
st::boxRowPadding.left(),
st::boxPadding.top(),
st::boxRowPadding.right(),
st::boxPadding.bottom()));
box->addButton(tr::lng_box_ok(), [=] {
box->closeBox();
done(QString());
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
InviteController::InviteController(
not_null<PeerData*> peer,
base::flat_set<not_null<UserData*>> alreadyIn)
@ -322,61 +246,6 @@ std::unique_ptr<PeerListRow> InviteContactsController::createRow(
} // namespace
void LeaveGroupCallBox(
not_null<Ui::GenericBox*> box,
not_null<GroupCall*> call,
bool discardChecked,
BoxContext context) {
box->setTitle(tr::lng_group_call_leave_title());
const auto inCall = (context == BoxContext::GroupCallPanel);
box->addRow(object_ptr<Ui::FlatLabel>(
box.get(),
tr::lng_group_call_leave_sure(),
(inCall ? st::groupCallBoxLabel : st::boxLabel)));
const auto discard = call->peer()->canManageGroupCall()
? box->addRow(object_ptr<Ui::Checkbox>(
box.get(),
tr::lng_group_call_end(),
discardChecked,
(inCall ? st::groupCallCheckbox : st::defaultBoxCheckbox),
(inCall ? st::groupCallCheck : st::defaultCheck)),
style::margins(
st::boxRowPadding.left(),
st::boxRowPadding.left(),
st::boxRowPadding.right(),
st::boxRowPadding.bottom()))
: nullptr;
const auto weak = base::make_weak(call.get());
box->addButton(tr::lng_group_call_leave(), [=] {
const auto discardCall = (discard && discard->checked());
box->closeBox();
if (!weak) {
return;
} else if (discardCall) {
call->discard();
} else {
call->hangup();
}
});
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
void GroupCallConfirmBox(
not_null<Ui::GenericBox*> box,
const QString &text,
rpl::producer<QString> button,
Fn<void()> callback) {
box->addRow(
object_ptr<Ui::FlatLabel>(
box.get(),
text,
st::groupCallBoxLabel),
st::boxPadding);
box->addButton(std::move(button), callback);
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
}
GroupPanel::GroupPanel(not_null<GroupCall*> call)
: _call(call)
, _peer(call->peer())
@ -540,10 +409,10 @@ void GroupPanel::endCall() {
return;
}
_layerBg->showBox(Box(
LeaveGroupCallBox,
Group::LeaveBox,
_call,
false,
BoxContext::GroupCallPanel));
Group::BoxContext::GroupCallPanel));
}
void GroupPanel::initControls() {
@ -565,7 +434,7 @@ void GroupPanel::initControls() {
_hangup->setClickedCallback([=] { endCall(); });
_settings->setClickedCallback([=] {
if (_call) {
_layerBg->showBox(Box(GroupCallSettingsBox, _call));
_layerBg->showBox(Box(Group::SettingsBox, _call));
}
});
@ -716,8 +585,7 @@ void GroupPanel::subscribeToChanges(not_null<Data::GroupCall*> real) {
validateRecordingMark(real->recordStartDate() != 0);
const auto showMenu = _peer->canManageGroupCall();
const auto showUserpic = !showMenu
&& (_call->possibleJoinAs().size() > 1); // #TODO calls when to show
const auto showUserpic = !showMenu && _call->showChooseJoinAs();
if (showMenu) {
_joinAsToggle.destroy();
if (!_menuToggle) {
@ -775,11 +643,17 @@ void GroupPanel::chooseJoinAs() {
}
void GroupPanel::showMainMenu() {
const auto real = _peer->groupCall();
if (_menu || !_call || !real || real->id() != _call->id()) {
if (_menu || !_call) {
return;
}
_menu.create(widget(), st::groupCallDropdownMenu);
Group::FillMenu(
_menu.data(),
_peer,
_call,
[=] { chooseJoinAs(); },
[=](auto box) { _layerBg->showBox(std::move(box)); });
const auto raw = _menu.data();
raw->setHiddenCallback([=] {
raw->deleteLater();
@ -800,109 +674,6 @@ void GroupPanel::showMainMenu() {
});
_menuToggle->installEventFilter(_menu);
const auto addEditJoinAs = (_call->possibleJoinAs().size() > 1); // #TODO calls when to show
const auto addEditTitle = _peer->canManageGroupCall();
const auto addEditRecording = _peer->canManageGroupCall();
if (addEditJoinAs) {
_menu->addAction(tr::lng_group_call_display_as_header(tr::now), [=] {
chooseJoinAs();
});
}
if (addEditTitle) {
_menu->addAction(tr::lng_group_call_edit_title(tr::now), [=] {
const auto done = [=](const QString &title) {
if (_call) {
_call->changeTitle(title);
}
};
_layerBg->showBox(Box(
EditGroupCallTitleBox,
_peer->name,
real->title(),
done));
});
}
if (addEditRecording) {
const auto action = _menu->addAction((real->recordStartDate() != 0)
? tr::lng_group_call_recording_stop(tr::now)
: tr::lng_group_call_recording_start(tr::now), [=] {
const auto real = _peer->groupCall();
const auto id = _call ? _call->id() : 0;
if (!real || real->id() != id) {
return;
}
const auto recordStartDate = real->recordStartDate();
const auto done = [=](QString title) {
if (_call) {
_call->toggleRecording(!recordStartDate, title);
}
};
if (recordStartDate) {
_layerBg->showBox(Box(
StopGroupCallRecordingBox,
done));
} else {
_layerBg->showBox(Box(
StartGroupCallRecordingBox,
real->title(),
done));
}
});
static const auto ToDurationFrom = [](TimeId startDate) {
return [=] {
const auto now = base::unixtime::now();
const auto elapsed = std::max(now - startDate, 0);
const auto hours = elapsed / 3600;
const auto minutes = (elapsed % 3600) / 60;
const auto seconds = (elapsed % 60);
return hours
? QString("%1:%2:%3"
).arg(hours
).arg(minutes, 2, 10, QChar('0')
).arg(seconds, 2, 10, QChar('0'))
: QString("%1:%2"
).arg(minutes
).arg(seconds, 2, 10, QChar('0'));
};
};
static const auto ToRecordDuration = [](TimeId startDate) {
return !startDate
? (rpl::single(QString()) | rpl::type_erased())
: rpl::single(
rpl::empty_value()
) | rpl::then(base::timer_each(
crl::time(1000)
)) | rpl::map(ToDurationFrom(startDate));
};
rpl::combine(
real->recordStartDateValue(),
tr::lng_group_call_recording_stop(),
tr::lng_group_call_recording_start()
) | rpl::map([=](TimeId startDate, QString stop, QString start) {
using namespace rpl::mappers;
return startDate
? ToRecordDuration(
startDate
) | rpl::map(stop + '\t' + _1) : rpl::single(start);
}) | rpl::flatten_latest() | rpl::start_with_next([=](QString text) {
action->setText(text);
}, _menu->lifetime());
}
_menu->addAction(tr::lng_group_call_settings(tr::now), [=] {
if (_call) {
_layerBg->showBox(Box(GroupCallSettingsBox, _call));
}
});
_menu->addAction(tr::lng_group_call_end(tr::now), [=] {
if (_call) {
_layerBg->showBox(Box(
LeaveGroupCallBox,
_call,
true,
BoxContext::GroupCallPanel));
}
});
const auto x = st::groupCallMenuPosition.x();
const auto y = st::groupCallMenuPosition.y();
if (_menuToggle->x() > widget()->width() / 2) {
@ -1014,7 +785,7 @@ void GroupPanel::addMembers() {
finish();
};
auto box = Box(
GroupCallConfirmBox,
Group::ConfirmBox,
text,
tr::lng_participant_invite(),
[=] { inviteWithAdd(users, nonMembers, finishWithConfirm); });

View file

@ -55,17 +55,6 @@ class SignalBars;
class GroupMembers;
enum class BoxContext {
GroupCallPanel,
MainWindow,
};
void LeaveGroupCallBox(
not_null<Ui::GenericBox*> box,
not_null<GroupCall*> call,
bool discardChecked,
BoxContext context);
class GroupPanel final {
public:
GroupPanel(not_null<GroupCall*> call);

View file

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "calls/calls_group_settings.h"
#include "calls/calls_group_call.h"
#include "calls/calls_group_panel.h" // LeaveGroupCallBox.
#include "calls/calls_group_menu.h" // LeaveBox.
#include "calls/calls_group_common.h"
#include "calls/calls_instance.h"
#include "calls/calls_choose_join_as.h"
@ -44,7 +44,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QtGui/QGuiApplication>
namespace Calls {
namespace Calls::Group {
namespace {
constexpr auto kDelaysCount = 201;
@ -88,7 +88,7 @@ void SaveCallJoinMuted(
} // namespace
void GroupCallSettingsBox(
void SettingsBox(
not_null<Ui::GenericBox*> box,
not_null<GroupCall*> call) {
using namespace Settings;
@ -462,7 +462,7 @@ void GroupCallSettingsBox(
)->addClickHandler([=] {
if (const auto call = weakCall.get()) {
box->getDelegate()->show(Box(
LeaveGroupCallBox,
LeaveBox,
call,
true,
BoxContext::GroupCallPanel));
@ -495,4 +495,4 @@ void GroupCallSettingsBox(
});
}
} // namespace Calls
} // namespace Calls::Group

View file

@ -10,11 +10,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/layers/generic_box.h"
namespace Calls {
class GroupCall;
} // namespace Calls
void GroupCallSettingsBox(
namespace Calls::Group {
void SettingsBox(
not_null<Ui::GenericBox*> box,
not_null<GroupCall*> call);
} // namespace Calls
} // namespace Calls::Group

View file

@ -22,7 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "calls/calls_call.h"
#include "calls/calls_instance.h"
#include "calls/calls_signal_bars.h"
#include "calls/calls_group_panel.h" // LeaveGroupCallBox.
#include "calls/calls_group_menu.h" // Group::LeaveBox.
#include "history/view/history_view_group_call_tracker.h" // ContentByCall.
#include "data/data_user.h"
#include "data/data_group_call.h"
@ -396,10 +396,10 @@ void TopBar::initControls() {
group->hangup();
} else {
Ui::show(Box(
LeaveGroupCallBox,
Group::LeaveBox,
group,
false,
BoxContext::MainWindow));
Group::BoxContext::MainWindow));
}
}
});