diff --git a/src/plugin-qt/xsettings/CMakeLists.txt b/src/plugin-qt/xsettings/CMakeLists.txt index d7828901..ae68a7bf 100644 --- a/src/plugin-qt/xsettings/CMakeLists.txt +++ b/src/plugin-qt/xsettings/CMakeLists.txt @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: LGPL-3.0-or-later -set(BIN_NAME "dde-xsettings") +set(BIN_NAME "plugin-dde-xsettings") project(${BIN_NAME}) @@ -19,7 +19,7 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(X11 REQUIRED IMPORTED_TARGET x11) pkg_check_modules(XCB REQUIRED IMPORTED_TARGET xcb) -add_executable(${BIN_NAME} +add_library(${BIN_NAME} MODULE ${SRCS} ) @@ -36,12 +36,12 @@ macro(install_user_symlink filepath wantsdir) install(FILES ${PROJECT_BINARY_DIR}/link/${wantsdir}/${filepath} DESTINATION lib/systemd/user/${wantsdir}/) endmacro(install_user_symlink) -install(TARGETS ${BIN_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/dde-xsettings.json DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/deepin-service-manager/other) +install(TARGETS ${BIN_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}/deepin-service-manager/) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/plugin-dde-xsettings.json DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/deepin-service-manager/user) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/org.deepin.XSettings.json DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/dsg/configs/org.deepin.dde.daemon) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/dbus/org.deepin.dde.XSettings.service DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/dbus-1/services) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/org.deepin.dde.XSettings.service +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/dbus/org.deepin.dde.XSettings1.service DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/dbus-1/services) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/org.deepin.dde.XSettings1.service DESTINATION lib/systemd/user/ - RENAME org.deepin.dde.XSettings.service + RENAME org.deepin.dde.XSettings1.service ) -install_user_symlink(org.deepin.dde.XSettings.service dde-session-pre.target.wants) +install_user_symlink(org.deepin.dde.XSettings1.service dde-session-pre.target.wants) diff --git a/src/plugin-qt/xsettings/main.cpp b/src/plugin-qt/xsettings/main.cpp deleted file mode 100644 index dee7f9e2..00000000 --- a/src/plugin-qt/xsettings/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: LGPL-3.0-or-later - -#include "impl/xsettings1.h" - -#include - -#include -#include - -int main(int argc, char *argv[]) -{ - QCoreApplication a(argc, argv); - a.setApplicationName("org.deepin.dde.XSettings"); - Dtk::Core::DLogManager::registerJournalAppender(); - - QDBusConnection connection =QDBusConnection::sessionBus(); - XSettings1 *xSettings = new XSettings1(&a); - - QDBusConnection::RegisterOptions opts = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; - connection.registerObject("/org/deepin/dde/XSettings1", xSettings, opts); - if (!connection.registerService("org.deepin.dde.XSettings1")) { - qWarning() << "Failed to register D-Bus service"; - return 0; - } - return a.exec(); -} diff --git a/src/plugin-qt/xsettings/misc/dbus/org.deepin.dde.XSettings.service b/src/plugin-qt/xsettings/misc/dbus/org.deepin.dde.XSettings.service deleted file mode 100644 index a3ed5d4e..00000000 --- a/src/plugin-qt/xsettings/misc/dbus/org.deepin.dde.XSettings.service +++ /dev/null @@ -1,4 +0,0 @@ -[D-BUS Service] -Name=org.deepin.dde.XSettings1 -Exec=/usr/bin/dde-xsettings -SystemdService=dde-xsettings.service diff --git a/src/plugin-qt/xsettings/misc/dbus/org.deepin.dde.XSettings1.service b/src/plugin-qt/xsettings/misc/dbus/org.deepin.dde.XSettings1.service new file mode 100644 index 00000000..09c97dc1 --- /dev/null +++ b/src/plugin-qt/xsettings/misc/dbus/org.deepin.dde.XSettings1.service @@ -0,0 +1,4 @@ +[D-BUS Service] +Name=org.deepin.dde.XSettings1 +Exec=/usr/bin/deepin-service-manager -n org.deepin.dde.XSettings1 +SystemdService=org.deepin.dde.XSettings1.service diff --git a/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings.service b/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings1.service similarity index 76% rename from src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings.service rename to src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings1.service index 1af77c24..3276845e 100644 --- a/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings.service +++ b/src/plugin-qt/xsettings/misc/org.deepin.dde.XSettings1.service @@ -1,5 +1,5 @@ [Unit] -Description=dde-xsettings +Description=org.deepin.dde.XSettings1 Requisite=dde-session-initialized.target dde-session-pre.target RefuseManualStart=no RefuseManualStop=no @@ -13,7 +13,7 @@ Before=dde-session@x11.service [Service] Type=dbus BusName=org.deepin.dde.XSettings1 -ExecStart=/usr/bin/dde-xsettings +ExecStart=/usr/bin/deepin-service-manager -n org.deepin.dde.XSettings1 Restart=on-failure RestartSec=3 Slice=session.slice diff --git a/src/plugin-qt/xsettings/misc/dde-xsettings.json b/src/plugin-qt/xsettings/misc/plugin-dde-xsettings.json similarity index 68% rename from src/plugin-qt/xsettings/misc/dde-xsettings.json rename to src/plugin-qt/xsettings/misc/plugin-dde-xsettings.json index fc0ecf71..f659af93 100644 --- a/src/plugin-qt/xsettings/misc/dde-xsettings.json +++ b/src/plugin-qt/xsettings/misc/plugin-dde-xsettings.json @@ -1,6 +1,8 @@ { "name": "org.deepin.dde.XSettings1", + "libPath": "libplugin-dde-xsettings.so", "startType": "Resident", + "pluginType": "qt", "policy": [ { "path": "/org/deepin/dde/XSettings1" diff --git a/src/plugin-qt/xsettings/plugin.cpp b/src/plugin-qt/xsettings/plugin.cpp new file mode 100644 index 00000000..c07b1cfa --- /dev/null +++ b/src/plugin-qt/xsettings/plugin.cpp @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +#include "impl/xsettings1.h" + +#include +#include + +static XSettings1 *xSettings = nullptr; + +extern "C" int DSMRegister(const char *name, void *data) +{ + + auto connection = reinterpret_cast(data); + if (connection->interface()->isServiceRegistered(name)) { + qWarning() << "DBus service already exists:" << name; + return 1; + } + xSettings = new XSettings1(); + + QDBusConnection::RegisterOptions opts = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; + QString path = name; + path = QString("/%1").arg(path.replace(".", "/")); + connection->registerObject(path, xSettings, opts); + return 0; +} + +// 该函数用于资源释放 +// 非常驻插件必须实现该函数,以防内存泄漏 +extern "C" int DSMUnRegister(const char *name, void *data) +{ + Q_UNUSED(name); + Q_UNUSED(data); + if (xSettings) { + xSettings->deleteLater(); + xSettings = nullptr; + } + return 0; +}