diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2014-12-08 10:48:29 -0600 |
---|---|---|
committer | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2014-12-16 16:05:48 +0200 |
commit | f0aaa417484e45aaf0aa2a56f1cdaf59b7a22ad7 (patch) | |
tree | e8b17d3cdbac88feefeb73589462fdb084c058df | |
parent | 943b46ed660933e60c8640c7a85d075bbc45979e (diff) |
text: Don't crash if a seat has no keyboard
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>
-rw-r--r-- | src/text-backend.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/text-backend.c b/src/text-backend.c index e50569a9..4dc71797 100644 --- a/src/text-backend.c +++ b/src/text-backend.c @@ -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; } |