kiosk-shell: Add session listener
And use it to perform keyboard activation on the currently focused window. Fixes: #910 Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
This commit is contained in:
parent
e70d9d47fc
commit
5b2f010c03
@ -1423,6 +1423,7 @@ kiosk_shell_destroy(struct wl_listener *listener, void *data)
|
|||||||
wl_list_remove(&shell->output_moved_listener.link);
|
wl_list_remove(&shell->output_moved_listener.link);
|
||||||
wl_list_remove(&shell->seat_created_listener.link);
|
wl_list_remove(&shell->seat_created_listener.link);
|
||||||
wl_list_remove(&shell->transform_listener.link);
|
wl_list_remove(&shell->transform_listener.link);
|
||||||
|
wl_list_remove(&shell->session_listener.link);
|
||||||
|
|
||||||
wl_list_for_each_safe(shoutput, tmp, &shell->output_list, link) {
|
wl_list_for_each_safe(shoutput, tmp, &shell->output_list, link) {
|
||||||
kiosk_shell_output_destroy(shoutput);
|
kiosk_shell_output_destroy(shoutput);
|
||||||
@ -1444,6 +1445,31 @@ kiosk_shell_destroy(struct wl_listener *listener, void *data)
|
|||||||
free(shell);
|
free(shell);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
kiosk_shell_notify_session(struct wl_listener *listener, void *data)
|
||||||
|
{
|
||||||
|
struct kiosk_shell *shell =
|
||||||
|
container_of(listener, struct kiosk_shell, session_listener);
|
||||||
|
struct kiosk_shell_seat *k_seat;
|
||||||
|
struct weston_compositor *compositor = data;
|
||||||
|
struct weston_seat *seat = get_kiosk_shell_first_seat(shell);
|
||||||
|
|
||||||
|
|
||||||
|
if (!compositor->session_active || !seat)
|
||||||
|
return;
|
||||||
|
|
||||||
|
k_seat = get_kiosk_shell_seat(seat);
|
||||||
|
if (k_seat->focused_surface) {
|
||||||
|
struct kiosk_shell_surface *current_focus =
|
||||||
|
get_kiosk_shell_surface(k_seat->focused_surface);
|
||||||
|
|
||||||
|
weston_view_activate_input(current_focus->view,
|
||||||
|
k_seat->seat,
|
||||||
|
WESTON_ACTIVATE_FLAG_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
WL_EXPORT int
|
WL_EXPORT int
|
||||||
wet_shell_init(struct weston_compositor *ec,
|
wet_shell_init(struct weston_compositor *ec,
|
||||||
int *argc, char *argv[])
|
int *argc, char *argv[])
|
||||||
@ -1509,6 +1535,8 @@ wet_shell_init(struct weston_compositor *ec,
|
|||||||
shell->output_moved_listener.notify = kiosk_shell_handle_output_moved;
|
shell->output_moved_listener.notify = kiosk_shell_handle_output_moved;
|
||||||
wl_signal_add(&ec->output_moved_signal, &shell->output_moved_listener);
|
wl_signal_add(&ec->output_moved_signal, &shell->output_moved_listener);
|
||||||
|
|
||||||
|
shell->session_listener.notify = kiosk_shell_notify_session;
|
||||||
|
wl_signal_add(&ec->session_signal, &shell->session_listener);
|
||||||
screenshooter_create(ec);
|
screenshooter_create(ec);
|
||||||
|
|
||||||
kiosk_shell_add_bindings(shell);
|
kiosk_shell_add_bindings(shell);
|
||||||
|
@ -48,6 +48,7 @@ struct kiosk_shell {
|
|||||||
|
|
||||||
const struct weston_xwayland_surface_api *xwayland_surface_api;
|
const struct weston_xwayland_surface_api *xwayland_surface_api;
|
||||||
struct weston_config *config;
|
struct weston_config *config;
|
||||||
|
struct wl_listener session_listener;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kiosk_shell_surface {
|
struct kiosk_shell_surface {
|
||||||
|
Loading…
Reference in New Issue
Block a user