From 5f1d56fbc29a6680810e2336ebd85523b2e07c3a Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Mon, 8 Mar 2021 23:51:24 +0400 Subject: [PATCH] Move gtk settings connections to getters --- .../platform/linux/specific_linux.cpp | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp index bbf6450cef..cce9a23f34 100644 --- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp @@ -11,7 +11,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/platform/base_platform_info.h" #include "base/platform/linux/base_linux_glibmm_helper.h" #include "base/platform/linux/base_linux_gtk_integration.h" -#include "ui/platform/ui_platform_utility.h" #include "platform/linux/linux_desktop_environment.h" #include "platform/linux/linux_gtk_integration.h" #include "platform/linux/linux_wayland_integration.h" @@ -446,12 +445,6 @@ void SetGtkScaleFactor() { cSetScreenScale(style::CheckScale(scaleFactor * 100)); } -void DarkModeChanged() { - Core::Sandbox::Instance().customEnterFromEventLoop([] { - Core::App().settings().setSystemDarkMode(IsDarkMode()); - }); -} - } // namespace void SetWatchingMediaKeys(bool watching) { @@ -605,6 +598,27 @@ QImage GetImageFromClipboard() { } std::optional IsDarkMode() { + if (static auto Once = false; !std::exchange(Once, true)) { + const auto integration = BaseGtkIntegration::Instance(); + if (integration) { + const auto onChanged = [] { + Core::Sandbox::Instance().customEnterFromEventLoop([] { + Core::App().settings().setSystemDarkMode(IsDarkMode()); + }); + }; + + integration->connectToSetting( + "gtk-theme-name", + onChanged); + + if (integration->checkVersion(3, 0, 0)) { + integration->connectToSetting( + "gtk-application-prefer-dark-theme", + onChanged); + } + } + } + const auto integration = BaseGtkIntegration::Instance(); if (!integration) { return std::nullopt; @@ -974,22 +988,6 @@ void start() { SetGtkScaleFactor(); - BaseGtkIntegration::Instance()->connectToSetting( - "gtk-theme-name", - DarkModeChanged); - - if (BaseGtkIntegration::Instance()->checkVersion(3, 0, 0)) { - BaseGtkIntegration::Instance()->connectToSetting( - "gtk-application-prefer-dark-theme", - DarkModeChanged); - } - - if (BaseGtkIntegration::Instance()->checkVersion(3, 12, 0)) { - BaseGtkIntegration::Instance()->connectToSetting( - "gtk-decoration-layout", - Ui::Platform::NotifyTitleControlsLayoutChanged); - } - // wait for interface announce to know if native window frame is supported if (const auto integration = WaylandIntegration::Instance()) { integration->waitForInterfaceAnnounce();