Commit f6542e2a authored by Fawzi Mohamed's avatar Fawzi Mohamed
Browse files

ios: disable run button while an application is running



Task-number: QTCREATORBUG-10670
Change-Id: I23b553984b2c1848983299613004cbd910dc92dc
Reviewed-by: default avatarFawzi Mohamed <fawzi.mohamed@digia.com>
parent 4bd0fcbf
......@@ -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
......
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment