diff --git a/protocol/wayland.xml b/protocol/wayland.xml index a40e4b0b..156859a5 100644 --- a/protocol/wayland.xml +++ b/protocol/wayland.xml @@ -624,8 +624,8 @@ - - + + Notification that this input device's pointer is focused on certain surface. When an input_device enters a surface, the pointer image is undefined and a client should respond to this @@ -638,12 +638,24 @@ - + + + + + + + + + + + + + diff --git a/src/wayland-server.c b/src/wayland-server.c index 9e90ae50..bf813346 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -568,19 +568,17 @@ wl_input_device_set_pointer_focus(struct wl_input_device *device, if (device->pointer_focus == surface) return; - if (device->pointer_focus_resource && - (!surface || - device->pointer_focus->resource.client != surface->resource.client)) + if (device->pointer_focus_resource) { wl_resource_post_event(device->pointer_focus_resource, - WL_INPUT_DEVICE_POINTER_FOCUS, - time, NULL, 0, 0); - if (device->pointer_focus_resource) + WL_INPUT_DEVICE_POINTER_LEAVE, + time, device->pointer_focus); wl_list_remove(&device->pointer_focus_listener.link); + } resource = find_resource_for_surface(&device->resource_list, surface); if (resource) { wl_resource_post_event(resource, - WL_INPUT_DEVICE_POINTER_FOCUS, + WL_INPUT_DEVICE_POINTER_ENTER, time, surface, sx, sy); wl_list_insert(resource->destroy_listener_list.prev, &device->pointer_focus_listener.link); @@ -602,19 +600,17 @@ wl_input_device_set_keyboard_focus(struct wl_input_device *device, if (device->keyboard_focus == surface) return; - if (device->keyboard_focus_resource && - (!surface || - device->keyboard_focus->resource.client != surface->resource.client)) + if (device->keyboard_focus_resource) { wl_resource_post_event(device->keyboard_focus_resource, - WL_INPUT_DEVICE_KEYBOARD_FOCUS, - time, NULL, &device->keys); - if (device->keyboard_focus_resource) + WL_INPUT_DEVICE_KEYBOARD_LEAVE, + time, device->keyboard_focus); wl_list_remove(&device->keyboard_focus_listener.link); + } resource = find_resource_for_surface(&device->resource_list, surface); if (resource) { wl_resource_post_event(resource, - WL_INPUT_DEVICE_KEYBOARD_FOCUS, + WL_INPUT_DEVICE_KEYBOARD_ENTER, time, surface, &device->keys); wl_list_insert(resource->destroy_listener_list.prev, &device->keyboard_focus_listener.link);