Skip to content

Commit cfc8d28

Browse files
committed
Fix autoupdate/dictionaries show/hide in settings.
1 parent 6619ccc commit cfc8d28

1 file changed

Lines changed: 63 additions & 77 deletions

File tree

Telegram/SourceFiles/settings/sections/settings_advanced.cpp

Lines changed: 63 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -828,52 +828,37 @@ void BuildSpellcheckerSection(SectionBuilder &builder) {
828828
}, spellchecker->lifetime());
829829
}
830830

831-
const auto sliding = (!isSystem && container)
832-
? container->add(
833-
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
834-
container,
835-
object_ptr<Ui::VerticalLayout>(container)))
836-
: nullptr;
837-
const auto inner = sliding ? sliding->entity() : nullptr;
838-
839831
if (!isSystem) {
840-
const auto autoDownload = builder.addButton({
841-
.id = u"advanced/auto_download_dictionaries"_q,
842-
.title = tr::lng_settings_auto_download_dictionaries(),
843-
.st = &st::settingsButtonNoIcon,
844-
.container = inner,
845-
.toggled = rpl::single(settings->autoDownloadDictionaries()),
846-
.keywords = { u"dictionary"_q, u"download"_q, u"spellcheck"_q },
847-
});
848-
849-
if (autoDownload) {
850-
autoDownload->toggledValue(
851-
) | rpl::filter([=](bool enabled) {
852-
return (enabled != settings->autoDownloadDictionaries());
853-
}) | rpl::on_next([=](bool enabled) {
854-
settings->setAutoDownloadDictionaries(enabled);
855-
Core::App().saveSettingsDelayed();
856-
}, autoDownload->lifetime());
857-
}
832+
builder.scope([&] {
833+
const auto autoDownload = builder.addButton({
834+
.id = u"advanced/auto_download_dictionaries"_q,
835+
.title = tr::lng_settings_auto_download_dictionaries(),
836+
.st = &st::settingsButtonNoIcon,
837+
.toggled = rpl::single(settings->autoDownloadDictionaries()),
838+
.keywords = { u"dictionary"_q, u"download"_q, u"spellcheck"_q },
839+
});
858840

859-
builder.addButton({
860-
.id = u"advanced/manage_dictionaries"_q,
861-
.title = tr::lng_settings_manage_dictionaries(),
862-
.st = &st::settingsButtonNoIcon,
863-
.container = inner,
864-
.label = Spellchecker::ButtonManageDictsState(session),
865-
.onClick = [=] {
866-
controller->show(Box<Ui::ManageDictionariesBox>(session));
867-
},
868-
.keywords = { u"dictionary"_q, u"manage"_q, u"spellcheck"_q },
869-
});
841+
if (autoDownload) {
842+
autoDownload->toggledValue(
843+
) | rpl::filter([=](bool enabled) {
844+
return (enabled != settings->autoDownloadDictionaries());
845+
}) | rpl::on_next([=](bool enabled) {
846+
settings->setAutoDownloadDictionaries(enabled);
847+
Core::App().saveSettingsDelayed();
848+
}, autoDownload->lifetime());
849+
}
870850

871-
if (spellchecker && sliding) {
872-
spellchecker->toggledValue(
873-
) | rpl::on_next([=](bool enabled) {
874-
sliding->toggle(enabled, anim::type::normal);
875-
}, container->lifetime());
876-
}
851+
builder.addButton({
852+
.id = u"advanced/manage_dictionaries"_q,
853+
.title = tr::lng_settings_manage_dictionaries(),
854+
.st = &st::settingsButtonNoIcon,
855+
.label = Spellchecker::ButtonManageDictsState(session),
856+
.onClick = [=] {
857+
controller->show(Box<Ui::ManageDictionariesBox>(session));
858+
},
859+
.keywords = { u"dictionary"_q, u"manage"_q, u"spellcheck"_q },
860+
});
861+
}, spellchecker ? spellchecker->toggledValue() : nullptr);
877862
}
878863

879864
builder.addSkip();
@@ -933,36 +918,44 @@ void BuildUpdateSection(SectionBuilder &builder, bool atTop) {
933918
label->setAttribute(Qt::WA_TransparentForMouseEvents);
934919
}
935920

936-
const auto options = container
937-
? container->add(
938-
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
939-
container,
940-
object_ptr<Ui::VerticalLayout>(container)))
941-
: nullptr;
942-
const auto inner = options ? options->entity() : nullptr;
921+
auto optionsShown = rpl::producer<bool>(nullptr);
922+
if (toggle) {
923+
Core::UpdateChecker checker;
924+
optionsShown = rpl::combine(
925+
toggle->toggledValue(),
926+
downloading->events_starting_with(
927+
checker.state() == Core::UpdateChecker::State::Download)
928+
) | rpl::map([](bool check, bool downloading) {
929+
return check && !downloading;
930+
});
931+
}
932+
auto options = (Ui::SlideWrap<Ui::VerticalLayout>*)nullptr;
933+
auto install = (Ui::SettingsButton*)nullptr;
934+
auto check = (Ui::SettingsButton*)nullptr;
935+
builder.scope([&] {
936+
install = cAlphaVersion()
937+
? nullptr
938+
: builder.addButton({
939+
.id = u"advanced/install_beta"_q,
940+
.title = tr::lng_settings_install_beta(),
941+
.st = &st::settingsButtonNoIcon,
942+
.toggled = rpl::single(cInstallBetaVersion()),
943+
.keywords = { u"beta"_q, u"update"_q, u"version"_q },
944+
});
943945

944-
const auto install = cAlphaVersion()
945-
? nullptr
946-
: builder.addButton({
947-
.id = u"advanced/install_beta"_q,
948-
.title = tr::lng_settings_install_beta(),
946+
check = builder.addButton({
947+
.id = u"advanced/check_update"_q,
948+
.title = tr::lng_settings_check_now(),
949949
.st = &st::settingsButtonNoIcon,
950-
.container = inner,
951-
.toggled = rpl::single(cInstallBetaVersion()),
952-
.keywords = { u"beta"_q, u"update"_q, u"version"_q },
950+
.onClick = [] {
951+
Core::UpdateChecker checker;
952+
cSetLastUpdateCheck(0);
953+
checker.start();
954+
},
955+
.keywords = { u"check"_q, u"update"_q, u"version"_q },
953956
});
954-
955-
const auto check = builder.addButton({
956-
.id = u"advanced/check_update"_q,
957-
.title = tr::lng_settings_check_now(),
958-
.st = &st::settingsButtonNoIcon,
959-
.container = inner,
960-
.onClick = [] {
961-
Core::UpdateChecker checker;
962-
cSetLastUpdateCheck(0);
963-
checker.start();
964-
},
965-
.keywords = { u"check"_q, u"update"_q, u"version"_q },
957+
}, std::move(optionsShown), [&](auto wrap) {
958+
options = wrap;
966959
});
967960

968961
if (check && container) {
@@ -1033,13 +1026,6 @@ void BuildUpdateSection(SectionBuilder &builder, bool atTop) {
10331026
}
10341027

10351028
Core::UpdateChecker checker;
1036-
options->toggleOn(rpl::combine(
1037-
toggle->toggledValue(),
1038-
downloading->events_starting_with(
1039-
checker.state() == Core::UpdateChecker::State::Download)
1040-
) | rpl::map([](bool check, bool downloading) {
1041-
return check && !downloading;
1042-
}));
10431029

10441030
checker.checking() | rpl::on_next([=] {
10451031
options->setAttribute(Qt::WA_TransparentForMouseEvents);

0 commit comments

Comments
 (0)