[gtk/wip/carlosg/im-wayland-backports-3.24: 2/3] imwayland: Do not defer commit() after set_surrounding_text()
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/carlosg/im-wayland-backports-3.24: 2/3] imwayland: Do not defer commit() after set_surrounding_text()
- Date: Mon, 2 May 2022 21:34:50 +0000 (UTC)
commit 49b6410c265727f0b2650b912b1cbc5806107d27
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Apr 6 13:08:00 2022 +0200
imwayland: Do not defer commit() after set_surrounding_text()
For reasons that only apply to the old serial handling, asking for
the surrounding after IM changes resulted in lazy handling of
commit() afterwards.
With the recent interpretation of serials, this problem became more
apparent, since it is in fact very likely that the last interaction
step after an IM change is notifying of the changed surrounding
text after the IM change was applied.
Make handling of surrounding text similar to caret position changes,
always commit() after the state change, but skip through non-changes.
This makes the compositor state fully up-to-date after an IM change.
(cherry-picked from commit eb7c78aa4896b1d36fa09a3e68c942730b233f74)
modules/input/imwayland.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
---
diff --git a/modules/input/imwayland.c b/modules/input/imwayland.c
index 91d27ca407..9b738208d9 100644
--- a/modules/input/imwayland.c
+++ b/modules/input/imwayland.c
@@ -876,6 +876,13 @@ gtk_im_context_wayland_set_surrounding (GtkIMContext *context,
context_wayland = GTK_IM_CONTEXT_WAYLAND (context);
+ if (context_wayland->surrounding.text && text &&
+ (len < 0 || len == strlen (context_wayland->surrounding.text)) &&
+ strncmp (context_wayland->surrounding.text, text, len) == 0 &&
+ context_wayland->surrounding.cursor_idx == cursor_index &&
+ context_wayland->surrounding.anchor_idx == cursor_index)
+ return;
+
g_free (context_wayland->surrounding.text);
context_wayland->surrounding.text = g_strndup (text, len);
context_wayland->surrounding.cursor_idx = cursor_index;
@@ -883,11 +890,7 @@ gtk_im_context_wayland_set_surrounding (GtkIMContext *context,
context_wayland->surrounding.anchor_idx = cursor_index;
notify_surrounding_text (context_wayland);
- /* State changes coming from reset don't have any other opportunity to get
- * committed. */
- if (context_wayland->surrounding_change !=
- ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD)
- commit_state (context_wayland);
+ commit_state (context_wayland);
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]