diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index 73a15994f..d96ac109b 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -438,27 +438,29 @@ void Application::startSystemDarkModeViewer() { }, _lifetime); } +void Application::enumerateWindows(Fn)> callback) const { + if (_primaryWindow) { + callback(_primaryWindow.get()); + } + for (const auto &window : ranges::views::values(_secondaryWindows)) { + callback(window.get()); + } +} + void Application::startTray() { using WindowRaw = not_null; - const auto enumerate = [=](Fn c) { - if (_primaryWindow) { - c(_primaryWindow.get()); - } - for (const auto &window : ranges::views::values(_secondaryWindows)) { - c(window.get()); - } - }; _tray->create(); _tray->aboutToShowRequests( ) | rpl::start_with_next([=] { - enumerate([&](WindowRaw w) { w->updateIsActive(); }); + enumerateWindows([&](WindowRaw w) { w->updateIsActive(); }); _tray->updateMenuText(); }, _primaryWindow->widget()->lifetime()); _tray->showFromTrayRequests( ) | rpl::start_with_next([=] { const auto last = _lastActiveWindow; - enumerate([&](WindowRaw w) { w->widget()->showFromTray(); }); + enumerateWindows([&](WindowRaw w) { w->widget()->showFromTray(); }); if (last) { last->widget()->showFromTray(); } @@ -466,7 +468,7 @@ void Application::startTray() { _tray->hideToTrayRequests( ) | rpl::start_with_next([=] { - enumerate([&](WindowRaw w) { w->widget()->minimizeToTray(); }); + enumerateWindows([&](WindowRaw w) { w->widget()->minimizeToTray(); }); }, _primaryWindow->widget()->lifetime()); } @@ -1012,18 +1014,18 @@ void Application::preventOrInvoke(Fn &&callback) { void Application::lockByPasscode() { preventOrInvoke([=] { - if (_primaryWindow) { + enumerateWindows([&](not_null w) { _passcodeLock = true; - _primaryWindow->setupPasscodeLock(); - } + w->setupPasscodeLock(); + }); }); } void Application::unlockPasscode() { clearPasscodeLock(); - if (_primaryWindow) { - _primaryWindow->clearPasscodeLock(); - } + enumerateWindows([&](not_null w) { + w->clearPasscodeLock(); + }); } void Application::clearPasscodeLock() { diff --git a/Telegram/SourceFiles/core/application.h b/Telegram/SourceFiles/core/application.h index 26eea6f69..a376b4bb1 100644 --- a/Telegram/SourceFiles/core/application.h +++ b/Telegram/SourceFiles/core/application.h @@ -324,6 +324,9 @@ private: void startSystemDarkModeViewer(); void startTray(); + void enumerateWindows( + Fn)> callback) const; + friend void QuitAttempt(); void quitDelayed(); [[nodiscard]] bool readyToQuit();