mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 813445 part.3 Remove NS_EVENT_FLAG_CANT_CANCEL and NS_EVENT_FLAG_CANT_BUBBLE r=smaug
This commit is contained in:
parent
06dbf6211e
commit
2c9891bdd2
@ -59,10 +59,8 @@ nsScriptElement::ScriptEvaluated(nsresult aResult,
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
uint32_t type = NS_SUCCEEDED(aResult) ? NS_LOAD : NS_LOAD_ERROR;
|
||||
nsEvent event(true, type);
|
||||
if (type == NS_LOAD) {
|
||||
// Load event doesn't bubble.
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
}
|
||||
event.mFlags.mBubbles = (type != NS_LOAD);
|
||||
|
||||
nsEventDispatcher::Dispatch(cont, presContext, &event, nullptr, &status);
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ public:
|
||||
: nsEvent(isTrusted, msg, NS_MUTATION_EVENT),
|
||||
mAttrChange(0)
|
||||
{
|
||||
flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
mFlags.mCancelable = false;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNode> mRelatedNode;
|
||||
|
@ -24,7 +24,7 @@ nsDOMCompositionEvent::nsDOMCompositionEvent(nsPresContext* aPresContext,
|
||||
// XXX compositionstart is cancelable in draft of DOM3 Events.
|
||||
// However, it doesn't make sence for us, we cannot cancel composition
|
||||
// when we sends compositionstart event.
|
||||
mEvent->flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
mEvent->mFlags.mCancelable = false;
|
||||
}
|
||||
|
||||
mData = static_cast<nsCompositionEvent*>(mEvent)->data;
|
||||
|
@ -340,14 +340,14 @@ nsDOMEvent::GetEventPhase(uint16_t* aEventPhase)
|
||||
NS_IMETHODIMP
|
||||
nsDOMEvent::GetBubbles(bool* aBubbles)
|
||||
{
|
||||
*aBubbles = !(mEvent->flags & NS_EVENT_FLAG_CANT_BUBBLE);
|
||||
*aBubbles = mEvent->mFlags.mBubbles;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMEvent::GetCancelable(bool* aCancelable)
|
||||
{
|
||||
*aCancelable = !(mEvent->flags & NS_EVENT_FLAG_CANT_CANCEL);
|
||||
*aCancelable = mEvent->mFlags.mCancelable;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -427,7 +427,7 @@ nsDOMEvent::GetIsTrusted(bool *aIsTrusted)
|
||||
NS_IMETHODIMP
|
||||
nsDOMEvent::PreventDefault()
|
||||
{
|
||||
if (!(mEvent->flags & NS_EVENT_FLAG_CANT_CANCEL)) {
|
||||
if (mEvent->mFlags.mCancelable) {
|
||||
mEvent->flags |= NS_EVENT_FLAG_NO_DEFAULT;
|
||||
|
||||
// Need to set an extra flag for drag events.
|
||||
@ -471,17 +471,8 @@ nsDOMEvent::InitEvent(const nsAString& aEventTypeArg, bool aCanBubbleArg, bool a
|
||||
|
||||
SetEventType(aEventTypeArg);
|
||||
|
||||
if (aCanBubbleArg) {
|
||||
mEvent->flags &= ~NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
} else {
|
||||
mEvent->flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
}
|
||||
|
||||
if (aCancelableArg) {
|
||||
mEvent->flags &= ~NS_EVENT_FLAG_CANT_CANCEL;
|
||||
} else {
|
||||
mEvent->flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
}
|
||||
mEvent->mFlags.mBubbles = aCanBubbleArg;
|
||||
mEvent->mFlags.mCancelable = aCancelableArg;
|
||||
|
||||
// Clearing the old targets, so that the event is targeted correctly when
|
||||
// re-dispatching it.
|
||||
|
@ -330,7 +330,7 @@ nsEventTargetChainItem::HandleEventTargetChain(nsEventChainPostVisitor& aVisitor
|
||||
aVisitor.mEvent->target = newTarget;
|
||||
}
|
||||
|
||||
if (!(aVisitor.mEvent->flags & NS_EVENT_FLAG_CANT_BUBBLE) || newTarget) {
|
||||
if (aVisitor.mEvent->mFlags.mBubbles || newTarget) {
|
||||
if ((!(aVisitor.mEvent->flags & NS_EVENT_FLAG_NO_CONTENT_DISPATCH) ||
|
||||
item->ForceContentDispatch()) &&
|
||||
!(aVisitor.mEvent->flags & NS_EVENT_FLAG_STOP_DISPATCH)) {
|
||||
|
@ -86,7 +86,8 @@ nsHTMLMenuElement::SendShowEvent()
|
||||
}
|
||||
|
||||
nsEvent event(true, NS_SHOW_EVENT);
|
||||
event.flags |= NS_EVENT_FLAG_CANT_CANCEL | NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
event.mFlags.mCancelable = false;
|
||||
|
||||
nsCOMPtr<nsIPresShell> shell = document->GetShell();
|
||||
if (!shell) {
|
||||
|
@ -25,8 +25,8 @@ nsDOMTimeEvent::nsDOMTimeEvent(nsPresContext* aPresContext, nsEvent* aEvent)
|
||||
mDetail = event->detail;
|
||||
}
|
||||
|
||||
mEvent->flags |= NS_EVENT_FLAG_CANT_BUBBLE |
|
||||
NS_EVENT_FLAG_CANT_CANCEL;
|
||||
mEvent->mFlags.mBubbles = false;
|
||||
mEvent->mFlags.mCancelable = false;
|
||||
|
||||
if (mPresContext) {
|
||||
nsCOMPtr<nsISupports> container = mPresContext->GetContainer();
|
||||
|
@ -23,10 +23,9 @@ nsDOMSVGEvent::nsDOMSVGEvent(nsPresContext* aPresContext,
|
||||
mEvent->time = PR_Now();
|
||||
}
|
||||
|
||||
mEvent->flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
if (mEvent->message == NS_SVG_LOAD || mEvent->message == NS_SVG_UNLOAD) {
|
||||
mEvent->flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
}
|
||||
mEvent->mFlags.mCancelable = false;
|
||||
mEvent->mFlags.mBubbles =
|
||||
(mEvent->message != NS_SVG_LOAD && mEvent->message != NS_SVG_UNLOAD);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -32,7 +32,7 @@ nsDOMSVGZoomEvent::nsDOMSVGZoomEvent(nsPresContext* aPresContext,
|
||||
mEvent->time = PR_Now();
|
||||
}
|
||||
|
||||
mEvent->flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
mEvent->mFlags.mCancelable = false;
|
||||
|
||||
// We must store the "Previous" and "New" values before this event is
|
||||
// dispatched. Reading the values from the root 'svg' element after we've
|
||||
|
@ -1862,7 +1862,7 @@ public:
|
||||
NS_IMETHOD Run()
|
||||
{
|
||||
nsFocusEvent event(true, mType);
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
event.fromRaise = mWindowRaised;
|
||||
event.isRefocus = mIsRefocus;
|
||||
return nsEventDispatcher::Dispatch(mTarget, mContext, &event);
|
||||
|
@ -2664,7 +2664,7 @@ nsGlobalWindow::PostHandleEvent(nsEventChainPostVisitor& aVisitor)
|
||||
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsEvent event(aVisitor.mEvent->mFlags.mIsTrusted, NS_LOAD);
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
|
||||
// Most of the time we could get a pres context to pass in here,
|
||||
// but not always (i.e. if this window is not shown there won't
|
||||
|
@ -1819,7 +1819,7 @@ public:
|
||||
}
|
||||
|
||||
nsEvent inputEvent(mIsTrusted, NS_FORM_INPUT);
|
||||
inputEvent.flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
inputEvent.mFlags.mCancelable = false;
|
||||
inputEvent.time = static_cast<uint64_t>(PR_Now() / 1000);
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsresult rv =
|
||||
|
@ -1008,7 +1008,7 @@ nsDocumentViewer::LoadComplete(nsresult aStatus)
|
||||
(NS_SUCCEEDED(aStatus) || aStatus == NS_ERROR_PARSED_DATA_CACHED)) {
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsEvent event(true, NS_LOAD);
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
// XXX Dispatching to |window|, but using |document| as the target.
|
||||
event.target = mDocument;
|
||||
|
||||
@ -1289,7 +1289,7 @@ nsDocumentViewer::PageHide(bool aIsUnload)
|
||||
// Now, fire an Unload event to the document...
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsEvent event(true, NS_PAGE_UNLOAD);
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
// XXX Dispatching to |window|, but using |document| as the target.
|
||||
event.target = mDocument;
|
||||
|
||||
|
@ -2847,7 +2847,7 @@ nsGfxScrollFrameInner::FireScrollEvent()
|
||||
} else {
|
||||
// scroll events fired at elements don't bubble (although scroll events
|
||||
// fired at documents do, to the window)
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
nsEventDispatcher::Dispatch(content, prescontext, &event, nullptr, &status);
|
||||
}
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ nsImageBoxFrameEvent::Run()
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsEvent event(true, mMessage);
|
||||
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
nsEventDispatcher::Dispatch(mContent, pres_context, &event, nullptr, &status);
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -4439,7 +4439,7 @@ nsTreeBodyFrame::FireScrollEvent()
|
||||
mScrollEvent.Forget();
|
||||
nsScrollbarEvent event(true, NS_SCROLL_EVENT, nullptr);
|
||||
// scroll events fired at elements don't bubble
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
nsEventDispatcher::Dispatch(GetContent(), PresContext(), &event);
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ nsHtml5SVGLoadDispatcher::Run()
|
||||
{
|
||||
nsEvent event(true, NS_SVG_LOAD);
|
||||
event.eventStructType = NS_SVG_EVENT;
|
||||
event.flags |= NS_EVENT_FLAG_CANT_BUBBLE;
|
||||
event.mFlags.mBubbles = false;
|
||||
// Do we care about forcing presshell creation if it hasn't happened yet?
|
||||
// That is, should this code flush or something? Does it really matter?
|
||||
// For that matter, do we really want to try getting the prescontext?
|
||||
|
@ -113,8 +113,6 @@ enum nsEventStructType {
|
||||
#define NS_EVENT_FLAG_CAPTURE 0x0004
|
||||
#define NS_EVENT_FLAG_STOP_DISPATCH 0x0008
|
||||
#define NS_EVENT_FLAG_NO_DEFAULT 0x0010
|
||||
#define NS_EVENT_FLAG_CANT_CANCEL 0x0020
|
||||
#define NS_EVENT_FLAG_CANT_BUBBLE 0x0040
|
||||
#define NS_PRIV_EVENT_FLAG_SCRIPT 0x0080
|
||||
#define NS_EVENT_FLAG_NO_CONTENT_DISPATCH 0x0100
|
||||
#define NS_EVENT_FLAG_SYSTEM_EVENT 0x0200
|
||||
@ -522,6 +520,12 @@ public:
|
||||
bool mInBubblingPhase : 1;
|
||||
// If mInCapturePhase is true, the event is in capture phase or target phase.
|
||||
bool mInCapturePhase : 1;
|
||||
// If mCancelable is true, the event can be consumed. I.e., calling
|
||||
// nsDOMEvent::PreventDefault() can prevent the default action.
|
||||
bool mCancelable : 1;
|
||||
// If mBubbles is true, the event can bubble. Otherwise, cannot be handled
|
||||
// in bubbling phase.
|
||||
bool mBubbles : 1;
|
||||
|
||||
// If the event is being handled in target phase, returns true.
|
||||
bool InTargetPhase() const
|
||||
@ -582,6 +586,8 @@ protected:
|
||||
{
|
||||
MOZ_COUNT_CTOR(nsEvent);
|
||||
mFlags.mIsTrusted = isTrusted;
|
||||
mFlags.mCancelable = true;
|
||||
mFlags.mBubbles = true;
|
||||
}
|
||||
|
||||
nsEvent()
|
||||
@ -601,6 +607,8 @@ public:
|
||||
{
|
||||
MOZ_COUNT_CTOR(nsEvent);
|
||||
mFlags.mIsTrusted = isTrusted;
|
||||
mFlags.mCancelable = true;
|
||||
mFlags.mBubbles = true;
|
||||
}
|
||||
|
||||
~nsEvent()
|
||||
@ -912,11 +920,12 @@ protected:
|
||||
{
|
||||
switch (msg) {
|
||||
case NS_MOUSE_MOVE:
|
||||
flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
mFlags.mCancelable = false;
|
||||
break;
|
||||
case NS_MOUSEENTER:
|
||||
case NS_MOUSELEAVE:
|
||||
flags |= (NS_EVENT_FLAG_CANT_CANCEL & NS_EVENT_FLAG_CANT_BUBBLE);
|
||||
mFlags.mBubbles = false;
|
||||
mFlags.mCancelable = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -933,11 +942,12 @@ public:
|
||||
{
|
||||
switch (msg) {
|
||||
case NS_MOUSE_MOVE:
|
||||
flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
mFlags.mCancelable = false;
|
||||
break;
|
||||
case NS_MOUSEENTER:
|
||||
case NS_MOUSELEAVE:
|
||||
flags |= (NS_EVENT_FLAG_CANT_CANCEL | NS_EVENT_FLAG_CANT_BUBBLE);
|
||||
mFlags.mBubbles = false;
|
||||
mFlags.mCancelable = false;
|
||||
break;
|
||||
case NS_CONTEXTMENU:
|
||||
button = (context == eNormal) ? eRightButton : eLeftButton;
|
||||
@ -982,11 +992,10 @@ public:
|
||||
: nsMouseEvent(isTrusted, msg, w, NS_DRAG_EVENT, eReal),
|
||||
userCancelled(false)
|
||||
{
|
||||
if (msg == NS_DRAGDROP_EXIT_SYNTH ||
|
||||
msg == NS_DRAGDROP_LEAVE_SYNTH ||
|
||||
msg == NS_DRAGDROP_END) {
|
||||
flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
}
|
||||
mFlags.mCancelable =
|
||||
(msg != NS_DRAGDROP_EXIT_SYNTH &&
|
||||
msg != NS_DRAGDROP_LEAVE_SYNTH &&
|
||||
msg != NS_DRAGDROP_END);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMDataTransfer> dataTransfer;
|
||||
@ -1209,7 +1218,7 @@ public:
|
||||
// XXX compositionstart is cancelable in draft of DOM3 Events.
|
||||
// However, it doesn't make sense for us, we cannot cancel composition
|
||||
// when we send compositionstart event.
|
||||
flags |= NS_EVENT_FLAG_CANT_CANCEL;
|
||||
mFlags.mCancelable = false;
|
||||
}
|
||||
|
||||
nsString data;
|
||||
|
Loading…
Reference in New Issue
Block a user