Do no send empty preedit string to text-input-v3.

zwp_input_method_v1 has some different semantics comparing to
text-input-v3. There is no way to indicate that "clear preedit" with
zwp_input_method_v1. In some client (Namely, Gtk), receiving an empty
preedit string will also trigger replace selection action. For example,
focus into address bar in firefox will automatically select the URL in
the address bar, and a following empty preedit string will clear the
selection which is not desirable.

To avoid such behavior, simply send an empty "done()" to clear text
input v3 preedit if preedit is empty.
master
Weng Xuetian 3 years ago committed by Xuetian Weng
parent 42110d7a46
commit 119f0d02be

@ -475,7 +475,9 @@ void InputMethod::setPreeditString(uint32_t serial, const QString &text, const Q
auto t3 = waylandServer()->seat()->textInputV3();
if (t3 && t3->isEnabled()) {
preedit.text = text;
t3->sendPreEditString(preedit.text, preedit.begin, preedit.end);
if (!preedit.text.isEmpty()) {
t3->sendPreEditString(preedit.text, preedit.begin, preedit.end);
}
t3->done();
}
}

Loading…
Cancel
Save