Only send key events to toplevel surface.
This commit is contained in:
parent
5a75c90d01
commit
7fdff04cdc
|
@ -798,6 +798,7 @@ notify_key(struct wl_compositor *compositor,
|
||||||
struct wl_object *source, uint32_t key, uint32_t state)
|
struct wl_object *source, uint32_t key, uint32_t state)
|
||||||
{
|
{
|
||||||
struct egl_compositor *ec = (struct egl_compositor *) compositor;
|
struct egl_compositor *ec = (struct egl_compositor *) compositor;
|
||||||
|
struct egl_surface *es;
|
||||||
|
|
||||||
if (key == KEY_ESC && state == 1) {
|
if (key == KEY_ESC && state == 1) {
|
||||||
if (ec->overlay_target == ec->height)
|
if (ec->overlay_target == ec->height)
|
||||||
|
@ -805,6 +806,15 @@ notify_key(struct wl_compositor *compositor,
|
||||||
else
|
else
|
||||||
ec->overlay_target += 200;
|
ec->overlay_target += 200;
|
||||||
schedule_repaint(ec);
|
schedule_repaint(ec);
|
||||||
|
} else if (!wl_list_empty(&ec->surface_list)) {
|
||||||
|
/* FIXME: The event source device should track which
|
||||||
|
* surface has its key focus and send the event there.
|
||||||
|
* For now, just send it to the top surface, which
|
||||||
|
* effectively gives us click to focus behavior. */
|
||||||
|
es = container_of(ec->surface_list.prev,
|
||||||
|
struct egl_surface, link);
|
||||||
|
wl_surface_post_event(es->wl_surface, source,
|
||||||
|
WL_INPUT_KEY, key, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
23
wayland.c
23
wayland.c
|
@ -621,21 +621,6 @@ wl_display_add_global(struct wl_display *display, struct wl_object *object)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
wl_display_send_event(struct wl_display *display, uint32_t *data, size_t size)
|
|
||||||
{
|
|
||||||
struct wl_client *client;
|
|
||||||
|
|
||||||
client = container_of(display->client_list.next,
|
|
||||||
struct wl_client, link);
|
|
||||||
while (&client->link != &display->client_list) {
|
|
||||||
wl_connection_write(client->connection, data, size);
|
|
||||||
|
|
||||||
client = container_of(client->link.next,
|
|
||||||
struct wl_client, link);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
wl_surface_post_event(struct wl_surface *surface,
|
wl_surface_post_event(struct wl_surface *surface,
|
||||||
struct wl_object *sender,
|
struct wl_object *sender,
|
||||||
|
@ -692,17 +677,9 @@ wl_display_post_key_event(struct wl_display *display,
|
||||||
struct wl_object *source, int key, int state)
|
struct wl_object *source, int key, int state)
|
||||||
{
|
{
|
||||||
const struct wl_compositor_interface *interface;
|
const struct wl_compositor_interface *interface;
|
||||||
uint32_t p[4];
|
|
||||||
|
|
||||||
interface = display->compositor->interface;
|
interface = display->compositor->interface;
|
||||||
interface->notify_key(display->compositor, source, key, state);
|
interface->notify_key(display->compositor, source, key, state);
|
||||||
|
|
||||||
p[0] = source->id;
|
|
||||||
p[1] = (sizeof p << 16) | WL_INPUT_KEY;
|
|
||||||
p[2] = key;
|
|
||||||
p[3] = state;
|
|
||||||
|
|
||||||
wl_display_send_event(display, p, sizeof p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
|
|
Loading…
Reference in New Issue