diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 103d1fc90b0..851b6fa16d1 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -950,6 +950,20 @@ static UiQualifiedId *qualifiedTypeNameId(Node *m) return 0; } +class QtQuickToolbarMarker {}; +Q_DECLARE_METATYPE(QtQuickToolbarMarker) + +template +static QList removeMarkersOfType(const QList &markers) +{ + QList result; + foreach (const TextEditor::RefactorMarker &marker, markers) { + if (!marker.data.canConvert()) + result += marker; + } + return result; +} + void QmlJSTextEditorWidget::updateCursorPositionNow() { if (m_contextPane && document() && semanticInfo().isValid() @@ -959,9 +973,10 @@ void QmlJSTextEditorWidget::updateCursorPositionNow() Node *newNode = m_semanticInfo.declaringMemberNoProperties(position()); if (oldNode != newNode && m_oldCursorPosition != -1) m_contextPane->apply(editor(), semanticInfo().document, 0, newNode, false); + if (m_contextPane->isAvailable(editor(), semanticInfo().document, newNode) && !m_contextPane->widget()->isVisible()) { - QList markers; + QList markers = removeMarkersOfType(refactorMarkers()); if (UiObjectMember *m = newNode->uiObjectMemberCast()) { const int start = qualifiedTypeNameId(m)->identifierToken.begin(); for (UiQualifiedId *q = qualifiedTypeNameId(m); q; q = q->next) { @@ -973,18 +988,15 @@ void QmlJSTextEditorWidget::updateCursorPositionNow() tc.setPosition(end); marker.cursor = tc; marker.tooltip = tr("Show Qt Quick ToolBar"); + marker.data = QVariant::fromValue(QtQuickToolbarMarker()); markers.append(marker); - } else { - QList markers; - setRefactorMarkers(markers); } } } } setRefactorMarkers(markers); } else if (oldNode != newNode) { - QList markers; - setRefactorMarkers(markers); + setRefactorMarkers(removeMarkersOfType(refactorMarkers())); } m_oldCursorPosition = position(); @@ -1373,8 +1385,7 @@ void QmlJSTextEditorWidget::showContextPane() &scopeChain, newNode, false, true); m_oldCursorPosition = position(); - QList markers; - setRefactorMarkers(markers); + setRefactorMarkers(removeMarkersOfType(refactorMarkers())); } } @@ -1553,9 +1564,10 @@ void QmlJSTextEditorWidget::updateSemanticInfo(const SemanticInfo &semanticInfo) setExtraSelections(CodeWarningsSelection, selections); } -void QmlJSTextEditorWidget::onRefactorMarkerClicked(const TextEditor::RefactorMarker &) +void QmlJSTextEditorWidget::onRefactorMarkerClicked(const TextEditor::RefactorMarker &marker) { - showContextPane(); + if (marker.data.canConvert()) + showContextPane(); } void QmlJSTextEditorWidget::onCursorPositionChanged() diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 85193ef3837..f08fa5ff1a0 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -6020,6 +6020,10 @@ QString BaseTextEditor::contextHelpId() const return m_contextHelpId; } +Internal::RefactorMarkers BaseTextEditorWidget::refactorMarkers() const +{ + return d->m_refactorOverlay->markers(); +} void BaseTextEditorWidget::setRefactorMarkers(const Internal::RefactorMarkers &markers) { diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index c0f71474b8f..e8bb1ef235a 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -405,7 +405,7 @@ public: QList extraSelections(ExtraSelectionKind kind) const; QString extraSelectionTooltip(int pos) const; - + Internal::RefactorMarkers refactorMarkers() const; void setRefactorMarkers(const Internal::RefactorMarkers &markers); signals: void refactorMarkerClicked(const TextEditor::RefactorMarker &marker);