summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/PointerLockController.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-06-20 13:01:08 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-06-20 13:01:08 +0200
commit49233e234e5c787396cadb2cea33b31ae0cd65c1 (patch)
tree5410cb9a8fd53168bb60d62c54b654d86f03c38d /Source/WebCore/page/PointerLockController.cpp
parentb211c645d8ab690f713515dfdc84d80b11c27d2c (diff)
downloadqtwebkit-49233e234e5c787396cadb2cea33b31ae0cd65c1.tar.gz
Imported WebKit commit 3a8c29f35d00659d2ce7a0ccdfa8304f14e82327 (http://svn.webkit.org/repository/webkit/trunk@120813)
New snapshot with Windows build fixes
Diffstat (limited to 'Source/WebCore/page/PointerLockController.cpp')
-rw-r--r--Source/WebCore/page/PointerLockController.cpp48
1 files changed, 44 insertions, 4 deletions
diff --git a/Source/WebCore/page/PointerLockController.cpp b/Source/WebCore/page/PointerLockController.cpp
index b8ad968e3..5c70dcf78 100644
--- a/Source/WebCore/page/PointerLockController.cpp
+++ b/Source/WebCore/page/PointerLockController.cpp
@@ -48,12 +48,21 @@ PassOwnPtr<PointerLockController> PointerLockController::create(Page* page)
void PointerLockController::requestPointerLock(Element* target, PassRefPtr<VoidCallback> successCallback, PassRefPtr<VoidCallback> failureCallback)
{
+ if (!target)
+ return;
+
if (isLocked()) {
+ // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
+ enqueueEvent(eventNames().webkitpointerlockchangeEvent, target);
+ if (m_element->document() != target->document())
+ enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get());
+
+ // FIXME: Remove callback usage, keep assignment of m_element = target. (https://bugs.webkit.org/show_bug.cgi?id=84402)
if (m_element == target) {
if (successCallback)
successCallback->handleEvent();
} else {
- didLosePointerLock();
+ didLosePointerLock(false);
m_element = target;
if (successCallback)
successCallback->handleEvent();
@@ -62,8 +71,14 @@ void PointerLockController::requestPointerLock(Element* target, PassRefPtr<VoidC
m_element = target;
m_successCallback = successCallback;
m_failureCallback = failureCallback;
- } else if (failureCallback)
- failureCallback->handleEvent();
+ } else {
+ // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
+ enqueueEvent(eventNames().webkitpointerlockerrorEvent, target);
+
+ // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
+ if (failureCallback)
+ failureCallback->handleEvent();
+ }
}
void PointerLockController::requestPointerUnlock()
@@ -76,8 +91,17 @@ bool PointerLockController::isLocked()
return m_page->chrome()->client()->isPointerLocked();
}
+Element* PointerLockController::element() const
+{
+ return m_element.get();
+}
+
void PointerLockController::didAcquirePointerLock()
{
+ // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
+ enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get());
+
+ // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
RefPtr<Element> elementToNotify(m_element);
RefPtr<VoidCallback> callbackToIssue(m_successCallback);
m_successCallback = 0;
@@ -89,6 +113,10 @@ void PointerLockController::didAcquirePointerLock()
void PointerLockController::didNotAcquirePointerLock()
{
+ // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
+ enqueueEvent(eventNames().webkitpointerlockerrorEvent, m_element.get());
+
+ // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
RefPtr<Element> elementToNotify(m_element);
RefPtr<VoidCallback> callbackToIssue(m_failureCallback);
m_element = 0;
@@ -99,8 +127,13 @@ void PointerLockController::didNotAcquirePointerLock()
callbackToIssue->handleEvent();
}
-void PointerLockController::didLosePointerLock()
+void PointerLockController::didLosePointerLock(bool sendChangeEvent)
{
+ // FIXME: Keep enqueueEvent usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
+ if (sendChangeEvent)
+ enqueueEvent(eventNames().webkitpointerlockchangeEvent, m_element.get());
+
+ // FIXME: Remove callback usage. (https://bugs.webkit.org/show_bug.cgi?id=84402)
RefPtr<Element> elementToNotify(m_element);
m_element = 0;
m_successCallback = 0;
@@ -121,6 +154,13 @@ void PointerLockController::dispatchLockedMouseEvent(const PlatformMouseEvent& e
m_element->dispatchMouseEvent(event, eventNames().clickEvent, event.clickCount());
}
+void PointerLockController::enqueueEvent(const AtomicString& type, Element* element)
+{
+ if (!element)
+ return;
+ element->document()->enqueueDocumentEvent(Event::create(type, true, false));
+}
+
} // namespace WebCore
#endif // ENABLE(POINTER_LOCK)