mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
Always keep SessionController in Settings sections.
This commit is contained in:
@@ -460,10 +460,7 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"profile-photo"_q,
|
||||
.action = SettingsControl{
|
||||
::Settings::Main::Id(),
|
||||
u"profile-photo"_q,
|
||||
},
|
||||
.action = AliasTo{ u"edit"_q, u"set-photo"_q },
|
||||
});
|
||||
|
||||
router.add(u"settings"_q, {
|
||||
@@ -579,19 +576,7 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
if (!ctx.controller) {
|
||||
return Result::NeedsAuth;
|
||||
}
|
||||
if (!highlight.isEmpty()) {
|
||||
ctx.controller->setHighlightControlId(highlight);
|
||||
}
|
||||
const auto state = ctx.controller->session().api().cloudPassword().stateCurrent();
|
||||
if (!state) {
|
||||
ctx.controller->showSettings(::Settings::CloudPasswordStartId());
|
||||
} else if (!state->unconfirmedPattern.isEmpty()) {
|
||||
ctx.controller->showSettings(::Settings::CloudPasswordEmailConfirmId());
|
||||
} else if (state->hasPassword) {
|
||||
ctx.controller->showSettings(::Settings::CloudPasswordInputId());
|
||||
} else {
|
||||
ctx.controller->showSettings(::Settings::CloudPasswordStartId());
|
||||
}
|
||||
ctx.controller->showCloudPassword(highlight);
|
||||
return Result::Handled;
|
||||
};
|
||||
router.add(u"settings"_q, {
|
||||
@@ -801,7 +786,7 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
});
|
||||
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"privacy/bio/never-share"_q,
|
||||
.path = u"privacy/bio/never"_q,
|
||||
.action = CodeBlock{ [](const Context &ctx) {
|
||||
return ShowPrivacyBox(
|
||||
ctx,
|
||||
@@ -812,7 +797,7 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
});
|
||||
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"privacy/bio/always-share"_q,
|
||||
.path = u"privacy/bio/always"_q,
|
||||
.action = CodeBlock{ [](const Context &ctx) {
|
||||
return ShowPrivacyBox(
|
||||
ctx,
|
||||
@@ -844,7 +829,7 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
});
|
||||
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"privacy/gifts/never-share"_q,
|
||||
.path = u"privacy/gifts/never"_q,
|
||||
.action = CodeBlock{ [](const Context &ctx) {
|
||||
return ShowPrivacyBox(
|
||||
ctx,
|
||||
@@ -855,7 +840,7 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
});
|
||||
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"privacy/gifts/always-share"_q,
|
||||
.path = u"privacy/gifts/always"_q,
|
||||
.action = CodeBlock{ [](const Context &ctx) {
|
||||
return ShowPrivacyBox(
|
||||
ctx,
|
||||
@@ -1712,6 +1697,13 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
});
|
||||
|
||||
// Edit profile deep links.
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"edit/set-photo"_q,
|
||||
.action = SettingsControl{
|
||||
::Settings::Main::Id(),
|
||||
u"profile-photo"_q,
|
||||
},
|
||||
});
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"edit/first-name"_q,
|
||||
.action = CodeBlock{ [](const Context &ctx) {
|
||||
@@ -1815,7 +1807,10 @@ void RegisterSettingsHandlers(Router &router) {
|
||||
});
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"folders/add-recommended"_q,
|
||||
.action = SettingsSection{ ::Settings::Folders::Id() },
|
||||
.action = SettingsControl{
|
||||
::Settings::Folders::Id(),
|
||||
u"folders/add-recommended"_q,
|
||||
},
|
||||
});
|
||||
router.add(u"settings"_q, {
|
||||
.path = u"folders/show-tags"_q,
|
||||
|
||||
@@ -718,7 +718,7 @@ void AboutView::make(Data::ChatIntro data, bool preview) {
|
||||
| MessageFlag::FakeHistoryItem
|
||||
| MessageFlag::Local),
|
||||
.from = _history->peer->id,
|
||||
}, PreparedServiceText{ { text }});
|
||||
}, PreparedServiceText{ { text } });
|
||||
|
||||
if (data.sticker) {
|
||||
_helloChosen = nullptr;
|
||||
@@ -887,7 +887,7 @@ AdminLog::OwnedItem AboutView::makeNewPeerInfo(not_null<UserData*> user) {
|
||||
| MessageFlag::FakeHistoryItem
|
||||
| MessageFlag::Local),
|
||||
.from = _history->peer->id,
|
||||
}, PreparedServiceText{ { text }});
|
||||
}, PreparedServiceText{ { text } });
|
||||
|
||||
auto owned = AdminLog::OwnedItem(_delegate, item);
|
||||
owned->overrideMedia(std::make_unique<HistoryView::MediaGeneric>(
|
||||
|
||||
@@ -547,16 +547,8 @@ void InnerWidget::showFinished() {
|
||||
_showFinished.fire({});
|
||||
|
||||
const auto window = _controller->parentController();
|
||||
const auto id = window->highlightControlId();
|
||||
if (id.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (id == u"my-profile/posts"_q) {
|
||||
window->setHighlightControlId(QString());
|
||||
if (_albumsWrap) {
|
||||
::Settings::HighlightWidget(_albumsWrap);
|
||||
}
|
||||
} else if (id == u"my-profile/posts/add-album"_q) {
|
||||
window->checkHighlightControl(u"my-profile/posts"_q, _albumsWrap);
|
||||
if (window->highlightControlId() == u"my-profile/posts/add-album"_q) {
|
||||
window->setHighlightControlId(QString());
|
||||
if (_albumsWrap) {
|
||||
::Settings::HighlightWidget(_albumsWrap);
|
||||
|
||||
@@ -29,13 +29,9 @@ public:
|
||||
BusinessSection(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section<SectionType>(parent)
|
||||
, _controller(controller) {
|
||||
: Section<SectionType>(parent, controller) {
|
||||
}
|
||||
|
||||
[[nodiscard]] not_null<Window::SessionController*> controller() const {
|
||||
return _controller;
|
||||
}
|
||||
[[nodiscard]] rpl::producer<> showFinishes() const {
|
||||
return _showFinished.events();
|
||||
}
|
||||
@@ -45,7 +41,6 @@ private:
|
||||
_showFinished.fire({});
|
||||
}
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
rpl::event_stream<> _showFinished;
|
||||
|
||||
};
|
||||
|
||||
@@ -330,7 +330,7 @@ ShortcutMessages::ShortcutMessages(
|
||||
not_null<Ui::ScrollArea*> scroll,
|
||||
rpl::producer<Container> containerValue,
|
||||
BusinessShortcutId shortcutId)
|
||||
: AbstractSection(parent)
|
||||
: AbstractSection(parent, controller)
|
||||
, WindowListDelegate(controller)
|
||||
, _controller(controller)
|
||||
, _session(&controller->session())
|
||||
|
||||
@@ -166,26 +166,13 @@ void Manage::setupContent() {
|
||||
Ui::AddSkip(content);
|
||||
|
||||
showFinishes() | rpl::take(1) | rpl::on_next([=] {
|
||||
const auto id = controller()->highlightControlId();
|
||||
if (id.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (id == u"2sv/change"_q) {
|
||||
controller()->setHighlightControlId(QString());
|
||||
if (_changePasswordButton) {
|
||||
HighlightWidget(_changePasswordButton);
|
||||
}
|
||||
} else if (id == u"2sv/change-email"_q) {
|
||||
controller()->setHighlightControlId(QString());
|
||||
if (_changeEmailButton) {
|
||||
HighlightWidget(_changeEmailButton);
|
||||
}
|
||||
} else if (id == u"2sv/disable"_q) {
|
||||
controller()->setHighlightControlId(QString());
|
||||
if (_disableButton) {
|
||||
HighlightWidget(_disableButton);
|
||||
}
|
||||
}
|
||||
controller()->checkHighlightControl(
|
||||
u"2sv/change"_q,
|
||||
_changePasswordButton);
|
||||
controller()->checkHighlightControl(
|
||||
u"2sv/change-email"_q,
|
||||
_changeEmailButton);
|
||||
controller()->checkHighlightControl("2sv/disable"_q, _disableButton);
|
||||
}, lifetime());
|
||||
|
||||
using Divider = CloudPassword::OneEdgeBoxContentDivider;
|
||||
|
||||
@@ -25,16 +25,11 @@ namespace Settings::CloudPassword {
|
||||
AbstractStep::AbstractStep(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: AbstractSection(parent)
|
||||
, _controller(controller) {
|
||||
}
|
||||
|
||||
not_null<Window::SessionController*> AbstractStep::controller() const {
|
||||
return _controller;
|
||||
: AbstractSection(parent, controller) {
|
||||
}
|
||||
|
||||
Api::CloudPassword &AbstractStep::cloudPassword() {
|
||||
return _controller->session().api().cloudPassword();
|
||||
return controller()->session().api().cloudPassword();
|
||||
}
|
||||
|
||||
rpl::producer<AbstractStep::Types> AbstractStep::removeTypes() {
|
||||
|
||||
@@ -35,7 +35,6 @@ public:
|
||||
void setStepDataReference(std::any &data) override;
|
||||
|
||||
protected:
|
||||
[[nodiscard]] not_null<Window::SessionController*> controller() const;
|
||||
[[nodiscard]] Api::CloudPassword &cloudPassword();
|
||||
|
||||
[[nodiscard]] virtual rpl::producer<Types> removeTypes();
|
||||
@@ -53,8 +52,6 @@ protected:
|
||||
void setStepData(StepData data);
|
||||
|
||||
private:
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
|
||||
Fn<void()> _setInnerFocusCallback;
|
||||
|
||||
rpl::event_stream<> _showFinished;
|
||||
|
||||
@@ -1145,9 +1145,8 @@ namespace Settings {
|
||||
Sessions::Sessions(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Sessions::title() {
|
||||
@@ -1155,15 +1154,15 @@ rpl::producer<QString> Sessions::title() {
|
||||
}
|
||||
|
||||
void Sessions::showFinished() {
|
||||
_controller->checkHighlightControl(u"devices/terminate-sessions"_q, _terminateAll);
|
||||
_controller->checkHighlightControl(u"devices/auto-terminate"_q, _autoTerminate);
|
||||
controller()->checkHighlightControl(u"devices/terminate-sessions"_q, _terminateAll);
|
||||
controller()->checkHighlightControl(u"devices/auto-terminate"_q, _autoTerminate);
|
||||
}
|
||||
|
||||
void Sessions::setupContent(not_null<Window::SessionController*> controller) {
|
||||
void Sessions::setupContent() {
|
||||
const auto container = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
AddSkip(container, st::settingsPrivacySkip);
|
||||
const auto content = container->add(
|
||||
object_ptr<SessionsContent>(container, controller));
|
||||
object_ptr<SessionsContent>(container, controller()));
|
||||
content->setupContent();
|
||||
|
||||
_terminateAll = content->terminateAllButton();
|
||||
|
||||
@@ -25,9 +25,8 @@ public:
|
||||
void showFinished() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
QPointer<Ui::RpWidget> _terminateAll;
|
||||
QPointer<Ui::RpWidget> _autoTerminate;
|
||||
|
||||
|
||||
@@ -1034,18 +1034,17 @@ void SetupSystemIntegration(
|
||||
Advanced::Advanced(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Advanced::title() {
|
||||
return tr::lng_settings_advanced();
|
||||
}
|
||||
|
||||
void Advanced::setupContent(not_null<Window::SessionController*> controller) {
|
||||
void Advanced::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
|
||||
setController(controller);
|
||||
build(content, Builder::AdvancedSection);
|
||||
|
||||
Ui::ResizeFitChild(this, content);
|
||||
|
||||
@@ -58,7 +58,7 @@ public:
|
||||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -32,8 +32,7 @@ namespace Settings {
|
||||
Blocked::Blocked(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller)
|
||||
: Section(parent, controller)
|
||||
, _container(Ui::CreateChild<Ui::VerticalLayout>(this)) {
|
||||
|
||||
setupContent();
|
||||
@@ -54,12 +53,12 @@ Blocked::Blocked(
|
||||
st::settingsBlockedHeightMin);
|
||||
}
|
||||
|
||||
_controller->session().api().blockedPeers().slice(
|
||||
controller->session().api().blockedPeers().slice(
|
||||
) | rpl::on_next([=](const Api::BlockedPeers::Slice &slice) {
|
||||
checkTotal(slice.total);
|
||||
}, lifetime());
|
||||
|
||||
_controller->session().changes().peerUpdates(
|
||||
controller->session().changes().peerUpdates(
|
||||
Data::PeerUpdate::Flag::IsBlocked
|
||||
) | rpl::on_next([=](const Data::PeerUpdate &update) {
|
||||
if (update.peer->isBlocked()) {
|
||||
@@ -72,7 +71,8 @@ rpl::producer<QString> Blocked::title() {
|
||||
return tr::lng_settings_blocked_users();
|
||||
}
|
||||
|
||||
base::weak_qptr<Ui::RpWidget> Blocked::createPinnedToTop(not_null<QWidget*> parent) {
|
||||
base::weak_qptr<Ui::RpWidget> Blocked::createPinnedToTop(
|
||||
not_null<QWidget*> parent) {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(parent.get());
|
||||
|
||||
Ui::AddSkip(content);
|
||||
@@ -84,7 +84,7 @@ base::weak_qptr<Ui::RpWidget> Blocked::createPinnedToTop(not_null<QWidget*> pare
|
||||
{ &st::menuIconBlockSettings });
|
||||
_blockUserButton = blockButton;
|
||||
blockButton->addClickHandler([=] {
|
||||
BlockedBoxController::BlockNewPeer(_controller);
|
||||
BlockedBoxController::BlockNewPeer(controller());
|
||||
});
|
||||
|
||||
Ui::AddSkip(content);
|
||||
@@ -138,7 +138,8 @@ void Blocked::setupContent() {
|
||||
std::unique_ptr<PeerListContentDelegateSimple> delegate;
|
||||
};
|
||||
|
||||
auto controller = std::make_unique<BlockedBoxController>(_controller);
|
||||
auto controller = std::make_unique<BlockedBoxController>(
|
||||
this->controller());
|
||||
controller->setStyleOverrides(&st::settingsBlockedList);
|
||||
const auto content = listWrap->entity()->add(
|
||||
object_ptr<PeerListContent>(this, controller.get()));
|
||||
@@ -238,7 +239,9 @@ void Blocked::visibleTopBottomUpdated(int visibleTop, int visibleBottom) {
|
||||
|
||||
void Blocked::showFinished() {
|
||||
_showFinished.fire({});
|
||||
_controller->checkHighlightControl(u"privacy/blocked/block-user"_q, _blockUserButton);
|
||||
controller()->checkHighlightControl(
|
||||
u"privacy/blocked/block-user"_q,
|
||||
_blockUserButton);
|
||||
}
|
||||
|
||||
} // namespace Settings
|
||||
|
||||
@@ -38,7 +38,6 @@ private:
|
||||
|
||||
void visibleTopBottomUpdated(int visibleTop, int visibleBottom) override;
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
const not_null<Ui::VerticalLayout*> _container;
|
||||
|
||||
base::unique_qptr<Ui::RpWidget> _loading;
|
||||
|
||||
@@ -353,8 +353,6 @@ private:
|
||||
void setupContent();
|
||||
void setupSwipeBack();
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
|
||||
QPointer<Ui::GradientButton> _subscribe;
|
||||
base::unique_qptr<Ui::FadeWrap<Ui::IconButton>> _back;
|
||||
base::unique_qptr<Ui::IconButton> _close;
|
||||
@@ -376,12 +374,11 @@ private:
|
||||
Business::Business(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller)
|
||||
: Section(parent, controller)
|
||||
, _radioGroup(std::make_shared<Ui::RadiobuttonGroup>()) {
|
||||
setupContent();
|
||||
setupSwipeBack();
|
||||
_controller->session().api().premium().reload();
|
||||
controller->session().api().premium().reload();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Business::title() {
|
||||
@@ -450,7 +447,7 @@ void Business::setupSwipeBack() {
|
||||
void Business::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
|
||||
const auto owner = &_controller->session().data();
|
||||
const auto owner = &controller()->session().data();
|
||||
owner->chatbots().preload();
|
||||
owner->businessInfo().preload();
|
||||
owner->shortcutMessages().preloadShortcuts();
|
||||
@@ -460,7 +457,7 @@ void Business::setupContent() {
|
||||
|
||||
const auto showFeature = [=](PremiumFeature feature) {
|
||||
if (feature == PremiumFeature::FilterTags) {
|
||||
ShowPremiumPreviewToBuy(_controller, feature);
|
||||
ShowPremiumPreviewToBuy(controller(), feature);
|
||||
return;
|
||||
}
|
||||
showOther([&] {
|
||||
@@ -523,12 +520,12 @@ void Business::setupContent() {
|
||||
owner->session().api().chatLinks().loadedUpdates()
|
||||
) | rpl::on_next(check, content->lifetime());
|
||||
|
||||
AddBusinessSummary(content, _controller, [=](PremiumFeature feature) {
|
||||
if (!_controller->session().premium()) {
|
||||
AddBusinessSummary(content, controller(), [=](PremiumFeature feature) {
|
||||
if (!controller()->session().premium()) {
|
||||
_setPaused(true);
|
||||
const auto hidden = crl::guard(this, [=] { _setPaused(false); });
|
||||
|
||||
ShowPremiumPreviewToBuy(_controller, feature, hidden);
|
||||
ShowPremiumPreviewToBuy(controller(), feature, hidden);
|
||||
return;
|
||||
} else if (!isReady(feature)) {
|
||||
_waitingToShow = feature;
|
||||
@@ -571,7 +568,7 @@ void Business::setupContent() {
|
||||
_sponsoredButton = button;
|
||||
Ui::AddSkip(inner);
|
||||
|
||||
const auto session = &_controller->session();
|
||||
const auto session = &controller()->session();
|
||||
{
|
||||
inner->add(object_ptr<Ui::DividerLabel>(
|
||||
inner,
|
||||
@@ -608,7 +605,7 @@ void Business::setupContent() {
|
||||
api->setToggled(
|
||||
toggled
|
||||
) | rpl::on_error_done([=](const QString &error) {
|
||||
_controller->showToast(error);
|
||||
controller()->showToast(error);
|
||||
}, [] {
|
||||
}, button->lifetime());
|
||||
}, button->lifetime());
|
||||
@@ -618,7 +615,7 @@ void Business::setupContent() {
|
||||
sponsoredWrap->entity()->resizeToWidth(content->width());
|
||||
};
|
||||
Data::AmPremiumValue(
|
||||
&_controller->session()
|
||||
&controller()->session()
|
||||
) | rpl::on_next([=](bool isPremium) {
|
||||
sponsoredWrap->toggle(isPremium, anim::type::normal);
|
||||
if (isPremium) {
|
||||
@@ -634,13 +631,13 @@ base::weak_qptr<Ui::RpWidget> Business::createPinnedToTop(
|
||||
auto title = tr::lng_business_title();
|
||||
auto about = [&]() -> rpl::producer<TextWithEntities> {
|
||||
return rpl::conditional(
|
||||
Data::AmPremiumValue(&_controller->session()),
|
||||
Data::AmPremiumValue(&controller()->session()),
|
||||
tr::lng_business_unlocked(tr::marked),
|
||||
tr::lng_business_about(tr::marked));
|
||||
}();
|
||||
|
||||
const auto content = [&]() -> Ui::Premium::TopBarAbstract* {
|
||||
const auto weak = base::make_weak(_controller);
|
||||
const auto weak = base::make_weak(controller());
|
||||
const auto clickContextOther = [=] {
|
||||
return QVariant::fromValue(ClickHandlerContext{
|
||||
.sessionWindow = weak,
|
||||
@@ -707,8 +704,8 @@ base::weak_qptr<Ui::RpWidget> Business::createPinnedToTop(
|
||||
content,
|
||||
st::settingsPremiumTopBarClose);
|
||||
_close->addClickHandler([=] {
|
||||
_controller->parentController()->hideLayer();
|
||||
_controller->parentController()->hideSpecialLayer();
|
||||
controller()->parentController()->hideLayer();
|
||||
controller()->parentController()->hideSpecialLayer();
|
||||
});
|
||||
content->widthValue(
|
||||
) | rpl::on_next([=] {
|
||||
@@ -723,7 +720,7 @@ base::weak_qptr<Ui::RpWidget> Business::createPinnedToTop(
|
||||
void Business::showFinished() {
|
||||
_showFinished.fire({});
|
||||
crl::on_main(this, [=] {
|
||||
_controller->checkHighlightControl(
|
||||
controller()->checkHighlightControl(
|
||||
u"business/sponsored"_q,
|
||||
_sponsoredButton);
|
||||
});
|
||||
@@ -733,12 +730,12 @@ base::weak_qptr<Ui::RpWidget> Business::createPinnedToBottom(
|
||||
not_null<Ui::RpWidget*> parent) {
|
||||
const auto content = Ui::CreateChild<Ui::RpWidget>(parent.get());
|
||||
|
||||
const auto session = &_controller->session();
|
||||
const auto session = &controller()->session();
|
||||
|
||||
auto buttonText = _buttonText.value();
|
||||
|
||||
_subscribe = CreateSubscribeButton({
|
||||
_controller,
|
||||
controller(),
|
||||
content,
|
||||
[] { return u"business"_q; },
|
||||
std::move(buttonText),
|
||||
@@ -752,7 +749,7 @@ base::weak_qptr<Ui::RpWidget> Business::createPinnedToBottom(
|
||||
});
|
||||
{
|
||||
const auto callback = [=](int value) {
|
||||
auto &api = _controller->session().api();
|
||||
auto &api = controller()->session().api();
|
||||
const auto options = api.premium().subscriptionOptions();
|
||||
if (options.empty()) {
|
||||
return;
|
||||
|
||||
@@ -61,8 +61,7 @@ using namespace Webrtc;
|
||||
Calls::Calls(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller) {
|
||||
: Section(parent, controller) {
|
||||
// Request valid value of calls disabled flag.
|
||||
controller->session().api().authorizations().reload();
|
||||
|
||||
@@ -283,7 +282,7 @@ void Calls::setupContent() {
|
||||
Webrtc::DeviceType::Camera).isEmpty()) {
|
||||
Ui::AddSkip(content);
|
||||
Ui::AddSubsectionTitle(content, tr::lng_settings_call_camera());
|
||||
AddCameraSubsection(_controller->uiShow(), content, true);
|
||||
AddCameraSubsection(controller()->uiShow(), content, true);
|
||||
Ui::AddSkip(content);
|
||||
Ui::AddDivider(content);
|
||||
}
|
||||
@@ -291,7 +290,7 @@ void Calls::setupContent() {
|
||||
Ui::AddSkip(content);
|
||||
Ui::AddSubsectionTitle(content, tr::lng_settings_call_section_other());
|
||||
|
||||
const auto api = &_controller->session().api();
|
||||
const auto api = &controller()->session().api();
|
||||
content->add(object_ptr<Ui::SettingsButton>(
|
||||
content,
|
||||
tr::lng_settings_call_accept_calls(),
|
||||
@@ -314,7 +313,7 @@ void Calls::setupContent() {
|
||||
using namespace ::Platform;
|
||||
const auto opened = OpenSystemSettings(SystemSettingsType::Audio);
|
||||
if (!opened) {
|
||||
_controller->show(
|
||||
controller()->show(
|
||||
Ui::MakeInformBox(tr::lng_linux_no_audio_prefs()));
|
||||
}
|
||||
});
|
||||
@@ -335,7 +334,7 @@ void Calls::initPlaybackButton(
|
||||
PlaybackDeviceNameValue(rpl::duplicate(resolvedId)),
|
||||
st::settingsButtonNoIcon
|
||||
)->addClickHandler([=] {
|
||||
_controller->show(ChoosePlaybackDeviceBox(
|
||||
controller()->show(ChoosePlaybackDeviceBox(
|
||||
rpl::duplicate(resolvedId),
|
||||
[=](const QString &id) {
|
||||
set(id);
|
||||
@@ -356,7 +355,7 @@ void Calls::initCaptureButton(
|
||||
CaptureDeviceNameValue(rpl::duplicate(resolvedId)),
|
||||
st::settingsButtonNoIcon
|
||||
)->addClickHandler([=] {
|
||||
_controller->show(ChooseCaptureDeviceBox(
|
||||
controller()->show(ChooseCaptureDeviceBox(
|
||||
rpl::duplicate(resolvedId),
|
||||
[=](const QString &id) {
|
||||
set(id);
|
||||
@@ -424,12 +423,12 @@ void Calls::requestPermissionAndStartTestingMicrophone() {
|
||||
PermissionType::Microphone,
|
||||
startTestingChecked);
|
||||
} else {
|
||||
const auto showSystemSettings = [controller = _controller] {
|
||||
const auto showSystemSettings = [controller = controller()] {
|
||||
OpenSystemSettingsForPermission(
|
||||
PermissionType::Microphone);
|
||||
controller->hideLayer();
|
||||
};
|
||||
_controller->show(Ui::MakeConfirmBox({
|
||||
controller()->show(Ui::MakeConfirmBox({
|
||||
.text = tr::lng_no_mic_permission(),
|
||||
.confirmed = showSystemSettings,
|
||||
.confirmText = tr::lng_menu_settings(),
|
||||
|
||||
@@ -62,7 +62,6 @@ private:
|
||||
rpl::producer<QString> resolvedId,
|
||||
Fn<void(QString)> set);
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
rpl::event_stream<QString> _cameraNameStream;
|
||||
rpl::variable<bool> _testingMicrophone;
|
||||
|
||||
|
||||
@@ -746,12 +746,10 @@ void SetupStickersEmoji(
|
||||
container,
|
||||
tr::lng_settings_stickers_emoji());
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/stickers-emoji"_q,
|
||||
Builder::HighlightEntry{
|
||||
title.get(),
|
||||
SubsectionTitleHighlight() },
|
||||
});
|
||||
highlights->push_back({ u"chat/stickers-emoji"_q, {
|
||||
title.get(),
|
||||
SubsectionTitleHighlight(),
|
||||
} });
|
||||
}
|
||||
|
||||
const auto session = &controller->session();
|
||||
@@ -817,10 +815,10 @@ void SetupStickersEmoji(
|
||||
Core::App().saveSettingsDelayed();
|
||||
});
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/large-emoji"_q,
|
||||
Builder::HighlightEntry{ largeEmoji, { .radius = st::boxRadius } },
|
||||
});
|
||||
highlights->push_back({ u"chat/large-emoji"_q, {
|
||||
largeEmoji,
|
||||
{ .radius = st::boxRadius }
|
||||
} });
|
||||
}
|
||||
|
||||
add(
|
||||
@@ -856,10 +854,10 @@ void SetupStickersEmoji(
|
||||
suggestEmoji->value(),
|
||||
_1 && _2));
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/suggest-animated-emoji"_q,
|
||||
Builder::HighlightEntry{ suggestAnimated, { .radius = st::boxRadius } },
|
||||
});
|
||||
highlights->push_back({ u"chat/suggest-animated-emoji"_q, {
|
||||
suggestAnimated,
|
||||
{ .radius = st::boxRadius }
|
||||
} });
|
||||
}
|
||||
|
||||
const auto suggestByEmoji = addWithReturn(
|
||||
@@ -870,10 +868,10 @@ void SetupStickersEmoji(
|
||||
Core::App().saveSettingsDelayed();
|
||||
});
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/suggest-by-emoji"_q,
|
||||
Builder::HighlightEntry{ suggestByEmoji, { .radius = st::boxRadius } },
|
||||
});
|
||||
highlights->push_back({ u"chat/suggest-by-emoji"_q, {
|
||||
suggestByEmoji,
|
||||
{ .radius = st::boxRadius },
|
||||
} });
|
||||
}
|
||||
|
||||
add(
|
||||
@@ -973,10 +971,10 @@ void SetupMessages(
|
||||
Quick::React,
|
||||
tr::lng_settings_chat_quick_action_react(tr::now));
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/quick-reaction"_q,
|
||||
Builder::HighlightEntry{ react, { .radius = st::boxRadius } },
|
||||
});
|
||||
highlights->push_back({ u"chat/quick-reaction"_q, {
|
||||
react,
|
||||
{ .radius = st::boxRadius },
|
||||
} });
|
||||
}
|
||||
|
||||
const auto buttonRight = Ui::CreateSimpleCircleButton(
|
||||
@@ -1071,12 +1069,10 @@ void SetupMessages(
|
||||
show->showBox(Box(ReactionsSettingsBox, controller));
|
||||
});
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/quick-reaction-choose"_q,
|
||||
Builder::HighlightEntry{
|
||||
buttonRight.get(),
|
||||
{ .shape = HighlightShape::Ellipse } },
|
||||
});
|
||||
highlights->push_back({ u"chat/quick-reaction-choose"_q, {
|
||||
buttonRight.get(),
|
||||
{ .shape = HighlightShape::Ellipse },
|
||||
} });
|
||||
}
|
||||
|
||||
Ui::AddSkip(inner, st::settingsSendTypeSkip);
|
||||
@@ -1302,27 +1298,18 @@ void SetupChatBackground(
|
||||
st::settingsBackgroundPadding);
|
||||
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/wallpapers"_q,
|
||||
Builder::HighlightEntry{
|
||||
title.get(),
|
||||
SubsectionTitleHighlight(),
|
||||
},
|
||||
});
|
||||
highlights->push_back({
|
||||
u"chat/wallpapers-set"_q,
|
||||
Builder::HighlightEntry{
|
||||
row->chooseFromGallery(),
|
||||
SubsectionTitleHighlight(),
|
||||
},
|
||||
});
|
||||
highlights->push_back({
|
||||
u"chat/wallpapers-choose-photo"_q,
|
||||
Builder::HighlightEntry{
|
||||
row->chooseFromFile(),
|
||||
SubsectionTitleHighlight(),
|
||||
},
|
||||
});
|
||||
highlights->push_back({ u"chat/wallpapers"_q, {
|
||||
title.get(),
|
||||
SubsectionTitleHighlight(),
|
||||
} });
|
||||
highlights->push_back({ u"chat/wallpapers-set"_q, {
|
||||
row->chooseFromGallery(),
|
||||
SubsectionTitleHighlight(),
|
||||
} });
|
||||
highlights->push_back({ u"chat/wallpapers-choose-photo"_q, {
|
||||
row->chooseFromFile(),
|
||||
SubsectionTitleHighlight(),
|
||||
} });
|
||||
}
|
||||
|
||||
const auto skipTop = st::settingsCheckbox.margin.top();
|
||||
@@ -1745,7 +1732,7 @@ void SetupDefaultThemes(
|
||||
.margin = { -add, -add, -add, -add },
|
||||
.shape = HighlightShape::Ellipse,
|
||||
},
|
||||
}});
|
||||
} });
|
||||
}
|
||||
|
||||
Background()->updates(
|
||||
@@ -1831,13 +1818,10 @@ void SetupThemeOptions(
|
||||
container,
|
||||
tr::lng_settings_themes());
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/themes"_q,
|
||||
Builder::HighlightEntry{
|
||||
title.get(),
|
||||
SubsectionTitleHighlight(),
|
||||
},
|
||||
});
|
||||
highlights->push_back({ u"chat/themes"_q, {
|
||||
title.get(),
|
||||
SubsectionTitleHighlight(),
|
||||
} });
|
||||
}
|
||||
|
||||
Ui::AddSkip(container, st::settingsThemesTopSkip);
|
||||
@@ -1978,10 +1962,9 @@ void SetupThemeSettings(
|
||||
}
|
||||
});
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/auto-night-mode"_q,
|
||||
Builder::HighlightEntry{ button.get(), {} },
|
||||
});
|
||||
highlights->push_back({ u"chat/auto-night-mode"_q, {
|
||||
button.get()
|
||||
} });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2161,9 +2144,8 @@ void SetupSupport(
|
||||
}
|
||||
|
||||
Chat::Chat(QWidget *parent, not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Chat::title() {
|
||||
@@ -2171,7 +2153,7 @@ rpl::producer<QString> Chat::title() {
|
||||
}
|
||||
|
||||
void Chat::fillTopBarMenu(const Ui::Menu::MenuCallback &addAction) {
|
||||
const auto window = &_controller->window();
|
||||
const auto window = &controller()->window();
|
||||
const auto createTheme = addAction(
|
||||
tr::lng_settings_bg_theme_create(tr::now),
|
||||
[=] { window->show(Box(Window::Theme::CreateBox, window)); },
|
||||
@@ -2181,10 +2163,9 @@ void Chat::fillTopBarMenu(const Ui::Menu::MenuCallback &addAction) {
|
||||
u"chat/themes-create"_q);
|
||||
}
|
||||
|
||||
void Chat::setupContent(not_null<Window::SessionController*> controller) {
|
||||
void Chat::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
|
||||
setController(controller);
|
||||
build(content, Builder::ChatSection);
|
||||
|
||||
Ui::ResizeFitChild(this, content);
|
||||
|
||||
@@ -99,9 +99,7 @@ public:
|
||||
const Ui::Menu::MenuCallback &addAction) override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
void setupContent();
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -290,6 +290,12 @@ HighlightArgs SubsectionTitleHighlight() {
|
||||
return { .margin = { -radius, 0, -radius, 0 }, .radius = radius };
|
||||
}
|
||||
|
||||
AbstractSection::AbstractSection(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: _controller(controller) {
|
||||
}
|
||||
|
||||
void AbstractSection::build(
|
||||
not_null<Ui::VerticalLayout*> container,
|
||||
SectionBuilder builder) {
|
||||
|
||||
@@ -98,7 +98,13 @@ using SectionBuilder = void(*)(
|
||||
|
||||
class AbstractSection : public Ui::RpWidget {
|
||||
public:
|
||||
using RpWidget::RpWidget;
|
||||
AbstractSection(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller);
|
||||
|
||||
[[nodiscard]] not_null<Window::SessionController*> controller() const {
|
||||
return _controller;
|
||||
}
|
||||
|
||||
[[nodiscard]] virtual Type id() const = 0;
|
||||
[[nodiscard]] virtual rpl::producer<Type> sectionShowOther() {
|
||||
@@ -170,21 +176,14 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
void setController(not_null<Window::SessionController*> controller) {
|
||||
_controller = controller;
|
||||
}
|
||||
[[nodiscard]] Window::SessionController *controller() const {
|
||||
return _controller;
|
||||
}
|
||||
|
||||
void build(
|
||||
not_null<Ui::VerticalLayout*> container,
|
||||
SectionBuilder builder);
|
||||
|
||||
private:
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
rpl::event_stream<Type> _showOtherRequests;
|
||||
rpl::event_stream<> _showFinished;
|
||||
Window::SessionController *_controller = nullptr;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -98,7 +98,6 @@ private:
|
||||
void setupSwipeBack();
|
||||
void setupHistory(not_null<Ui::VerticalLayout*> container);
|
||||
void setupSubscriptions(not_null<Ui::VerticalLayout*> container);
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
const CreditsType _creditsType;
|
||||
|
||||
QWidget *_parent = nullptr;
|
||||
@@ -126,8 +125,7 @@ Credits::Credits(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller,
|
||||
CreditsType type)
|
||||
: Section(parent)
|
||||
, _controller(controller)
|
||||
: Section(parent, controller)
|
||||
, _creditsType(type)
|
||||
, _star(Ui::GenerateStars(st::creditsTopupButton.height, 1))
|
||||
, _balanceStar((_creditsType == CreditsType::Ton)
|
||||
@@ -135,11 +133,11 @@ Credits::Credits(
|
||||
st::tonFieldIconSize,
|
||||
st::currencyFg->c)
|
||||
: Ui::GenerateStars(st::creditsBalanceStarHeight, 1)) {
|
||||
_controller->session().giftBoxStickersPacks().tonLoad();
|
||||
controller->session().giftBoxStickersPacks().tonLoad();
|
||||
setupContent();
|
||||
setupSwipeBack();
|
||||
|
||||
_controller->session().premiumPossibleValue(
|
||||
controller->session().premiumPossibleValue(
|
||||
) | rpl::on_next([=](bool premiumPossible) {
|
||||
if (!premiumPossible) {
|
||||
_showBack.fire({});
|
||||
@@ -179,7 +177,7 @@ void Credits::setupSubscriptions(not_null<Ui::VerticalLayout*> container) {
|
||||
container,
|
||||
object_ptr<Ui::VerticalLayout>(container)));
|
||||
const auto content = history->entity();
|
||||
const auto self = _controller->session().user();
|
||||
const auto self = controller()->session().user();
|
||||
|
||||
const auto fill = [=](const Data::CreditsStatusSlice &fullSlice) {
|
||||
const auto inner = content;
|
||||
@@ -197,16 +195,16 @@ void Credits::setupSubscriptions(not_null<Ui::VerticalLayout*> container) {
|
||||
inner,
|
||||
object_ptr<Ui::VerticalLayout>(inner)));
|
||||
|
||||
const auto controller = _controller->parentController();
|
||||
const auto window = controller()->parentController();
|
||||
const auto entryClicked = [=](
|
||||
const Data::CreditsHistoryEntry &e,
|
||||
const Data::SubscriptionEntry &s) {
|
||||
controller->uiShow()->show(
|
||||
Box(ReceiptCreditsBox, controller, e, s));
|
||||
window->uiShow()->show(
|
||||
Box(ReceiptCreditsBox, window, e, s));
|
||||
};
|
||||
|
||||
Info::Statistics::AddCreditsHistoryList(
|
||||
controller->uiShow(),
|
||||
window->uiShow(),
|
||||
fullSlice,
|
||||
fullWrap->entity(),
|
||||
entryClicked,
|
||||
@@ -251,7 +249,7 @@ void Credits::setupHistory(not_null<Ui::VerticalLayout*> container) {
|
||||
container,
|
||||
object_ptr<Ui::VerticalLayout>(container)));
|
||||
const auto content = history->entity();
|
||||
const auto self = _controller->session().user();
|
||||
const auto self = controller()->session().user();
|
||||
|
||||
Ui::AddSkip(content, st::lineWidth * 6);
|
||||
|
||||
@@ -354,19 +352,19 @@ void Credits::setupHistory(not_null<Ui::VerticalLayout*> container) {
|
||||
}
|
||||
}, inner->lifetime());
|
||||
|
||||
const auto controller = _controller->parentController();
|
||||
const auto window = controller()->parentController();
|
||||
const auto entryClicked = [=](
|
||||
const Data::CreditsHistoryEntry &e,
|
||||
const Data::SubscriptionEntry &s) {
|
||||
controller->uiShow()->show(Box(
|
||||
window->uiShow()->show(Box(
|
||||
ReceiptCreditsBox,
|
||||
controller,
|
||||
window,
|
||||
e,
|
||||
s));
|
||||
};
|
||||
|
||||
Info::Statistics::AddCreditsHistoryList(
|
||||
controller->uiShow(),
|
||||
window->uiShow(),
|
||||
fullSlice,
|
||||
fullWrap->entity(),
|
||||
entryClicked,
|
||||
@@ -374,7 +372,7 @@ void Credits::setupHistory(not_null<Ui::VerticalLayout*> container) {
|
||||
true,
|
||||
true);
|
||||
Info::Statistics::AddCreditsHistoryList(
|
||||
controller->uiShow(),
|
||||
window->uiShow(),
|
||||
inSlice,
|
||||
inWrap->entity(),
|
||||
entryClicked,
|
||||
@@ -382,7 +380,7 @@ void Credits::setupHistory(not_null<Ui::VerticalLayout*> container) {
|
||||
true,
|
||||
false);
|
||||
Info::Statistics::AddCreditsHistoryList(
|
||||
controller->uiShow(),
|
||||
window->uiShow(),
|
||||
outSlice,
|
||||
outWrap->entity(),
|
||||
std::move(entryClicked),
|
||||
@@ -407,7 +405,7 @@ void Credits::setupHistory(not_null<Ui::VerticalLayout*> container) {
|
||||
apiIn->request({}, [=](Data::CreditsStatusSlice inSlice) {
|
||||
apiOut->request({}, [=](Data::CreditsStatusSlice outSlice) {
|
||||
::Api::PremiumPeerBot(
|
||||
&_controller->session()
|
||||
&controller()->session()
|
||||
) | rpl::on_next([=](not_null<PeerData*> bot) {
|
||||
fill(bot, fullSlice, inSlice, outSlice);
|
||||
apiLifetime->destroy();
|
||||
@@ -420,9 +418,9 @@ void Credits::setupHistory(not_null<Ui::VerticalLayout*> container) {
|
||||
|
||||
void Credits::setupSwipeBack() {
|
||||
using namespace Ui::Controls;
|
||||
|
||||
|
||||
auto swipeBackData = lifetime().make_state<SwipeBackResult>();
|
||||
|
||||
|
||||
auto update = [=](SwipeContextData data) {
|
||||
if (data.translation > 0) {
|
||||
if (!swipeBackData->callback) {
|
||||
@@ -441,7 +439,7 @@ void Credits::setupSwipeBack() {
|
||||
(*swipeBackData) = {};
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
auto init = [=](int, Qt::LayoutDirection direction) {
|
||||
return (direction == Qt::RightToLeft)
|
||||
? DefaultSwipeBackHandlerFinishData([=] {
|
||||
@@ -449,7 +447,7 @@ void Credits::setupSwipeBack() {
|
||||
})
|
||||
: SwipeHandlerFinishData();
|
||||
};
|
||||
|
||||
|
||||
SetupSwipeHandler({
|
||||
.widget = this,
|
||||
.scroll = v::null,
|
||||
@@ -516,7 +514,7 @@ void Credits::setupContent() {
|
||||
rpl::single(Ui::Text::SingleCustomEmoji(u"+"_q)),
|
||||
tr::marked)));
|
||||
button->setTextTransform(Ui::RoundButton::TextTransform::NoTransform);
|
||||
const auto show = _controller->uiShow();
|
||||
const auto show = controller()->uiShow();
|
||||
if (isCurrency) {
|
||||
const auto url = tr::lng_suggest_low_ton_fragment_url(tr::now);
|
||||
button->setClickedCallback([=] { UrlClickHandler::Open(url); });
|
||||
@@ -563,8 +561,8 @@ void Credits::setupContent() {
|
||||
rpl::single(Ui::MakeCreditsIconEntity()),
|
||||
lt_amount,
|
||||
(isCurrency
|
||||
? _controller->session().credits().tonBalanceValue()
|
||||
: _controller->session().credits().balanceValue()
|
||||
? controller()->session().credits().tonBalanceValue()
|
||||
: controller()->session().credits().balanceValue()
|
||||
) | rpl::map(
|
||||
Lang::FormatCreditsAmountDecimal
|
||||
) | rpl::map(tr::bold),
|
||||
@@ -574,20 +572,20 @@ void Credits::setupContent() {
|
||||
std::move(context)),
|
||||
style::al_top);
|
||||
if (isCurrency) {
|
||||
const auto rate = _controller->session().credits().usdRate();
|
||||
const auto rate = controller()->session().credits().usdRate();
|
||||
const auto wrap = content->add(
|
||||
object_ptr<Ui::SlideWrap<>>(
|
||||
content,
|
||||
object_ptr<Ui::FlatLabel>(
|
||||
content,
|
||||
_controller->session().credits().tonBalanceValue(
|
||||
controller()->session().credits().tonBalanceValue(
|
||||
) | rpl::map([=](CreditsAmount value) {
|
||||
using namespace Info::ChannelEarn;
|
||||
return value ? ToUsd(value, rate, 3) : QString();
|
||||
}),
|
||||
st::channelEarnOverviewSubMinorLabel)),
|
||||
style::al_top);
|
||||
wrap->toggleOn(_controller->session().credits().tonBalanceValue(
|
||||
wrap->toggleOn(controller()->session().credits().tonBalanceValue(
|
||||
) | rpl::map(rpl::mappers::_1 > CreditsAmount(0)));
|
||||
wrap->finishAnimating();
|
||||
}
|
||||
@@ -605,8 +603,8 @@ void Credits::setupContent() {
|
||||
}
|
||||
Ui::AddSkip(content, st::lineWidth * 4);
|
||||
|
||||
const auto controller = _controller->parentController();
|
||||
const auto self = _controller->session().user();
|
||||
const auto window = controller()->parentController();
|
||||
const auto self = window->session().user();
|
||||
if (!isCurrency) {
|
||||
const auto wrap = content->add(
|
||||
object_ptr<Ui::SlideWrap<Ui::AbstractButton>>(
|
||||
@@ -618,11 +616,11 @@ void Credits::setupContent() {
|
||||
{ &st::menuIconStats })));
|
||||
_statsButton = static_cast<Button*>(wrap->entity());
|
||||
wrap->entity()->setClickedCallback([=] {
|
||||
controller->showSection(Info::BotEarn::Make(self));
|
||||
window->showSection(Info::BotEarn::Make(self));
|
||||
});
|
||||
wrap->toggleOn(_controller->session().credits().loadedValue(
|
||||
wrap->toggleOn(window->session().credits().loadedValue(
|
||||
) | rpl::map([=] {
|
||||
return _controller->session().credits().statsEnabled();
|
||||
return window->session().credits().statsEnabled();
|
||||
}));
|
||||
}
|
||||
if (!isCurrency) {
|
||||
@@ -632,7 +630,7 @@ void Credits::setupContent() {
|
||||
st::settingsCreditsButton,
|
||||
{ &st::settingsButtonIconGift });
|
||||
_giftButton->setClickedCallback([=] {
|
||||
Ui::ShowGiftCreditsBox(controller, paid);
|
||||
Ui::ShowGiftCreditsBox(window, paid);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -643,7 +641,7 @@ void Credits::setupContent() {
|
||||
st::settingsCreditsButton,
|
||||
{ &st::settingsButtonIconEarn });
|
||||
_earnButton->setClickedCallback([=] {
|
||||
controller->showSection(Info::BotStarRef::Join::Make(self));
|
||||
window->showSection(Info::BotStarRef::Join::Make(self));
|
||||
});
|
||||
}
|
||||
if (isCurrency) {
|
||||
@@ -744,7 +742,7 @@ void Credits::setupContent() {
|
||||
Api::HandleWithdrawalButton(
|
||||
{ .currencyReceiver = self },
|
||||
button,
|
||||
_controller->uiShow());
|
||||
controller()->uiShow());
|
||||
Ui::ToggleChildrenVisibility(button, true);
|
||||
|
||||
Ui::AddSkip(container);
|
||||
@@ -756,7 +754,7 @@ void Credits::setupContent() {
|
||||
Ui::AddSkip(container);
|
||||
};
|
||||
|
||||
const auto self = _controller->session().user();
|
||||
const auto self = controller()->session().user();
|
||||
const auto wrap = content->add(
|
||||
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
|
||||
content,
|
||||
@@ -794,7 +792,7 @@ base::weak_qptr<Ui::RpWidget> Credits::createPinnedToTop(
|
||||
const auto isCurrency = _creditsType == CreditsType::Ton;
|
||||
|
||||
const auto content = [&]() -> Ui::Premium::TopBarAbstract* {
|
||||
const auto weak = base::make_weak(_controller);
|
||||
const auto weak = base::make_weak(controller());
|
||||
const auto clickContextOther = [=] {
|
||||
return QVariant::fromValue(ClickHandlerContext{
|
||||
.sessionWindow = weak,
|
||||
@@ -842,17 +840,17 @@ base::weak_qptr<Ui::RpWidget> Credits::createPinnedToTop(
|
||||
{
|
||||
const auto balance = AddBalanceWidget(
|
||||
content,
|
||||
&_controller->session(),
|
||||
&controller()->session(),
|
||||
isCurrency
|
||||
? _controller->session().credits().tonBalanceValue()
|
||||
: _controller->session().credits().balanceValue(),
|
||||
? controller()->session().credits().tonBalanceValue()
|
||||
: controller()->session().credits().balanceValue(),
|
||||
true,
|
||||
content->heightValue() | rpl::map([=](int height) {
|
||||
const auto ratio = float64(height - content->minimumHeight())
|
||||
/ (content->maximumHeight() - content->minimumHeight());
|
||||
return (1. - ratio / 0.35);
|
||||
}));
|
||||
_controller->session().credits().load(true);
|
||||
controller()->session().credits().load(true);
|
||||
rpl::combine(
|
||||
balance->sizeValue(),
|
||||
content->sizeValue()
|
||||
@@ -897,8 +895,8 @@ base::weak_qptr<Ui::RpWidget> Credits::createPinnedToTop(
|
||||
content,
|
||||
st::infoTopBarClose);
|
||||
_close->addClickHandler([=] {
|
||||
_controller->parentController()->hideLayer();
|
||||
_controller->parentController()->hideSpecialLayer();
|
||||
controller()->parentController()->hideLayer();
|
||||
controller()->parentController()->hideSpecialLayer();
|
||||
});
|
||||
content->widthValue(
|
||||
) | rpl::on_next([=] {
|
||||
@@ -912,9 +910,9 @@ base::weak_qptr<Ui::RpWidget> Credits::createPinnedToTop(
|
||||
|
||||
void Credits::showFinished() {
|
||||
_showFinished.fire({});
|
||||
_controller->checkHighlightControl(u"stars/stats"_q, _statsButton);
|
||||
_controller->checkHighlightControl(u"stars/gift"_q, _giftButton);
|
||||
_controller->checkHighlightControl(u"stars/earn"_q, _earnButton);
|
||||
controller()->checkHighlightControl(u"stars/stats"_q, _statsButton);
|
||||
controller()->checkHighlightControl(u"stars/gift"_q, _giftButton);
|
||||
controller()->checkHighlightControl(u"stars/earn"_q, _earnButton);
|
||||
}
|
||||
|
||||
class Currency {
|
||||
|
||||
@@ -184,19 +184,18 @@ void SetupExperimental(
|
||||
Experimental::Experimental(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Experimental::title() {
|
||||
return tr::lng_settings_experimental();
|
||||
}
|
||||
|
||||
void Experimental::setupContent(
|
||||
not_null<Window::SessionController*> controller) {
|
||||
void Experimental::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
|
||||
SetupExperimental(&controller->window(), content);
|
||||
SetupExperimental(&controller()->window(), content);
|
||||
|
||||
Ui::ResizeFitChild(this, content);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ public:
|
||||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ struct FoldersHighlightTargets {
|
||||
QPointer<Ui::RpWidget> createButton;
|
||||
QPointer<Ui::RpWidget> tagsButton;
|
||||
QPointer<Ui::RpWidget> viewSection;
|
||||
QPointer<Ui::RpWidget> recommendedTitle;
|
||||
};
|
||||
namespace {
|
||||
|
||||
@@ -607,7 +608,12 @@ void FilterRowButton::paintEvent(QPaintEvent *e) {
|
||||
const auto aboutRows = nonEmptyAbout->entity();
|
||||
Ui::AddDivider(aboutRows);
|
||||
Ui::AddSkip(aboutRows);
|
||||
Ui::AddSubsectionTitle(aboutRows, tr::lng_filters_recommended());
|
||||
const auto recommendedTitle = Ui::AddSubsectionTitle(
|
||||
aboutRows,
|
||||
tr::lng_filters_recommended());
|
||||
if (targets) {
|
||||
targets->recommendedTitle = recommendedTitle;
|
||||
}
|
||||
|
||||
const auto setTagsProgress = [=](float64 value) {
|
||||
for (const auto &row : state->rows) {
|
||||
@@ -1030,9 +1036,8 @@ void SetupView(
|
||||
Folders::Folders(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
Folders::~Folders() {
|
||||
@@ -1045,8 +1050,8 @@ rpl::producer<QString> Folders::title() {
|
||||
return tr::lng_filters_title();
|
||||
}
|
||||
|
||||
void Folders::setupContent(not_null<Window::SessionController*> controller) {
|
||||
controller->session().data().chatsFilters().requestSuggested();
|
||||
void Folders::setupContent() {
|
||||
controller()->session().data().chatsFilters().requestSuggested();
|
||||
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
const auto tagsButtonEnabled
|
||||
@@ -1055,17 +1060,22 @@ void Folders::setupContent(not_null<Window::SessionController*> controller) {
|
||||
SetupTopContent(content, _showFinished.events());
|
||||
|
||||
auto targets = FoldersHighlightTargets();
|
||||
_save = SetupFoldersContent(controller, content, tagsButtonEnabled, &targets);
|
||||
_save = SetupFoldersContent(
|
||||
controller(),
|
||||
content,
|
||||
tagsButtonEnabled,
|
||||
&targets);
|
||||
_createButton = targets.createButton;
|
||||
_recommendedTitle = targets.recommendedTitle;
|
||||
|
||||
auto dividerNeeded = true;
|
||||
if (controller->session().premiumPossible()) {
|
||||
SetupTagContent(controller, content, tagsButtonEnabled, &targets);
|
||||
if (controller()->session().premiumPossible()) {
|
||||
SetupTagContent(controller(), content, tagsButtonEnabled, &targets);
|
||||
_tagsButton = targets.tagsButton;
|
||||
dividerNeeded = false;
|
||||
}
|
||||
|
||||
SetupView(controller, content, dividerNeeded, &targets);
|
||||
SetupView(controller(), content, dividerNeeded, &targets);
|
||||
_viewSection = targets.viewSection;
|
||||
|
||||
Ui::ResizeFitChild(this, content);
|
||||
@@ -1074,9 +1084,13 @@ void Folders::setupContent(not_null<Window::SessionController*> controller) {
|
||||
void Folders::showFinished() {
|
||||
_showFinished.fire({});
|
||||
|
||||
_controller->checkHighlightControl(u"folders/create"_q, _createButton);
|
||||
_controller->checkHighlightControl(u"folders/show-tags"_q, _tagsButton);
|
||||
_controller->checkHighlightControl(u"folders/tab-view"_q, _viewSection);
|
||||
controller()->checkHighlightControl(u"folders/create"_q, _createButton);
|
||||
controller()->checkHighlightControl(u"folders/show-tags"_q, _tagsButton);
|
||||
controller()->checkHighlightControl(u"folders/tab-view"_q, _viewSection);
|
||||
controller()->checkHighlightControl(
|
||||
u"folders/add-recommended"_q,
|
||||
_recommendedTitle,
|
||||
SubsectionTitleHighlight());
|
||||
}
|
||||
|
||||
} // namespace Settings
|
||||
|
||||
@@ -23,15 +23,15 @@ public:
|
||||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
Fn<void()> _save;
|
||||
|
||||
rpl::event_stream<> _showFinished;
|
||||
QPointer<Ui::RpWidget> _createButton;
|
||||
QPointer<Ui::RpWidget> _tagsButton;
|
||||
QPointer<Ui::RpWidget> _viewSection;
|
||||
QPointer<Ui::RpWidget> _recommendedTitle;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -206,7 +206,6 @@ private:
|
||||
|
||||
void request(TimeId ttl) const;
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
const std::shared_ptr<Ui::RadiobuttonGroup> _group;
|
||||
const std::shared_ptr<Main::SessionShow> _show;
|
||||
|
||||
@@ -221,8 +220,7 @@ private:
|
||||
GlobalTTL::GlobalTTL(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller)
|
||||
: Section(parent, controller)
|
||||
, _group(std::make_shared<Ui::RadiobuttonGroup>(0))
|
||||
, _show(controller->uiShow())
|
||||
, _buttons(Ui::CreateChild<Ui::VerticalLayout>(this)) {
|
||||
@@ -234,7 +232,7 @@ rpl::producer<QString> GlobalTTL::title() {
|
||||
}
|
||||
|
||||
void GlobalTTL::request(TimeId ttl) const {
|
||||
_controller->session().api().selfDestruct().updateDefaultHistoryTTL(ttl);
|
||||
controller()->session().api().selfDestruct().updateDefaultHistoryTTL(ttl);
|
||||
}
|
||||
|
||||
void GlobalTTL::showSure(TimeId ttl, bool rebuild) const {
|
||||
@@ -339,7 +337,7 @@ void GlobalTTL::setupContent() {
|
||||
content->add(object_ptr<Ui::VerticalLayout>::fromRaw(_buttons));
|
||||
|
||||
{
|
||||
const auto &apiTTL = _controller->session().api().selfDestruct();
|
||||
const auto &apiTTL = controller()->session().api().selfDestruct();
|
||||
const auto rebuild = [=](TimeId period) {
|
||||
rebuildButtons(period);
|
||||
_group->setValue(period);
|
||||
@@ -349,7 +347,7 @@ void GlobalTTL::setupContent() {
|
||||
) | rpl::on_next(rebuild, content->lifetime());
|
||||
}
|
||||
|
||||
const auto show = _controller->uiShow();
|
||||
const auto show = controller()->uiShow();
|
||||
_customButton = content->add(object_ptr<Ui::SettingsButton>(
|
||||
content,
|
||||
tr::lng_settings_ttl_after_custom(),
|
||||
@@ -381,7 +379,8 @@ void GlobalTTL::setupContent() {
|
||||
tr::marked),
|
||||
st::boxDividerLabel);
|
||||
footer->setLink(1, std::make_shared<LambdaClickHandler>([=] {
|
||||
const auto session = &_controller->session();
|
||||
const auto window = controller();
|
||||
const auto session = &window->session();
|
||||
auto controller = std::make_unique<TTLChatsBoxController>(session);
|
||||
auto initBox = [=, controller = controller.get()](
|
||||
not_null<PeerListBox*> box) {
|
||||
@@ -417,7 +416,7 @@ void GlobalTTL::setupContent() {
|
||||
}));
|
||||
box->addButton(tr::lng_cancel(), [=] { box->closeBox(); });
|
||||
};
|
||||
_controller->show(
|
||||
window->show(
|
||||
Box<PeerListBox>(std::move(controller), std::move(initBox)));
|
||||
}));
|
||||
content->add(object_ptr<Ui::DividerLabel>(
|
||||
@@ -431,7 +430,7 @@ void GlobalTTL::setupContent() {
|
||||
void GlobalTTL::showFinished() {
|
||||
_showFinished.fire({});
|
||||
if (_customButton) {
|
||||
_controller->checkHighlightControl(
|
||||
controller()->checkHighlightControl(
|
||||
u"auto-delete/set-custom"_q,
|
||||
_customButton,
|
||||
{ .rippleShape = true });
|
||||
|
||||
@@ -1086,9 +1086,8 @@ void AccountsList::rebuild() {
|
||||
Information::Information(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Information::title() {
|
||||
@@ -1096,33 +1095,32 @@ rpl::producer<QString> Information::title() {
|
||||
}
|
||||
|
||||
void Information::showFinished() {
|
||||
_controller->checkHighlightControl(u"profile-photo"_q, _photo, {
|
||||
controller()->checkHighlightControl(u"profile-photo"_q, _photo, {
|
||||
.shape = HighlightShape::Ellipse,
|
||||
});
|
||||
_controller->checkHighlightControl(u"profile-photo/use-emoji"_q, _uploadPhoto, {
|
||||
controller()->checkHighlightControl(u"profile-photo/use-emoji"_q, _uploadPhoto, {
|
||||
.shape = HighlightShape::Ellipse,
|
||||
});
|
||||
_controller->checkHighlightControl(u"edit/bio"_q, _bio, {
|
||||
controller()->checkHighlightControl(u"edit/bio"_q, _bio, {
|
||||
.margin = st::settingsBioHighlightMargin,
|
||||
});
|
||||
_controller->checkHighlightControl(u"edit/your-color"_q, _colorButton);
|
||||
_controller->checkHighlightControl(u"edit/channel"_q, _channelButton);
|
||||
_controller->checkHighlightControl(u"edit/add-account"_q, _addAccount);
|
||||
controller()->checkHighlightControl(u"edit/your-color"_q, _colorButton);
|
||||
controller()->checkHighlightControl(u"edit/channel"_q, _channelButton);
|
||||
controller()->checkHighlightControl(u"edit/add-account"_q, _addAccount);
|
||||
}
|
||||
|
||||
void Information::setupContent(
|
||||
not_null<Window::SessionController*> controller) {
|
||||
void Information::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
|
||||
const auto self = controller->session().user();
|
||||
const auto self = controller()->session().user();
|
||||
auto targets = InformationHighlightTargets();
|
||||
|
||||
SetupPhoto(content, controller, self, &targets);
|
||||
SetupPhoto(content, controller(), self, &targets);
|
||||
SetupBio(content, self, &targets);
|
||||
SetupRows(content, controller, self);
|
||||
SetupPersonalChannel(content, controller, self, &targets);
|
||||
SetupBirthday(content, controller, self);
|
||||
SetupAccountsWrap(content, controller, &targets);
|
||||
SetupRows(content, controller(), self);
|
||||
SetupPersonalChannel(content, controller(), self, &targets);
|
||||
SetupBirthday(content, controller(), self);
|
||||
SetupAccountsWrap(content, controller(), &targets);
|
||||
|
||||
_photo = targets.photo;
|
||||
_uploadPhoto = targets.uploadPhoto;
|
||||
|
||||
@@ -32,9 +32,8 @@ public:
|
||||
void showFinished() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
QPointer<Ui::RpWidget> _photo;
|
||||
QPointer<Ui::RpWidget> _uploadPhoto;
|
||||
QPointer<Ui::RpWidget> _bio;
|
||||
|
||||
@@ -75,9 +75,6 @@ protected:
|
||||
[[nodiscard]] virtual EnterType enterType() const = 0;
|
||||
|
||||
private:
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
|
||||
rpl::event_stream<> _showFinished;
|
||||
rpl::event_stream<> _setInnerFocus;
|
||||
rpl::event_stream<Type> _showOther;
|
||||
@@ -89,8 +86,7 @@ private:
|
||||
LocalPasscodeEnter::LocalPasscodeEnter(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: AbstractSection(parent)
|
||||
, _controller(controller) {
|
||||
: AbstractSection(parent, controller) {
|
||||
}
|
||||
|
||||
rpl::producer<QString> LocalPasscodeEnter::title() {
|
||||
@@ -235,7 +231,7 @@ void LocalPasscodeEnter::setupContent() {
|
||||
error->setText(tr::lng_passcode_differ(tr::now));
|
||||
} else {
|
||||
if (isChange) {
|
||||
const auto &domain = _controller->session().domain();
|
||||
const auto &domain = controller()->session().domain();
|
||||
if (domain.local().checkPasscode(newText.toUtf8())) {
|
||||
newPasscode->setFocus();
|
||||
newPasscode->showError();
|
||||
@@ -245,7 +241,7 @@ void LocalPasscodeEnter::setupContent() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
SetPasscode(_controller, newText);
|
||||
SetPasscode(controller(), newText);
|
||||
if (isCreate) {
|
||||
if (Platform::IsWindows() || _systemUnlockWithBiometric) {
|
||||
Core::App().settings().setSystemUnlockEnabled(true);
|
||||
@@ -264,7 +260,7 @@ void LocalPasscodeEnter::setupContent() {
|
||||
error->setText(tr::lng_flood_error(tr::now));
|
||||
return;
|
||||
}
|
||||
const auto &domain = _controller->session().domain();
|
||||
const auto &domain = controller()->session().domain();
|
||||
if (domain.local().checkPasscode(newText.toUtf8())) {
|
||||
cSetPasscodeBadTries(0);
|
||||
_showOther.fire(LocalPasscodeManageId());
|
||||
@@ -405,8 +401,6 @@ public:
|
||||
private:
|
||||
void setupContent();
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
|
||||
rpl::variable<bool> _isBottomFillerShown;
|
||||
|
||||
rpl::event_stream<> _showFinished;
|
||||
@@ -422,8 +416,7 @@ private:
|
||||
LocalPasscodeManage::LocalPasscodeManage(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller) {
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
@@ -494,7 +487,7 @@ void LocalPasscodeManage::setupContent() {
|
||||
{ &st::menuIconTimer });
|
||||
_autoLockButton = autoLockButton;
|
||||
autoLockButton->addClickHandler([=] {
|
||||
const auto box = _controller->show(Box<AutoLockBox>());
|
||||
const auto box = controller()->show(Box<AutoLockBox>());
|
||||
box->boxClosing(
|
||||
) | rpl::start_to_stream(state->autoLockBoxClosing, box->lifetime());
|
||||
});
|
||||
@@ -612,11 +605,11 @@ void LocalPasscodeManage::setupContent() {
|
||||
base::weak_qptr<Ui::RpWidget> LocalPasscodeManage::createPinnedToBottom(
|
||||
not_null<Ui::RpWidget*> parent) {
|
||||
auto callback = [=] {
|
||||
_controller->show(
|
||||
controller()->show(
|
||||
Ui::MakeConfirmBox({
|
||||
.text = tr::lng_settings_passcode_disable_sure(),
|
||||
.confirmed = [=](Fn<void()> &&close) {
|
||||
SetPasscode(_controller, QString());
|
||||
SetPasscode(controller(), QString());
|
||||
Core::App().settings().setSystemUnlockEnabled(false);
|
||||
Core::App().saveSettingsDelayed();
|
||||
|
||||
@@ -642,31 +635,16 @@ base::weak_qptr<Ui::RpWidget> LocalPasscodeManage::createPinnedToBottom(
|
||||
void LocalPasscodeManage::showFinished() {
|
||||
_showFinished.fire({});
|
||||
|
||||
const auto id = _controller->highlightControlId();
|
||||
if (id.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (id == u"passcode/change"_q) {
|
||||
_controller->setHighlightControlId(QString());
|
||||
if (_changeButton) {
|
||||
HighlightWidget(_changeButton);
|
||||
}
|
||||
} else if (id == u"passcode/auto-lock"_q) {
|
||||
_controller->setHighlightControlId(QString());
|
||||
if (_autoLockButton) {
|
||||
HighlightWidget(_autoLockButton);
|
||||
}
|
||||
} else if (id == u"passcode/biometrics"_q) {
|
||||
_controller->setHighlightControlId(QString());
|
||||
if (_biometricsButton) {
|
||||
HighlightWidget(_biometricsButton);
|
||||
}
|
||||
} else if (id == u"passcode/disable"_q) {
|
||||
_controller->setHighlightControlId(QString());
|
||||
if (_disableButton) {
|
||||
HighlightWidget(_disableButton);
|
||||
}
|
||||
}
|
||||
controller()->checkHighlightControl(u"passcode/change"_q, _changeButton);
|
||||
controller()->checkHighlightControl(
|
||||
u"passcode/auto-lock"_q,
|
||||
_autoLockButton);
|
||||
controller()->checkHighlightControl(
|
||||
u"passcode/biometrics"_q,
|
||||
_biometricsButton);
|
||||
controller()->checkHighlightControl(
|
||||
u"passcode/disable"_q,
|
||||
_disableButton);
|
||||
}
|
||||
|
||||
rpl::producer<> LocalPasscodeManage::sectionShowBack() {
|
||||
|
||||
@@ -83,7 +83,6 @@ public:
|
||||
private:
|
||||
void setupChildGeometry();
|
||||
void initViewers();
|
||||
void refreshStatusText();
|
||||
void refreshNameGeometry(int newWidth);
|
||||
void refreshPhoneGeometry(int newWidth);
|
||||
void refreshUsernameGeometry(int newWidth);
|
||||
@@ -676,8 +675,7 @@ void SetupInterfaceScale(
|
||||
Main::Main(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent) {
|
||||
setController(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
|
||||
@@ -796,8 +796,7 @@ NotifyViewCheckboxes SetupNotifyViewOptions(
|
||||
Notifications::Notifications(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent) {
|
||||
setController(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
|
||||
@@ -634,8 +634,7 @@ NotificationsType::NotificationsType(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller,
|
||||
Notify type)
|
||||
: AbstractSection(parent)
|
||||
, _controller(controller)
|
||||
: AbstractSection(parent, controller)
|
||||
, _type(type) {
|
||||
setupContent(controller);
|
||||
}
|
||||
@@ -650,10 +649,18 @@ rpl::producer<QString> NotificationsType::title() {
|
||||
}
|
||||
|
||||
void NotificationsType::showFinished() {
|
||||
_controller->checkHighlightControl(u"notifications/type/show"_q, _showToggle);
|
||||
_controller->checkHighlightControl(u"notifications/type/sound"_q, _soundToggle);
|
||||
_controller->checkHighlightControl(u"notifications/type/add-exception"_q, _addException);
|
||||
_controller->checkHighlightControl(u"notifications/type/delete-exceptions"_q, _deleteExceptions);
|
||||
controller()->checkHighlightControl(
|
||||
u"notifications/type/show"_q,
|
||||
_showToggle);
|
||||
controller()->checkHighlightControl(
|
||||
u"notifications/type/sound"_q,
|
||||
_soundToggle);
|
||||
controller()->checkHighlightControl(
|
||||
u"notifications/type/add-exception"_q,
|
||||
_addException);
|
||||
controller()->checkHighlightControl(
|
||||
u"notifications/type/delete-exceptions"_q,
|
||||
_deleteExceptions);
|
||||
}
|
||||
|
||||
Type NotificationsType::Id(Notify type) {
|
||||
|
||||
@@ -32,7 +32,6 @@ public:
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
const Data::DefaultNotify _type;
|
||||
|
||||
QPointer<Ui::RpWidget> _showToggle;
|
||||
|
||||
@@ -63,9 +63,8 @@ public:
|
||||
private:
|
||||
void showFinished() override;
|
||||
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
QPointer<Ui::SettingsButton> _addButton;
|
||||
Ui::RoundRect _bottomSkipRounding;
|
||||
|
||||
@@ -236,16 +235,15 @@ void PasskeysNoneBox(
|
||||
Passkeys::Passkeys(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller)
|
||||
: Section(parent, controller)
|
||||
, _bottomSkipRounding(st::boxRadius, st::boxDividerBg) {
|
||||
setupContent(controller);
|
||||
setupContent();
|
||||
}
|
||||
|
||||
void Passkeys::showFinished() {
|
||||
_showFinished.fire({});
|
||||
if (_addButton) {
|
||||
_controller->checkHighlightControl(
|
||||
controller()->checkHighlightControl(
|
||||
u"passkeys/create"_q,
|
||||
_addButton,
|
||||
{ .rippleShape = true });
|
||||
@@ -256,10 +254,9 @@ rpl::producer<QString> Passkeys::title() {
|
||||
return tr::lng_settings_passkeys_title();
|
||||
}
|
||||
|
||||
void Passkeys::setupContent(
|
||||
not_null<Window::SessionController*> controller) {
|
||||
void Passkeys::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
const auto session = &controller->session();
|
||||
const auto session = &controller()->session();
|
||||
|
||||
CloudPassword::SetupHeader(
|
||||
content,
|
||||
@@ -291,7 +288,7 @@ void Passkeys::setupContent(
|
||||
menu,
|
||||
st::popupMenuWithIcons);
|
||||
const auto handler = [=, id = passkey.id] {
|
||||
controller->show(Ui::MakeConfirmBox({
|
||||
controller()->show(Ui::MakeConfirmBox({
|
||||
.text = rpl::combine(
|
||||
tr::lng_settings_passkeys_delete_sure_about(),
|
||||
tr::lng_settings_passkeys_delete_sure_about2()
|
||||
@@ -408,7 +405,7 @@ void Passkeys::setupContent(
|
||||
{ &st::settingsIconPasskeys })));
|
||||
_addButton = buttonWrap->entity();
|
||||
_addButton->setClickedCallback([=] {
|
||||
controller->show(Box(PasskeysNoneBox, session));
|
||||
controller()->show(Box(PasskeysNoneBox, session));
|
||||
});
|
||||
buttonWrap->toggleOn(session->passkeys().requestList(
|
||||
) | rpl::map([=] { return session->passkeys().canRegister(); }));
|
||||
@@ -433,7 +430,7 @@ void Passkeys::setupContent(
|
||||
tr::rich
|
||||
));
|
||||
label->setClickHandlerFilter([=](const auto &...) {
|
||||
controller->show(Box(PasskeysNoneBox, session));
|
||||
controller()->show(Box(PasskeysNoneBox, session));
|
||||
return false;
|
||||
});
|
||||
Ui::ResizeFitChild(this, content);
|
||||
|
||||
@@ -989,7 +989,6 @@ private:
|
||||
void setupSwipeBack();
|
||||
void setupSubscriptionOptions(not_null<Ui::VerticalLayout*> container);
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
const QString _ref;
|
||||
|
||||
QPointer<Ui::GradientButton> _subscribe;
|
||||
@@ -1010,13 +1009,12 @@ private:
|
||||
Premium::Premium(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller)
|
||||
: Section(parent, controller)
|
||||
, _ref(ResolveRef(controller->premiumRef()))
|
||||
, _radioGroup(std::make_shared<Ui::RadiobuttonGroup>()) {
|
||||
setupContent();
|
||||
setupSwipeBack();
|
||||
_controller->session().api().premium().reload();
|
||||
controller->session().api().premium().reload();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Premium::title() {
|
||||
@@ -1058,7 +1056,7 @@ void Premium::setupSubscriptionOptions(
|
||||
|
||||
Ui::AddSkip(content, st::settingsPremiumOptionsPadding.top());
|
||||
|
||||
const auto apiPremium = &_controller->session().api().premium();
|
||||
const auto apiPremium = &controller()->session().api().premium();
|
||||
Ui::Premium::AddGiftOptions(
|
||||
content,
|
||||
_radioGroup,
|
||||
@@ -1080,7 +1078,7 @@ void Premium::setupSubscriptionOptions(
|
||||
return;
|
||||
}
|
||||
auto toggleOn = rpl::combine(
|
||||
Data::AmPremiumValue(&_controller->session()),
|
||||
Data::AmPremiumValue(&controller()->session()),
|
||||
apiPremium->statusTextValue(
|
||||
) | rpl::map([=] {
|
||||
return apiPremium->subscriptionOptions().size() < 2;
|
||||
@@ -1143,9 +1141,9 @@ void Premium::setupContent() {
|
||||
_setPaused(true);
|
||||
const auto hidden = crl::guard(this, [=] { _setPaused(false); });
|
||||
|
||||
ShowPremiumPreviewToBuy(_controller, section, hidden);
|
||||
ShowPremiumPreviewToBuy(controller(), section, hidden);
|
||||
};
|
||||
AddSummaryPremium(content, _controller, _ref, std::move(buttonCallback));
|
||||
AddSummaryPremium(content, controller(), _ref, std::move(buttonCallback));
|
||||
#if 0
|
||||
Ui::AddSkip(content);
|
||||
Ui::AddDivider(content);
|
||||
@@ -1174,16 +1172,16 @@ void Premium::setupContent() {
|
||||
|
||||
base::weak_qptr<Ui::RpWidget> Premium::createPinnedToTop(
|
||||
not_null<QWidget*> parent) {
|
||||
auto title = _controller->session().premium()
|
||||
auto title = controller()->session().premium()
|
||||
? tr::lng_premium_summary_title()
|
||||
: rpl::conditional(
|
||||
Data::AmPremiumValue(&_controller->session()),
|
||||
Data::AmPremiumValue(&controller()->session()),
|
||||
tr::lng_premium_summary_title_subscribed(),
|
||||
tr::lng_premium_summary_title());
|
||||
auto about = [&]() -> rpl::producer<TextWithEntities> {
|
||||
const auto gift = Ref::Gift::Parse(_ref);
|
||||
if (gift) {
|
||||
auto &data = _controller->session().data();
|
||||
auto &data = controller()->session().data();
|
||||
if (const auto peer = data.peer(gift.peerId)) {
|
||||
const auto months = gift.days / 30;
|
||||
return (gift.me
|
||||
@@ -1201,8 +1199,8 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToTop(
|
||||
}
|
||||
}
|
||||
return rpl::conditional(
|
||||
Data::AmPremiumValue(&_controller->session()),
|
||||
_controller->session().api().premium().statusTextValue(),
|
||||
Data::AmPremiumValue(&controller()->session()),
|
||||
controller()->session().api().premium().statusTextValue(),
|
||||
tr::lng_premium_summary_top_about(tr::rich));
|
||||
}();
|
||||
|
||||
@@ -1213,7 +1211,7 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToTop(
|
||||
|
||||
auto peerWithPremium = [&]() -> PeerData* {
|
||||
if (isEmojiStatus) {
|
||||
auto &data = _controller->session().data();
|
||||
auto &data = controller()->session().data();
|
||||
if (const auto peer = data.peer(emojiStatusData.peerId)) {
|
||||
return peer;
|
||||
}
|
||||
@@ -1222,7 +1220,7 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToTop(
|
||||
}();
|
||||
auto premiumGift = [&]() -> DocumentData* {
|
||||
if (isPremiumGift) {
|
||||
auto &data = _controller->session().data();
|
||||
auto &data = controller()->session().data();
|
||||
return data.document(premiumGiftData.documentId);
|
||||
}
|
||||
return nullptr;
|
||||
@@ -1232,13 +1230,13 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToTop(
|
||||
if (peerWithPremium) {
|
||||
return Ui::CreateChild<TopBarWithSticker>(
|
||||
parent.get(),
|
||||
_controller,
|
||||
controller(),
|
||||
peerWithPremium,
|
||||
_showFinished.events());
|
||||
} else if (premiumGift) {
|
||||
return Ui::CreateChild<TopBarWithSticker>(
|
||||
parent.get(),
|
||||
_controller,
|
||||
controller(),
|
||||
TopBarWithStickerArgs{
|
||||
.stickerValue = rpl::single(premiumGift),
|
||||
.nameValue = tr::lng_gift_premium_title(),
|
||||
@@ -1250,7 +1248,7 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToTop(
|
||||
},
|
||||
_showFinished.events());
|
||||
}
|
||||
const auto weak = base::make_weak(_controller);
|
||||
const auto weak = base::make_weak(controller());
|
||||
const auto clickContextOther = [=] {
|
||||
return QVariant::fromValue(ClickHandlerContext{
|
||||
.sessionWindow = weak,
|
||||
@@ -1335,8 +1333,8 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToTop(
|
||||
? st::infoTopBarClose
|
||||
: st::settingsPremiumTopBarClose);
|
||||
_close->addClickHandler([=] {
|
||||
_controller->parentController()->hideLayer();
|
||||
_controller->parentController()->hideSpecialLayer();
|
||||
controller()->parentController()->hideLayer();
|
||||
controller()->parentController()->hideSpecialLayer();
|
||||
});
|
||||
content->widthValue(
|
||||
) | rpl::on_next([=] {
|
||||
@@ -1361,7 +1359,7 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToBottom(
|
||||
}
|
||||
|
||||
const auto emojiStatusData = Ref::EmojiStatus::Parse(_ref);
|
||||
const auto session = &_controller->session();
|
||||
const auto session = &controller()->session();
|
||||
|
||||
auto buttonText = [&]() -> std::optional<rpl::producer<QString>> {
|
||||
if (emojiStatusData) {
|
||||
@@ -1381,7 +1379,7 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToBottom(
|
||||
}();
|
||||
|
||||
_subscribe = CreateSubscribeButton({
|
||||
_controller,
|
||||
controller(),
|
||||
content,
|
||||
[ref = _ref] { return ref; },
|
||||
std::move(buttonText),
|
||||
@@ -1401,15 +1399,15 @@ base::weak_qptr<Ui::RpWidget> Premium::createPinnedToBottom(
|
||||
// we should replace the ref explicitly.
|
||||
_subscribe->setClickedCallback([=] {
|
||||
const auto ref = _ref;
|
||||
const auto controller = _controller;
|
||||
ShowPremium(controller, QString());
|
||||
controller->setPremiumRef(ref);
|
||||
const auto window = controller();
|
||||
ShowPremium(window, QString());
|
||||
window->setPremiumRef(ref);
|
||||
});
|
||||
} else {
|
||||
#endif
|
||||
{
|
||||
const auto callback = [=](int value) {
|
||||
auto &api = _controller->session().api();
|
||||
auto &api = controller()->session().api();
|
||||
const auto options = api.premium().subscriptionOptions();
|
||||
if (options.empty()) {
|
||||
return;
|
||||
|
||||
@@ -759,10 +759,7 @@ void SetupBotsAndWebsites(
|
||||
});
|
||||
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"privacy/bots_payment"_q,
|
||||
Builder::HighlightEntry{ button },
|
||||
});
|
||||
highlights->push_back({ u"privacy/bots_payment"_q, { button } });
|
||||
}
|
||||
|
||||
Ui::AddSkip(container);
|
||||
@@ -999,10 +996,7 @@ void SetupSensitiveContent(
|
||||
}, container->lifetime());
|
||||
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"chat/show-18-content"_q,
|
||||
Builder::HighlightEntry{ button },
|
||||
});
|
||||
highlights->push_back({ u"chat/show-18-content"_q, { button } });
|
||||
}
|
||||
|
||||
Ui::AddSkip(inner);
|
||||
@@ -1160,10 +1154,7 @@ void SetupArchiveAndMute(
|
||||
}, container->lifetime());
|
||||
|
||||
if (highlights) {
|
||||
highlights->push_back({
|
||||
u"privacy/archive_and_mute"_q,
|
||||
Builder::HighlightEntry{ button },
|
||||
});
|
||||
highlights->push_back({ u"privacy/archive_and_mute"_q, { button } });
|
||||
}
|
||||
|
||||
Ui::AddSkip(inner);
|
||||
@@ -1185,9 +1176,8 @@ void SetupArchiveAndMute(
|
||||
PrivacySecurity::PrivacySecurity(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent) {
|
||||
setupContent(controller);
|
||||
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
[[maybe_unused]] auto preload = base::SystemUnlockStatus();
|
||||
}
|
||||
|
||||
@@ -1195,11 +1185,9 @@ rpl::producer<QString> PrivacySecurity::title() {
|
||||
return tr::lng_settings_section_privacy();
|
||||
}
|
||||
|
||||
void PrivacySecurity::setupContent(
|
||||
not_null<Window::SessionController*> controller) {
|
||||
void PrivacySecurity::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
|
||||
setController(controller);
|
||||
build(content, Builder::PrivacySecuritySection);
|
||||
|
||||
Ui::ResizeFitChild(this, content);
|
||||
|
||||
@@ -94,7 +94,7 @@ public:
|
||||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -483,8 +483,8 @@ struct Labeled {
|
||||
Shortcuts::Shortcuts(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
Shortcuts::~Shortcuts() {
|
||||
@@ -497,11 +497,10 @@ rpl::producer<QString> Shortcuts::title() {
|
||||
return tr::lng_settings_shortcuts();
|
||||
}
|
||||
|
||||
void Shortcuts::setupContent(
|
||||
not_null<Window::SessionController*> controller) {
|
||||
void Shortcuts::setupContent() {
|
||||
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
|
||||
_save = SetupShortcutsContent(controller, content);
|
||||
_save = SetupShortcutsContent(controller(), content);
|
||||
|
||||
Ui::ResizeFitChild(this, content);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ public:
|
||||
[[nodiscard]] rpl::producer<QString> title() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
Fn<void()> _save;
|
||||
|
||||
|
||||
@@ -743,9 +743,8 @@ namespace Settings {
|
||||
Websites::Websites(
|
||||
QWidget *parent,
|
||||
not_null<Window::SessionController*> controller)
|
||||
: Section(parent)
|
||||
, _controller(controller) {
|
||||
setupContent(controller);
|
||||
: Section(parent, controller) {
|
||||
setupContent();
|
||||
}
|
||||
|
||||
rpl::producer<QString> Websites::title() {
|
||||
@@ -753,16 +752,16 @@ rpl::producer<QString> Websites::title() {
|
||||
}
|
||||
|
||||
void Websites::showFinished() {
|
||||
_controller->checkHighlightControl(
|
||||
controller()->checkHighlightControl(
|
||||
u"websites/disconnect-all"_q,
|
||||
_terminateAll.data());
|
||||
}
|
||||
|
||||
void Websites::setupContent(not_null<Window::SessionController*> controller) {
|
||||
void Websites::setupContent() {
|
||||
const auto container = Ui::CreateChild<Ui::VerticalLayout>(this);
|
||||
Ui::AddSkip(container);
|
||||
const auto content = container->add(
|
||||
object_ptr<Content>(container, controller));
|
||||
object_ptr<Content>(container, controller()));
|
||||
content->setupContent();
|
||||
|
||||
_terminateAll = content->terminateAllButton();
|
||||
|
||||
@@ -25,9 +25,8 @@ public:
|
||||
void showFinished() override;
|
||||
|
||||
private:
|
||||
void setupContent(not_null<Window::SessionController*> controller);
|
||||
void setupContent();
|
||||
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
QPointer<Ui::RpWidget> _terminateAll;
|
||||
|
||||
};
|
||||
|
||||
@@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "window/window_session_controller.h"
|
||||
|
||||
#include "apiwrap.h"
|
||||
#include "api/api_cloud_password.h"
|
||||
#include "api/api_text_entities.h"
|
||||
#include "boxes/peers/add_bot_to_chat_box.h"
|
||||
#include "boxes/peers/edit_peer_info_box.h"
|
||||
@@ -105,6 +107,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
#include "window/themes/window_theme.h"
|
||||
#include "window/window_peer_menu.h"
|
||||
#include "window/window_session_controller_link_info.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_input.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_start.h"
|
||||
#include "settings/cloud_password/settings_cloud_password_email_confirm.h"
|
||||
#include "settings/settings_main.h"
|
||||
#include "settings/settings_premium.h"
|
||||
#include "settings/settings_privacy_security.h"
|
||||
@@ -3680,6 +3685,40 @@ void SessionController::showStarGiftAuction(uint64 giftId) {
|
||||
[=] { _starGiftAuctionLifetime.destroy(); });
|
||||
}
|
||||
|
||||
void SessionController::showCloudPassword(const QString &highlight) {
|
||||
if (!highlight.isEmpty()) {
|
||||
setHighlightControlId(highlight);
|
||||
}
|
||||
session().api().cloudPassword().reload();
|
||||
|
||||
enum class PasswordState {
|
||||
Loading,
|
||||
On,
|
||||
Off,
|
||||
Unconfirmed,
|
||||
};
|
||||
_showCloudPasswordLifetime = rpl::single(
|
||||
PasswordState::Loading
|
||||
) | rpl::then(session().api().cloudPassword().state(
|
||||
) | rpl::map([](const Core::CloudPasswordState &state) {
|
||||
return (!state.unconfirmedPattern.isEmpty())
|
||||
? PasswordState::Unconfirmed
|
||||
: state.hasPassword
|
||||
? PasswordState::On
|
||||
: PasswordState::Off;
|
||||
})) | rpl::distinct_until_changed() | rpl::filter(
|
||||
rpl::mappers::_1 != PasswordState::Loading
|
||||
) | rpl::take(1) | rpl::on_next([=](PasswordState state) {
|
||||
if (state == PasswordState::On) {
|
||||
showSettings(Settings::CloudPasswordInputId());
|
||||
} else if (state == PasswordState::Off) {
|
||||
showSettings(Settings::CloudPasswordStartId());
|
||||
} else if (state == PasswordState::Unconfirmed) {
|
||||
showSettings(Settings::CloudPasswordEmailConfirmId());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void SessionController::setHighlightControlId(const QString &id) {
|
||||
_window->setHighlightControlId(id);
|
||||
}
|
||||
|
||||
@@ -704,6 +704,8 @@ public:
|
||||
void showStarGiftAuction(const QString &slug);
|
||||
void showStarGiftAuction(uint64 giftId);
|
||||
|
||||
void showCloudPassword(const QString &highlightId = QString());
|
||||
|
||||
void setHighlightControlId(const QString &id);
|
||||
[[nodiscard]] QString highlightControlId() const;
|
||||
[[nodiscard]] bool takeHighlightControlId(const QString &id);
|
||||
@@ -833,6 +835,7 @@ private:
|
||||
rpl::lifetime _savedSubsectionTabsLifetime;
|
||||
|
||||
rpl::lifetime _starGiftAuctionLifetime;
|
||||
rpl::lifetime _showCloudPasswordLifetime;
|
||||
|
||||
rpl::lifetime _lifetime;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user