eglfs: Fix mouse events not being delivered to the frontmost window
Since QPlatformScreen::topLevelAt() wasn't implemented it would just fallback to use QGuiApplication's window list. Possibly fixes any other bug that relied on QApplication::topLevelAt(). The fix is to consult the compositor, which has proper z-order information, unlike QGuiApplicationPrivate::window_list. Task-Id: QTBUG-105256 Change-Id: I4202dd5d87e41b69c461c808d29b809af5b52d09 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> (cherry picked from commit 40d781b7b5e7925e4559cd725ddbfef307d5f455) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
e1b6d9e4fc
commit
ad2a55f8df
@ -212,4 +212,22 @@ QPixmap QEglFSScreen::grabWindow(WId wid, int x, int y, int width, int height) c
|
|||||||
return QPixmap();
|
return QPixmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QWindow *QEglFSScreen::topLevelAt(const QPoint &point) const
|
||||||
|
{
|
||||||
|
#ifndef QT_NO_OPENGL
|
||||||
|
QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
|
||||||
|
const QList<QOpenGLCompositorWindow *> windows = compositor->windows();
|
||||||
|
const int windowCount = windows.size();
|
||||||
|
|
||||||
|
// Higher z-order is at the end of the list
|
||||||
|
for (int i = windowCount - 1; i >= 0; i--) {
|
||||||
|
QWindow *window = windows[i]->sourceWindow();
|
||||||
|
if (window->isVisible() && window->geometry().contains(point))
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return QPlatformScreen::topLevelAt(point);
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -54,6 +54,8 @@ public:
|
|||||||
|
|
||||||
void handleCursorMove(const QPoint &pos);
|
void handleCursorMove(const QPoint &pos);
|
||||||
|
|
||||||
|
QWindow *topLevelAt(const QPoint &point) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setPrimarySurface(EGLSurface surface);
|
void setPrimarySurface(EGLSurface surface);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user