History

Merge branch 'master' of github.com:highfidelity/hifi into audio/parity

Zach Pomerantz committed 9 years ago

Commit a8f69bb2 parents e7da007 ae81738385 files · +9641 −4012Browse files

Showing the changes to libraries/script-engine/src/TabletScriptingInterface.cpp (1 of 385 files). Show all

Unified · Split

libraries/script-engine/src/TabletScriptingInterface.cpp+27−19
@@ -542,7 +542,7 @@ void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaS · 541 unmodified lines
542542
543543 QObject* TabletProxy::addButton(const QVariant& properties) {
544544 auto tabletButtonProxy = QSharedPointer<TabletButtonProxy>(new TabletButtonProxy(properties.toMap()));
545− std::lock_guard<std::mutex> guard(_tabletMutex);
545+ std::unique_lock<std::mutex> guard(_tabletMutex);
546546 _tabletButtonProxies.push_back(tabletButtonProxy);
547547 if (!_toolbarMode && _qmlTabletRoot) {
548548 auto tablet = getQmlTablet();
@@ -552,7 +552,6 @@ QObject* TabletProxy::addButton(const QVariant& properties) { · 3 unmodified lines
552552 qCCritical(scriptengine) << "Could not find tablet in TabletRoot.qml";
553553 }
554554 } else if (_toolbarMode) {
555−
556555 auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
557556 QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy();
558557
@@ -561,6 +560,8 @@ QObject* TabletProxy::addButton(const QVariant& properties) { · 2 unmodified lines
561560 connectionType = Qt::BlockingQueuedConnection;
562561 }
563562
563+ guard.unlock();
564+
564565 // copy properties from tablet button proxy to toolbar button proxy.
565566 QObject* toolbarButtonProxy = nullptr;
566567 bool hasResult = QMetaObject::invokeMethod(toolbarProxy, "addButton", connectionType, Q_RETURN_ARG(QObject*, toolbarButtonProxy), Q_ARG(QVariant, tabletButtonProxy->getProperties()));
@@ -578,31 +579,38 @@ bool TabletProxy::onHomeScreen() { · 11 unmodified lines
578579 }
579580
580581 void TabletProxy::removeButton(QObject* tabletButtonProxy) {
581− std::lock_guard<std::mutex> guard(_tabletMutex);
582+ std::unique_lock<std::mutex> guard(_tabletMutex);
582583
583584 auto tablet = getQmlTablet();
584585 if (!tablet) {
585586 qCCritical(scriptengine) << "Could not find tablet in TabletRoot.qml";
586587 }
587588
588− auto iter = std::find(_tabletButtonProxies.begin(), _tabletButtonProxies.end(), tabletButtonProxy);
589− if (iter != _tabletButtonProxies.end()) {
590− if (!_toolbarMode && _qmlTabletRoot) {
591− (*iter)->setQmlButton(nullptr);
592− if (tablet) {
593− QMetaObject::invokeMethod(tablet, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, (*iter)->getProperties()));
594− }
595− } else if (_toolbarMode) {
596− auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
597− QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy();
598−
599− // remove button from toolbarProxy
600− QMetaObject::invokeMethod(toolbarProxy, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, (*iter)->getUuid().toString()));
601− (*iter)->setToolbarButtonProxy(nullptr);
589+ QSharedPointer<TabletButtonProxy> buttonProxy;
590+ {
591+ auto iter = std::find(_tabletButtonProxies.begin(), _tabletButtonProxies.end(), tabletButtonProxy);
592+ if (iter == _tabletButtonProxies.end()) {
593+ qCWarning(scriptengine) << "TabletProxy::removeButton() could not find button " << tabletButtonProxy;
594+ return;
602595 }
596+ buttonProxy = *iter;
603597 _tabletButtonProxies.erase(iter);
604− } else {
605− qCWarning(scriptengine) << "TabletProxy::removeButton() could not find button " << tabletButtonProxy;
598+ }
599+
600+ if (!_toolbarMode && _qmlTabletRoot) {
601+ buttonProxy->setQmlButton(nullptr);
602+ if (tablet) {
603+ guard.unlock();
604+ QMetaObject::invokeMethod(tablet, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getProperties()));
605+ }
606+ } else if (_toolbarMode) {
607+ auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
608+ QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy();
609+
610+ // remove button from toolbarProxy
611+ guard.unlock();
612+ QMetaObject::invokeMethod(toolbarProxy, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getUuid().toString()));
613+ buttonProxy->setToolbarButtonProxy(nullptr);
606614 }
607615 }
608616