mirror of
https://github.com/x-tools-author/x-tools.git
synced 2025-09-15 15:28:40 +08:00
feat: xTools is single application now
This commit is contained in:
parent
eee323bce2
commit
8fd33526ce
@ -89,7 +89,7 @@ list(APPEND X_LIBS Qt${QT_VERSION_MAJOR}::Widgets)
|
||||
# --------------------------------------------------------------------------------------------------
|
||||
# Binaries
|
||||
set(X_BINS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bin/${CMAKE_SYSTEM_NAME}/${CMAKE_BUILD_TYPE})
|
||||
|
||||
set(X_3RD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rd)
|
||||
# Libraries
|
||||
set(tmp ${CMAKE_CURRENT_SOURCE_DIR}/libs/${QT_VERSION}/${CMAKE_BUILD_TYPE})
|
||||
set(X_LIBS_DIR ${tmp}/${CMAKE_CXX_COMPILER_ID}/${CMAKE_CXX_COMPILER_VERSION})
|
||||
|
||||
@ -1,3 +1,40 @@
|
||||
function(x_auto_import_package package_zip_name package_name)
|
||||
# Extract the package name from the path
|
||||
if(NOT EXISTS ${X_3RD_DIR}/${package_zip_name})
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${package_zip_name}.zip
|
||||
WORKING_DIRECTORY ${X_3RD_DIR})
|
||||
endif()
|
||||
|
||||
x_auto_import_package_dir(${package_zip_name} ${package_name} ${ARGN})
|
||||
endfunction()
|
||||
|
||||
function(x_auto_import_package_dir package_dir_name package_name)
|
||||
# Add module...
|
||||
set(package_dst_dir ${X_LIBS_DIR}/${package_dir_name})
|
||||
if(EXISTS ${package_dst_dir}/include)
|
||||
set(CMAKE_PREFIX_PATH ${package_dst_dir} ${CMAKE_PREFIX_PATH})
|
||||
find_package(${package_name} REQUIRED)
|
||||
message(STATUS "[PUMA]Found ${package_dir_name}: ${package_dst_dir}")
|
||||
else()
|
||||
add_subdirectory(${X_3RD_DIR}/${package_dir_name})
|
||||
|
||||
if(NOT ANDROID AND NOT IOS)
|
||||
add_custom_command(
|
||||
OUTPUT ${package_dst_dir}/install.stamp
|
||||
COMMAND ${CMAKE_COMMAND} -E touch ${package_dst_dir}/install.stamp
|
||||
COMMAND ${CMAKE_COMMAND} --install . --prefix ${package_dst_dir}
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3rd/${package_dir_name}
|
||||
COMMENT "Installing ${package_dir_name} to ${package_dst_dir}")
|
||||
add_custom_target(
|
||||
${package_dir_name}_auto_install ALL
|
||||
DEPENDS ${package_dst_dir}/install.stamp
|
||||
SOURCES ${CMAKE_SOURCE_DIR}/cmake/s-track_3rd.cmake)
|
||||
add_dependencies(${package_dir_name}_auto_install ${package_name} ${ARGN})
|
||||
set_property(TARGET ${package_dir_name}_auto_install PROPERTY FOLDER "3rd")
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/x_3rd_lua.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/x_3rd_glog.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/x_3rd_zint.cmake)
|
||||
|
||||
@ -5,6 +5,16 @@ set(package_name "SingleApplication-${package_version}")
|
||||
set(tmp "https://codeload.github.com/itay-grudev/SingleApplication/zip/refs/tags")
|
||||
set(package_url "${tmp}/v${package_version}")
|
||||
|
||||
if(ANDROID OR IOS)
|
||||
message(STATUS "[SingleApplication]SingleApplication is not supported on Android or iOS.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(QT_VERSION VERSION_LESS "6.8.0")
|
||||
message(STATUS "[SingleApplication]SingleApplication requires Qt 6.8 or higher.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Download the package
|
||||
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/3rd/${package_name}.zip")
|
||||
file(
|
||||
@ -12,7 +22,7 @@ if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/3rd/${package_name}.zip")
|
||||
SHOW_PROGRESS
|
||||
STATUS download_status)
|
||||
if(NOT download_status EQUAL 0)
|
||||
message(WARNING "Failed to download SingleApplication.")
|
||||
message(WARNING "[SingleApplication]Failed to download SingleApplication.")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
@ -23,26 +33,18 @@ if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/3rd/${package_name}")
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/3rd")
|
||||
endif()
|
||||
|
||||
# Unsupported yet...
|
||||
return()
|
||||
|
||||
set(lib_dir "${X_LIBS_DIR}/${package_name}")
|
||||
if(EXISTS "${lib_dir}/include")
|
||||
set(CMAKE_PREFIX_PATH "${lib_dir}" ${CMAKE_PREFIX_PATH})
|
||||
find_package(SingleApplication REQUIRED)
|
||||
if(MSVC)
|
||||
set(sapp_lib_file ${X_LIBS_DIR}/${package_name}/lib/SingleApplication.lib)
|
||||
else()
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/3rd/${package_name}")
|
||||
set_property(TARGET SingleApplication PROPERTY FOLDER "3rd")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${X_LIBS_DIR}/${package_name}/install.stamp"
|
||||
COMMAND ${CMAKE_COMMAND} --install . --prefix "${X_LIBS_DIR}/${package_name}"
|
||||
COMMAND ${CMAKE_COMMAND} -E touch "${X_LIBS_DIR}/${package_name}/install.stamp"
|
||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/3rd/${package_name}"
|
||||
COMMENT "Installing SingleApplication to ${X_LIBS_DIR}/${package_name}")
|
||||
add_custom_target(SingleApplication_auto_install ALL
|
||||
DEPENDS "${X_LIBS_DIR}/${package_name}/install.stamp")
|
||||
add_dependencies(SingleApplication_auto_install SingleApplication)
|
||||
set_property(TARGET SingleApplication_auto_install PROPERTY FOLDER "3rd")
|
||||
message(STATUS "SingleApplication installed to ${X_LIBS_DIR}/${package_name}")
|
||||
set(sapp_lib_file ${X_LIBS_DIR}/${package_name}/lib/SingleApplication.a)
|
||||
endif()
|
||||
|
||||
get_filename_component(sapp_lib_dir ${sapp_lib_file} DIRECTORY)
|
||||
set(QAPPLICATION_CLASS QApplication)
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/3rd/${package_name}")
|
||||
set_property(TARGET SingleApplication PROPERTY FOLDER "3rd")
|
||||
set_target_properties(SingleApplication PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${sapp_lib_dir})
|
||||
|
||||
list(APPEND X_LIBS SingleApplication)
|
||||
add_compile_definitions(X_ENABLE_SINGLEAPPLICATION)
|
||||
set(X_ENABLE_SINGLEAPPLICATION ON)
|
||||
|
||||
25
src/main.cpp
25
src/main.cpp
@ -6,9 +6,15 @@
|
||||
* xTools is licensed according to the terms in the file LICENCE(GPL V3) in the root of the source
|
||||
* code directory.
|
||||
**************************************************************************************************/
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "application.h"
|
||||
#include "mainwindow.h"
|
||||
|
||||
#if defined(X_ENABLE_SINGLEAPPLICATION)
|
||||
#include "singleapplication.h"
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Application::setOrganizationName("xTools");
|
||||
@ -16,6 +22,14 @@ int main(int argc, char *argv[])
|
||||
Application::installLog(argv[0]);
|
||||
Application::setupHdpi();
|
||||
Application app(argc, argv);
|
||||
|
||||
#if defined(X_ENABLE_SINGLEAPPLICATION)
|
||||
SingleApplication sApp(argc, argv);
|
||||
if (sApp.isSecondary()) {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
app.setupLanguage();
|
||||
app.showSplashScreenMessage(QObject::tr("Application is booting..."));
|
||||
app.setupAppStyle();
|
||||
@ -29,7 +43,16 @@ int main(int argc, char *argv[])
|
||||
window.load();
|
||||
window.moveToCenter();
|
||||
|
||||
#if defined(X_ENABLE_SINGLEAPPLICATION)
|
||||
QObject::connect(&sApp, &SingleApplication::instanceStarted, &window, [&window]() {
|
||||
window.show();
|
||||
window.raise();
|
||||
window.activateWindow();
|
||||
QApplication::beep();
|
||||
});
|
||||
#endif
|
||||
|
||||
int ret = app.exec();
|
||||
Application::uninstallLog();
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user