summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/PointerLockController.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-09-10 19:10:20 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-09-10 19:10:20 +0200
commit284837daa07b29d6a63a748544a90b1f5842ac5c (patch)
treeecd258180bde91fe741e0cfd2638beb3c6da7e8e /Source/WebCore/page/PointerLockController.cpp
parent2e2ba8ff45915f40ed3e014101269c175f2a89a0 (diff)
downloadqtwebkit-284837daa07b29d6a63a748544a90b1f5842ac5c.tar.gz
Imported WebKit commit 68645295d2e3e09af2c942f092556f06aa5f8b0d (http://svn.webkit.org/repository/webkit/trunk@128073)
New snapshot
Diffstat (limited to 'Source/WebCore/page/PointerLockController.cpp')
-rw-r--r--Source/WebCore/page/PointerLockController.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/Source/WebCore/page/PointerLockController.cpp b/Source/WebCore/page/PointerLockController.cpp
index ad7960962..ddbb84fd0 100644
--- a/Source/WebCore/page/PointerLockController.cpp
+++ b/Source/WebCore/page/PointerLockController.cpp
@@ -62,6 +62,7 @@ void PointerLockController::requestPointerLock(Element* target)
enqueueEvent(eventNames().webkitpointerlockchangeEvent, target);
m_element = target;
} else if (m_page->chrome()->client()->requestPointerLock()) {
+ m_lockPending = true;
m_element = target;
} else {
enqueueEvent(eventNames().webkitpointerlockerrorEvent, target);
@@ -79,7 +80,7 @@ void PointerLockController::elementRemoved(Element* element)
m_documentOfRemovedElementWhileWaitingForUnlock = m_element->document();
// Set element null immediately to block any future interaction with it
// including mouse events received before the unlock completes.
- m_element = 0;
+ clearElement();
requestPointerUnlock();
}
}
@@ -87,11 +88,16 @@ void PointerLockController::elementRemoved(Element* element)
void PointerLockController::documentDetached(Document* document)
{
if (m_element && m_element->document() == document) {
- m_element = 0;
+ clearElement();
requestPointerUnlock();
}
}
+bool PointerLockController::lockPending() const
+{
+ return m_lockPending;
+}
+
Element* PointerLockController::element() const
{
return m_element.get();
@@ -100,18 +106,19 @@ Element* PointerLockController::element() const
void PointerLockController::didAcquirePointerLock()
{
enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get());
+ m_lockPending = false;
}
void PointerLockController::didNotAcquirePointerLock()
{
enqueueEvent(eventNames().webkitpointerlockerrorEvent, m_element.get());
- m_element = 0;
+ clearElement();
}
void PointerLockController::didLosePointerLock()
{
enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element ? m_element->document() : m_documentOfRemovedElementWhileWaitingForUnlock.get());
- m_element = 0;
+ clearElement();
m_documentOfRemovedElementWhileWaitingForUnlock = 0;
}
@@ -127,6 +134,12 @@ void PointerLockController::dispatchLockedMouseEvent(const PlatformMouseEvent& e
m_element->dispatchMouseEvent(event, eventNames().clickEvent, event.clickCount());
}
+void PointerLockController::clearElement()
+{
+ m_lockPending = false;
+ m_element = 0;
+}
+
void PointerLockController::enqueueEvent(const AtomicString& type, Element* element)
{
if (element)