diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2019-09-04 23:49:09 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2019-09-13 10:47:27 +0200 |
commit | 29e40c1f6f630803747ca615f99d2813df57fc52 (patch) | |
tree | 5246dbe6e1bf387cc4b83faec0d88294db27fe02 /src/plugins/platforms/winrt | |
parent | 6eaa1d07e1e86f1535b8294645f75972dc69184b (diff) |
QWinRTUiaValueProvider: optimize SetValue()
The code followed a pattern used elsewhere whereby a return value is
transmitted out of a task executed on a separate thread by way of
shared ownership of the value using QSharedPointer.
In the present case, however, the pattern was applied to an argument
of the task, not its return value, so remove all the sharing machinery
and just copy the argument (a QString) into the task (a lambda).
Change-Id: Ib997322ed70201781b6012c7e4f945b124b05868
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/plugins/platforms/winrt')
-rw-r--r-- | src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp b/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp index 21389b74d2..255d8ee49e 100644 --- a/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp +++ b/src/plugins/platforms/winrt/uiautomation/qwinrtuiavalueprovider.cpp @@ -96,24 +96,22 @@ HRESULT STDMETHODCALLTYPE QWinRTUiaValueProvider::SetValue(HSTRING value) qCDebug(lcQpaUiAutomation) << __FUNCTION__; auto accid = id(); - auto tmpValue = QSharedPointer<QString>(new QString); - auto ptrValue = new QSharedPointer<QString>(tmpValue); - *tmpValue = hStrToQStr(value); + QString tmpValue = hStrToQStr(value); - QEventDispatcherWinRT::runOnMainThread([accid, ptrValue]() { + QEventDispatcherWinRT::runOnMainThread([accid, tmpValue]() { if (QAccessibleInterface *accessible = accessibleForId(accid)) { // First sets the value as a text. - accessible->setText(QAccessible::Value, **ptrValue); + accessible->setText(QAccessible::Value, tmpValue); // Then, if the control supports the value interface (range value) // and the supplied text can be converted to a number, and that number // lies within the min/max limits, sets it as the control's current (numeric) value. if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) { bool ok = false; - double numval = (*ptrValue)->toDouble(&ok); + double numval = tmpValue.toDouble(&ok); if (ok) { double minimum = valueInterface->minimumValue().toDouble(); double maximum = valueInterface->maximumValue().toDouble(); @@ -124,7 +122,6 @@ HRESULT STDMETHODCALLTYPE QWinRTUiaValueProvider::SetValue(HSTRING value) } } QWinRTUiaMetadataCache::instance()->load(accid); - delete ptrValue; return S_OK; }, 0); |