summaryrefslogtreecommitdiffstats
path: root/WebCore/page/FocusController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/FocusController.cpp')
-rw-r--r--WebCore/page/FocusController.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/WebCore/page/FocusController.cpp b/WebCore/page/FocusController.cpp
index 5e78c7d..bdd3151 100644
--- a/WebCore/page/FocusController.cpp
+++ b/WebCore/page/FocusController.cpp
@@ -38,8 +38,8 @@
#include "EventNames.h"
#include "ExceptionCode.h"
#include "Frame.h"
-#include "FrameView.h"
#include "FrameTree.h"
+#include "FrameView.h"
#include "HTMLFrameOwnerElement.h"
#include "HTMLNames.h"
#include "KeyboardEvent.h"
@@ -72,14 +72,17 @@ FocusController::FocusController(Page* page)
: m_page(page)
, m_isActive(false)
, m_isFocused(false)
+ , m_isChangingFocusedFrame(false)
{
}
void FocusController::setFocusedFrame(PassRefPtr<Frame> frame)
{
- if (m_focusedFrame == frame)
+ if (m_focusedFrame == frame || m_isChangingFocusedFrame)
return;
+ m_isChangingFocusedFrame = true;
+
RefPtr<Frame> oldFrame = m_focusedFrame;
RefPtr<Frame> newFrame = frame;
@@ -95,6 +98,8 @@ void FocusController::setFocusedFrame(PassRefPtr<Frame> frame)
newFrame->selection()->setFocused(true);
newFrame->document()->dispatchWindowEvent(Event::create(eventNames().focusEvent, false, false));
}
+
+ m_isChangingFocusedFrame = false;
}
Frame* FocusController::focusedOrMainFrame()