☠☠ backed out by 1b15f41920c7 ☠ ☠ | |
author | Maksim Lebedev <alessarik@gmail.com> |
Mon, 15 Jun 2015 10:27:00 +0200 | |
changeset 249742 | 1a0729e5b901fa3feac22995169625b1d73b2979 |
parent 249741 | a20ac0cedc1bfc09b82148d35eccf68022b3c1f1 |
child 249743 | 8ce943a30f8051b46b32378f20597214e6d814c8 |
push id | 28936 |
push user | ryanvm@gmail.com |
push date | Fri, 19 Jun 2015 20:34:42 +0000 |
treeherder | mozilla-central@c319f262ce3e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 1151152 |
milestone | 41.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -7072,19 +7072,21 @@ PresShell::HandleEvent(nsIFrame* aFrame, nsPrintfCString warning("%d event is discarded", aEvent->message); NS_WARNING(warning.get()); } #endif nsContentUtils::WarnScriptWasIgnored(GetDocument()); return NS_OK; } - nsIContent* capturingContent = - (aEvent->HasMouseEventMessage() || - aEvent->mClass == eWheelEventClass ? GetCapturingContent() : nullptr); + nsIContent* capturingContent = ((aEvent->mClass == ePointerEventClass || + aEvent->mClass == eWheelEventClass || + aEvent->HasMouseEventMessage()) + ? GetCapturingContent() + : nullptr); nsCOMPtr<nsIDocument> retargetEventDoc; if (!aDontRetargetEvents) { // key and IME related events should not cross top level window boundary. // Basically, such input events should be fired only on focused widget. // However, some IMEs might need to clean up composition after focused // window is deactivated. And also some tests on MozMill want to test key // handling on deactivated window because MozMill window can be activated @@ -7482,29 +7484,29 @@ PresShell::HandleEvent(nsIFrame* aFrame, // EventStateManager of the current PresContext. // If that is the case, and mouse is over some ancestor document, // forward event handling to the active document. // This way content can get mouse events even when // mouse is over the chrome or outside the window. // // Note, currently for backwards compatibility we don't forward mouse events // to the active document when mouse is over some subdocument. - EventStateManager* activeESM = - EventStateManager::GetActiveEventStateManager(); - if (activeESM && aEvent->HasMouseEventMessage() && - activeESM != shell->GetPresContext()->EventStateManager() && - static_cast<EventStateManager*>(activeESM)->GetPresContext()) { - nsIPresShell* activeShell = - static_cast<EventStateManager*>(activeESM)->GetPresContext()-> - GetPresShell(); - if (activeShell && - nsContentUtils::ContentIsCrossDocDescendantOf(activeShell->GetDocument(), - shell->GetDocument())) { - shell = static_cast<PresShell*>(activeShell); - frame = shell->GetRootFrame(); + if (EventStateManager* activeESM = EventStateManager::GetActiveEventStateManager()) { + if (aEvent->mClass == ePointerEventClass || aEvent->HasMouseEventMessage()) { + if (activeESM != shell->GetPresContext()->EventStateManager()) { + if (nsPresContext* activeContext = activeESM->GetPresContext()) { + if (nsIPresShell* activeShell = activeContext->GetPresShell()) { + if (nsContentUtils::ContentIsCrossDocDescendantOf(activeShell->GetDocument(), + shell->GetDocument())) { + shell = static_cast<PresShell*>(activeShell); + frame = shell->GetRootFrame(); + } + } + } + } } } // Before HandlePositionedEvent we should save mPointerEventTarget in some cases nsWeakFrame weakFrame; if (sPointerEventEnabled && aTargetContent && ePointerEventClass == aEvent->mClass) { weakFrame = frame; shell->mPointerEventTarget = frame->GetContent();