summaryrefslogtreecommitdiffstats
path: root/src/canvas/qxgraphicsview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/canvas/qxgraphicsview.cpp')
-rw-r--r--src/canvas/qxgraphicsview.cpp10
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);