diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index bc8047d4749..b19e06e45b6 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -173,6 +173,11 @@ DesignerActionManager &DesignerActionManager::instance() return QmlDesignerPlugin::instance()->viewManager().designerActionManager(); } +void DesignerActionManager::setupContext() +{ + m_designerActionManagerView->setupContext(); +} + class VisiblityModelNodeAction : public ModelNodeContextMenuAction { public: diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h index 4a9571fabae..6cd7d7f2e2e 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h @@ -71,6 +71,10 @@ public: QGraphicsWidget *createFormEditorToolBar(QGraphicsItem *parent); static DesignerActionManager &instance(); + void setupContext(); + + DesignerActionManager(const DesignerActionManager&) = delete; + DesignerActionManager & operator=(const DesignerActionManager&) = delete; private: QList > m_designerActions; diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp index d11b6ca2dad..1efd79a1cdf 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp @@ -147,7 +147,7 @@ void DesignerActionManagerView::bindingPropertiesChanged(const QList > &) { if (hasSingleSelectedModelNode()) - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } DesignerActionManager &DesignerActionManagerView::designerActionManager() @@ -168,13 +168,14 @@ void DesignerActionManagerView::emitSelectionChanged() /* We should consider compressing this. */ /* One update every 100ms should be enough. */ -void DesignerActionManagerView::setupContext() +void DesignerActionManagerView::setupContext(SelectionContext::UpdateMode updateMode) { if (m_isInRewriterTransaction) { m_setupContextDirty = true; return; } SelectionContext selectionContext(this); + selectionContext.setUpdateMode(updateMode); foreach (ActionInterface* action, m_designerActionList) { action->currentContextChanged(selectionContext); } diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h index e1e926639f6..5ee29cd4217 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h @@ -26,6 +26,7 @@ #pragma once #include +#include #include "designeractionmanager.h" @@ -69,13 +70,11 @@ public: DesignerActionManager &designerActionManager(); const DesignerActionManager &designerActionManager() const; void emitSelectionChanged(); + void setupContext(SelectionContext::UpdateMode updateMode = SelectionContext::UpdateMode::Normal); signals: void selectionChanged(bool itemsSelected, bool rootItemIsSelected); -protected: - void setupContext(); - private: DesignerActionManager m_designerActionManager; QList m_designerActionList; diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp index bf95e70b3ca..de2733893aa 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp @@ -96,9 +96,12 @@ void ModelNodeContextMenu::execute(const QPoint &position, bool selectionMenuBoo m_selectionContext.setShowSelectionTools(selectionMenuBool); m_selectionContext.setScenePosition(m_scenePos); + auto &manager = QmlDesignerPlugin::instance()->designerActionManager(); + + manager.setupContext(); QSet factories = - QSet::fromList(QmlDesignerPlugin::instance()->designerActionManager().designerActions()); + QSet::fromList(manager.designerActions()); populateMenu(factories, QByteArray(), mainMenu, m_selectionContext); diff --git a/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp b/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp index 298eb855c38..e82b2a22ddc 100644 --- a/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp +++ b/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp @@ -117,4 +117,14 @@ bool SelectionContext::isValid() const return view() && view()->model(); } +bool SelectionContext::fastUpdate() const +{ + return m_updateMode == UpdateMode::Fast; +} + +void SelectionContext::setUpdateMode(UpdateMode mode) +{ + m_updateMode = mode; +} + } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/selectioncontext.h b/src/plugins/qmldesigner/components/componentcore/selectioncontext.h index 594fc2f6e5c..11e1937cbb5 100644 --- a/src/plugins/qmldesigner/components/componentcore/selectioncontext.h +++ b/src/plugins/qmldesigner/components/componentcore/selectioncontext.h @@ -35,6 +35,8 @@ namespace QmlDesigner { class QMLDESIGNERCORE_EXPORT SelectionContext { public: + enum class UpdateMode {Normal, Fast}; + SelectionContext(); SelectionContext(AbstractView *view); @@ -62,12 +64,16 @@ public: bool isValid() const; + bool fastUpdate() const; + void setUpdateMode(UpdateMode mode); + private: QPointer m_view; ModelNode m_targetNode; QPointF m_scenePosition; bool m_showSelectionTools = false; bool m_toggled = false; + UpdateMode m_updateMode = UpdateMode::Normal; }; } //QmlDesigner