diff options
Diffstat (limited to 'WebCore')
-rw-r--r-- | WebCore/page/FocusController.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/WebCore/page/FocusController.cpp b/WebCore/page/FocusController.cpp index bdd3151..c2bd251 100644 --- a/WebCore/page/FocusController.cpp +++ b/WebCore/page/FocusController.cpp @@ -335,11 +335,14 @@ bool FocusController::setFocusedNode(Node* node, PassRefPtr<Frame> newFocusedFra oldDocument->setFocusedNode(0); setFocusedFrame(newFocusedFrame); - + + // Setting the focused node can result in losing our last reft to node when JS event handlers fire. + RefPtr<Node> protect = node; if (newDocument) newDocument->setFocusedNode(node); - - m_page->editorClient()->setInputMethodState(node->shouldUseInputMethod()); + + if (newDocument->focusedNode() == node) + m_page->editorClient()->setInputMethodState(node->shouldUseInputMethod()); return true; } |