0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-19 20:32:15 +02:00

UI: Add HighContrastEnabled implementation for Linux

This commit is contained in:
tytan652 2024-04-03 11:01:39 +02:00 committed by Warchamp7
parent 0a9f1e7391
commit 41ba8bdfdd
4 changed files with 51 additions and 6 deletions

View File

@ -71,7 +71,7 @@ find_package(CURL REQUIRED)
add_subdirectory(frontend-plugins)
add_executable(obs)
find_qt(COMPONENTS Widgets Network Svg Xml COMPONENTS_LINUX Gui)
find_qt(COMPONENTS Widgets Network Svg Xml COMPONENTS_LINUX Gui DBus)
target_link_libraries(obs PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network)
@ -459,7 +459,7 @@ elseif(OS_MACOS)
elseif(OS_POSIX)
target_sources(obs PRIVATE platform-x11.cpp)
target_link_libraries(obs PRIVATE Qt::GuiPrivate)
target_link_libraries(obs PRIVATE Qt::GuiPrivate Qt::DBus)
target_compile_definitions(obs PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}"
"$<$<BOOL:${LINUX_PORTABLE}>:LINUX_PORTABLE>")

View File

@ -1,6 +1,6 @@
target_sources(obs-studio PRIVATE platform-x11.cpp)
target_compile_definitions(obs-studio PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}")
target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate)
target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate Qt::DBus)
if(TARGET OBS::python)
find_package(Python REQUIRED COMPONENTS Interpreter Development)

View File

@ -5,7 +5,7 @@ find_package(Qt6 REQUIRED Widgets Network Svg Xml)
if(OS_LINUX
OR OS_FREEBSD
OR OS_OPENBSD)
find_package(Qt6 REQUIRED Gui)
find_package(Qt6 REQUIRED Gui DBus)
endif()
target_link_libraries(obs-studio PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network)

View File

@ -21,6 +21,9 @@
#include <QGuiApplication>
#include <QScreen>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusReply>
#include <unistd.h>
#include <sstream>
@ -272,6 +275,48 @@ void TaskbarOverlaySetStatus(TaskbarOverlayStatus) {}
bool HighContrastEnabled()
{
// Note implemented yet
return false;
QDBusReply<QVariant> reply;
QDBusMessage msgXdpSettingsVersion = QDBusMessage::createMethodCall(
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
"org.freedesktop.DBus.Properties", "Get");
msgXdpSettingsVersion << "org.freedesktop.portal.Settings"
<< "version";
reply = QDBusConnection::sessionBus().call(msgXdpSettingsVersion);
if (!reply.isValid()) {
blog(LOG_WARNING,
"Get on org.freedesktop.portal.Settings returned an invalid reply");
return false;
}
/* NOTE: org.freedesktop.portal.Settings got its contrast settings after
* the ReadOne method. So assumes that if ReadOne is not available, contrast
* isn't available either. */
if (uint32_t version = reply.value().toUInt() < 2) {
blog(LOG_WARNING,
"org.freedesktop.portal.Settings version %u does not support ReadOne",
version);
return false;
}
/* NOTE: If contrast is not available if will return 0 (false). */
QDBusMessage msgXdpSettingsContrast = QDBusMessage::createMethodCall(
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
"org.freedesktop.portal.Settings", "ReadOne");
msgXdpSettingsContrast << "org.freedesktop.appearance"
<< "contrast";
reply = QDBusConnection::sessionBus().call(msgXdpSettingsContrast);
if (!reply.isValid()) {
blog(LOG_WARNING,
"ReadOne on org.freedesktop.portal.Settings returned an invalid reply");
return false;
}
return reply.value().toUInt() != 0;
}