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 <[email protected]>
---
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

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to