summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/ios/iosrunfactories.cpp30
-rw-r--r--src/plugins/ios/iosrunfactories.h2
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