diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c9c3e85f57..13c2d01dc2 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3894,7 +3894,34 @@ void Application::keyPressEvent(QKeyEvent* event) { return; } - if (hasFocus() && !_loginDialogPoppedUp) { + if (hasFocus() && _loginDialogPoppedUp) { + if (_keyboardMouseDevice->isActive()) { + _keyboardMouseDevice->keyReleaseEvent(event); + } + + bool isMeta = event->modifiers().testFlag(Qt::ControlModifier); + bool isOption = event->modifiers().testFlag(Qt::AltModifier); + switch (event->key()) { + case Qt::Key_4: + case Qt::Key_5: + case Qt::Key_6: + case Qt::Key_7: + if (isMeta || isOption) { + unsigned int index = static_cast(event->key() - Qt::Key_1); + auto displayPlugins = PluginManager::getInstance()->getDisplayPlugins(); + if (index < displayPlugins.size()) { + auto targetPlugin = displayPlugins.at(index); + QString targetName = targetPlugin->getName(); + auto menu = Menu::getInstance(); + QAction* action = menu->getActionForOption(targetName); + if (action && !action->isChecked()) { + action->trigger(); + } + } + } + break; + } + } else if (hasFocus()) { if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->keyPressEvent(event); } @@ -5200,7 +5227,11 @@ void Application::pauseUntilLoginDetermined() { nodeList->getDomainHandler().setInterstitialModeEnabled(false); // disconnect domain handler. nodeList->getDomainHandler().disconnect(); - Menu::getInstance()->setVisible(false); + auto menu = Menu::getInstance(); + menu->getMenu("Edit")->setVisible(false); + menu->getMenu("View")->setVisible(false); + menu->getMenu("Navigate")->setVisible(false); + menu->getMenu("Settings")->setVisible(false); { auto scriptEngines = DependencyManager::get().data(); @@ -5248,7 +5279,11 @@ void Application::resumeAfterLoginDialogActionTaken() { nodeList->getDomainHandler().setInterstitialModeEnabled(_interstitialModeEnabled); nodeList->getDomainHandler().resetting(); - Menu::getInstance()->setVisible(true); + auto menu = Menu::getInstance(); + menu->getMenu("Edit")->setVisible(true); + menu->getMenu("View")->setVisible(true); + menu->getMenu("Navigate")->setVisible(true); + menu->getMenu("Settings")->setVisible(true); } void Application::loadAvatarScripts(const QVector& urls) { diff --git a/libraries/ui/src/ui/Menu.cpp b/libraries/ui/src/ui/Menu.cpp index 848b2362ee..3d22138f13 100644 --- a/libraries/ui/src/ui/Menu.cpp +++ b/libraries/ui/src/ui/Menu.cpp @@ -550,6 +550,10 @@ void MenuWrapper::setEnabled(bool enabled) { _realMenu->setEnabled(enabled); } +void MenuWrapper::setVisible(bool visible) { + _realMenu->menuAction()->setVisible(visible); +} + QAction* MenuWrapper::addSeparator() { QAction* action = _realMenu->addSeparator(); auto offscreenUi = DependencyManager::get(); diff --git a/libraries/ui/src/ui/Menu.h b/libraries/ui/src/ui/Menu.h index 2977a5330a..98b5bd17e3 100644 --- a/libraries/ui/src/ui/Menu.h +++ b/libraries/ui/src/ui/Menu.h @@ -29,6 +29,7 @@ public: QList actions(); MenuWrapper* addMenu(const QString& menuName); void setEnabled(bool enabled = true); + void setVisible(bool visible = true); QAction* addSeparator(); void addAction(QAction* action);