summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2016-03-02 14:26:16 +0800
committerJonas Ådahl <jadahl@gmail.com>2016-03-03 23:26:02 +0800
commit96927b34154d7a234eaaf2702027034b6c0395dd (patch)
tree06f462c05dff051955455b39614e35cc870a69e4 /src
parentceae5dceeabb2bac26cbda594b989743d4f60c10 (diff)
downloadmutter-96927b34154d7a234eaaf2702027034b6c0395dd.tar.gz
wayland: Don't access the cursor wl_buffer when updating the sprite
We may have released the wl_buffer already when doing this, which means we should not try to access the wl_buffer content. Regarding the cursor texture this is not an issue since we can just use the texture created in apply_pending_state(). The hw cursor however will only be realized if the surface is already using the the buffer (surface->using_buffer == true). This will, at the moment, effectively disable hardware cursors for SHM buffers. https://bugzilla.gnome.org/show_bug.cgi?id=762828
Diffstat (limited to 'src')
-rw-r--r--src/wayland/meta-wayland-pointer.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index 4fb32bbdf..89dd2cd18 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -967,28 +967,25 @@ update_cursor_sprite_texture (MetaWaylandSurface *surface)
MetaWaylandSurfaceRoleCursor *cursor_role =
META_WAYLAND_SURFACE_ROLE_CURSOR (surface->role);
MetaCursorSprite *cursor_sprite = cursor_role->cursor_sprite;
- ClutterBackend *clutter_backend = clutter_get_default_backend ();
- CoglContext *cogl_context =
- clutter_backend_get_cogl_context (clutter_backend);
- CoglTexture *texture;
+
+ g_return_if_fail (!surface->buffer || surface->buffer->texture);
if (surface->buffer)
{
- struct wl_resource *buffer;
-
- buffer = surface->buffer->resource;
- texture = cogl_wayland_texture_2d_new_from_buffer (cogl_context,
- buffer,
- NULL);
-
meta_cursor_sprite_set_texture (cursor_sprite,
- texture,
+ surface->buffer->texture,
cursor_role->hot_x * surface->scale,
cursor_role->hot_y * surface->scale);
- meta_cursor_renderer_realize_cursor_from_wl_buffer (cursor_renderer,
- cursor_sprite,
- buffer);
- cogl_object_unref (texture);
+
+ if (surface->using_buffer)
+ {
+ struct wl_resource *buffer;
+
+ buffer = surface->buffer->resource;
+ meta_cursor_renderer_realize_cursor_from_wl_buffer (cursor_renderer,
+ cursor_sprite,
+ buffer);
+ }
}
else
{