summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2015-12-03 14:07:12 -0600
committerBryce Harrington <bryce@bryceharrington.org>2016-02-09 13:07:22 -0800
commit6c19b69fcc6921344fe8f552bbbbe26b70549a65 (patch)
tree0a204cd72ede94c0ff36165d724911e6b0d3497b
parentb0427569fd4a9ef40a4bd59c412f5ab9b17b944d (diff)
downloadweston-6c19b69fcc6921344fe8f552bbbbe26b70549a65.tar.gz
compositor-drm: the cursor plane only supports ARGB
Keep XRGB apps out of the cursor plane, only ARGB is supported. This prevents programs like weston-simple-shm from landing in the cursor plane and being misrendered. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-rw-r--r--src/compositor-drm.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 76668627..538e56eb 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -1094,6 +1094,7 @@ drm_output_prepare_cursor_view(struct drm_output *output,
struct drm_backend *b =
(struct drm_backend *)output->base.compositor->backend;
struct weston_buffer_viewport *viewport = &ev->surface->buffer_viewport;
+ struct wl_shm_buffer *shmbuf;
if (ev->transform.enabled &&
(ev->transform.matrix.type > WESTON_MATRIX_TRANSFORM_TRANSLATE))
@@ -1112,9 +1113,14 @@ drm_output_prepare_cursor_view(struct drm_output *output,
return NULL;
if (ev->geometry.scissor_enabled)
return NULL;
- if (ev->surface->buffer_ref.buffer == NULL ||
- !wl_shm_buffer_get(ev->surface->buffer_ref.buffer->resource) ||
- ev->surface->width > b->cursor_width ||
+ if (ev->surface->buffer_ref.buffer == NULL)
+ return NULL;
+ shmbuf = wl_shm_buffer_get(ev->surface->buffer_ref.buffer->resource);
+ if (!shmbuf)
+ return NULL;
+ if (wl_shm_buffer_get_format(shmbuf) != WL_SHM_FORMAT_ARGB8888)
+ return NULL;
+ if (ev->surface->width > b->cursor_width ||
ev->surface->height > b->cursor_height)
return NULL;