summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp14
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp4
2 files changed, 12 insertions, 6 deletions
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 27639f9..7925c69 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -2688,10 +2688,11 @@ void QGraphicsScene::addItem(QGraphicsItem *item)
// Ensure that newly added items that have subfocus set, gain
// focus automatically if there isn't a focus item already.
- if (!d->focusItem && item != d->lastFocusItem && item->focusItem() == item)
+ if (!d->focusItem && item != d->lastFocusItem && item->focusItem() == item) {
item->focusItem()->setFocus();
-
- d->updateInputMethodSensitivityInViews();
+ // Update input method only if added item got focus
+ d->updateInputMethodSensitivityInViews();
+ }
}
/*!
@@ -2942,6 +2943,9 @@ void QGraphicsScene::removeItem(QGraphicsItem *item)
{
// ### Refactoring: This function shares much functionality with _q_removeItemLater()
Q_D(QGraphicsScene);
+
+ bool wasFocused(item == focusItem());
+
if (!item) {
qWarning("QGraphicsScene::removeItem: cannot remove 0-item");
return;
@@ -2968,7 +2972,9 @@ void QGraphicsScene::removeItem(QGraphicsItem *item)
// Deliver post-change notification
item->itemChange(QGraphicsItem::ItemSceneHasChanged, newSceneVariant);
- d->updateInputMethodSensitivityInViews();
+ // Avoid calling input method update if removed item wasn't focused
+ if (wasFocused)
+ d->updateInputMethodSensitivityInViews();
}
/*!
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 41b07c4..4bfcbb2 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -1101,8 +1101,8 @@ void QGraphicsViewPrivate::updateInputMethodSensitivity()
if (!proxy) {
q->setInputMethodHints(focusItem->inputMethodHints());
} else if (QWidget *widget = proxy->widget()) {
- if (QWidget *fw = widget->focusWidget())
- widget = fw;
+ if (QWidget *fw = widget->focusWidget())
+ widget = fw;
q->setInputMethodHints(widget->inputMethodHints());
} else {
q->setInputMethodHints(0);