From 765365d36432e89f578db6925564bf688514cb3f Mon Sep 17 00:00:00 2001 From: weizhixiang Date: Thu, 2 Jun 2022 16:36:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=20=E8=AE=BE=E7=BD=AE=E4=B8=BA=E5=BC=80?= =?UTF-8?q?=E6=9C=BA=E8=87=AA=E5=90=AF=E5=8A=A8=EF=BC=8C=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E9=80=80=E5=87=BA=E5=90=8E=E8=87=AA=E5=8A=A8=E6=8B=89=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 设置为开机自启动,异常退出后自动拉起 Log: Task: https://pms.uniontech.com/task-view-142733.html Influence: 开机自启动,退出自动被拉起 Change-Id: I5c9f8ef80e8a4f5fed2aa9bb59de09455a165360 --- misc/CMakeLists.txt | 1 + misc/service/CMakeLists.txt | 15 ++++++++++++++ misc/service/dde-application-manager.service | 21 ++++++++++++++++++++ src/modules/dock/entry.cpp | 2 +- 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 misc/service/CMakeLists.txt create mode 100644 misc/service/dde-application-manager.service diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index 74a05c6..6997f9d 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory(systemd) add_subdirectory(dconf) +add_subdirectory(service) diff --git a/misc/service/CMakeLists.txt b/misc/service/CMakeLists.txt new file mode 100644 index 0000000..cebcc6b --- /dev/null +++ b/misc/service/CMakeLists.txt @@ -0,0 +1,15 @@ +set(SERVICE_FILES + dde-application-manager.service +) + +macro(install_symlink filepath wantsdir) + file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/link/${wantsdir}/) + execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_INSTALL_PREFIX}/lib/systemd/user/${filepath} ${PROJECT_BINARY_DIR}/link/${wantsdir}/${filepath}) + install(FILES ${PROJECT_BINARY_DIR}/link/${wantsdir}/${filepath} DESTINATION lib/systemd/user/${wantsdir}/) +endmacro(install_symlink) + +# 安装service文件到用户service目录 +install(FILES ${SERVICE_FILES} DESTINATION lib/systemd/user/) + +# 添加软链接,系统启动时被dde-session-initialized拉起 +install_symlink(dde-application-manager.service dde-session-initialized.target.wants) diff --git a/misc/service/dde-application-manager.service b/misc/service/dde-application-manager.service new file mode 100644 index 0000000..4c1ff74 --- /dev/null +++ b/misc/service/dde-application-manager.service @@ -0,0 +1,21 @@ +[Unit] +Description=dde application manager service +RefuseManualStart=no +RefuseManualStop=no +#OnFailure=dde-session-shutdown.target +OnFailureJobMode=replace-irreversibly +CollectMode=inactive-or-failed +StartLimitIntervalSec=10s +StartLimitBurst=30 + +Requisite=dde-session-initialized.target +PartOf=dde-session-initialized.target +After=dde-session-initialized.target + +[Service] +Type=simple +ExecStart=/usr/bin/deepin-application-manager +TimeoutStartSec=infinity +Slice=components.slice +Restart=on-failure +RestartSec=300ms diff --git a/src/modules/dock/entry.cpp b/src/modules/dock/entry.cpp index 3188525..cd7440b 100644 --- a/src/modules/dock/entry.cpp +++ b/src/modules/dock/entry.cpp @@ -635,7 +635,7 @@ void Entry::active(uint32_t timestamp) // X11环境 XWindow xid = winInfo->getXid(); WindowInfoBase *activeWin = dock->getActiveWindow(); - if (xid != activeWin->getXid()) { + if (activeWin && xid != activeWin->getXid()) { dock->doActiveWindow(xid); } else { bool found = false;