diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c index 87f4b636a..b5a0644ea 100644 --- a/src/wayland/meta-wayland-text-input.c +++ b/src/wayland/meta-wayland-text-input.c @@ -73,8 +73,6 @@ struct _MetaWaylandTextInput uint32_t content_type_purpose; uint32_t text_change_cause; gboolean enabled; - - guint done_idle_id; }; struct _MetaWaylandTextInputFocus @@ -119,52 +117,6 @@ increment_serial (MetaWaylandTextInput *text_input, GUINT_TO_POINTER (serial + 1)); } -static gboolean -done_idle_cb (gpointer user_data) -{ - ClutterInputFocus *focus = user_data; - MetaWaylandTextInput *text_input; - struct wl_resource *resource; - - text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input; - - wl_resource_for_each (resource, &text_input->focus_resource_list) - { - zwp_text_input_v3_send_done (resource, - lookup_serial (text_input, resource)); - } - - text_input->done_idle_id = 0; - return G_SOURCE_REMOVE; -} - -static void -meta_wayland_text_input_focus_defer_done (ClutterInputFocus *focus) -{ - MetaWaylandTextInput *text_input; - - text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input; - - if (text_input->done_idle_id != 0) - return; - - /* This operates on 3 principles: - * - GDBus uses G_PRIORITY_DEFAULT to put messages in the thread default main - * context. - * - All relevant ClutterInputFocus methods are ultimately backed by - * DBus methods inside IBus. - * - We want to run .done after them all. The slightly lower - * G_PRIORITY_DEFAULT + 1 priority should ensure we at least group - * all messages seen so far. - * - * FIXME: .done may be delayed indefinitely if there's a high enough - * priority idle source in the main loop. It's unlikely that - * recurring idles run at this high priority though. - */ - text_input->done_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT + 1, - done_idle_cb, focus, NULL); -} - static void meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus, int offset, @@ -185,9 +137,9 @@ meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus, zwp_text_input_v3_send_delete_surrounding_text (resource, before_length, after_length); + zwp_text_input_v3_send_done (resource, + lookup_serial (text_input, resource)); } - - meta_wayland_text_input_focus_defer_done (focus); } static void @@ -204,9 +156,9 @@ meta_wayland_text_input_focus_commit_text (ClutterInputFocus *focus, zwp_text_input_v3_send_preedit_string (resource, NULL, 0, 0); zwp_text_input_v3_send_preedit_commit_mode (resource, ZWP_TEXT_INPUT_V3_COMMIT_MODE_CLEAR); zwp_text_input_v3_send_commit_string (resource, text); + zwp_text_input_v3_send_done (resource, + lookup_serial (text_input, resource)); } - - meta_wayland_text_input_focus_defer_done (focus); } static void @@ -228,9 +180,9 @@ meta_wayland_text_input_focus_set_preedit_text_with_mode (ClutterInputFocus *foc { zwp_text_input_v3_send_preedit_string (resource, text, pos, pos); zwp_text_input_v3_send_preedit_commit_mode (resource, mode); + zwp_text_input_v3_send_done (resource, + lookup_serial (text_input, resource)); } - - meta_wayland_text_input_focus_defer_done (focus); } static void