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:
@@ -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() {
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user