diff --git a/src/text-backend.c b/src/text-backend.c index 07a066c9..53aa92cc 100644 --- a/src/text-backend.c +++ b/src/text-backend.c @@ -759,17 +759,24 @@ bind_input_method(struct wl_client *client, NULL, id, input_method); - if (input_method->input_method_binding == NULL) { - resource->destroy = unbind_input_method; - input_method->input_method_binding = resource; + if (input_method->input_method_binding != NULL) { + wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT, + "interface object already bound"); + wl_resource_destroy(resource); + return; + } - text_backend->input_method.binding = resource; + if (text_backend->input_method.client != client) { + wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT, + "permission to bind desktop_shell denied"); + wl_resource_destroy(resource); return; } - wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT, - "interface object already bound"); - wl_resource_destroy(resource); + resource->destroy = unbind_input_method; + input_method->input_method_binding = resource; + + text_backend->input_method.binding = resource; } static void