diff options
-rw-r--r-- | src/plugins/ios/iosrunfactories.cpp | 30 | ||||
-rw-r--r-- | src/plugins/ios/iosrunfactories.h | 2 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/plugins/ios/iosrunfactories.cpp b/src/plugins/ios/iosrunfactories.cpp index e9c8219784..c4ad3fcafe 100644 --- a/src/plugins/ios/iosrunfactories.cpp +++ b/src/plugins/ios/iosrunfactories.cpp @@ -157,7 +157,26 @@ bool IosRunControlFactory::canRun(RunConfiguration *runConfiguration, { if (mode != NormalRunMode && mode != DebugRunMode) return false; - return qobject_cast<IosRunConfiguration *>(runConfiguration); + IosRunConfiguration *rc = qobject_cast<IosRunConfiguration *>(runConfiguration); + if (!rc) + return false; + + IDevice::ConstPtr device = DeviceKitInformation::device(rc->target()->kit()); + if (!device || device->deviceState() != IDevice::DeviceReadyToUse) + return false; + + // The device can only run the same application once, any subsequent runs will + // not launch a second instance. Disable the Run button if the application is already + // running on the device. + if (m_activeRunControls.contains(device->id())) { + QPointer<ProjectExplorer::RunControl> activeRunControl = m_activeRunControls[device->id()]; + if (activeRunControl && activeRunControl.data()->isRunning()) + return false; + else + m_activeRunControls.remove(device->id()); + } + + return rc; } RunControl *IosRunControlFactory::create(RunConfiguration *runConfig, @@ -166,10 +185,15 @@ RunControl *IosRunControlFactory::create(RunConfiguration *runConfig, Q_ASSERT(canRun(runConfig, mode)); IosRunConfiguration *rc = qobject_cast<IosRunConfiguration *>(runConfig); Q_ASSERT(rc); + RunControl *res = 0; if (mode == NormalRunMode) - return new Ios::Internal::IosRunControl(rc); + res = new Ios::Internal::IosRunControl(rc); else - return IosDebugSupport::createDebugRunControl(rc, errorMessage); + res = IosDebugSupport::createDebugRunControl(rc, errorMessage); + IDevice::ConstPtr device = DeviceKitInformation::device(rc->target()->kit()); + if (device) + m_activeRunControls[device->id()] = res; + return res; } } // namespace Internal diff --git a/src/plugins/ios/iosrunfactories.h b/src/plugins/ios/iosrunfactories.h index 8f4641c331..bf6272fea9 100644 --- a/src/plugins/ios/iosrunfactories.h +++ b/src/plugins/ios/iosrunfactories.h @@ -83,6 +83,8 @@ public: ProjectExplorer::RunControl *create(ProjectExplorer::RunConfiguration *runConfiguration, ProjectExplorer::RunMode mode, QString *errorMessage) QTC_OVERRIDE; +private: + mutable QMap<Core::Id, QPointer<ProjectExplorer::RunControl> > m_activeRunControls; }; } // namespace Internal |