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 #include #include +#include #include @@ -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 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") {