mirror of
https://github.com/overte-org/overte.git
synced 2025-08-11 14:07:38 +02:00
Merge pull request #9035 from druiz17/vrmenu
Fixed unable to remove menus from VrMenu context
This commit is contained in:
commit
4ae6cbad7b
2 changed files with 28 additions and 14 deletions
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include <QtQml>
|
||||
#include <QMenuBar>
|
||||
#include <QDebug>
|
||||
|
||||
#include "OffscreenUi.h"
|
||||
|
||||
|
@ -58,6 +59,18 @@ public:
|
|||
_qml->setProperty("visible", _action->isVisible());
|
||||
}
|
||||
|
||||
void clear() {
|
||||
_qml->setProperty("checkable", 0);
|
||||
_qml->setProperty("enabled", 0);
|
||||
_qml->setProperty("text", 0);
|
||||
_qml->setProperty("shortcut", 0);
|
||||
_qml->setProperty("checked", 0);
|
||||
_qml->setProperty("visible", 0);
|
||||
|
||||
_action->setUserData(USER_DATA_ID, nullptr);
|
||||
_qml->setUserData(USER_DATA_ID, nullptr);
|
||||
}
|
||||
|
||||
|
||||
const QUuid uuid{ QUuid::createUuid() };
|
||||
|
||||
|
@ -217,6 +230,7 @@ void VrMenu::insertAction(QAction* before, QAction* action) {
|
|||
}
|
||||
|
||||
class QQuickMenuBase;
|
||||
class QQuickMenu1;
|
||||
|
||||
void VrMenu::removeAction(QAction* action) {
|
||||
if (!action) {
|
||||
|
@ -229,9 +243,6 @@ void VrMenu::removeAction(QAction* action) {
|
|||
return;
|
||||
}
|
||||
|
||||
QObject* item = findMenuObject(userData->uuid.toString());
|
||||
QObject* menu = item->parent();
|
||||
// Proxy QuickItem requests through the QML layer
|
||||
QQuickMenuBase* qmlItem = reinterpret_cast<QQuickMenuBase*>(item);
|
||||
QMetaObject::invokeMethod(menu, "removeItem", Qt::DirectConnection, Q_ARG(QQuickMenuBase*, qmlItem));
|
||||
userData->clear();
|
||||
delete userData;
|
||||
}
|
||||
|
|
|
@ -408,6 +408,10 @@ void Menu::removeMenu(const QString& menuName) {
|
|||
parent->removeAction(action);
|
||||
} else {
|
||||
QMenuBar::removeAction(action);
|
||||
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||
offscreenUi->addMenuInitializer([=](VrMenu* vrMenu) {
|
||||
vrMenu->removeAction(action);
|
||||
});
|
||||
}
|
||||
|
||||
QMenuBar::repaint();
|
||||
|
@ -582,4 +586,3 @@ void MenuWrapper::insertAction(QAction* before, QAction* action) {
|
|||
vrMenu->insertAction(before, action);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue