diff --git a/src/plugins/qmldesigner/qmlcontextpane.cpp b/src/plugins/qmldesigner/qmlcontextpane.cpp index cae34207d98b0b7141b24e161ba48af919385990..b0f2dae9b59354573bcd487653e5965878d48ddc 100644 --- a/src/plugins/qmldesigner/qmlcontextpane.cpp +++ b/src/plugins/qmldesigner/qmlcontextpane.cpp @@ -109,6 +109,18 @@ void QmlContextPane::apply(TextEditor::BaseTextEditorEditable *editor, Document: offset = objectBinding->firstSourceLocation().offset; end = objectBinding->lastSourceLocation().end(); } + + int line1; + int column1; + int line2; + int column2; + m_editor->convertPosition(offset, &line1, &column1); //get line + m_editor->convertPosition(end, &line2, &column2); //get line + + QRegion reg; + if (line1 > -1 && line2 > -1) + reg = m_editor->editor()->translatedLineRegion(line1 - 1, line2); + if (name.contains("Text")) { m_node = 0; PropertyReader propertyReader(doc.data(), initializer); @@ -117,11 +129,15 @@ void QmlContextPane::apply(TextEditor::BaseTextEditorEditable *editor, Document: QPoint p1 = editor->editor()->mapToParent(editor->editor()->viewport()->mapToParent(editor->editor()->cursorRect(tc).topLeft()) - QPoint(0, contextWidget()->height() + 10)); tc.setPosition(end); QPoint p2 = editor->editor()->mapToParent(editor->editor()->viewport()->mapToParent(editor->editor()->cursorRect(tc).bottomLeft()) + QPoint(0, 10)); + QPoint offset = QPoint(10, 0); + if (reg.boundingRect().width() < 400) + offset = QPoint(400 - reg.boundingRect().width() + 10 ,0); + QPoint p3 = editor->editor()->mapToParent(editor->editor()->viewport()->mapToParent(reg.boundingRect().topRight()) + offset); p2.setX(p1.x()); if (!update) - contextWidget()->activate(p1 , p2); + contextWidget()->activate(p3 , p1, p2); else - contextWidget()->rePosition(p1 , p2); + contextWidget()->rePosition(p3 , p1, p2); m_blockWriting = true; contextWidget()->setType(name); contextWidget()->setProperties(&propertyReader);