text: Don't crash if a seat has no keyboard
authorDerek Foreman <derekf@osg.samsung.com>
Mon, 8 Dec 2014 16:48:29 +0000 (10:48 -0600)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Tue, 16 Dec 2014 14:05:48 +0000 (16:05 +0200)
A keyboard might not be present in a seat, so check that before
dereferencing keyboard related pointers.

Also, use the keyboard pointer we set to shorten the code a little bit.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Jan Arne Petersen <janarne@gmail.com>
src/text-backend.c

index e50569a..4dc7179 100644 (file)
@@ -755,15 +755,19 @@ input_method_context_create(struct text_input *model,
 static void
 input_method_context_end_keyboard_grab(struct input_method_context *context)
 {
-       struct weston_keyboard_grab *grab =
-               &context->input_method->seat->keyboard->input_method_grab;
-       struct weston_keyboard *keyboard = grab->keyboard;
+       struct weston_keyboard_grab *grab;
+       struct weston_keyboard *keyboard;
+
+       if (!context->input_method->seat->keyboard)
+               return;
 
-       if (!grab->keyboard)
+       grab = &context->input_method->seat->keyboard->input_method_grab;
+       keyboard = grab->keyboard;
+       if (!keyboard)
                return;
 
-       if (grab->keyboard->grab == grab)
-               weston_keyboard_end_grab(grab->keyboard);
+       if (keyboard->grab == grab)
+               weston_keyboard_end_grab(keyboard);
 
        keyboard->input_method_resource = NULL;
 }