From c090104ddf786c4b4547638b16645c7d44da3a47 Mon Sep 17 00:00:00 2001 From: kateleet Date: Mon, 20 Dec 2021 17:10:05 +0800 Subject: [PATCH] feat: set dpi to support sddm --- CMakeLists.txt | 1 + sddm-helper/CMakeLists.txt | 24 ++++++++ .../com.cutefish.sddm.helper.pkexec.policy.in | 15 +++++ sddm-helper/main.cpp | 58 +++++++++++++++++++ settings-daemon/theme/thememanager.cpp | 8 +++ 5 files changed, 106 insertions(+) create mode 100644 sddm-helper/CMakeLists.txt create mode 100644 sddm-helper/com.cutefish.sddm.helper.pkexec.policy.in create mode 100644 sddm-helper/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b69bf6..86acc9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,5 +32,6 @@ add_subdirectory(chotkeys) add_subdirectory(cupdatecursor) add_subdirectory(gmenuproxy) add_subdirectory(notificationd) +add_subdirectory(sddm-helper) install(FILES cutefish DESTINATION /etc/ COMPONENT Runtime) diff --git a/sddm-helper/CMakeLists.txt b/sddm-helper/CMakeLists.txt new file mode 100644 index 0000000..a694795 --- /dev/null +++ b/sddm-helper/CMakeLists.txt @@ -0,0 +1,24 @@ +project(cutefish-sddm-helper) +set(PROJECT_NAME cutefish-sddm-helper) + +set(SRCS + main.cpp +) + +add_executable(${PROJECT_NAME} + ${SRCS} +) + +target_link_libraries(${PROJECT_NAME} + Qt5::Core + Qt5::Gui +) + +configure_file( + com.cutefish.sddm.helper.pkexec.policy.in + com.cutefish.sddm.helper.pkexec.policy + @ONLY +) + +install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/com.cutefish.sddm.helper.pkexec.policy DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/polkit-1/actions/) diff --git a/sddm-helper/com.cutefish.sddm.helper.pkexec.policy.in b/sddm-helper/com.cutefish.sddm.helper.pkexec.policy.in new file mode 100644 index 0000000..346e66b --- /dev/null +++ b/sddm-helper/com.cutefish.sddm.helper.pkexec.policy.in @@ -0,0 +1,15 @@ + + + + Authentication is required to SDDM DPI + battery + + no + no + yes + + @CMAKE_INSTALL_FULL_BINDIR@/cutefish-sddm-helper + + diff --git a/sddm-helper/main.cpp b/sddm-helper/main.cpp new file mode 100644 index 0000000..26b2193 --- /dev/null +++ b/sddm-helper/main.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 CutefishOS Team. + * + * Author: Kate Leet (kate@cutefishos.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + QCommandLineParser parser; + parser.addHelpOption(); + parser.addVersionOption(); + + QCommandLineOption dpiOption(QStringLiteral("dpi"), QStringLiteral("Set DPI")); + parser.addOption(dpiOption); + parser.addPositionalArgument("value", "Value"); + + parser.process(app); + + if (parser.isSet(dpiOption)) { + int value = parser.positionalArguments().value(0).toInt(); + int minValue = 96; + + if (value < minValue) + value = minValue; + + QDir dir("/etc/sddm.conf.d"); + + if (!dir.exists()) { + dir.mkpath("/etc/sddm.conf.d"); + } + + QSettings settings("/etc/sddm.conf.d/dpi.conf", QSettings::IniFormat); + settings.beginGroup("X11"); + settings.setValue("ServerArguments", QString("-nolisten tcp -dpi %1").arg(value)); + } + + return 0; +} diff --git a/settings-daemon/theme/thememanager.cpp b/settings-daemon/theme/thememanager.cpp index b4eda9a..0df82b9 100644 --- a/settings-daemon/theme/thememanager.cpp +++ b/settings-daemon/theme/thememanager.cpp @@ -216,6 +216,14 @@ void ThemeManager::setDevicePixelRatio(qreal ratio) m_settings->sync(); applyXResources(); + // SDDM + QProcess p; + p.setProgram("pkexec"); + p.setArguments(QStringList() << "cutefish-sddm-helper" + << "--dpi" << QString::number(fontDpi)); + p.start(); + p.waitForFinished(-1); + QDBusInterface iface("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications",