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 <[email protected]>
---
 desktop-shell/shell.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index d0dda84..3555e72 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -3104,20 +3104,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);
        }
-- 
2.1.4

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

Reply via email to