diff options
Diffstat (limited to 'src/gui/kernel/qcursor_qpa.cpp')
-rw-r--r-- | src/gui/kernel/qcursor_qpa.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/gui/kernel/qcursor_qpa.cpp b/src/gui/kernel/qcursor_qpa.cpp index d4cf6f4995..65d5b0f650 100644 --- a/src/gui/kernel/qcursor_qpa.cpp +++ b/src/gui/kernel/qcursor_qpa.cpp @@ -41,6 +41,7 @@ #include <qcursor.h> #include <private/qcursor_p.h> +#include <qplatformcursor_qpa.h> #include <qbitmap.h> QT_BEGIN_NAMESPACE @@ -116,12 +117,22 @@ QPoint QCursor::pos() 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 |