зеркало из https://github.com/mozilla/gecko-dev.git
Bug 731878 part.2 Implement D3E MouseEvent.buttons attribute r=smaug, sr=jst
This commit is contained in:
Родитель
ef84db57cf
Коммит
3659544533
|
@ -695,6 +695,7 @@ NS_METHOD nsDOMEvent::DuplicatePrivateData()
|
|||
mouseEvent->context = oldMouseEvent->context;
|
||||
mouseEvent->relatedTarget = oldMouseEvent->relatedTarget;
|
||||
mouseEvent->button = oldMouseEvent->button;
|
||||
mouseEvent->buttons = oldMouseEvent->buttons;
|
||||
mouseEvent->modifiers = oldMouseEvent->modifiers;
|
||||
mouseEvent->pressure = oldMouseEvent->pressure;
|
||||
mouseEvent->inputSource = oldMouseEvent->inputSource;
|
||||
|
@ -713,6 +714,7 @@ NS_METHOD nsDOMEvent::DuplicatePrivateData()
|
|||
dragEvent->acceptActivation = oldDragEvent->acceptActivation;
|
||||
dragEvent->relatedTarget = oldDragEvent->relatedTarget;
|
||||
dragEvent->button = oldDragEvent->button;
|
||||
dragEvent->buttons = oldDragEvent->buttons;
|
||||
dragEvent->modifiers = oldDragEvent->modifiers;
|
||||
static_cast<nsMouseEvent*>(dragEvent)->inputSource =
|
||||
static_cast<nsMouseEvent*>(oldDragEvent)->inputSource;
|
||||
|
@ -755,6 +757,7 @@ NS_METHOD nsDOMEvent::DuplicatePrivateData()
|
|||
mouseScrollEvent->delta = oldMouseScrollEvent->delta;
|
||||
mouseScrollEvent->relatedTarget = oldMouseScrollEvent->relatedTarget;
|
||||
mouseScrollEvent->button = oldMouseScrollEvent->button;
|
||||
mouseScrollEvent->buttons = oldMouseScrollEvent->buttons;
|
||||
mouseScrollEvent->modifiers = oldMouseScrollEvent->modifiers;
|
||||
static_cast<nsMouseEvent_base*>(mouseScrollEvent)->inputSource =
|
||||
static_cast<nsMouseEvent_base*>(oldMouseScrollEvent)->inputSource;
|
||||
|
@ -901,6 +904,7 @@ NS_METHOD nsDOMEvent::DuplicatePrivateData()
|
|||
NS_ENSURE_TRUE(mozTouchEvent, NS_ERROR_OUT_OF_MEMORY);
|
||||
isInputEvent = true;
|
||||
mozTouchEvent->modifiers = oldMozTouchEvent->modifiers;
|
||||
mozTouchEvent->buttons = oldMozTouchEvent->buttons;
|
||||
newEvent = mozTouchEvent;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -193,11 +193,26 @@ nsDOMMouseEvent::InitFromCtor(const nsAString& aType,
|
|||
mozilla::dom::MouseEventInit d;
|
||||
nsresult rv = d.Init(aCx, aVal);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return InitMouseEvent(aType, d.bubbles, d.cancelable,
|
||||
d.view, d.detail, d.screenX, d.screenY,
|
||||
d.clientX, d.clientY,
|
||||
d.ctrlKey, d.altKey, d.shiftKey, d.metaKey,
|
||||
d.button, d.relatedTarget);
|
||||
rv = InitMouseEvent(aType, d.bubbles, d.cancelable,
|
||||
d.view, d.detail, d.screenX, d.screenY,
|
||||
d.clientX, d.clientY,
|
||||
d.ctrlKey, d.altKey, d.shiftKey, d.metaKey,
|
||||
d.button, d.relatedTarget);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
switch(mEvent->eventStructType) {
|
||||
case NS_MOUSE_EVENT:
|
||||
case NS_MOUSE_SCROLL_EVENT:
|
||||
case NS_DRAG_EVENT:
|
||||
case NS_SIMPLE_GESTURE_EVENT:
|
||||
case NS_MOZTOUCH_EVENT:
|
||||
static_cast<nsMouseEvent_base*>(mEvent)->buttons = d.buttons;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -240,6 +255,27 @@ nsDOMMouseEvent::GetButton(PRUint16* aButton)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMMouseEvent::GetButtons(PRUint16* aButtons)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aButtons);
|
||||
switch(mEvent->eventStructType)
|
||||
{
|
||||
case NS_MOUSE_EVENT:
|
||||
case NS_MOUSE_SCROLL_EVENT:
|
||||
case NS_DRAG_EVENT:
|
||||
case NS_SIMPLE_GESTURE_EVENT:
|
||||
case NS_MOZTOUCH_EVENT:
|
||||
*aButtons = static_cast<nsMouseEvent_base*>(mEvent)->buttons;
|
||||
break;
|
||||
default:
|
||||
MOZ_NOT_REACHED("Tried to get mouse buttons for non-mouse event!");
|
||||
*aButtons = 0;
|
||||
break;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMMouseEvent::GetRelatedTarget(nsIDOMEventTarget** aRelatedTarget)
|
||||
{
|
||||
|
|
|
@ -2009,6 +2009,7 @@ nsEventStateManager::BeginTrackingDragGesture(nsPresContext* aPresContext,
|
|||
mGestureDownAlt = inDownEvent->isAlt;
|
||||
mGestureDownMeta = inDownEvent->isMeta;
|
||||
mGestureModifiers = inDownEvent->modifiers;
|
||||
mGestureDownButtons = inDownEvent->buttons;
|
||||
|
||||
if (mClickHoldContextMenu) {
|
||||
// fire off a timer to track click-hold
|
||||
|
@ -2046,6 +2047,7 @@ nsEventStateManager::FillInEventFromGestureDown(nsMouseEvent* aEvent)
|
|||
aEvent->isAlt = mGestureDownAlt;
|
||||
aEvent->isMeta = mGestureDownMeta;
|
||||
aEvent->modifiers = mGestureModifiers;
|
||||
aEvent->buttons = mGestureDownButtons;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -2580,6 +2582,7 @@ nsEventStateManager::SendLineScrollEvent(nsIFrame* aTargetFrame,
|
|||
event.isAlt = aEvent->isAlt;
|
||||
event.isMeta = aEvent->isMeta;
|
||||
event.modifiers = aEvent->modifiers;
|
||||
event.buttons = aEvent->buttons;
|
||||
event.scrollFlags = aEvent->scrollFlags;
|
||||
event.delta = aNumLines;
|
||||
event.inputSource = static_cast<nsMouseEvent_base*>(aEvent)->inputSource;
|
||||
|
@ -2616,6 +2619,7 @@ nsEventStateManager::SendPixelScrollEvent(nsIFrame* aTargetFrame,
|
|||
event.isAlt = aEvent->isAlt;
|
||||
event.isMeta = aEvent->isMeta;
|
||||
event.modifiers = aEvent->modifiers;
|
||||
event.buttons = aEvent->buttons;
|
||||
event.scrollFlags = aEvent->scrollFlags;
|
||||
event.inputSource = static_cast<nsMouseEvent_base*>(aEvent)->inputSource;
|
||||
event.delta = aPresContext->AppUnitsToIntCSSPixels(aEvent->delta * lineHeight);
|
||||
|
@ -3416,6 +3420,7 @@ nsEventStateManager::PostHandleEvent(nsPresContext* aPresContext,
|
|||
event.isAlt = mouseEvent->isAlt;
|
||||
event.isMeta = mouseEvent->isMeta;
|
||||
event.modifiers = mouseEvent->modifiers;
|
||||
event.buttons = mouseEvent->buttons;
|
||||
event.inputSource = mouseEvent->inputSource;
|
||||
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
|
@ -3842,6 +3847,7 @@ nsEventStateManager::DispatchMouseEvent(nsGUIEvent* aEvent, PRUint32 aMessage,
|
|||
event.isAlt = ((nsMouseEvent*)aEvent)->isAlt;
|
||||
event.isMeta = ((nsMouseEvent*)aEvent)->isMeta;
|
||||
event.modifiers = ((nsMouseEvent*)aEvent)->modifiers;
|
||||
event.buttons = ((nsMouseEvent*)aEvent)->buttons;
|
||||
event.pluginEvent = ((nsMouseEvent*)aEvent)->pluginEvent;
|
||||
event.relatedTarget = aRelatedContent;
|
||||
event.inputSource = static_cast<nsMouseEvent*>(aEvent)->inputSource;
|
||||
|
@ -4256,6 +4262,7 @@ nsEventStateManager::FireDragEnterOrExit(nsPresContext* aPresContext,
|
|||
event.isAlt = ((nsMouseEvent*)aEvent)->isAlt;
|
||||
event.isMeta = ((nsMouseEvent*)aEvent)->isMeta;
|
||||
event.modifiers = ((nsMouseEvent*)aEvent)->modifiers;
|
||||
event.buttons = ((nsMouseEvent*)aEvent)->buttons;
|
||||
event.relatedTarget = aRelatedTarget;
|
||||
event.inputSource = static_cast<nsMouseEvent*>(aEvent)->inputSource;
|
||||
|
||||
|
@ -4419,6 +4426,7 @@ nsEventStateManager::CheckForAndDispatchClick(nsPresContext* aPresContext,
|
|||
event.isAlt = aEvent->isAlt;
|
||||
event.isMeta = aEvent->isMeta;
|
||||
event.modifiers = aEvent->modifiers;
|
||||
event.buttons = aEvent->buttons;
|
||||
event.time = aEvent->time;
|
||||
event.flags |= flags;
|
||||
event.button = aEvent->button;
|
||||
|
@ -4441,6 +4449,7 @@ nsEventStateManager::CheckForAndDispatchClick(nsPresContext* aPresContext,
|
|||
event2.isAlt = aEvent->isAlt;
|
||||
event2.isMeta = aEvent->isMeta;
|
||||
event2.modifiers = aEvent->modifiers;
|
||||
event2.buttons = aEvent->buttons;
|
||||
event2.flags |= flags;
|
||||
event2.button = aEvent->button;
|
||||
event2.inputSource = aEvent->inputSource;
|
||||
|
@ -5044,6 +5053,7 @@ nsEventStateManager::DoQueryScrollTargetInfo(nsQueryContentEvent* aEvent,
|
|||
msEvent.isAlt = aEvent->mInput.mMouseScrollEvent->isAlt;
|
||||
msEvent.isMeta = aEvent->mInput.mMouseScrollEvent->isMeta;
|
||||
msEvent.modifiers = aEvent->mInput.mMouseScrollEvent->modifiers;
|
||||
msEvent.buttons = aEvent->mInput.mMouseScrollEvent->buttons;
|
||||
|
||||
msEvent.scrollFlags = aEvent->mInput.mMouseScrollEvent->scrollFlags;
|
||||
msEvent.delta = ComputeWheelDeltaFor(aEvent->mInput.mMouseScrollEvent);
|
||||
|
|
|
@ -511,6 +511,7 @@ private:
|
|||
bool mGestureDownAlt;
|
||||
bool mGestureDownMeta;
|
||||
mozilla::widget::Modifiers mGestureModifiers;
|
||||
PRUint16 mGestureDownButtons;
|
||||
|
||||
nsCOMPtr<nsIContent> mLastLeftMouseDownContent;
|
||||
nsCOMPtr<nsIContent> mLastLeftMouseDownContentParent;
|
||||
|
|
|
@ -395,6 +395,7 @@ var mouseEventProps =
|
|||
{ altKey: false },
|
||||
{ metaKey: false },
|
||||
{ button: 0 },
|
||||
{ buttons: 0 },
|
||||
{ relatedTarget: null }
|
||||
];
|
||||
|
||||
|
@ -409,6 +410,7 @@ var testProps =
|
|||
{ altKey: true },
|
||||
{ metaKey: true },
|
||||
{ button: 5 },
|
||||
{ buttons: 6 },
|
||||
{ relatedTarget: window }
|
||||
];
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
interface nsIDOMDataTransfer;
|
||||
|
||||
[scriptable, uuid(74fb5f01-e473-4302-93f5-6f74bdaaddf2)]
|
||||
[scriptable, uuid(54cbd977-dae1-41ae-a155-a5ee5a5c6985)]
|
||||
interface nsIDOMDragEvent : nsIDOMMouseEvent
|
||||
{
|
||||
readonly attribute nsIDOMDataTransfer dataTransfer;
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
* http://www.w3.org/TR/DOM-Level-2-Events/
|
||||
*/
|
||||
|
||||
[scriptable, uuid(53E29996-F851-4032-B896-8AAFBD0BDF25)]
|
||||
[scriptable, uuid(8de83489-863a-4377-8ce4-f1965c23b8c7)]
|
||||
interface nsIDOMMouseEvent : nsIDOMUIEvent
|
||||
{
|
||||
readonly attribute long screenX;
|
||||
|
@ -66,6 +66,7 @@ interface nsIDOMMouseEvent : nsIDOMUIEvent
|
|||
readonly attribute boolean metaKey;
|
||||
|
||||
readonly attribute unsigned short button;
|
||||
readonly attribute unsigned short buttons;
|
||||
readonly attribute nsIDOMEventTarget relatedTarget;
|
||||
|
||||
void initMouseEvent(in DOMString typeArg,
|
||||
|
@ -128,6 +129,6 @@ dictionary MouseEventInit : UIEventInit
|
|||
boolean altKey;
|
||||
boolean metaKey;
|
||||
unsigned short button;
|
||||
// unsigned short buttons; is not supported yet.
|
||||
unsigned short buttons;
|
||||
nsIDOMEventTarget relatedTarget;
|
||||
};
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#include "nsIDOMMouseEvent.idl"
|
||||
|
||||
[scriptable, uuid(159f24b9-2058-40b9-b5bc-6477d192955a)]
|
||||
[scriptable, uuid(E9CF55A5-0436-4F8B-91B6-7C14115B5033)]
|
||||
interface nsIDOMMouseScrollEvent : nsIDOMMouseEvent
|
||||
{
|
||||
const long HORIZONTAL_AXIS = 1;
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include "nsIDOMMouseEvent.idl"
|
||||
|
||||
|
||||
[scriptable, uuid(268da07b-4c41-4deb-96a2-10985644e6b0)]
|
||||
[scriptable, uuid(0830197e-952c-4413-be83-a94e08f4f321)]
|
||||
interface nsIDOMMozTouchEvent : nsIDOMMouseEvent
|
||||
{
|
||||
readonly attribute unsigned long streamId;
|
||||
|
|
|
@ -97,7 +97,7 @@
|
|||
* consuming events.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(e9bdcc53-1bc0-4cae-9eb3-b215b6be7f70)]
|
||||
[scriptable, uuid(3aa7b4e8-b7a2-4e42-963d-b6d157eac1cd)]
|
||||
interface nsIDOMSimpleGestureEvent : nsIDOMMouseEvent
|
||||
{
|
||||
/* Swipe direction constants */
|
||||
|
|
|
@ -863,14 +863,15 @@ public:
|
|||
}
|
||||
|
||||
nsMouseEvent_base(bool isTrusted, PRUint32 msg, nsIWidget *w, PRUint8 type)
|
||||
: nsInputEvent(isTrusted, msg, w, type), button(0), modifiers(0),
|
||||
pressure(0), inputSource(nsIDOMMouseEvent::MOZ_SOURCE_MOUSE) {}
|
||||
: nsInputEvent(isTrusted, msg, w, type), button(0), buttons(0),
|
||||
modifiers(0), pressure(0),
|
||||
inputSource(nsIDOMMouseEvent::MOZ_SOURCE_MOUSE) {}
|
||||
|
||||
/// The possible related target
|
||||
nsCOMPtr<nsISupports> relatedTarget;
|
||||
|
||||
PRInt16 button;
|
||||
|
||||
PRInt16 buttons;
|
||||
mozilla::widget::Modifiers modifiers;
|
||||
|
||||
// Finger or touch pressure of event
|
||||
|
@ -889,6 +890,15 @@ private:
|
|||
|
||||
public:
|
||||
enum buttonType { eLeftButton = 0, eMiddleButton = 1, eRightButton = 2 };
|
||||
enum buttonsFlag { eLeftButtonFlag = 0x01,
|
||||
eRightButtonFlag = 0x02,
|
||||
eMiddleButtonFlag = 0x04,
|
||||
// typicall, "back" button being left side of 5-button
|
||||
// mice, see "buttons" attribute document of DOM3 Events.
|
||||
e4thButtonFlag = 0x08,
|
||||
// typicall, "forward" button being right side of 5-button
|
||||
// mice, see "buttons" attribute document of DOM3 Events.
|
||||
e5thButtonFlag = 0x10 };
|
||||
enum reasonType { eReal, eSynthesized };
|
||||
enum contextType { eNormal, eContextMenuKey };
|
||||
enum exitType { eChild, eTopLevel };
|
||||
|
|
|
@ -118,6 +118,7 @@ struct ParamTraits<nsMouseEvent_base>
|
|||
{
|
||||
WriteParam(aMsg, static_cast<nsInputEvent>(aParam));
|
||||
WriteParam(aMsg, aParam.button);
|
||||
WriteParam(aMsg, aParam.buttons);
|
||||
WriteParam(aMsg, aParam.modifiers);
|
||||
WriteParam(aMsg, aParam.pressure);
|
||||
WriteParam(aMsg, aParam.inputSource);
|
||||
|
@ -127,6 +128,7 @@ struct ParamTraits<nsMouseEvent_base>
|
|||
{
|
||||
return ReadParam(aMsg, aIter, static_cast<nsInputEvent*>(aResult)) &&
|
||||
ReadParam(aMsg, aIter, &aResult->button) &&
|
||||
ReadParam(aMsg, aIter, &aResult->buttons) &&
|
||||
ReadParam(aMsg, aIter, &aResult->modifiers) &&
|
||||
ReadParam(aMsg, aIter, &aResult->pressure) &&
|
||||
ReadParam(aMsg, aIter, &aResult->inputSource);
|
||||
|
|
Загрузка…
Ссылка в новой задаче