[calamares] Switch over to DBus unique activation

- By default, try to use DBus service to keep Calamares unique
- The older implementation via KDSingleApplicationGuard is still
  available, just not used by default.
This commit is contained in:
Adriaan de Groot 2020-05-08 15:22:15 +02:00
parent 5af2a87709
commit b7214b8ede
3 changed files with 40 additions and 21 deletions

View File

@ -54,6 +54,7 @@ option( BUILD_TESTING "Build the testing tree." ON )
option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON ) option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON )
option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF ) option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF )
option( WITH_KF5Crash "Enable crash reporting with KCrash." ON ) option( WITH_KF5Crash "Enable crash reporting with KCrash." ON )
option( WITH_KF5DBus "Use DBus service for unique-application." ON )
# Possible debugging flags are: # Possible debugging flags are:
# - DEBUG_TIMEZONES draws latitude and longitude lines on the timezone # - DEBUG_TIMEZONES draws latitude and longitude lines on the timezone
@ -290,7 +291,7 @@ if( ECM_FOUND )
include(KDEInstallDirs) include(KDEInstallDirs)
endif() endif()
find_package( KF5 QUIET COMPONENTS CoreAddons Crash ) find_package( KF5 QUIET COMPONENTS CoreAddons Crash DBusAddons )
set_package_properties( set_package_properties(
KF5::CoreAddons PROPERTIES KF5::CoreAddons PROPERTIES
TYPE REQUIRED TYPE REQUIRED
@ -299,8 +300,17 @@ set_package_properties(
PURPOSE "About Calamares" PURPOSE "About Calamares"
) )
if( NOT KF5Crash_FOUND ) if( NOT KF5Crash_FOUND )
if( WITH_KF5Crash )
message(WARNING "WITH_KF5Crash is set, but KF5::Crash is not available.")
endif()
set( WITH_KF5Crash OFF ) set( WITH_KF5Crash OFF )
endif() endif()
if( NOT KF5DBusAddons_FOUND )
if( WITH_KF5DBus )
message(WARNING "WITH_KF5DBus is set, but KF5::DBusAddons is not available.")
endif()
set( WITH_KF5DBus OFF )
endif()
if( BUILD_TESTING ) if( BUILD_TESTING )
enable_testing() enable_testing()
@ -520,6 +530,7 @@ add_feature_info(Python ${WITH_PYTHON} "Python job modules")
add_feature_info(PythonQt ${WITH_PYTHONQT} "Python view modules") add_feature_info(PythonQt ${WITH_PYTHONQT} "Python view modules")
add_feature_info(Config ${INSTALL_CONFIG} "Install Calamares configuration") add_feature_info(Config ${INSTALL_CONFIG} "Install Calamares configuration")
add_feature_info(KCrash ${WITH_KF5Crash} "Crash dumps via KCrash") add_feature_info(KCrash ${WITH_KF5Crash} "Crash dumps via KCrash")
add_feature_info(KDBusAddons ${WITH_KF5DBus} "Unique-application via DBus")
# Add all targets to the build-tree export set # Add all targets to the build-tree export set
set( CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/Calamares" CACHE PATH "Installation directory for CMake files" ) set( CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/Calamares" CACHE PATH "Installation directory for CMake files" )

View File

@ -41,12 +41,13 @@ target_link_libraries( calamares_bin
KF5::CoreAddons KF5::CoreAddons
) )
if( WITH_KF5Crash ) if( WITH_KF5Crash )
target_link_libraries( calamares_bin target_link_libraries( calamares_bin PRIVATE KF5::Crash )
PRIVATE
KF5::Crash
)
target_compile_definitions( calamares_bin PRIVATE WITH_KF5Crash ) target_compile_definitions( calamares_bin PRIVATE WITH_KF5Crash )
endif() endif()
if( WITH_KF5DBus )
target_link_libraries( calamares_bin PRIVATE KF5::DBusAddons )
target_compile_definitions( calamares_bin PRIVATE WITH_KF5DBus )
endif()
install( TARGETS calamares_bin install( TARGETS calamares_bin
BUNDLE DESTINATION . BUNDLE DESTINATION .

View File

@ -25,9 +25,15 @@
#include "utils/Logger.h" #include "utils/Logger.h"
#include "utils/Retranslator.h" #include "utils/Retranslator.h"
#ifndef WITH_KF5DBus
#warning "KDSingleApplicationGuard is deprecated"
#include "3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h" #include "3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h"
#endif
#include <KCoreAddons/KAboutData> #include <KCoreAddons/KAboutData>
#ifdef WITH_KF5DBus
#include <KDBusAddons/KDBusService>
#endif
#ifdef WITH_KF5Crash #ifdef WITH_KF5Crash
#include <KCrash/KCrash> #include <KCrash/KCrash>
#endif #endif
@ -137,26 +143,27 @@ main( int argc, char* argv[] )
bool is_debug = handle_args( a ); bool is_debug = handle_args( a );
if ( !is_debug ) #ifdef WITH_KF5DBus
KDBusService service( is_debug ? KDBusService::Multiple : KDBusService::Unique );
#else
KDSingleApplicationGuard guard( is_debug ? KDSingleApplicationGuard::NoPolicy
: KDSingleApplicationGuard::AutoKillOtherInstances );
if ( !is_debug && !guard.isPrimaryInstance() )
{ {
KDSingleApplicationGuard guard( KDSingleApplicationGuard::AutoKillOtherInstances ); // Here we have not yet set-up the logger system, so qDebug() is ok
auto instancelist = guard.instances();
if ( !guard.isPrimaryInstance() ) qDebug() << "Calamares is already running, shutting down.";
if ( instancelist.count() > 0 )
{ {
// Here we have not yet set-up the logger system, so qDebug() is ok qDebug() << "Other running Calamares instances:";
auto instancelist = guard.instances();
qDebug() << "Calamares is already running, shutting down.";
if ( instancelist.count() > 0 )
{
qDebug() << "Other running Calamares instances:";
}
for ( const auto& i : instancelist )
{
qDebug() << " " << i.isValid() << i.pid() << i.arguments();
}
return 69; // EX_UNAVAILABLE on FreeBSD
} }
for ( const auto& i : instancelist )
{
qDebug() << " " << i.isValid() << i.pid() << i.arguments();
}
return 69; // EX_UNAVAILABLE on FreeBSD
} }
#endif
Calamares::Settings::init( is_debug ); Calamares::Settings::init( is_debug );
a.init(); a.init();