From 6fb1807db71a8c4868441ee9ed9445fc4445f3f8 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Wed, 9 Jul 2025 12:21:46 +0800 Subject: [PATCH] opt: optimzie text-input --- meson.build | 2 +- src/ext-protocol/text-input.h | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/meson.build b/meson.build index 53bce67..c6bda12 100644 --- a/meson.build +++ b/meson.build @@ -33,7 +33,7 @@ libm = cc.find_library('m') xcb = dependency('xcb', required : get_option('xwayland')) xlibs = dependency('xcb-icccm', required : get_option('xwayland')) wayland_server_dep = dependency('wayland-server') -wlroots_dep = dependency('wlroots-0.19',version: '>=0.19.0') +wlroots_dep = dependency('wlroots-0.20',version: '>=0.19.0') xkbcommon_dep = dependency('xkbcommon') libinput_dep = dependency('libinput') libwayland_client_dep = dependency('wayland-client') diff --git a/src/ext-protocol/text-input.h b/src/ext-protocol/text-input.h index c82ffac..6202a7e 100644 --- a/src/ext-protocol/text-input.h +++ b/src/ext-protocol/text-input.h @@ -301,9 +301,8 @@ static void handle_input_method_commit(struct wl_listener *listener, void *data) { struct dwl_input_method_relay *relay = wl_container_of(listener, relay, input_method_commit); - struct wlr_input_method_v2 *input_method = data; struct text_input *text_input; - assert(relay->input_method == input_method); + struct wlr_input_method_v2 *input_method = relay->input_method; text_input = relay->active_text_input; if (!text_input) { @@ -333,7 +332,8 @@ static void handle_keyboard_grab_destroy(struct wl_listener *listener, void *data) { struct dwl_input_method_relay *relay = wl_container_of(listener, relay, keyboard_grab_destroy); - struct wlr_input_method_keyboard_grab_v2 *keyboard_grab = data; + struct wlr_input_method_keyboard_grab_v2 *keyboard_grab = + relay->input_method->keyboard_grab; wl_list_remove(&relay->keyboard_grab_destroy.link); if (keyboard_grab->keyboard) { @@ -365,7 +365,6 @@ static void handle_input_method_destroy(struct wl_listener *listener, void *data) { struct dwl_input_method_relay *relay = wl_container_of(listener, relay, input_method_destroy); - assert(relay->input_method == data); wl_list_remove(&relay->input_method_commit.link); wl_list_remove(&relay->input_method_grab_keyboard.link); wl_list_remove(&relay->input_method_new_popup_surface.link); @@ -570,7 +569,7 @@ struct dwl_input_method_relay *dwl_im_relay_create() { relay->popup_tree = wlr_scene_tree_create(&scene->tree); relay->new_text_input.notify = handle_new_text_input; - wl_signal_add(&text_input_manager->events.text_input, + wl_signal_add(&text_input_manager->events.new_text_input, &relay->new_text_input); relay->new_input_method.notify = handle_new_input_method;