aboutsummaryrefslogtreecommitdiff
path: root/backend/drm
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-03-11 15:06:06 +0100
committeremersion <contact@emersion.fr>2018-03-12 19:34:43 +0100
commitd24f868bbe36cb7129c668f934ee65d0911aff2d (patch)
tree605bc16aaa1ee5bb73364c55b1e612cf63e3163f /backend/drm
parent92ca4ad474b16ff213d2ac7a7113816c38cf4325 (diff)
backend/drm: fix cursor hotspot not updated
Diffstat (limited to 'backend/drm')
-rw-r--r--backend/drm/drm.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index fcadeb09..0d1d527d 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -602,12 +602,25 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output,
wlr_output_transform_invert(output->transform);
wlr_box_transform(&hotspot, transform,
plane->surf.width, plane->surf.height, &hotspot);
- plane->cursor_hotspot_x = hotspot.x;
- plane->cursor_hotspot_y = hotspot.y;
- if (!update_pixels) {
- // Only update the cursor hotspot
+ if (plane->cursor_hotspot_x != hotspot.x ||
+ plane->cursor_hotspot_y != hotspot.y) {
+ // Update cursor hotspot
+ conn->cursor_x -= hotspot.x - plane->cursor_hotspot_x;
+ conn->cursor_y -= hotspot.y - plane->cursor_hotspot_y;
+ plane->cursor_hotspot_x = hotspot.x;
+ plane->cursor_hotspot_y = hotspot.y;
+
+ if (!drm->iface->crtc_move_cursor(drm, conn->crtc, conn->cursor_x,
+ conn->cursor_y)) {
+ return false;
+ }
+
wlr_output_update_needs_swap(output);
+ }
+
+ if (!update_pixels) {
+ // Don't update cursor image
return true;
}