Don't rely on QQuickWindow delivering QEvent::Ungrab as mouseUngrabEvent (as it no longer does in Qt 5.8+)
ClosedPublic

Authored by hein on Jun 17 2017, 3:24 AM.

Details

Summary

QQuickWindow::sendEvent in Qt 5.7 and older had the following code
to deliver QEvent::UngrabMouse by calling QQuickItem::mouseUngrabEvent:

case QEvent::UngrabMouse: {

    QSet<QQuickItem *> hasFiltered;
    if (!d->sendFilteredMouseEvent(item->parentItem(), item, e, &hasFiltered)) {
        e->accept();
        item->mouseUngrabEvent();
    }
}

This is gone from Qt 5.8+. While QEvent::Ungrab is still delivered to
items, QQuickItem::mouseUngrabEvent is only called under constrained
circumstances elsewhere, e.g. when ending an actual mouse grab held by
an item and tracked by Qt.

MouseEventListener relied on mouseUngrabEvent being called to implement
something akin to MouseArea::canceled: Signaling a user it should clean
up state after a press event, instead of, say, assuming the button is
still held and waiting around for a release event. While QEvent::Ungrab
was already being intercepted as well, it was only done for event de-
duplication, not used for the above.

This changes the code so handleUngrab checks first whether we're
actually in press state (to make it safe to call repeatedly) and then
call it from both the generic event handler and mouseUngrabEvent. This
makes it work again with newer Qts.

We rely on this particularly in the desktop containment, where we use
EventGenerator from this same lib to deliver QEvent::Ungrab to applets
when the containment goes into applet move mode on press-and-hold.
Without MouseEventListener emiting canceled in response, e.g. moving
a Folder View applet will e.g. put it into rectangle selection mode
unwanted.
BUG:380354

Diff Detail

Repository
R296 KDeclarative
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.
hein created this revision.Jun 17 2017, 3:24 AM
Restricted Application added projects: Plasma, Frameworks. · View Herald TranscriptJun 17 2017, 3:24 AM
Restricted Application added a subscriber: Frameworks. · View Herald Transcript
davidedmundson accepted this revision.Jun 17 2017, 8:39 AM
This revision is now accepted and ready to land.Jun 17 2017, 8:39 AM
This revision was automatically updated to reflect the committed changes.