diff options
Diffstat (limited to 'src/plugins/platforms/eglfs')
-rw-r--r-- | src/plugins/platforms/eglfs/api/qeglfsintegration_p.h | 6 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/api/qeglfsscreen.cpp | 19 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/api/qeglfsscreen_p.h | 1 |
3 files changed, 19 insertions, 7 deletions
diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h b/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h index b293651ce7..7df1aa3c2c 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h @@ -52,7 +52,9 @@ // #include "qeglfsglobal_p.h" +#include <QtCore/QPointer> #include <QtCore/QVariant> +#include <QtGui/QWindow> #include <qpa/qplatformintegration.h> #include <qpa/qplatformnativeinterface.h> #include <qpa/qplatformscreen.h> @@ -106,6 +108,9 @@ public: QFbVtHandler *vtHandler() { return m_vtHandler.data(); } + QPointer<QWindow> pointerWindow() { return m_pointerWindow; } + void setPointerWindow(QWindow *pointerWindow) { m_pointerWindow = pointerWindow; } + private: EGLNativeDisplayType nativeDisplay() const; void createInputHandlers(); @@ -118,6 +123,7 @@ private: QScopedPointer<QPlatformServices> m_services; QScopedPointer<QFbVtHandler> m_vtHandler; QEvdevKeyboardManager *m_kbdMgr; + QPointer<QWindow> m_pointerWindow; bool m_disableInputHandlers; }; diff --git a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp index 8a8e8cd563..1d3e5ca6af 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp @@ -39,6 +39,7 @@ #include <QtCore/qtextstream.h> #include <QtGui/qwindow.h> +#include <QtGui/private/qguiapplication_p.h> #include <qpa/qwindowsysteminterface.h> #include <qpa/qplatformcursor.h> #ifndef QT_NO_OPENGL @@ -149,6 +150,7 @@ void QEglFSScreen::handleCursorMove(const QPoint &pos) #ifndef QT_NO_OPENGL const QOpenGLCompositor *compositor = QOpenGLCompositor::instance(); const QList<QOpenGLCompositorWindow *> windows = compositor->windows(); + QEglFSIntegration *platformIntegration = static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration()); // Generate enter and leave events like a real windowing system would do. if (windows.isEmpty()) @@ -157,8 +159,8 @@ void QEglFSScreen::handleCursorMove(const QPoint &pos) // First window is always fullscreen. if (windows.count() == 1) { QWindow *window = windows[0]->sourceWindow(); - if (m_pointerWindow != window) { - m_pointerWindow = window; + if (platformIntegration->pointerWindow() != window) { + platformIntegration->setPointerWindow(window); QWindowSystemInterface::handleEnterEvent(window, window->mapFromGlobal(pos), pos); } return; @@ -169,17 +171,22 @@ void QEglFSScreen::handleCursorMove(const QPoint &pos) QWindow *window = windows[i]->sourceWindow(); const QRect geom = window->geometry(); if (geom.contains(pos)) { - if (m_pointerWindow != window) { - leave = m_pointerWindow; - m_pointerWindow = window; + if (platformIntegration->pointerWindow() != window) { + leave = platformIntegration->pointerWindow(); + platformIntegration->setPointerWindow(window); enter = window; } break; } } - if (enter && leave) + if (enter && leave) { QWindowSystemInterface::handleEnterLeaveEvent(enter, leave, enter->mapFromGlobal(pos), pos); + } else if (enter) { + QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(pos), pos); + } else if (leave) { + QWindowSystemInterface::handleLeaveEvent(leave); + } #else Q_UNUSED(pos); #endif diff --git a/src/plugins/platforms/eglfs/api/qeglfsscreen_p.h b/src/plugins/platforms/eglfs/api/qeglfsscreen_p.h index bea7b4c8ef..cf4a7afc33 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsscreen_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfsscreen_p.h @@ -94,7 +94,6 @@ private: void setPrimarySurface(EGLSurface surface); EGLDisplay m_dpy; - QPointer<QWindow> m_pointerWindow; EGLSurface m_surface; QPlatformCursor *m_cursor; |