History

Fix for race condition when switching between Main Menu and Audio Menu

Anthony J. Thibault committed 9 years ago

Commit 5b1f1501 parent 03b62806 files · +35 −48Browse files

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

Unified · Split

libraries/script-engine/src/TabletScriptingInterface.cpp+8−37
@@ -293,16 +293,14 @@ void TabletProxy::gotoMenuScreen(const QString& submenu) { · 292 unmodified lines
293 }293 }
294 294
295 if (root) {295 if (root) {
296 if (_state != State::Menu) {296 removeButtonsFromHomeScreen();
297 removeButtonsFromHomeScreen();297 auto offscreenUi = DependencyManager::get<OffscreenUi>();
298 QMetaObject::invokeMethod(root, "setOption", Q_ARG(const QVariant&, QVariant(submenu)));298 QObject* menu = offscreenUi->getRootMenu();
299 auto loader = root->findChild<QQuickItem*>("loader");299 QMetaObject::invokeMethod(root, "setMenuProperties", Q_ARG(QVariant, QVariant::fromValue(menu)), Q_ARG(const QVariant&, QVariant(submenu)));
300 QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToMenuScreen()), Qt::DirectConnection);300 QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL)));
301 QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL)));301 _state = State::Menu;
302 _state = State::Menu;302 emit screenChanged(QVariant("Menu"), QVariant(VRMENU_SOURCE_URL));
303 emit screenChanged(QVariant("Menu"), QVariant(VRMENU_SOURCE_URL));303 QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
304 QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
305 }
306 }304 }
307}305}
308 306
@@ -484,33 +482,6 @@ QObject* TabletProxy::getTabletSurface() { · 175 unmodified lines
484 return _qmlOffscreenSurface;482 return _qmlOffscreenSurface;
485}483}
486 484
487void TabletProxy::addButtonsToMenuScreen() {
488 QObject* root = nullptr;
489 if (!_toolbarMode && _qmlTabletRoot) {
490 root = _qmlTabletRoot;
491 } else if (_toolbarMode && _desktopWindow) {
492 root = _desktopWindow->asQuickItem();
493 }
494
495 if (!root) {
496 return;
497 }
498
499 auto loader = root->findChild<QQuickItem*>("loader");
500 if (!loader) {
501 return;
502 }
503
504 QQuickItem* VrMenu = loader->findChild<QQuickItem*>("tabletMenu");
505 if (VrMenu) {
506 auto offscreenUi = DependencyManager::get<OffscreenUi>();
507 QObject* menu = offscreenUi->getRootMenu();
508 QMetaObject::invokeMethod(VrMenu, "setRootMenu", Qt::AutoConnection, Q_ARG(QVariant, QVariant::fromValue(menu)));
509 }
510
511 QObject::disconnect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToMenuScreen()));
512}
513
514void TabletProxy::removeButtonsFromHomeScreen() {485void TabletProxy::removeButtonsFromHomeScreen() {
515 auto tablet = getQmlTablet();486 auto tablet = getQmlTablet();
516 for (auto& buttonProxy : _tabletButtonProxies) {487 for (auto& buttonProxy : _tabletButtonProxies) {