exposay: Don't crash if no pointer is present
authorDerek Foreman <derekf@osg.samsung.com>
Fri, 22 May 2015 16:47:20 +0000 (11:47 -0500)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Tue, 26 May 2015 09:48:12 +0000 (12:48 +0300)
If the compositor has never seen a mouse, exposay will crash because
the seat->pointer pointer is NULL.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
desktop-shell/exposay.c

index 4b65cbd12e27e363bf2b10c507bce3e9daec509a..78e45fb65af20f62f5afe724ba4456291e3fb588 100644 (file)
@@ -519,7 +519,8 @@ exposay_set_inactive(struct desktop_shell *shell)
        struct weston_seat *seat = shell->exposay.seat;
 
        weston_keyboard_end_grab(seat->keyboard);
-       weston_pointer_end_grab(seat->pointer);
+       if (seat->pointer_device_count)
+               weston_pointer_end_grab(seat->pointer);
        if (seat->keyboard->input_method_resource)
                seat->keyboard->grab = &seat->keyboard->input_method_grab;
 
@@ -570,11 +571,13 @@ exposay_transition_active(struct desktop_shell *shell)
        weston_keyboard_set_focus(seat->keyboard, NULL);
 
        shell->exposay.grab_ptr.interface = &exposay_ptr_grab;
-       weston_pointer_start_grab(seat->pointer,
-                                 &shell->exposay.grab_ptr);
-       weston_pointer_set_focus(seat->pointer, NULL,
-                                seat->pointer->x, seat->pointer->y);
-
+       if (seat->pointer_device_count) {
+               weston_pointer_start_grab(seat->pointer,
+                                         &shell->exposay.grab_ptr);
+               weston_pointer_set_focus(seat->pointer, NULL,
+                                        seat->pointer->x,
+                                        seat->pointer->y);
+       }
        wl_list_for_each(shell_output, &shell->output_list, link) {
                enum exposay_layout_state state;