diff --git a/CMakeLists.txt b/CMakeLists.txt index 1abd89b..b1f001c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) include(GNUInstallDirs) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../cutefish-framework/applications + ${CMAKE_CURRENT_BINARY_DIR}/cutefish-framework-applications-build) + find_package(Qt6 COMPONENTS Core DBus Quick LinguistTools REQUIRED) find_path(LIBZIP_INCLUDE_DIR zip.h) @@ -103,6 +106,7 @@ target_include_directories(cutefish-filemanager-core PUBLIC target_link_libraries(cutefish-filemanager-core PUBLIC + Cutefish::Applications Qt6::Core Qt6::DBus Qt6::Quick diff --git a/helper/filelauncher.cpp b/helper/filelauncher.cpp index 2124788..2a8f8ee 100644 --- a/helper/filelauncher.cpp +++ b/helper/filelauncher.cpp @@ -19,10 +19,10 @@ #include "filelauncher.h" -#include -#include +#include "applicationlauncher.h" +#include "applicationruntime.h" + #include -#include #include #include #include @@ -45,6 +45,12 @@ FileLauncher::FileLauncher(QObject *parent) bool FileLauncher::launchApp(const QString &desktopFile, const QString &fileName) { + // The runtime knows the entry: let it expand Exec and track the instance + // under the application's own id. + if (ApplicationRuntime::instance()->launchApplication( + desktopFile, fileName.isEmpty() ? QStringList() : QStringList{fileName})) + return true; + QSettings settings(desktopFile, QSettings::IniFormat); settings.beginGroup("Desktop Entry"); @@ -81,28 +87,11 @@ bool FileLauncher::launchExecutable(const QString &fileName) bool FileLauncher::startDetached(const QString &exec, QStringList args) { - QDBusInterface iface("com.cutefish.Session", - "/Session", - "com.cutefish.Session", QDBusConnection::sessionBus()); - - if (iface.isValid()) { - iface.asyncCall("launch", exec, args).waitForFinished(); - } else { - QProcess::startDetached(exec, args); - } - - return true; + return startDetached(exec, QString(), args); } bool FileLauncher::startDetached(const QString &exec, const QString &workingDir, QStringList args) { - QDBusInterface iface("com.cutefish.Session", - "/Session", - "com.cutefish.Session", QDBusConnection::sessionBus()); - - if (iface.isValid()) { - iface.asyncCall("launch", exec, workingDir, args).waitForFinished(); - } - - return true; + // The application runtime owns every application start of the session. + return ApplicationLauncher::startDetached(QStringList{exec} + args, workingDir); }