summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2014-12-08 10:48:29 -0600
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2014-12-16 16:05:48 +0200
commitf0aaa417484e45aaf0aa2a56f1cdaf59b7a22ad7 (patch)
treee8b17d3cdbac88feefeb73589462fdb084c058df
parent943b46ed660933e60c8640c7a85d075bbc45979e (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.c16
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;
}