mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-12 12:54:29 +00:00
Work round missing right click event after dismissing a context menu
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. REVIEW: 129960
This commit is contained in:
parent
0bdd8e0b05
commit
f72dadb0c1
|
@ -801,6 +801,22 @@ bool KItemListController::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event,
|
|||
}
|
||||
}
|
||||
|
||||
if (event->button() & Qt::RightButton) {
|
||||
m_selectionManager->clearSelection();
|
||||
if (index >= 0) {
|
||||
m_selectionManager->setSelected(index);
|
||||
emit itemContextMenuRequested(index, event->screenPos());
|
||||
} else {
|
||||
const QRectF headerBounds = m_view->headerBoundaries();
|
||||
if (headerBounds.contains(event->pos())) {
|
||||
emit headerContextMenuRequested(event->screenPos());
|
||||
} else {
|
||||
emit viewContextMenuRequested(event->screenPos());
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool emitItemActivated = !(m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) || m_singleClickActivationEnforced) &&
|
||||
(event->button() & Qt::LeftButton) &&
|
||||
index >= 0 && index < m_model->count();
|
||||
|
|
Loading…
Reference in a new issue