diff options
Diffstat (limited to 'src/canvas/qxgraphicsview.cpp')
-rw-r--r-- | src/canvas/qxgraphicsview.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/canvas/qxgraphicsview.cpp b/src/canvas/qxgraphicsview.cpp index 6c3e257..321f138 100644 --- a/src/canvas/qxgraphicsview.cpp +++ b/src/canvas/qxgraphicsview.cpp @@ -165,6 +165,8 @@ QxGraphicsView::QxGraphicsView(QWidget *parent) d->animationDriver.install(); else printf("Not using VSync Animation Driver\n"); + + setFocusPolicy(Qt::StrongFocus); } QxGraphicsView::~QxGraphicsView() @@ -290,6 +292,7 @@ QGraphicsSceneMouseEvent *QxGraphicsViewPrivate::sceneMouseEvent(QMouseEvent *e, g->setButtons(e->buttons()); g->setButton(e->button()); g->setModifiers(e->modifiers()); + g->setAccepted(false); return g; } @@ -321,7 +324,8 @@ bool QxGraphicsViewPrivate::deliverInitialMouseEvent(QxItem *o, QMouseEvent *e) children = QxItemPrivate::get(children)->nextSibling; } - if (filter) mouseFilters.removeLast(); + if (filter && !mouseFilters.isEmpty()) + mouseFilters.removeLast(); if (op->acceptedButtons & e->button()) { bool ok = false; @@ -362,6 +366,8 @@ bool QxGraphicsViewPrivate::deliverInitialMouseEvent(QxItem *o, QMouseEvent *e) void QxGraphicsView::mousePressEvent(QMouseEvent *e) { if (d->deliverInitialMouseEvent(d->root, e)) { + if (d->mouseGrabber && d->mouseGrabber->focusItem()) + d->setFocusItem(d->mouseGrabber->focusItem()); e->accept(); } else { #ifdef Q_WS_QPA @@ -502,6 +508,7 @@ void QxGraphicsViewPrivate::setFocusItem(QxItem *item) focusItem = 0; QFocusEvent event(QEvent::FocusOut, Qt::OtherFocusReason); QCoreApplication::sendEvent(prevFocusItem, &event); + prevFocusItem->d_func()->view = 0; } QxItem *fi = item; @@ -517,6 +524,7 @@ void QxGraphicsViewPrivate::setFocusItem(QxItem *item) //give focus to new focus item if (focusItem) { + focusItem->d_func()->view = q; focusItem->d_func()->inActiveFocusChain = true; QFocusEvent event(QEvent::FocusOut, Qt::OtherFocusReason); QCoreApplication::sendEvent(focusItem, &event); |