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>
This commit is contained in:
Derek Foreman 2015-07-15 13:00:46 -05:00 committed by Bryce Harrington
parent 60d97311be
commit 006cf67c77

View File

@ -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);
}