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;