diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index ea6c3741e5e02fbbbc9fe2331d08fbfc887a6085..21ff1abfe66c51a4abfea02654343afb25115eb8 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -1002,6 +1002,11 @@ protected: return (cursorPositionEnd >= begin && cursorPositionStart <= end); } + bool isRangeSelected() const + { + return (cursorPositionStart != cursorPositionEnd); + } + virtual void postVisit(Node *ast) { if ((cursorPositionStart == cursorPositionEnd && !selectedMembers.isEmpty())) @@ -1011,12 +1016,13 @@ protected: unsigned begin = member->firstSourceLocation().begin(); unsigned end = member->lastSourceLocation().end(); - if ((cursorPositionStart != cursorPositionEnd && intersectsCursor(begin, end)) - || (cursorPositionStart == cursorPositionEnd && containsCursor(begin, end))) + if ((isRangeSelected() && intersectsCursor(begin, end)) + || (!isRangeSelected() && containsCursor(begin, end))) { if (UiObjectInitializer *init = initializer(member)) { for (UiObjectMemberList *it = init->members; it; it = it->next) { - if (isAcceptableParent(member)) { + if ((isRangeSelected() && isAcceptableParent(member)) + || (!isRangeSelected() && isIdBinding(it->member))) { selectedMembers << member; // move start towards end; this facilitates multiselection so that root is usually ignored. cursorPositionStart = qMin(end, cursorPositionEnd);