compositor-drm, evdev: don't crash on missing keyboard
authorPekka Paalanen <ppaalanen@gmail.com>
Fri, 3 Aug 2012 11:39:11 +0000 (14:39 +0300)
committerJonas Ådahl <jadahl@gmail.com>
Sun, 10 Nov 2013 16:51:30 +0000 (17:51 +0100)
Weston's notify_keyboard_focus_*() assume that a keyboard is present, if
they are called. With evdev, there might not always be a keyboard.

Also clean up the variable definition in evdev_notify_keyborad_focus().
I read that function through many times and finally had to grep where
does 'all_keys' come from.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
src/evdev.c

index 7efbc7d..09275f4 100644 (file)
@@ -561,10 +561,14 @@ evdev_notify_keyboard_focus(struct weston_seat *seat,
        struct evdev_input_device *device;
        struct wl_array keys;
        unsigned int i, set;
-       char evdev_keys[(KEY_CNT + 7) / 8], all_keys[(KEY_CNT + 7) / 8];
+       char evdev_keys[(KEY_CNT + 7) / 8];
+       char all_keys[(KEY_CNT + 7) / 8];
        uint32_t *k;
        int ret;
 
+       if (!seat->seat.keyboard)
+               return;
+
        memset(all_keys, 0, sizeof all_keys);
        wl_list_for_each(device, evdev_devices, link) {
                memset(evdev_keys, 0, sizeof evdev_keys);