summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/kms/qkmscursor.cpp7
-rw-r--r--src/plugins/platforms/kms/qkmscursor.h1
2 files changed, 7 insertions, 1 deletions
diff --git a/src/plugins/platforms/kms/qkmscursor.cpp b/src/plugins/platforms/kms/qkmscursor.cpp
index e7d1069b8b..794b0ed175 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 01a6e6b955..8a22c22404 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