Details
-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
6.2
-
None
Description
Can be reproduced with the example from QTBUG-87624.
QWaylandWindow::setVisible() calls QWaylandDisplay::flushRequests, which then will process wl_data_device events, calling QGuiApplicationPrivate::processDrag(). If that drag event causes another window to be shown, QGuiApplicationPrivate::processDrag() can get a reentrant call. This causes problems, since processDrag() is not reentrant-safe. (At a minimum it would need to test whether currentDragWindow has changed after each sendEvent().)
There is a simple workaround: Don't hide/show windows (or do other windowsystem manipulation) directly from drag events. Instead, use QMetaObject::invokeMethod with QueuedConnection.
Attachments
Issue Links
- resulted from
-
QTBUG-87624 Wayland client crash when QDrag is used
- Closed