Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ precedence = "aggregate"
SPDX-FileCopyrightText = "UnionTech Software Technology Co., Ltd."
SPDX-License-Identifier = "GPL-3.0-or-later"

[[annotations]]
path = "configs/*.json"
precedence = "aggregate"
SPDX-FileCopyrightText = "None"
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = ["dde-osd/files/dde-osd.desktop", "deepin-login-reminder/deepin-login-reminder.desktop", "deepin-login-reminder/dconf/org.deepin.login-reminder.json", "misc/applications/*.desktop"]
precedence = "aggregate"
Expand Down
4 changes: 2 additions & 2 deletions common/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
# SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later

Expand All @@ -8,7 +8,7 @@ set(Common_SRCS
)

add_library(session-ui-common-shared OBJECT
${Widgets_SRCS}
${Common_SRCS}
)

target_include_directories(session-ui-common-shared
Expand Down
36 changes: 36 additions & 0 deletions configs/org.deepin.dde.session.ui.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"magic": "dsg.config.meta",
"version": "1.0",
"contents": {
"blackWidgetShutdownText": {
"value": "",
"serial": 0,
"flags": ["global"],
"name": "blackWidgetShutdownText",
"name[zh_CN]": "nodbus关机模式时,显示的关机文字",
"description": "nodbus关机模式时,显示的关机文字",
"permissions": "readonly",
"visibility": "private"
},
"blackWidgetLogoVisible": {
"value": true,
"serial": 0,
"flags": ["global"],
"name": "blackWidgetLogoVisible",
"name[zh_CN]": "关机黑屏是否显示logo",
"description": "关机黑屏是否显示logo",
"permissions": "readwrite",
"visibility": "private"
},
"blackWidgetQuitInterval": {
"value": 10,
"serial": 0,
"flags": ["global"],
"name": "blackWidgetQuitInterval",
"name[zh_CN]": "自动退出的时间,单位秒",
"description": "自动退出的时间,单位秒",
"permissions": "readwrite",
"visibility": "private"
}
}
}
16 changes: 13 additions & 3 deletions dde-blackwidget/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd.
# SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later

Expand All @@ -8,15 +8,22 @@ file(GLOB_RECURSE Blackwidget_SRCS
"src/*.cpp"
)

pkg_check_modules(X11 REQUIRED x11)
find_package(Dtk${DTK_VERSION_MAJOR}DConfig REQUIRED)

