mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-21 20:35:58 +01:00
input-method: Simplify resetting of input state
We have current and pending state and the code uses struct assignments between them and resets and frees in multiple places. Introduce a reset() function so we can unify that.
This commit is contained in:
parent
3bf9000a52
commit
b032161785
1 changed files with 14 additions and 9 deletions
|
@ -19,6 +19,12 @@
|
||||||
static const struct zwp_input_method_v2_interface input_method_impl;
|
static const struct zwp_input_method_v2_interface input_method_impl;
|
||||||
static const struct zwp_input_method_keyboard_grab_v2_interface keyboard_grab_impl;
|
static const struct zwp_input_method_keyboard_grab_v2_interface keyboard_grab_impl;
|
||||||
|
|
||||||
|
static void input_state_reset(struct wlr_input_method_v2_state *state) {
|
||||||
|
free(state->commit_text);
|
||||||
|
free(state->preedit.text);
|
||||||
|
*state = (struct wlr_input_method_v2_state){0};
|
||||||
|
}
|
||||||
|
|
||||||
static void popup_surface_destroy(struct wlr_input_popup_surface_v2 *popup_surface) {
|
static void popup_surface_destroy(struct wlr_input_popup_surface_v2 *popup_surface) {
|
||||||
wlr_surface_unmap(popup_surface->surface);
|
wlr_surface_unmap(popup_surface->surface);
|
||||||
|
|
||||||
|
@ -53,10 +59,8 @@ static void input_method_destroy(struct wlr_input_method_v2 *input_method) {
|
||||||
wl_list_remove(wl_resource_get_link(input_method->resource));
|
wl_list_remove(wl_resource_get_link(input_method->resource));
|
||||||
wl_list_remove(&input_method->seat_client_destroy.link);
|
wl_list_remove(&input_method->seat_client_destroy.link);
|
||||||
wlr_input_method_keyboard_grab_v2_destroy(input_method->keyboard_grab);
|
wlr_input_method_keyboard_grab_v2_destroy(input_method->keyboard_grab);
|
||||||
free(input_method->pending.commit_text);
|
input_state_reset(&input_method->pending);
|
||||||
free(input_method->pending.preedit.text);
|
input_state_reset(&input_method->current);
|
||||||
free(input_method->current.commit_text);
|
|
||||||
free(input_method->current.preedit.text);
|
|
||||||
free(input_method);
|
free(input_method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,15 +85,16 @@ static void im_commit(struct wl_client *client, struct wl_resource *resource,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (serial != input_method->current_serial) {
|
if (serial != input_method->current_serial) {
|
||||||
free(input_method->pending.commit_text);
|
input_state_reset(&input_method->pending);
|
||||||
free(input_method->pending.preedit.text);
|
|
||||||
input_method->pending = (struct wlr_input_method_v2_state){0};
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
free(input_method->current.commit_text);
|
input_state_reset(&input_method->current);
|
||||||
free(input_method->current.preedit.text);
|
|
||||||
|
// This transfers ownership of the current commit_text and
|
||||||
|
// preedit.text from pending to current:
|
||||||
input_method->current = input_method->pending;
|
input_method->current = input_method->pending;
|
||||||
input_method->pending = (struct wlr_input_method_v2_state){0};
|
input_method->pending = (struct wlr_input_method_v2_state){0};
|
||||||
|
|
||||||
wl_signal_emit_mutable(&input_method->events.commit, input_method);
|
wl_signal_emit_mutable(&input_method->events.commit, input_method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue