diff --git a/src/compositor-android.c b/src/compositor-android.c index 5d1eeee7..71b38cf1 100644 --- a/src/compositor-android.c +++ b/src/compositor-android.c @@ -247,8 +247,10 @@ static void android_led_update(struct weston_seat *seat_base, enum weston_led leds) { struct android_seat *seat = to_android_seat(seat_base); + struct evdev_input_device *device; - evdev_led_update(&seat->devices_list, leds); + wl_list_for_each(device, &seat->devices_list, link) + evdev_led_update(device, leds); } static void diff --git a/src/compositor-drm.c b/src/compositor-drm.c index d35588c0..4f350f0c 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -1971,8 +1971,10 @@ static void drm_led_update(struct weston_seat *seat_base, enum weston_led leds) { struct drm_seat *seat = (struct drm_seat *) seat_base; + struct evdev_input_device *device; - evdev_led_update(&seat->devices_list, leds); + wl_list_for_each(device, &seat->devices_list, link) + evdev_led_update(device, leds); } static void diff --git a/src/evdev.c b/src/evdev.c index 7d935642..dba33bab 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -31,7 +31,7 @@ #include "evdev.h" void -evdev_led_update(struct wl_list *evdev_devices, enum weston_led leds) +evdev_led_update(struct evdev_input_device *device, enum weston_led leds) { static const struct { enum weston_led weston; @@ -41,10 +41,12 @@ evdev_led_update(struct wl_list *evdev_devices, enum weston_led leds) { LED_CAPS_LOCK, LED_CAPSL }, { LED_SCROLL_LOCK, LED_SCROLLL }, }; - struct evdev_input_device *device; struct input_event ev[ARRAY_LENGTH(map)]; unsigned int i; + if (!device->caps & EVDEV_KEYBOARD) + return; + memset(ev, 0, sizeof(ev)); for (i = 0; i < ARRAY_LENGTH(map); i++) { ev[i].type = EV_LED; @@ -52,11 +54,8 @@ evdev_led_update(struct wl_list *evdev_devices, enum weston_led leds) ev[i].value = !!(leds & map[i].weston); } - wl_list_for_each(device, evdev_devices, link) { - if (device->caps & EVDEV_KEYBOARD) - i = write(device->fd, ev, sizeof ev); - (void)i; /* no, we really don't care about the return value */ - } + i = write(device->fd, ev, sizeof ev); + (void)i; /* no, we really don't care about the return value */ } static inline void diff --git a/src/evdev.h b/src/evdev.h index 379838a3..003b3626 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -106,7 +106,7 @@ struct evdev_dispatch * evdev_touchpad_create(struct evdev_input_device *device); void -evdev_led_update(struct wl_list *evdev_devices, enum weston_led leds); +evdev_led_update(struct evdev_input_device *device, enum weston_led leds); struct evdev_input_device * evdev_input_device_create(struct weston_seat *seat,