add_executable(${Blackwidget_Name}
${Blackwidget_SRCS}
)
set(Blackwidget_Includes
${GSETTINGS_INCLUDE_DIRS}
${GLIB_INCLUDE_DIRS}
${GIO_INCLUDE_DIRS}
)
set(Blackwidget_Libraries
${GSETTINGS_LIBRARIES}
${GLIB_LIBRARIES}
${GIO_LIBRARIES}
${X11_LIBRARIES}
Dtk${DTK_VERSION_MAJOR}::Widget
Dtk${DTK_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::DBus
)
Expand All @@ -34,3 +41,6 @@ install(TARGETS ${Blackwidget_Name} DESTINATION lib/deepin-daemon)
## service
install(FILES misc/dbus-services/org.deepin.dde.BlackScreen1.service DESTINATION share/dbus-1/services)
install(FILES misc/systemd/user/dde-blackwidget.service DESTINATION ${SYSTEMD_USER_UNIT_DIR})
install(FILES misc/systemd/user/dde-blackwidget-nodbus.service DESTINATION ${SYSTEMD_USER_UNIT_DIR})
## dconfig
dtk_add_config_meta_files(APPID org.deepin.dde.session.ui FILES ${CMAKE_SOURCE_DIR}/configs/org.deepin.dde.session.ui.json)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[Unit]
Description=Deepin Black Widget No-DBus Mode
After=graphical-session.target

[Service]
Type=exec
ExecStart=/usr/lib/deepin-daemon/dde-blackwidget nodbus
KillSignal=SIGTERM
TimeoutStopSec=3s
85 changes: 18 additions & 67 deletions dde-blackwidget/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,98 +4,46 @@

#include "window.h"

#include <signal.h>
#include <DLog>
#include <DGuiApplicationHelper>

#include <QApplication>
#include <QCommandLineOption>
#include <QCommandLineParser>
#include <QDBusInterface>
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#include <QDebug>
#include <QTimer>

const QString DBUS_SERV = "org.deepin.dde.BlackScreen1";
const QString DBUS_PATH = "/org/deepin/dde/BlackScreen1";
const QString DBUS_IFCE = "org.deepin.dde.BlackScreen1";
const QString KWIN_INTERFACE_NAME = "org.kde.KWin";

bool onPreparingForShutdown() {
QDBusInterface iface(
"org.freedesktop.login1",
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
QDBusConnection::systemBus()
);
QVariant preparingForShutdown = iface.property("PreparingForShutdown");

if (preparingForShutdown.isValid()) {
bool isPreparing = preparingForShutdown.toBool();
qDebug() << "Preparing for shutdown property value:" << isPreparing;
return isPreparing;
} else {
qWarning() << "Failed to retrieve preparing for shutdown property, the property is invalid";
}
return false;
}

void handleSIGTERM(int signal) {
if (QCoreApplication::closingDown())
return;
qInfo() << "handleSIGTERM: " << signal;
// 信号处理会阻塞进程,dbus调用也会被阻塞,因此等待一会自动退出吧
// 这个等待时间已经够长了,足够显示关机界面了,如果还有显示问题,应该从其他地方查找问题来优化。
QTimer::singleShot(2500, qApp, SLOT(quit()));
}

int main(int argc, char *argv[])
{
// dde-blackwidet should not try reconnect when kwin_wayland crash
qunsetenv("QT_WAYLAND_RECONNECT");

if (!qgetenv("WAYLAND_DISPLAY").isEmpty()) {
auto connection = QDBusConnection::sessionBus();
// should not start when kwin offline
if (!connection.interface()->isServiceRegistered(KWIN_INTERFACE_NAME)) {
qDebug() << "blackwidget return 0, for dbus not registered: " << KWIN_INTERFACE_NAME;
return 0;
}
}

QApplication a(argc, argv);
a.setOrganizationName("deepin");
a.setApplicationName("dde-blackwidget");
a.setDesktopFileName(QStringLiteral("org.deepin.dde.blackwidget"));

if (!Dtk::Gui::DGuiApplicationHelper::setSingleInstance(QStringLiteral("dde-blackwidget"))) {
qInfo() << "dde-blackwidget already running, quit.";
return 0;
}
#ifdef QT_DEBUG
DCORE_USE_NAMESPACE::Dtk::Core::DLogManager::registerConsoleAppender();

// 默认日志路径是 ~/.cache/dde-blackwidget/dde-blackwidget.log
DCORE_USE_NAMESPACE::Dtk::Core::DLogManager::registerFileAppender();
#endif
DCORE_USE_NAMESPACE::Dtk::Core::DLogManager::registerJournalAppender();

signal(SIGTERM, handleSIGTERM);
bool useDBus = true;
QCommandLineParser parser;
parser.addHelpOption();
parser.process(a);
int size = parser.positionalArguments().size();
for (int i = 0; i < size; i++) {
QString argument = parser.positionalArguments()[i];
if (argument == "nodbus") {
useDBus = false;
break;
}
}
parser.process(a);
const bool useDBus = !parser.positionalArguments().contains(QStringLiteral("nodbus"));

Window w;
w.setTimer();
qInfo() << " Black screen use dbus : " << useDBus;

if (!useDBus) {
qInfo() << "Direct to launch black widget.";
w.setLogoVisible(true);
w.raiseWindow();
return a.exec();
int ret = a.exec();
w.cleanupBeforeExit();
return ret;
}

QDBusConnection sessionDBus = QDBusConnection::sessionBus();
Expand All @@ -107,12 +55,15 @@ int main(int argc, char *argv[])
BlackWidgetAdaptor adaptor(&w);

if (result) {
qInfo() << "Session register object : " << sessionDBus.registerObject("/org/deepin/dde/BlackScreen1", &w);
qInfo() << "Session register object : " << sessionDBus.registerObject(DBUS_PATH, &w);
QObject::connect(sessionDBus.interface(), &QDBusConnectionInterface::serviceUnregistered, &w, &Window::onNameLost);
} else {
qInfo() << "End black widget.";
return -1;
}

return a.exec();
int ret = a.exec();
adaptor.quitDBusService();
w.cleanupBeforeExit();
return ret;
}
Loading
Loading