From f75fb70ac9ab519bd64517406878951e46eecda2 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sun, 31 Dec 2023 17:48:39 -0500 Subject: [PATCH] Use KDSingleApplication to force single instance --- .gitmodules | 3 +++ external/CMakeLists.txt | 5 ++++- external/kdsingleapplication | 1 + launcher/CMakeLists.txt | 1 + launcher/src/main.cpp | 6 ++++++ 5 files changed, 15 insertions(+), 1 deletion(-) create mode 160000 external/kdsingleapplication diff --git a/.gitmodules b/.gitmodules index bb7c0c0..999b26a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "external/libphysis"] path = external/libphysis url = https://git.sr.ht/~redstrate/libphysis +[submodule "external/kdsingleapplication"] + path = external/kdsingleapplication + url = git@github.com:KDAB/KDSingleApplication.git diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 56f9dce..1605fda 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -11,7 +11,7 @@ find_package(Corrosion REQUIRED) corrosion_import_crate(MANIFEST_PATH ${CMAKE_CURRENT_SOURCE_DIR}/libphysis/Cargo.toml NO_DEFAULT_FEATURES FEATURES game_install) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libphysis/logger) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libphysis/logger EXCLUDE_FROM_ALL) find_package(PkgConfig REQUIRED) pkg_check_modules(UNSHIELD REQUIRED IMPORTED_TARGET libunshield) @@ -19,3 +19,6 @@ pkg_check_modules(UNSHIELD REQUIRED IMPORTED_TARGET libunshield) target_include_directories(physis INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/libphysis/target/public) target_link_libraries(physis INTERFACE ${UNSHIELD_LIBRARIES} z) target_link_directories(physis INTERFACE ${UNSHIELD_LIBRARY_DIRS}) + +set(KDSingleApplication_QT6 ON) +add_subdirectory(kdsingleapplication EXCLUDE_FROM_ALL) \ No newline at end of file diff --git a/external/kdsingleapplication b/external/kdsingleapplication new file mode 160000 index 0000000..4ef5fbc --- /dev/null +++ b/external/kdsingleapplication @@ -0,0 +1 @@ +Subproject commit 4ef5fbc0c8aa46252781d5d57b16546f28e447ac diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 742311b..d3e8573 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -129,6 +129,7 @@ target_link_libraries(astra PRIVATE physis physis-logger cotp + KDAB::kdsingleapplication Qt6Keychain::Qt6Keychain Qt6::Core Qt6::Network diff --git a/launcher/src/main.cpp b/launcher/src/main.cpp index f95be1c..a43153e 100755 --- a/launcher/src/main.cpp +++ b/launcher/src/main.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "astra-version.h" @@ -27,6 +28,11 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); + KDSingleApplication singleApplication; + if (!singleApplication.isPrimaryInstance()) { + return 0; + } + // Default to a sensible message pattern if (qEnvironmentVariableIsEmpty("QT_MESSAGE_PATTERN")) { qputenv("QT_MESSAGE_PATTERN", "[%{time yyyy-MM-dd h:mm:ss.zzz}] %{if-category}[%{category}] %{endif}[%{type}] %{message}");