[PATCH weston] libinput: Restore keyboard focus after VT switch

Jamey Sharp jamey at minilop.net
Mon May 21 23:21:14 UTC 2018


Under Weston's drm-backend, after returning to Weston from another VT,
no window has focus.

There's already code in notify_keyboard_focus_out and
notify_keyboard_focus_in to save and restore focus, respectively; and
udev_input_enable eventually calls notify_keyboard_focus_in, by way of
evdev_notify_keyboard_focus. But udev_input_disable doesn't currently
call notify_keyboard_focus_out.

This patch makes udev_input_disable symmetric with udev_input_enable by
calling notify_keyboard_focus_out on every seat, to save focus before
suspending libinput. In my testing this successfully resolved my issue.
However, I don't have a multi-seat setup to verify that it works there
too.

Signed-off-by: Jamey Sharp <jamey at minilop.net>
---
I'm not subscribed to the list, so please Cc me on replies.

 libweston/libinput-seat.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libweston/libinput-seat.c b/libweston/libinput-seat.c
index ac1e8e99..ded6dd3c 100644
--- a/libweston/libinput-seat.c
+++ b/libweston/libinput-seat.c
@@ -158,9 +158,14 @@ udev_seat_remove_devices(struct udev_seat *seat)
 void
 udev_input_disable(struct udev_input *input)
 {
+	struct udev_seat *seat;
+
 	if (input->suspended)
 		return;
 
+	wl_list_for_each(seat, &input->compositor->seat_list, base.link)
+		notify_keyboard_focus_out(&seat->base);
+
 	wl_event_source_remove(input->libinput_source);
 	input->libinput_source = NULL;
 	libinput_suspend(input->libinput);
-- 
2.16.2



More information about the wayland-devel mailing list