author | Stone Shih <sshih@mozilla.com> |
Tue, 06 Sep 2016 14:30:00 +0800 | |
changeset 313839 | be466c64f9c0874ba95432d0841cbd1887ea4fb5 |
parent 313838 | b7fb2f70176a0507c6f00d25430bf5eca98fbbf6 |
child 313840 | 4bba6c0a00db9aae2ff285df40b547575a3f997c |
push id | 32264 |
push user | cbook@mozilla.com |
push date | Wed, 14 Sep 2016 10:18:20 +0000 |
treeherder | autoland@b9c4a0402a0a [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 1297635 |
milestone | 51.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/dom/html/HTMLInputElement.cpp +++ b/dom/html/HTMLInputElement.cpp @@ -4123,16 +4123,27 @@ HTMLInputElement::MaybeInitPickers(Event } if (mType == NS_FORM_INPUT_DATE) { return InitDatePicker(); } return NS_OK; } +/** + * Return true if the input event should be ignore because of it's modifiers + */ +static bool +IgnoreInputEventWithModifier(WidgetInputEvent* aEvent) +{ + return aEvent->IsShift() || aEvent->IsControl() || aEvent->IsAlt() || + aEvent->IsMeta() || aEvent->IsAltGraph() || aEvent->IsFn() || + aEvent->IsOS(); +} + nsresult HTMLInputElement::PostHandleEvent(EventChainPostVisitor& aVisitor) { if (!aVisitor.mPresContext) { // Hack alert! In order to open file picker even in case the element isn't // in document, try to init picker even without PresContext. return MaybeInitPickers(aVisitor); } @@ -4269,20 +4280,17 @@ HTMLInputElement::PostHandleEvent(EventC } if (NS_SUCCEEDED(rv)) { WidgetKeyboardEvent* keyEvent = aVisitor.mEvent->AsKeyboardEvent(); if (mType == NS_FORM_INPUT_NUMBER && keyEvent && keyEvent->mMessage == eKeyPress && aVisitor.mEvent->IsTrusted() && (keyEvent->mKeyCode == NS_VK_UP || keyEvent->mKeyCode == NS_VK_DOWN) && - !(keyEvent->IsShift() || keyEvent->IsControl() || - keyEvent->IsAlt() || keyEvent->IsMeta() || - keyEvent->IsAltGraph() || keyEvent->IsFn() || - keyEvent->IsOS())) { + !IgnoreInputEventWithModifier(keyEvent)) { // We handle the up/down arrow keys specially for <input type=number>. // On some platforms the editor for the nested text control will // process these keys to send the cursor to the start/end of the text // control and as a result aVisitor.mEventStatus will already have been // set to nsEventStatus_eConsumeNoDefault. However, we know that // whenever the up/down arrow keys cause the value of the number // control to change the string in the text control will change, and // the cursor will be moved to the end of the text control, overwriting @@ -4491,20 +4499,17 @@ HTMLInputElement::PostHandleEvent(EventC aVisitor.mDOMEvent->StopPropagation(); } else { rv = NS_ERROR_FAILURE; } } } if (mType == NS_FORM_INPUT_NUMBER && aVisitor.mEvent->IsTrusted()) { if (mouseEvent->button == WidgetMouseEvent::eLeftButton && - !(mouseEvent->IsShift() || mouseEvent->IsControl() || - mouseEvent->IsAlt() || mouseEvent->IsMeta() || - mouseEvent->IsAltGraph() || mouseEvent->IsFn() || - mouseEvent->IsOS())) { + !IgnoreInputEventWithModifier(mouseEvent)) { nsNumberControlFrame* numberControlFrame = do_QueryFrame(GetPrimaryFrame()); if (numberControlFrame) { if (aVisitor.mEvent->mMessage == eMouseDown && IsMutable()) { switch (numberControlFrame->GetSpinButtonForPointerEvent( aVisitor.mEvent->AsMouseEvent())) { case nsNumberControlFrame::eSpinButtonUp: @@ -4657,20 +4662,17 @@ HTMLInputElement::PostHandleEventForRang case eTouchStart: { if (mIsDraggingRange) { break; } if (nsIPresShell::GetCapturingContent()) { break; // don't start drag if someone else is already capturing } WidgetInputEvent* inputEvent = aVisitor.mEvent->AsInputEvent(); - if (inputEvent->IsShift() || inputEvent->IsControl() || - inputEvent->IsAlt() || inputEvent->IsMeta() || - inputEvent->IsAltGraph() || inputEvent->IsFn() || - inputEvent->IsOS()) { + if (IgnoreInputEventWithModifier(inputEvent)) { break; // ignore } if (aVisitor.mEvent->mMessage == eMouseDown) { if (aVisitor.mEvent->AsMouseEvent()->buttons == WidgetMouseEvent::eLeftButtonFlag) { StartRangeThumbDrag(inputEvent); } else if (mIsDraggingRange) { CancelRangeThumbDrag();