summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qcursor_qpa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/kernel/qcursor_qpa.cpp')
-rw-r--r--src/gui/kernel/qcursor_qpa.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/gui/kernel/qcursor_qpa.cpp b/src/gui/kernel/qcursor_qpa.cpp
index c0b27bebd8..a2927601a9 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
@@ -107,21 +108,39 @@ void QCursorData::update()
#endif //QT_NO_CURSOR
-extern int qt_last_x,qt_last_y;
+extern int qt_last_x;
+extern int qt_last_y;
QPoint QCursor::pos()
{
+ 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)
+ return cursor.data()->pos();
+ }
return QPoint(qt_last_x, qt_last_y);
}
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