@@ -1013,7 +1013,7 @@ void ExpressionLineEdit::slotTextChanged(const QString& text)
10131013 }
10141014}
10151015
1016- void ExpressionLineEdit::slotCompleteText (const QString& completionPrefix, bool isActivated )
1016+ void ExpressionLineEdit::slotCompleteText (const QString& completionPrefix, ActivationMode mode )
10171017{
10181018 int start, end;
10191019 completer->getPrefixRange (start, end);
@@ -1030,7 +1030,7 @@ void ExpressionLineEdit::slotCompleteText(const QString& completionPrefix, bool
10301030
10311031 // chain completions if we select an entry from the completer drop down
10321032 // and that entry ends with '.' or '#'
1033- if (isActivated ) {
1033+ if (mode == ActivationMode::Activated ) {
10341034 std::string textToComplete = completionPrefix.toUtf8 ().constData ();
10351035 if (textToComplete.size ()
10361036 && (*textToComplete.crbegin () == ' .' || *textToComplete.crbegin () == ' #' )) {
@@ -1042,12 +1042,12 @@ void ExpressionLineEdit::slotCompleteText(const QString& completionPrefix, bool
10421042
10431043void ExpressionLineEdit::slotCompleteTextHighlighted (const QString& completionPrefix)
10441044{
1045- slotCompleteText (completionPrefix, false );
1045+ slotCompleteText (completionPrefix, ActivationMode::Highlighted );
10461046}
10471047
10481048void ExpressionLineEdit::slotCompleteTextSelected (const QString& completionPrefix)
10491049{
1050- slotCompleteText (completionPrefix, true );
1050+ slotCompleteText (completionPrefix, ActivationMode::Activated );
10511051}
10521052
10531053
@@ -1116,13 +1116,13 @@ void ExpressionTextEdit::setDocumentObject(const App::DocumentObject* currentDoc
11161116 completer,
11171117 qOverload<const QString&>(&QCompleter::activated),
11181118 this ,
1119- &ExpressionTextEdit::slotCompleteText
1119+ &ExpressionTextEdit::slotCompleteTextSelected
11201120 );
11211121 connect (
11221122 completer,
11231123 qOverload<const QString&>(&QCompleter::highlighted),
11241124 this ,
1125- &ExpressionTextEdit::slotCompleteText
1125+ &ExpressionTextEdit::slotCompleteTextHighlighted
11261126 );
11271127 connect (this , &ExpressionTextEdit::textChanged2, completer, &ExpressionCompleter::slotUpdate);
11281128 connect (
@@ -1155,7 +1155,7 @@ void ExpressionTextEdit::slotTextChanged()
11551155 }
11561156}
11571157
1158- void ExpressionTextEdit::slotCompleteText (const QString& completionPrefix)
1158+ void ExpressionTextEdit::slotCompleteText (const QString& completionPrefix, ActivationMode mode )
11591159{
11601160 QTextCursor cursor = textCursor ();
11611161 int start, end;
@@ -1165,17 +1165,31 @@ void ExpressionTextEdit::slotCompleteText(const QString& completionPrefix)
11651165 cursor.movePosition (QTextCursor::NextCharacter, QTextCursor::MoveAnchor, end - pos);
11661166 }
11671167 cursor.movePosition (QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, end - start);
1168+
11681169 Base::FlagToggler<bool > flag (block, false );
11691170 cursor.insertText (completionPrefix);
11701171 completer->updatePrefixEnd (cursor.positionInBlock ());
11711172
1172- std::string textToComplete = completionPrefix.toUtf8 ().constData ();
1173- if (textToComplete.size ()
1174- && (*textToComplete.crbegin () == ' .' || *textToComplete.crbegin () == ' #' )) {
1175- completer->slotUpdate (cursor.block ().text (), cursor.positionInBlock ());
1173+ // chain completions only when activated (Enter/Click), not when highlighted (arrow keys)
1174+ if (mode == ActivationMode::Activated) {
1175+ std::string textToComplete = completionPrefix.toUtf8 ().constData ();
1176+ if (!textToComplete.empty ()
1177+ && (*textToComplete.crbegin () == ' .' || *textToComplete.crbegin () == ' #' )) {
1178+ completer->slotUpdate (cursor.block ().text (), cursor.positionInBlock ());
1179+ }
11761180 }
11771181}
11781182
1183+ void ExpressionTextEdit::slotCompleteTextHighlighted (const QString& completionPrefix)
1184+ {
1185+ slotCompleteText (completionPrefix, ActivationMode::Highlighted);
1186+ }
1187+
1188+ void ExpressionTextEdit::slotCompleteTextSelected (const QString& completionPrefix)
1189+ {
1190+ slotCompleteText (completionPrefix, ActivationMode::Activated);
1191+ }
1192+
11791193void ExpressionTextEdit::keyPressEvent (QKeyEvent* e)
11801194{
11811195 Base::FlagToggler<bool > flag (block, true );
@@ -1208,9 +1222,8 @@ void ExpressionTextEdit::keyPressEvent(QKeyEvent* e)
12081222 if (!completer->popup ()->currentIndex ().isValid ()) {
12091223 completer->popup ()->setCurrentIndex (completer->popup ()->model ()->index (0 , 0 ));
12101224 }
1211- // insert completion
12121225 completer->setCurrentRow (completer->popup ()->currentIndex ().row ());
1213- slotCompleteText (completer->currentCompletion ());
1226+ slotCompleteText (completer->currentCompletion (), ActivationMode::Highlighted );
12141227
12151228 // refresh completion list
12161229 completer->setCompletionPrefix (completer->currentCompletion ());
0 commit comments