From 0a8b67b3bbb9b03746e3ba2e80babbc1b43a55a1 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Wed, 18 Jul 2012 13:15:56 +0300 Subject: [PATCH] Reset drm cursor position if cursor image is set before moved MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Do not let the cursor appear at some random position and then jump back to the top-left corner when first moved. Change-Id: I0b77763bdfa86c23435d6cc07bdc13dfcc682567 Reviewed-by: Jørgen Lind --- src/plugins/platforms/kms/qkmscursor.cpp | 7 ++++++- src/plugins/platforms/kms/qkmscursor.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/kms/qkmscursor.cpp b/src/plugins/platforms/kms/qkmscursor.cpp index e7d1069..794b0ed 100644 --- a/src/plugins/platforms/kms/qkmscursor.cpp +++ b/src/plugins/platforms/kms/qkmscursor.cpp @@ -47,7 +47,8 @@ QT_BEGIN_NAMESPACE QKmsCursor::QKmsCursor(QKmsScreen *screen) : m_screen(screen), - m_graphicsBufferManager(screen->device()->gbmDevice()) + m_graphicsBufferManager(screen->device()->gbmDevice()), + m_moved(false) { gbm_bo *bo = gbm_bo_create(m_graphicsBufferManager, 64, 64, GBM_BO_FORMAT_ARGB8888, @@ -67,6 +68,7 @@ QKmsCursor::~QKmsCursor() void QKmsCursor::pointerEvent(const QMouseEvent &event) { + m_moved = true; int status = drmModeMoveCursor(m_screen->device()->fd(), m_screen->crtcId(), event.globalX(), @@ -80,6 +82,9 @@ void QKmsCursor::changeCursor(QCursor *widgetCursor, QWindow *window) { Q_UNUSED(window) + if (!m_moved) + drmModeMoveCursor(m_screen->device()->fd(), m_screen->crtcId(), 0, 0); + if (widgetCursor->shape() != Qt::BitmapCursor) { m_cursorImage->set(widgetCursor->shape()); } else { diff --git a/src/plugins/platforms/kms/qkmscursor.h b/src/plugins/platforms/kms/qkmscursor.h index 01a6e6b..8a22c22 100644 --- a/src/plugins/platforms/kms/qkmscursor.h +++ b/src/plugins/platforms/kms/qkmscursor.h @@ -68,6 +68,7 @@ private: gbm_device *m_graphicsBufferManager; EGLImageKHR m_eglImage; QPlatformCursorImage *m_cursorImage; + bool m_moved; }; QT_END_NAMESPACE -- 2.7.4