mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-11 13:29:49 -05:00
Move focus tracking surface destroy callbacks into core
This commit is contained in:
parent
a9e8961ea2
commit
02ef1c1aca
3 changed files with 40 additions and 32 deletions
|
|
@ -1161,37 +1161,12 @@ static const struct wl_drag_interface drag_interface = {
|
||||||
drag_cancel,
|
drag_cancel,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
|
||||||
lose_pointer_focus(struct wl_listener *listener,
|
|
||||||
struct wl_surface *surface)
|
|
||||||
{
|
|
||||||
struct wlsc_input_device *device =
|
|
||||||
container_of(listener, struct wlsc_input_device,
|
|
||||||
input_device.pointer_focus_listener);
|
|
||||||
uint32_t time;
|
|
||||||
|
|
||||||
time = wl_display_get_time(wl_client_get_display(surface->client));
|
|
||||||
wl_input_device_set_pointer_focus(&device->input_device,
|
|
||||||
NULL, time, 0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
lose_keyboard_focus(struct wl_listener *listener,
|
|
||||||
struct wl_surface *surface)
|
|
||||||
{
|
|
||||||
struct wlsc_input_device *device =
|
|
||||||
container_of(listener, struct wlsc_input_device,
|
|
||||||
input_device.keyboard_focus_listener);
|
|
||||||
uint32_t time;
|
|
||||||
|
|
||||||
time = wl_display_get_time(wl_client_get_display(surface->client));
|
|
||||||
wl_input_device_set_keyboard_focus(&device->input_device, NULL, time);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
wlsc_input_device_init(struct wlsc_input_device *device,
|
wlsc_input_device_init(struct wlsc_input_device *device,
|
||||||
struct wlsc_compositor *ec)
|
struct wlsc_compositor *ec)
|
||||||
{
|
{
|
||||||
|
wl_input_device_init(&device->input_device);
|
||||||
|
|
||||||
device->input_device.object.interface = &wl_input_device_interface;
|
device->input_device.object.interface = &wl_input_device_interface;
|
||||||
device->input_device.object.implementation =
|
device->input_device.object.implementation =
|
||||||
(void (**)(void)) &input_device_interface;
|
(void (**)(void)) &input_device_interface;
|
||||||
|
|
@ -1206,11 +1181,6 @@ wlsc_input_device_init(struct wlsc_input_device *device,
|
||||||
device->hotspot_x = 16;
|
device->hotspot_x = 16;
|
||||||
device->hotspot_y = 16;
|
device->hotspot_y = 16;
|
||||||
|
|
||||||
wl_list_init(&device->input_device.pointer_focus_listener.link);
|
|
||||||
device->input_device.pointer_focus_listener.func = lose_pointer_focus;
|
|
||||||
wl_list_init(&device->input_device.keyboard_focus_listener.link);
|
|
||||||
device->input_device.keyboard_focus_listener.func = lose_keyboard_focus;
|
|
||||||
|
|
||||||
wl_list_insert(ec->input_device_list.prev, &device->link);
|
wl_list_insert(ec->input_device_list.prev, &device->link);
|
||||||
|
|
||||||
wlsc_input_device_set_pointer_image(device, WLSC_POINTER_LEFT_PTR);
|
wlsc_input_device_set_pointer_image(device, WLSC_POINTER_LEFT_PTR);
|
||||||
|
|
|
||||||
|
|
@ -317,6 +317,41 @@ wl_client_destroy(struct wl_client *client)
|
||||||
free(client);
|
free(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
lose_pointer_focus(struct wl_listener *listener,
|
||||||
|
struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
struct wl_input_device *device =
|
||||||
|
container_of(listener, struct wl_input_device,
|
||||||
|
pointer_focus_listener);
|
||||||
|
uint32_t time;
|
||||||
|
|
||||||
|
time = wl_display_get_time(wl_client_get_display(surface->client));
|
||||||
|
wl_input_device_set_pointer_focus(device, NULL, time, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
lose_keyboard_focus(struct wl_listener *listener,
|
||||||
|
struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
struct wl_input_device *device =
|
||||||
|
container_of(listener, struct wl_input_device,
|
||||||
|
keyboard_focus_listener);
|
||||||
|
uint32_t time;
|
||||||
|
|
||||||
|
time = wl_display_get_time(wl_client_get_display(surface->client));
|
||||||
|
wl_input_device_set_keyboard_focus(device, NULL, time);
|
||||||
|
}
|
||||||
|
|
||||||
|
WL_EXPORT void
|
||||||
|
wl_input_device_init(struct wl_input_device *device)
|
||||||
|
{
|
||||||
|
wl_list_init(&device->pointer_focus_listener.link);
|
||||||
|
device->pointer_focus_listener.func = lose_pointer_focus;
|
||||||
|
wl_list_init(&device->keyboard_focus_listener.link);
|
||||||
|
device->keyboard_focus_listener.func = lose_keyboard_focus;
|
||||||
|
}
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
wl_input_device_set_pointer_focus(struct wl_input_device *device,
|
wl_input_device_set_pointer_focus(struct wl_input_device *device,
|
||||||
struct wl_surface *surface,
|
struct wl_surface *surface,
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,9 @@ wl_client_get_display(struct wl_client *client);
|
||||||
void
|
void
|
||||||
wl_resource_destroy(struct wl_resource *resource, struct wl_client *client);
|
wl_resource_destroy(struct wl_resource *resource, struct wl_client *client);
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_input_device_init(struct wl_input_device *device);
|
||||||
|
|
||||||
void
|
void
|
||||||
wl_input_device_set_pointer_focus(struct wl_input_device *device,
|
wl_input_device_set_pointer_focus(struct wl_input_device *device,
|
||||||
struct wl_surface *surface,
|
struct wl_surface *surface,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue