mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 18:15:40 +02:00
Fix for race condition when switching between Main Menu and Audio Menu
This commit is contained in:
parent
03b6280ed0
commit
5b1f150171
6 changed files with 35 additions and 48 deletions
|
@ -97,10 +97,12 @@ FocusScope {
|
||||||
menuPopperUpper.closeLastMenu();
|
menuPopperUpper.closeLastMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
function setRootMenu(menu) {
|
function setRootMenu(rootMenu, subMenu) {
|
||||||
tabletMenu.rootMenu = menu
|
tabletMenu.subMenu = subMenu;
|
||||||
|
tabletMenu.rootMenu = rootMenu;
|
||||||
buildMenu()
|
buildMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildMenu() {
|
function buildMenu() {
|
||||||
// Build submenu if specified.
|
// Build submenu if specified.
|
||||||
if (subMenu !== "") {
|
if (subMenu !== "") {
|
||||||
|
|
|
@ -83,7 +83,7 @@ FocusScope {
|
||||||
}
|
}
|
||||||
|
|
||||||
function recalcSize() {
|
function recalcSize() {
|
||||||
if (model.count !== count || !visible) {
|
if (!model || model.count !== count || !visible) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,9 @@ Item {
|
||||||
objectName: "tabletRoot"
|
objectName: "tabletRoot"
|
||||||
property string username: "Unknown user"
|
property string username: "Unknown user"
|
||||||
property var eventBridge;
|
property var eventBridge;
|
||||||
property string option: ""
|
|
||||||
|
property var rootMenu;
|
||||||
|
property string subMenu: ""
|
||||||
|
|
||||||
signal showDesktop();
|
signal showDesktop();
|
||||||
|
|
||||||
|
@ -14,8 +16,13 @@ Item {
|
||||||
option = value;
|
option = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setMenuProperties(rootMenu, subMenu) {
|
||||||
|
tabletRoot.rootMenu = rootMenu;
|
||||||
|
tabletRoot.subMenu = subMenu;
|
||||||
|
}
|
||||||
|
|
||||||
function loadSource(url) {
|
function loadSource(url) {
|
||||||
loader.source = ""; // HACK: make sure we load the qml fresh each time.
|
loader.source = ""; // make sure we load the qml fresh each time.
|
||||||
loader.source = url;
|
loader.source = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,8 +85,8 @@ Item {
|
||||||
if (loader.item.hasOwnProperty("sendToScript")) {
|
if (loader.item.hasOwnProperty("sendToScript")) {
|
||||||
loader.item.sendToScript.connect(tabletRoot.sendToScript);
|
loader.item.sendToScript.connect(tabletRoot.sendToScript);
|
||||||
}
|
}
|
||||||
if (loader.item.hasOwnProperty("subMenu")) {
|
if (loader.item.hasOwnProperty("setRootMenu")) {
|
||||||
loader.item.subMenu = option;
|
loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu);
|
||||||
}
|
}
|
||||||
loader.item.forceActiveFocus();
|
loader.item.forceActiveFocus();
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,17 +19,22 @@ Windows.ScrollingWindow {
|
||||||
objectName: "tabletRoot"
|
objectName: "tabletRoot"
|
||||||
property string username: "Unknown user"
|
property string username: "Unknown user"
|
||||||
property var eventBridge;
|
property var eventBridge;
|
||||||
|
|
||||||
|
property var rootMenu;
|
||||||
|
property string subMenu: ""
|
||||||
|
|
||||||
shown: false
|
shown: false
|
||||||
resizable: false
|
resizable: false
|
||||||
|
|
||||||
signal showDesktop();
|
signal showDesktop();
|
||||||
|
|
||||||
function setOption(value) {
|
function setMenuProperties(rootMenu, subMenu) {
|
||||||
option = value;
|
tabletRoot.rootMenu = rootMenu;
|
||||||
|
tabletRoot.subMenu = subMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSource(url) {
|
function loadSource(url) {
|
||||||
loader.source = ""; // HACK: make sure we load the qml fresh each time.
|
loader.source = ""; // make sure we load the qml fresh each time.
|
||||||
loader.source = url;
|
loader.source = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,6 +99,9 @@ Windows.ScrollingWindow {
|
||||||
if (loader.item.hasOwnProperty("sendToScript")) {
|
if (loader.item.hasOwnProperty("sendToScript")) {
|
||||||
loader.item.sendToScript.connect(tabletRoot.sendToScript);
|
loader.item.sendToScript.connect(tabletRoot.sendToScript);
|
||||||
}
|
}
|
||||||
|
if (loader.item.hasOwnProperty("setRootMenu")) {
|
||||||
|
loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu);
|
||||||
|
}
|
||||||
loader.item.forceActiveFocus();
|
loader.item.forceActiveFocus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,16 +293,14 @@ void TabletProxy::gotoMenuScreen(const QString& submenu) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root) {
|
if (root) {
|
||||||
if (_state != State::Menu) {
|
removeButtonsFromHomeScreen();
|
||||||
removeButtonsFromHomeScreen();
|
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||||
QMetaObject::invokeMethod(root, "setOption", Q_ARG(const QVariant&, QVariant(submenu)));
|
QObject* menu = offscreenUi->getRootMenu();
|
||||||
auto loader = root->findChild<QQuickItem*>("loader");
|
QMetaObject::invokeMethod(root, "setMenuProperties", Q_ARG(QVariant, QVariant::fromValue(menu)), Q_ARG(const QVariant&, QVariant(submenu)));
|
||||||
QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToMenuScreen()), Qt::DirectConnection);
|
QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL)));
|
||||||
QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, QVariant(VRMENU_SOURCE_URL)));
|
_state = State::Menu;
|
||||||
_state = State::Menu;
|
emit screenChanged(QVariant("Menu"), QVariant(VRMENU_SOURCE_URL));
|
||||||
emit screenChanged(QVariant("Menu"), QVariant(VRMENU_SOURCE_URL));
|
QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
|
||||||
QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,33 +482,6 @@ QObject* TabletProxy::getTabletSurface() {
|
||||||
return _qmlOffscreenSurface;
|
return _qmlOffscreenSurface;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabletProxy::addButtonsToMenuScreen() {
|
|
||||||
QObject* root = nullptr;
|
|
||||||
if (!_toolbarMode && _qmlTabletRoot) {
|
|
||||||
root = _qmlTabletRoot;
|
|
||||||
} else if (_toolbarMode && _desktopWindow) {
|
|
||||||
root = _desktopWindow->asQuickItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!root) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto loader = root->findChild<QQuickItem*>("loader");
|
|
||||||
if (!loader) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QQuickItem* VrMenu = loader->findChild<QQuickItem*>("tabletMenu");
|
|
||||||
if (VrMenu) {
|
|
||||||
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
|
||||||
QObject* menu = offscreenUi->getRootMenu();
|
|
||||||
QMetaObject::invokeMethod(VrMenu, "setRootMenu", Qt::AutoConnection, Q_ARG(QVariant, QVariant::fromValue(menu)));
|
|
||||||
}
|
|
||||||
|
|
||||||
QObject::disconnect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToMenuScreen()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void TabletProxy::removeButtonsFromHomeScreen() {
|
void TabletProxy::removeButtonsFromHomeScreen() {
|
||||||
auto tablet = getQmlTablet();
|
auto tablet = getQmlTablet();
|
||||||
for (auto& buttonProxy : _tabletButtonProxies) {
|
for (auto& buttonProxy : _tabletButtonProxies) {
|
||||||
|
|
|
@ -182,7 +182,6 @@ signals:
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void addButtonsToHomeScreen();
|
void addButtonsToHomeScreen();
|
||||||
void addButtonsToMenuScreen();
|
|
||||||
void desktopWindowClosed();
|
void desktopWindowClosed();
|
||||||
protected:
|
protected:
|
||||||
void removeButtonsFromHomeScreen();
|
void removeButtonsFromHomeScreen();
|
||||||
|
|
Loading…
Reference in a new issue