diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2013-10-11 14:42:14 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-14 12:08:12 +0200 |
commit | 4ba1072f3f9dff2c674e804eeb998d88510db89c (patch) | |
tree | 350556224340459f41fe4808dbc076c070581548 | |
parent | a662d42125c5e65166d4f1597a407ec6c351e5d8 (diff) |
linuxfb: Make the mouse cursor visible and working
Change-Id: I58bae7235ae714da551da1337ee6340fc712aaa5
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
-rw-r--r-- | src/platformsupport/fbconvenience/qfbcursor.cpp | 9 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbcursor_p.h | 2 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbscreen.cpp | 8 | ||||
-rw-r--r-- | src/platformsupport/fbconvenience/qfbscreen_p.h | 15 | ||||
-rw-r--r-- | src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp | 18 |
5 files changed, 41 insertions, 11 deletions
diff --git a/src/platformsupport/fbconvenience/qfbcursor.cpp b/src/platformsupport/fbconvenience/qfbcursor.cpp index fecf9f6380..b86f5830ea 100644 --- a/src/platformsupport/fbconvenience/qfbcursor.cpp +++ b/src/platformsupport/fbconvenience/qfbcursor.cpp @@ -137,5 +137,12 @@ void QFbCursor::changeCursor(QCursor * widgetCursor, QWindow *window) } #endif -QT_END_NAMESPACE +void QFbCursor::setDirty() +{ + if (!mDirty) { + mDirty = true; + mScreen->scheduleUpdate(); + } +} +QT_END_NAMESPACE diff --git a/src/platformsupport/fbconvenience/qfbcursor_p.h b/src/platformsupport/fbconvenience/qfbcursor_p.h index cee9f56ab5..40377e2075 100644 --- a/src/platformsupport/fbconvenience/qfbcursor_p.h +++ b/src/platformsupport/fbconvenience/qfbcursor_p.h @@ -63,7 +63,7 @@ public: virtual void changeCursor(QCursor *widgetCursor, QWindow *window); #endif - virtual void setDirty() { mDirty = true; /* screen->setDirty(QRect()); */ } + virtual void setDirty(); virtual bool isDirty() const { return mDirty; } virtual bool isOnScreen() const { return mOnScreen; } virtual QRect lastPainted() const { return mPrevRect; } diff --git a/src/platformsupport/fbconvenience/qfbscreen.cpp b/src/platformsupport/fbconvenience/qfbscreen.cpp index e5b9f09c14..4ef035cf50 100644 --- a/src/platformsupport/fbconvenience/qfbscreen.cpp +++ b/src/platformsupport/fbconvenience/qfbscreen.cpp @@ -149,9 +149,13 @@ void QFbScreen::setDirty(const QRect &rect) QRect intersection = rect.intersected(mGeometry); QPoint screenOffset = mGeometry.topLeft(); mRepaintRegion += intersection.translated(-screenOffset); // global to local translation - if (!mRedrawTimer.isActive()) { + scheduleUpdate(); +} + +void QFbScreen::scheduleUpdate() +{ + if (!mRedrawTimer.isActive()) mRedrawTimer.start(); - } } void QFbScreen::setPhysicalSize(const QSize &size) diff --git a/src/platformsupport/fbconvenience/qfbscreen_p.h b/src/platformsupport/fbconvenience/qfbscreen_p.h index 01a352e96a..dd940c4a1d 100644 --- a/src/platformsupport/fbconvenience/qfbscreen_p.h +++ b/src/platformsupport/fbconvenience/qfbscreen_p.h @@ -45,6 +45,7 @@ #include <qpa/qplatformscreen.h> #include <QtCore/QTimer> #include <QtCore/QSize> +#include "qfbcursor_p.h" QT_BEGIN_NAMESPACE @@ -60,13 +61,14 @@ public: QFbScreen(); ~QFbScreen(); - virtual QRect geometry() const { return mGeometry; } - virtual int depth() const { return mDepth; } - virtual QImage::Format format() const { return mFormat; } - virtual QSizeF physicalSize() const { return mPhysicalSize; } + QRect geometry() const Q_DECL_OVERRIDE { return mGeometry; } + int depth() const Q_DECL_OVERRIDE { return mDepth; } + QImage::Format format() const Q_DECL_OVERRIDE { return mFormat; } + QSizeF physicalSize() const Q_DECL_OVERRIDE { return mPhysicalSize; } + QPlatformCursor *cursor() const Q_DECL_OVERRIDE { return mCursor; } QWindow *topWindow() const; - virtual QWindow *topLevelAt(const QPoint & p) const; + QWindow *topLevelAt(const QPoint & p) const Q_DECL_OVERRIDE; // compositor api virtual void addWindow(QFbWindow *window); @@ -77,6 +79,8 @@ public: void addBackingStore(QFbBackingStore *bs) {mBackingStores << bs;} + void scheduleUpdate(); + public slots: virtual void setDirty(const QRect &rect); void setPhysicalSize(const QSize &size); @@ -114,4 +118,3 @@ private: QT_END_NAMESPACE #endif // QFBSCREEN_P_H - diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp index 0d5bba8457..6a2d767723 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp @@ -62,6 +62,10 @@ #include <linux/fb.h> +#if !defined(QT_NO_EVDEV) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK)) +#include <QtPlatformSupport/private/qdevicediscovery_p.h> +#endif + QT_BEGIN_NAMESPACE static int openFramebufferDevice(const QString &dev) @@ -394,7 +398,19 @@ bool QLinuxFbScreen::initialize(const QStringList &args) QFbScreen::initializeCompositor(); mFbScreenImage = QImage(mMmap.data, geometry.width(), geometry.height(), mBytesPerLine, mFormat); - mCursor = new QFbCursor(this); + + QByteArray hideCursorVal = qgetenv("QT_QPA_FB_HIDECURSOR"); + bool hideCursor = true; // default to true to prevent the cursor showing up with the subclass on Android + if (hideCursorVal.isEmpty()) { +#if !defined(QT_NO_EVDEV) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK)) + QScopedPointer<QDeviceDiscovery> dis(QDeviceDiscovery::create(QDeviceDiscovery::Device_Mouse)); + hideCursor = dis->scanConnectedDevices().isEmpty(); +#endif + } else { + hideCursor = hideCursorVal.toInt() != 0; + } + if (!hideCursor) + mCursor = new QFbCursor(this); mTtyFd = openTtyDevice(ttyDevice); if (mTtyFd == -1) |