desktop-shell: Check for device presence properly

We should be testing device counts, not pointers.  The pointers are
persistent state that never gets freed, and are an inaccurate indicator
of device presence after a release.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
dev
Derek Foreman 10 years ago committed by Bryce Harrington
parent 60d97311be
commit 006cf67c77
  1. 8
      desktop-shell/shell.c

@ -3105,20 +3105,20 @@ shell_seat_caps_changed(struct wl_listener *listener, void *data)
seat = container_of(listener, struct shell_seat, caps_changed_listener);
if (seat->seat->keyboard &&
if (seat->seat->keyboard_device_count &&
wl_list_empty(&seat->keyboard_focus_listener.link)) {
wl_signal_add(&seat->seat->keyboard->focus_signal,
&seat->keyboard_focus_listener);
} else if (!seat->seat->keyboard) {
} else if (!seat->seat->keyboard_device_count) {
wl_list_remove(&seat->keyboard_focus_listener.link);
wl_list_init(&seat->keyboard_focus_listener.link);
}
if (seat->seat->pointer &&
if (seat->seat->pointer_device_count &&
wl_list_empty(&seat->pointer_focus_listener.link)) {
wl_signal_add(&seat->seat->pointer->focus_signal,
&seat->pointer_focus_listener);
} else if (!seat->seat->pointer) {
} else if (!seat->seat->pointer_device_count) {
wl_list_remove(&seat->pointer_focus_listener.link);
wl_list_init(&seat->pointer_focus_listener.link);
}

Loading…
Cancel
Save