shell: Track pointer focus for all seats
This commit is contained in:
parent
4f92c5392a
commit
f4d2f237f0
20
src/shell.c
20
src/shell.c
@ -1131,6 +1131,19 @@ handle_pointer_focus(struct wl_listener *listener, void *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
create_pointer_focus_listener(struct weston_seat *seat)
|
||||||
|
{
|
||||||
|
struct wl_listener *listener;
|
||||||
|
|
||||||
|
if (!seat->seat.pointer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
listener = malloc(sizeof *listener);
|
||||||
|
listener->notify = handle_pointer_focus;
|
||||||
|
wl_signal_add(&seat->seat.pointer->focus_signal, listener);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
shell_surface_pong(struct wl_client *client, struct wl_resource *resource,
|
shell_surface_pong(struct wl_client *client, struct wl_resource *resource,
|
||||||
uint32_t serial)
|
uint32_t serial)
|
||||||
@ -3357,6 +3370,7 @@ shell_init(struct weston_compositor *ec);
|
|||||||
WL_EXPORT int
|
WL_EXPORT int
|
||||||
shell_init(struct weston_compositor *ec)
|
shell_init(struct weston_compositor *ec)
|
||||||
{
|
{
|
||||||
|
struct weston_seat *seat;
|
||||||
struct desktop_shell *shell;
|
struct desktop_shell *shell;
|
||||||
struct workspace **pws;
|
struct workspace **pws;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -3434,10 +3448,8 @@ shell_init(struct weston_compositor *ec)
|
|||||||
if (launch_desktop_shell_process(shell) != 0)
|
if (launch_desktop_shell_process(shell) != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
shell->pointer_focus_listener.notify = handle_pointer_focus;
|
wl_list_for_each(seat, &ec->seat_list, link)
|
||||||
if (ec->seat->seat.pointer)
|
create_pointer_focus_listener(seat);
|
||||||
wl_signal_add(&ec->seat->seat.pointer->focus_signal,
|
|
||||||
&shell->pointer_focus_listener);
|
|
||||||
|
|
||||||
shell_add_bindings(ec, shell);
|
shell_add_bindings(ec, shell);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user