author | Maksim Lebedev <alessarik@gmail.com> |
Fri, 22 May 2015 02:00:00 -0400 | |
changeset 245488 | f40854954ae00a3df5e57fa099bcc405c662adcc |
parent 245487 | 5b10bbf31fe5bcbe96f1a5009654ad441caa1879 |
child 245489 | a3d6ad2faa3a74eed953d72f003ba2b9be99d176 |
push id | 28806 |
push user | philringnalda@gmail.com |
push date | Tue, 26 May 2015 02:10:16 +0000 |
treeherder | mozilla-central@4362d9251296 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 1163044 |
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
|
dom/events/EventStateManager.cpp | file | annotate | diff | comparison | revisions | |
dom/ipc/TabParent.cpp | file | annotate | diff | comparison | revisions |
--- a/dom/events/EventStateManager.cpp +++ b/dom/events/EventStateManager.cpp @@ -575,28 +575,41 @@ EventStateManager::PreHandleEvent(nsPres // then fall through... case WidgetMouseEvent::eRightButton: case WidgetMouseEvent::eMiddleButton: SetClickCount(aPresContext, mouseEvent, aStatus); break; } break; } + case NS_MOUSE_ENTER_WIDGET: + // In some cases on e10s NS_MOUSE_ENTER_WIDGET + // event was sent twice into child process of content. + // (From specific widget code (sending is not permanent) and + // from ESM::DispatchMouseOrPointerEvent (sending is permanent)). + // Flag mNoCrossProcessBoundaryForwarding helps to + // suppress sending accidental event from widget code. + aEvent->mFlags.mNoCrossProcessBoundaryForwarding = true; + break; case NS_MOUSE_EXIT_WIDGET: // If this is a remote frame, we receive NS_MOUSE_EXIT_WIDGET from the parent // the mouse exits our content. Since the parent may update the cursor // while the mouse is outside our frame, and since PuppetWidget caches the // current cursor internally, re-entering our content (say from over a // window edge) wont update the cursor if the cached value and the current // cursor match. So when the mouse exits a remote frame, clear the cached // widget cursor so a proper update will occur when the mouse re-enters. if (XRE_GetProcessType() == GeckoProcessType_Content) { ClearCachedWidgetCursor(mCurrentTarget); } + // Flag helps to suppress double event sending into process of content. + // For more information see comment above, at NS_MOUSE_ENTER_WIDGET case. + aEvent->mFlags.mNoCrossProcessBoundaryForwarding = true; + // If the event is not a top-level window exit, then it's not // really an exit --- we may have traversed widget boundaries but // we're still in our toplevel window. if (mouseEvent->exit != WidgetMouseEvent::eTopLevel) { // Treat it as a synthetic move so we don't generate spurious // "exit" or "move" events. Any necessary "out" or "over" events // will be generated by GenerateMouseEnterExit mouseEvent->message = NS_MOUSE_MOVE; @@ -1178,17 +1191,16 @@ CrossProcessSafeEvent(const WidgetEvent& case eMouseEventClass: switch (aEvent.message) { case NS_MOUSE_BUTTON_DOWN: case NS_MOUSE_BUTTON_UP: case NS_MOUSE_MOVE: case NS_CONTEXTMENU: case NS_MOUSE_ENTER_WIDGET: case NS_MOUSE_EXIT_WIDGET: - case NS_MOUSE_OVER: return true; default: return false; } case eTouchEventClass: switch (aEvent.message) { case NS_TOUCH_START: case NS_TOUCH_MOVE:
--- a/dom/ipc/TabParent.cpp +++ b/dom/ipc/TabParent.cpp @@ -1221,35 +1221,31 @@ bool TabParent::SendRealMouseEvent(Widge { if (mIsDestroyed) { return false; } event.refPoint += GetChildProcessOffset(); nsCOMPtr<nsIWidget> widget = GetWidget(); if (widget) { - // When we mouseenter the tab, the tab's cursor should become the current - // cursor. When we mouseexit, we stop. - if (event.message == NS_MOUSE_ENTER_WIDGET || - event.message == NS_MOUSE_OVER) { + // When we mouseenter the tab, the tab's cursor should + // become the current cursor. When we mouseexit, we stop. + if (NS_MOUSE_ENTER_WIDGET == event.message) { mTabSetsCursor = true; if (mCustomCursor) { widget->SetCursor(mCustomCursor, mCustomCursorHotspotX, mCustomCursorHotspotY); } else if (mCursor != nsCursor(-1)) { widget->SetCursor(mCursor); } - // We don't actually want to forward NS_MOUSE_ENTER_WIDGET messages. - return true; - } else if (event.message == NS_MOUSE_EXIT_WIDGET || - event.message == NS_MOUSE_OUT) { + } else if (NS_MOUSE_EXIT_WIDGET == event.message) { mTabSetsCursor = false; } } - if (event.message == NS_MOUSE_MOVE) { + if (NS_MOUSE_MOVE == event.message) { return SendRealMouseMoveEvent(event); } return SendRealMouseButtonEvent(event); } LayoutDeviceToCSSScale TabParent::GetLayoutDeviceToCSSScale() {