diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-03 21:41:11 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-04 12:54:26 +0200 |
| commit | 53ae709f1aa79d7cc739f7f38b4bcb1c0c578ee3 (patch) | |
| tree | 673e5f46c7e9c0a2a1f08301f64d754a6950a149 /tests/notmuchfixture.h | |
| parent | c784f2c6876be483f99b2d750863aaf68e202aed (diff) | |
| download | qtmaildir-53ae709f1aa79d7cc739f7f38b4bcb1c0c578ee3.tar.gz qtmaildir-53ae709f1aa79d7cc739f7f38b4bcb1c0c578ee3.zip | |
fix(completion): drive the popup instead of QLineEdit::setCompleter
QLineEdit::setCompleter hands completion to the line edit, which then
resets the completer's completionPrefix to the widget's entire text on
every keystroke. The prefix has to be the stem, so once the query grew
past its first token the whole-line prefix matched no candidate, the
popup stopped appearing, and the two reported symptoms followed: nothing
was there for Tab to accept, and Tab fell through to focus navigation.
Attach the completer with setWidget instead, which keeps the popup
anchored without ceding control of the prefix. complete() dereferences
widget() unconditionally, so leaving it unset segfaults rather than
degrading. Opening the popup then becomes ours to do on every edit.
Extend the existing event filter to route the keys the popup needs while
it is visible, and install it unconditionally now that it does more than
the completion_on_focus case. Enter accepts a completion only while the
popup is up, so returnPressed still runs the query when it is closed.
The existing tests called acceptCompletion() directly and so never
touched the widget, which is why neither bug was caught. Add four tests
that drive the real widget path plus one covering both settings of
completion_on_focus; the first two fail against the old code.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'tests/notmuchfixture.h')
0 files changed, 0 insertions, 0 deletions
