summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2013-07-03 15:28:10 +1000
committerDave Airlie <airlied@redhat.com>2013-09-04 16:20:56 +1000
commitabe9cd20186fa810aaf880222d1c9ab3ab6bd379 (patch)
tree3697cdab72a23e9dbea81f6861737f470a3ff470
parent96e6be278896ea6ecb43984d7e6fe8eea3b75ab1 (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.ac3
-rw-r--r--src/qxl_drmmode.c14
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);
}