diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index a855fb83616..1a3009f8545 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -635,6 +635,13 @@ bool CodeCompletion::completeUrl(const QString &relativeBasePath, const QString return completeFileName(relativeBasePath, fileName); } +class FileNameCompletion +{ +public: + bool isDirectory; +}; +Q_DECLARE_METATYPE(FileNameCompletion) + bool CodeCompletion::completeFileName(const QString &relativeBasePath, const QString &fileName, const QStringList &patterns) { @@ -657,6 +664,11 @@ bool CodeCompletion::completeFileName(const QString &relativeBasePath, const QSt TextEditor::CompletionItem item(this); item.text += fileName; + FileNameCompletion extraData; + extraData.isDirectory = dirIterator.fileInfo().isDir(); + if (extraData.isDirectory) + item.text += QLatin1Char('/'); + item.data = QVariant::fromValue(extraData); // ### Icon for file completions item.icon = iconForColor(Qt::darkBlue); m_completions.append(item); @@ -1028,7 +1040,7 @@ void CodeCompletion::complete(const TextEditor::CompletionItem &item, QChar type QString toInsert = item.text; if (QmlJSTextEditorWidget *edit = qobject_cast(m_editor->widget())) { - if (item.data.isValid()) { + if (item.data.canConvert()) { QTextCursor tc = edit->textCursor(); tc.setPosition(m_startPosition, QTextCursor::KeepAnchor); toInsert = item.data.toString(); @@ -1061,6 +1073,8 @@ void CodeCompletion::complete(const TextEditor::CompletionItem &item, QChar type if (toInsert.endsWith(QLatin1Char('.'))) m_restartCompletion = true; + if (item.data.canConvert() && item.data.value().isDirectory) + m_restartCompletion = true; } bool CodeCompletion::partiallyComplete(const QList &completionItems)