diff options
Diffstat (limited to 'src/gui/kernel/qcursor_qpa.cpp')
-rw-r--r-- | src/gui/kernel/qcursor_qpa.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/gui/kernel/qcursor_qpa.cpp b/src/gui/kernel/qcursor_qpa.cpp index d4cf6f4995..40a15317ee 100644 --- a/src/gui/kernel/qcursor_qpa.cpp +++ b/src/gui/kernel/qcursor_qpa.cpp @@ -41,6 +41,8 @@ #include <qcursor.h> #include <private/qcursor_p.h> +#include <qplatformcursor_qpa.h> +#include <private/qguiapplication_p.h> #include <qbitmap.h> QT_BEGIN_NAMESPACE @@ -107,21 +109,29 @@ void QCursorData::update() #endif //QT_NO_CURSOR -extern qreal qt_last_x,qt_last_y; - QPoint QCursor::pos() { - return QPointF(qt_last_x, qt_last_y).toPoint(); + return QGuiApplicationPrivate::lastCursorPosition.toPoint(); } void QCursor::setPos(int x, int y) { + QPoint target(x, y); + // Need to check, since some X servers generate null mouse move // events, causing looping in applications which call setPos() on // every mouse move event. // - if (pos() == QPoint(x, y)) + if (pos() == target) return; + + QList<QWeakPointer<QPlatformCursor> > cursors = QPlatformCursorPrivate::getInstances(); + int cursorCount = cursors.count(); + for (int i = 0; i < cursorCount; ++i) { + const QWeakPointer<QPlatformCursor> &cursor(cursors.at(i)); + if (cursor) + cursor.data()->setPos(target); + } } QT_END_NAMESPACE |