summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.p.agocs@nokia.com>2011-06-07 15:38:45 +0200
committerLaszlo Agocs <laszlo.p.agocs@nokia.com>2011-06-08 14:47:22 +0200
commit4469de4ce7a72ab6824629bfe8483131aaf22137 (patch)
treecc5b1c11c0681975e972f2d6aeab80e106d328c8 /src/gui
parent88f3b059a935d1ce7735a5ae082c256619eea8c1 (diff)
Cursor support in xcb plug-in.
Custom cursor pixmaps with depth greater than 1 are not yet supported and will be converted to monochrome always. Reviewed-by: Samuel Rødal
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/kernel/qcursor_qpa.cpp23
-rw-r--r--src/gui/kernel/qguiapplication.cpp4
-rw-r--r--src/gui/kernel/qplatformcursor_qpa.cpp15
-rw-r--r--src/gui/kernel/qplatformcursor_qpa.h2
4 files changed, 40 insertions, 4 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
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 80b4aa3206..468e8c3bfd 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -212,7 +212,7 @@ static void init_platform(const QString &name, const QString &platformPluginPath
QStringList keys = QPlatformIntegrationFactory::keys(platformPluginPath);
QString fatalMessage =
QString::fromLatin1("Failed to load platform plugin \"%1\". Available platforms are: \n").arg(name);
- foreach(QString key, keys) {
+ foreach(const QString &key, keys) {
fatalMessage.append(key + QString::fromLatin1("\n"));
}
qFatal("%s", fatalMessage.toLocal8Bit().constData());
@@ -221,7 +221,7 @@ static void init_platform(const QString &name, const QString &platformPluginPath
}
-static void init_plugins(const QList<QByteArray> pluginList)
+static void init_plugins(const QList<QByteArray> &pluginList)
{
for (int i = 0; i < pluginList.count(); ++i) {
QByteArray pluginSpec = pluginList.at(i);
diff --git a/src/gui/kernel/qplatformcursor_qpa.cpp b/src/gui/kernel/qplatformcursor_qpa.cpp
index b3994103fe..4c98098898 100644
--- a/src/gui/kernel/qplatformcursor_qpa.cpp
+++ b/src/gui/kernel/qplatformcursor_qpa.cpp
@@ -98,6 +98,21 @@ QPlatformCursor::QPlatformCursor(QPlatformScreen *scr )
QPlatformCursorPrivate::instances.append(this);
}
+extern int qt_last_x;
+extern int qt_last_y;
+
+QPoint QPlatformCursor::pos() const
+{
+ // As a fallback return the last mouse position seen by QGuiApplication.
+ return QPoint(qt_last_x, qt_last_y);
+}
+
+void QPlatformCursor::setPos(const QPoint &pos)
+{
+ Q_UNUSED(pos);
+ qWarning("This plugin does not support QCursor::setPos()");
+}
+
// End of display and pointer event handling code
// Beginning of built-in cursor graphics
// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp
diff --git a/src/gui/kernel/qplatformcursor_qpa.h b/src/gui/kernel/qplatformcursor_qpa.h
index 89091b555b..af40c7d1c0 100644
--- a/src/gui/kernel/qplatformcursor_qpa.h
+++ b/src/gui/kernel/qplatformcursor_qpa.h
@@ -86,6 +86,8 @@ public:
// input methods
virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); }
virtual void changeCursor(QCursor * widgetCursor, QWindow * widget) = 0;
+ virtual QPoint pos() const;
+ virtual void setPos(const QPoint &pos);
protected:
QPlatformScreen* screen; // Where to request an update