Work round missing right click event after dismissing a context menu

Review Request #129960 - Created Feb. 20, 2017 and submitted

David Edmundson

There is a bug that can happen in the following situation:
- user right clicks to open a menu

- that context menu grabs input

- the QGrabphicsView also notes the mouse was pressed, but not that the
mouse was released because it doesn't have mouse events any more

- when a user clicks to dismiss the menu and then without moving clicks
quickly again to send, we don't get another press event because the
QGraphicsScene still thinks the mouse is pressed from the first time the
context menu was shown and
QGraphicsScenePrivate::lastMouseGrabberItemHasImplicitMouseGrab still
points to the old object.

This is a known bug in QGraphicsView and you can see
QGraphicsScenePrivate::sendMouseEvent has a workaround to reset the
lastMouseGrabberItemHasImplicitMouseGrab on mouse moves, with the
comment: "This is a temporary fix for until we get proper mouse
grab events."

Realistically this isn't going to happen in QGraphicsView now.

We do get a double click event though. By checking for double click
events we can grab those missed clicks. It doesn't cause any other side
effects because normally the context menu will fire after the first
click and this rarely gets processed.

Opened dolphin. Right clicked on lots of things quickly. Set my double click interval to 2seconds to make this easier to reproduce.
Got context menus all the time.

David Edmundson
David Edmundson
Emmanuel Pescosta
David Edmundson
Review request changed

Status: Closed (submitted)

Change Summary:

Submitted with commit f72dadb0c16a023c444e406b8acfa84f09f2ab31 by David Edmundson to branch master.