diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-20 13:01:08 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-20 13:01:08 +0200 |
commit | 49233e234e5c787396cadb2cea33b31ae0cd65c1 (patch) | |
tree | 5410cb9a8fd53168bb60d62c54b654d86f03c38d /Source/WebCore/page/PointerLockController.cpp | |
parent | b211c645d8ab690f713515dfdc84d80b11c27d2c (diff) | |
download | qtwebkit-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.cpp | 48 |
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) |