diff options
-rw-r--r-- | src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 20027265685..488d7d2bb99 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -40,6 +40,7 @@ #include <QImageReader> #include <QMessageBox> #include <QMimeData> +#include <QScopeGuard> #include <exception> @@ -610,31 +611,29 @@ public: { menu()->clear(); - menu()->setEnabled(true); - const auto selection = selectionContext(); + + bool showMenu = false; + auto cleanup = qScopeGuard([&]{ menu()->setEnabled(showMenu); }); + if (!selection.isValid()) return; if (!selection.singleNodeIsSelected()) return; - if (!action()->isEnabled()) - return; ModelNode currentNode = selection.currentSingleSelectedNode(); if (!currentNode.isValid()) return; + if (!currentNode.hasId()) + return; + showMenu = true; QmlObjectNode currentObjectNode(currentNode); QStringList signalsList = getSignalsList(currentNode); QList<SlotList> slotsLists = getSlotsLists(currentNode); - if (!currentNode.hasId()) { - menu()->setEnabled(false); - return; - } - for (const ModelNode &connectionNode : currentObjectNode.getAllConnections()) { for (const AbstractProperty &property : connectionNode.properties()) { if (property.isSignalHandlerProperty() && property.name() != "target") { |