diff --git a/src/blackmisc/applicationinfolist.cpp b/src/blackmisc/applicationinfolist.cpp index dc7c05cb1..565c872e0 100644 --- a/src/blackmisc/applicationinfolist.cpp +++ b/src/blackmisc/applicationinfolist.cpp @@ -21,4 +21,19 @@ namespace BlackMisc { return this->contains(&CApplicationInfo::application, application); } + + int CApplicationInfoList::removeApplication(CApplicationInfo::Application application) + { + return this->removeIf(&CApplicationInfo::application, application); + } + + QStringList CApplicationInfoList::runningProcessNames() const + { + QStringList names; + for (const CApplicationInfo &info : *this) + { + names.append(info.processInfo().processName()); + } + return names; + } } diff --git a/src/blackmisc/applicationinfolist.h b/src/blackmisc/applicationinfolist.h index e28f4ebd3..3252b3613 100644 --- a/src/blackmisc/applicationinfolist.h +++ b/src/blackmisc/applicationinfolist.h @@ -36,6 +36,12 @@ namespace BlackMisc //! List containing entry for CApplicationInfo::Application ? bool containsApplication(CApplicationInfo::Application application) const; + + //! Remove given application + int removeApplication(CApplicationInfo::Application application); + + //! Running application names + QStringList runningProcessNames() const; }; } diff --git a/src/swiftlauncher/swiftlauncher.cpp b/src/swiftlauncher/swiftlauncher.cpp index 84e5f9b2e..882ab1098 100644 --- a/src/swiftlauncher/swiftlauncher.cpp +++ b/src/swiftlauncher/swiftlauncher.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -359,6 +360,20 @@ void CSwiftLauncher::saveSetup() m_setup.set(setup); } +bool CSwiftLauncher::warnAboutOtherSwiftApplications() +{ + CApplicationInfoList running = CGuiApplication::getRunningApplications(); + running.removeApplication(CApplicationInfo::Laucher); + if (running.isEmpty()) { return true; } + + // getting here means another application is running + const QString msg = + QStringLiteral("While using the wizard no other application should run.\nClose applications and try again.\nCurrently running: ") % + running.runningProcessNames().join(','); + QMessageBox::question(this, "Wizard", msg, QMessageBox::Close); + return false; +} + QString CSwiftLauncher::toCmdLine(const QString &exe, const QStringList &exeArgs) { if (exeArgs.isEmpty()) { return exe; } @@ -527,6 +542,8 @@ void CSwiftLauncher::ps_checkRunningApplicationsAndCore() void CSwiftLauncher::ps_startWizard() { + const bool show = this->warnAboutOtherSwiftApplications(); + if (!show) { return; } if (!m_wizard) { m_wizard.reset(new CConfigurationWizard(this)); diff --git a/src/swiftlauncher/swiftlauncher.h b/src/swiftlauncher/swiftlauncher.h index 08701abfe..076c9bfb1 100644 --- a/src/swiftlauncher/swiftlauncher.h +++ b/src/swiftlauncher/swiftlauncher.h @@ -79,7 +79,7 @@ private: QScopedPointer ui; QScopedPointer m_wizard; BlackMisc::CData m_updateInfo { this, &CSwiftLauncher::ps_changedUpdateInfoCache }; //!< version cache - BlackMisc::CData m_setup { this }; //! setup, ie last user selection + BlackMisc::CData m_setup { this }; //!< setup, i.e. last user selection QString m_executable; QStringList m_executableArgs; QTimer m_checkTimer { this }; @@ -140,6 +140,9 @@ private: //! Save state void saveSetup(); + //! Check for other swift applications, if so show message box + bool warnAboutOtherSwiftApplications(); + //! Command line static QString toCmdLine(const QString &exe, const QStringList &exeArgs); @@ -183,7 +186,7 @@ private slots: //! Show the log page void ps_showLogPage(); - //! Check if applicationas are already running + //! Check if applications are already running void ps_checkRunningApplicationsAndCore(); //! Start the configuration wizard