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
293293 }
294294
295295 if (root) {
296− if (_state != State::Menu) {
297− removeButtonsFromHomeScreen();
298− QMetaObject::invokeMethod(root, "setOption", Q_ARG(const QVariant&, QVariant(submenu)));
299− auto loader = root->findChild<QQuickItem*>("loader");
300− QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToMenuScreen()), Qt::DirectConnection);
301− QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL)));
302− _state = State::Menu;
303− emit screenChanged(QVariant("Menu"), QVariant(VRMENU_SOURCE_URL));
304− QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
305− }
296+ removeButtonsFromHomeScreen();
297+ auto offscreenUi = DependencyManager::get<OffscreenUi>();
298+ QObject* menu = offscreenUi->getRootMenu();
299+ QMetaObject::invokeMethod(root, "setMenuProperties", Q_ARG(QVariant, QVariant::fromValue(menu)), Q_ARG(const QVariant&, QVariant(submenu)));
300+ QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL)));
301+ _state = State::Menu;
302+ emit screenChanged(QVariant("Menu"), QVariant(VRMENU_SOURCE_URL));
303+ QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
306304 }
307305 }
308306
@@ -484,33 +482,6 @@ QObject* TabletProxy::getTabletSurface() { · 175 unmodified lines
484482 return _qmlOffscreenSurface;
485483 }
486484
487−void 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−
514485 void TabletProxy::removeButtonsFromHomeScreen() {
515486 auto tablet = getQmlTablet();
516487 for (auto& buttonProxy : _tabletButtonProxies) {