2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-08-31 06:26:18 +00:00

Support Qt 6.5 dark mode API

This commit is contained in:
Ilya Fedin
2023-05-13 21:01:06 +04:00
committed by John Preston
parent 2675b5df3b
commit 0ffaff2d8b
12 changed files with 87 additions and 68 deletions

View File

@@ -8,11 +8,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "platform/linux/integration_linux.h"
#include "platform/platform_integration.h"
#include "base/platform/linux/base_linux_glibmm_helper.h"
#include "base/platform/linux/base_linux_xdp_utilities.h"
#include "core/application.h"
#include "core/core_settings.h"
#include "base/random.h"
#include <xdpinhibit/xdpinhibit.hpp>
#include <glibmm.h>
using namespace gi::repository;
@@ -31,6 +34,7 @@ private:
}
gi::result<XdpInhibit::InhibitProxy> _inhibitProxy;
base::Platform::XDP::SettingWatcher _darkModeWatcher;
};
LinuxIntegration::LinuxIntegration()
@@ -39,7 +43,23 @@ LinuxIntegration::LinuxIntegration()
Gio::BusType::SESSION_,
Gio::DBusProxyFlags::DO_NOT_AUTO_START_AT_CONSTRUCTION_,
std::string(base::Platform::XDP::kService),
std::string(base::Platform::XDP::kObjectPath))) {
std::string(base::Platform::XDP::kObjectPath)))
, _darkModeWatcher([](
const Glib::ustring &group,
const Glib::ustring &key,
const Glib::VariantBase &value) {
if (group == "org.freedesktop.appearance"
&& key == "color-scheme") {
try {
const auto ivalue = base::Platform::GlibVariantCast<uint>(value);
crl::on_main([=] {
Core::App().settings().setSystemDarkMode(ivalue == 1);
});
} catch (...) {
}
}
}) {
}
void LinuxIntegration::init() {

View File

@@ -575,30 +575,8 @@ QString SingleInstanceLocalServerName(const QString &hash) {
#endif // !Q_OS_LINUX || Qt < 6.2.0
}
#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0)
std::optional<bool> IsDarkMode() {
[[maybe_unused]] static const auto Inited = [] {
using XDPSettingWatcher = base::Platform::XDP::SettingWatcher;
static const XDPSettingWatcher Watcher(
[=](
const Glib::ustring &group,
const Glib::ustring &key,
const Glib::VariantBase &value) {
if (group == "org.freedesktop.appearance"
&& key == "color-scheme") {
try {
const auto ivalue = base::Platform::GlibVariantCast<uint>(value);
crl::on_main([=] {
Core::App().settings().setSystemDarkMode(ivalue == 1);
});
} catch (...) {
}
}
});
return true;
}();
try {
const auto result = base::Platform::XDP::ReadSetting(
"org.freedesktop.appearance",
@@ -613,6 +591,7 @@ std::optional<bool> IsDarkMode() {
return std::nullopt;
}
#endif // Qt < 6.5.0
bool AutostartSupported() {
return true;