diff options
author | Dave Airlie <airlied@redhat.com> | 2013-07-03 15:28:10 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-09-04 16:20:56 +1000 |
commit | abe9cd20186fa810aaf880222d1c9ab3ab6bd379 (patch) | |
tree | 3697cdab72a23e9dbea81f6861737f470a3ff470 | |
parent | 96e6be278896ea6ecb43984d7e6fe8eea3b75ab1 (diff) |
qxl: fix broken cursor hotspot on KMS driver
bugzilla: http://bugzilla.redhat.com/974662
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | src/qxl_drmmode.c | 14 |
2 files changed, 15 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index 8b2d450..81b7ad7 100644 --- a/configure.ac +++ b/configure.ac @@ -78,7 +78,8 @@ CFLAGS="$save_CFLAGS" # Checks for libraries. if test "x$QXL_DRM" = xyes; then - PKG_CHECK_MODULES(DRM, [libdrm >= 2.4.42]) + # require support for kms cursor hotspot + PKG_CHECK_MODULES(DRM, [libdrm >= 2.4.46]) AC_ARG_ENABLE(kms, AS_HELP_STRING([--disable-kms], diff --git a/src/qxl_drmmode.c b/src/qxl_drmmode.c index 03b4124..5fe056c 100644 --- a/src/qxl_drmmode.c +++ b/src/qxl_drmmode.c @@ -43,6 +43,7 @@ #define DPMS_SERVER #include <X11/extensions/dpms.h> #endif +#include <cursorstr.h> #include "qxl.h" #include "qxl_surface.h" @@ -271,7 +272,18 @@ drmmode_show_cursor (xf86CrtcPtr crtc) drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; drmmode_ptr drmmode = drmmode_crtc->drmmode; uint32_t handle = qxl_kms_bo_get_handle(drmmode_crtc->cursor_bo); - + static Bool use_set_cursor2 = TRUE; + + if (use_set_cursor2) { + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn); + CursorPtr cursor = xf86_config->cursor; + int ret; + ret = drmModeSetCursor2(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, handle, 64, 64, cursor->bits->xhot, cursor->bits->yhot); + if (ret == -ENOSYS) + use_set_cursor2 = FALSE; + else + return; + } drmModeSetCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, handle, 64, 64); } |