[UI] Refocus on Tab when completing

This commit is contained in:
Lukas Brübach 2026-10-09 12:59:27 +02:00
parent bc8289e48f
commit c9ce34a00a

View file

@ -48,19 +48,13 @@ void LineEditCompleter::focusOutEvent(QFocusEvent *e)
{ {
LineEditUnfocusable::focusOutEvent(e); LineEditUnfocusable::focusOutEvent(e);
// Only commit the highlighted completion when focus moves away via Tab. // Commit completion when focus moves away via Tab if popup is visible.
// Other focus losses (e.g. the unfocus shortcut / Escape) must simply close // Other focus losses (e.g. the unfocus shortcut / Escape) must simply close
// the popup without inserting anything. // the popup without inserting anything.
if (e->reason() != Qt::TabFocusReason) { bool popupWasVisible = false;
hideCompleterPopups();
return;
}
for (auto &info : completers) { for (auto &info : completers) {
if (!info.completer->popup()->isVisible()) { if (info.completer->popup()->isVisible()) {
continue; popupWasVisible = true;
}
const QModelIndex currentIndex = info.completer->popup()->currentIndex(); const QModelIndex currentIndex = info.completer->popup()->currentIndex();
QString completionText; QString completionText;
if (currentIndex.isValid()) { if (currentIndex.isValid()) {
@ -72,8 +66,19 @@ void LineEditCompleter::focusOutEvent(QFocusEvent *e)
insertCompletion(info.completer, completionText); insertCompletion(info.completer, completionText);
} }
} }
}
hideCompleterPopups(); hideCompleterPopups();
if (popupWasVisible && e->reason() == Qt::TabFocusReason) {
// Refocus the edit so Tab doesn't move focus away
setFocus();
e->accept();
return;
}
if (popupWasVisible) {
return;
}
} }
void LineEditCompleter::keyPressEvent(QKeyEvent *event) void LineEditCompleter::keyPressEvent(QKeyEvent *event)