compositor: Don't try and use a NULL sprite for the device pointer
[profile/ivi/weston.git] / compositor / compositor.c
index ff7ae3e..e0d7b32 100644 (file)
@@ -208,6 +208,7 @@ surface_handle_buffer_destroy(struct wl_listener *listener,
                                               buffer_destroy_listener);
        struct wl_buffer *buffer = (struct wl_buffer *) resource;
 
+       wl_list_init(&es->buffer_destroy_listener.link);
        if (es->buffer == buffer)
                es->buffer = NULL;
 }
@@ -256,6 +257,7 @@ wlsc_surface_create(struct wlsc_compositor *compositor,
        surface->width = width;
        surface->height = height;
 
+       surface->fullscreen_output = NULL;
        surface->buffer = NULL;
        surface->output = NULL;
 
@@ -351,6 +353,8 @@ wlsc_compositor_repick(struct wlsc_compositor *compositor)
 
        time = wlsc_compositor_get_time();
        wl_list_for_each(device, &compositor->input_device_list, link) {
+               if (device->input_device.grab)
+                       continue;
                surface = pick_surface(&device->input_device, &sx, &sy);
                wl_input_device_set_pointer_focus(&device->input_device,
                                                  &surface->surface,
@@ -1156,6 +1160,9 @@ static void
 wlsc_input_device_attach_sprite(struct wlsc_input_device *device,
                                struct wlsc_sprite *sprite, int x, int y)
 {
+       if (!sprite)
+               return;
+
        wlsc_sprite_attach(sprite, &device->sprite->surface);
        wlsc_input_device_attach(device, x, y, sprite->width, sprite->height);
 }