diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp index 25014480dc22c095bc6c91ff7fc102cad8a7d22e..d5ca15a2e821b8c5e3ff9a0ffe97de53e43a465b 100644 --- a/src/plugins/designer/qtcreatorintegration.cpp +++ b/src/plugins/designer/qtcreatorintegration.cpp @@ -334,16 +334,24 @@ static void addDeclaration(Document::Ptr doc, const Class *cl, const QString &fu if (const Function *fun = decl->type()->asFunctionType()) { // we are only interested in declarations of methods. if (fun->isSlot() && fun->isPrivate()) { + + // + // ### FIXME: change this to use the Refactoring changes and the AST to find the correct insertion position + // + const int line = fun->line(); // this is the beginning of function name: "void ^foo(...)" - const int column = fun->column(); + const int column = 0; if (ITextEditable *editable = editableAt(docFileName, line, column)) { - unsigned dl, dc; // this position is the beginning of return value: "^void foo(...)" - unit->getPosition(decl->startOffset(), &dl, &dc); - dc--; // if the first character in line is 'v' coming from "void" getStartPosition returns 1, not 0, so we always decrement it. - editable->gotoLine(dl, dc); - editable->position(ITextEditor::StartOfLine); - const QString indentation = QString(dc, QLatin1Char(' ')); - editable->insert(declaration + indentation); + BaseTextEditor *editor = qobject_cast<BaseTextEditor *>(editable->widget()); + if (editor) { + QTextCursor tc = editor->textCursor(); + int pos = tc.position(); + tc.beginEditBlock(); + tc.insertText(declaration); + tc.setPosition(pos, QTextCursor::KeepAnchor); + editor->indentInsertedText(tc); + tc.endEditBlock(); + } } return; }