diff options
author | emersion <contact@emersion.fr> | 2018-03-11 15:06:06 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2018-03-12 19:34:43 +0100 |
commit | d24f868bbe36cb7129c668f934ee65d0911aff2d (patch) | |
tree | 605bc16aaa1ee5bb73364c55b1e612cf63e3163f /backend | |
parent | 92ca4ad474b16ff213d2ac7a7113816c38cf4325 (diff) |
backend/drm: fix cursor hotspot not updated
Diffstat (limited to 'backend')
-rw-r--r-- | backend/drm/drm.c | 21 |
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; } |