summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/eglconvenience/qeglplatformcursor.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-01-27 13:40:42 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-31 12:07:59 +0100
commit6953f3a501dfee5064a12558a2e2515b69b35189 (patch)
tree4d99834383d6a00f49fe3ef99c11b373aedac394 /src/platformsupport/eglconvenience/qeglplatformcursor.cpp
parent231cac611920d7735975b82fda1efee9a12a77f2 (diff)
eglfs: Mouse hotplugging support
On Embedded Linux with libudev support hotplugging was already working, except that the mouse cursor was not shown and hidden. This is now corrected so that the cursor disappears when all mice become disconnected and reappears if a mouse gets plugged in later on. [ChangeLog][QtGui] Mouse hotplugging is now fully supported in eglfs when running on Embedded Linux systems with libudev support enabled. Task-number: QTBUG-36374 Change-Id: Iec7c1557ba6085e3958dd357460cc032896fb174 Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Diffstat (limited to 'src/platformsupport/eglconvenience/qeglplatformcursor.cpp')
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformcursor.cpp52
1 files changed, 45 insertions, 7 deletions
diff --git a/src/platformsupport/eglconvenience/qeglplatformcursor.cpp b/src/platformsupport/eglconvenience/qeglplatformcursor.cpp
index 55590dbc9e..1c87e1d27d 100644
--- a/src/platformsupport/eglconvenience/qeglplatformcursor.cpp
+++ b/src/platformsupport/eglconvenience/qeglplatformcursor.cpp
@@ -39,7 +39,6 @@
**
****************************************************************************/
-#include "qeglplatformcursor_p.h"
#include <qpa/qwindowsysteminterface.h>
#include <QtGui/QOpenGLContext>
#include <QtGui/QOpenGLShaderProgram>
@@ -50,6 +49,9 @@
#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include "qeglplatformcursor_p.h"
+#include "qeglplatformintegration_p.h"
+
QT_BEGIN_NAMESPACE
/*!
@@ -66,15 +68,12 @@ QEGLPlatformCursor::QEGLPlatformCursor(QPlatformScreen *screen)
m_program(0),
m_vertexCoordEntry(0),
m_textureCoordEntry(0),
- m_textureEntry(0)
+ m_textureEntry(0),
+ m_deviceListener(0)
{
QByteArray hideCursorVal = qgetenv("QT_QPA_EGLFS_HIDECURSOR");
- if (hideCursorVal.isEmpty()) {
- QScopedPointer<QDeviceDiscovery> dis(QDeviceDiscovery::create(QDeviceDiscovery::Device_Mouse));
- m_visible = !dis->scanConnectedDevices().isEmpty();
- } else {
+ if (!hideCursorVal.isEmpty())
m_visible = hideCursorVal.toInt() == 0;
- }
if (!m_visible)
return;
@@ -92,6 +91,45 @@ QEGLPlatformCursor::QEGLPlatformCursor(QPlatformScreen *screen)
QEGLPlatformCursor::~QEGLPlatformCursor()
{
resetResources();
+ delete m_deviceListener;
+}
+
+void QEGLPlatformCursor::setMouseDeviceDiscovery(QDeviceDiscovery *dd)
+{
+ if (m_visible && dd) {
+ m_deviceListener = new QEGLPlatformCursorDeviceListener(dd, this);
+ updateMouseStatus();
+ }
+}
+
+void QEGLPlatformCursor::updateMouseStatus()
+{
+ m_visible = m_deviceListener->hasMouse();
+}
+
+QEGLPlatformCursorDeviceListener::QEGLPlatformCursorDeviceListener(QDeviceDiscovery *dd, QEGLPlatformCursor *cursor)
+ : m_cursor(cursor)
+{
+ m_mouseCount = dd->scanConnectedDevices().count();
+ connect(dd, SIGNAL(deviceDetected(QString)), SLOT(onDeviceAdded()));
+ connect(dd, SIGNAL(deviceRemoved(QString)), SLOT(onDeviceRemoved()));
+}
+
+bool QEGLPlatformCursorDeviceListener::hasMouse() const
+{
+ return m_mouseCount > 0;
+}
+
+void QEGLPlatformCursorDeviceListener::onDeviceAdded()
+{
+ ++m_mouseCount;
+ m_cursor->updateMouseStatus();
+}
+
+void QEGLPlatformCursorDeviceListener::onDeviceRemoved()
+{
+ --m_mouseCount;
+ m_cursor->updateMouseStatus();
}
void QEGLPlatformCursor::resetResources()