diff --git a/mozilla/content/events/src/nsDOMEvent.cpp b/mozilla/content/events/src/nsDOMEvent.cpp index a7d166fcaa9..565f9829e0b 100644 --- a/mozilla/content/events/src/nsDOMEvent.cpp +++ b/mozilla/content/events/src/nsDOMEvent.cpp @@ -200,6 +200,7 @@ nsDOMEvent::nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, // Get the explicit original target (if it's anonymous make it null) { mExplicitOriginalTarget = GetTargetFromFrame(); + mTmpRealOriginalTarget = mExplicitOriginalTarget; nsCOMPtr content = do_QueryInterface(mExplicitOriginalTarget); if (content) { if (content->IsNativeAnonymous()) { @@ -411,6 +412,18 @@ nsDOMEvent::GetExplicitOriginalTarget(nsIDOMEventTarget** aRealEventTarget) return GetTarget(aRealEventTarget); } +NS_IMETHODIMP +nsDOMEvent::GetTmpRealOriginalTarget(nsIDOMEventTarget** aRealEventTarget) +{ + if (mTmpRealOriginalTarget) { + *aRealEventTarget = mTmpRealOriginalTarget; + NS_ADDREF(*aRealEventTarget); + return NS_OK; + } + + return GetOriginalTarget(aRealEventTarget); +} + NS_IMETHODIMP nsDOMEvent::GetOriginalTarget(nsIDOMEventTarget** aOriginalTarget) { diff --git a/mozilla/content/events/src/nsDOMEvent.h b/mozilla/content/events/src/nsDOMEvent.h index 99ef3287e87..7f934d97197 100644 --- a/mozilla/content/events/src/nsDOMEvent.h +++ b/mozilla/content/events/src/nsDOMEvent.h @@ -241,6 +241,7 @@ protected: nsCOMPtr mCurrentTarget; nsCOMPtr mOriginalTarget; nsCOMPtr mExplicitOriginalTarget; + nsCOMPtr mTmpRealOriginalTarget; nsString* mText; nsCOMPtr mTextRange; PRPackedBool mEventIsInternal; diff --git a/mozilla/dom/public/idl/events/nsIDOMNSEvent.idl b/mozilla/dom/public/idl/events/nsIDOMNSEvent.idl index ad71dc2d852..1cb7802febb 100644 --- a/mozilla/dom/public/idl/events/nsIDOMNSEvent.idl +++ b/mozilla/dom/public/idl/events/nsIDOMNSEvent.idl @@ -92,6 +92,12 @@ interface nsIDOMNSEvent : nsISupports * contain anonymous content. */ readonly attribute nsIDOMEventTarget explicitOriginalTarget; + /* XXX This is TEMPORARY. + * The original target, without any retargeting (like textnode retargeting). + * This really needs to be in .originalTarget, but this is a less risky way of + * fixing it. + */ + [noscript] readonly attribute nsIDOMEventTarget tmpRealOriginalTarget; void preventBubble(); void preventCapture(); diff --git a/mozilla/editor/libeditor/text/nsPlaintextDataTransfer.cpp b/mozilla/editor/libeditor/text/nsPlaintextDataTransfer.cpp index b7787d5652d..e860d42b87b 100644 --- a/mozilla/editor/libeditor/text/nsPlaintextDataTransfer.cpp +++ b/mozilla/editor/libeditor/text/nsPlaintextDataTransfer.cpp @@ -350,7 +350,7 @@ NS_IMETHODIMP nsPlaintextEditor::CanDrag(nsIDOMEvent *aDragEvent, PRBool *aCanDr nsCOMPtr nsevent(do_QueryInterface(aDragEvent)); if (nsevent) { - res = nsevent->GetExplicitOriginalTarget(getter_AddRefs(eventTarget)); + res = nsevent->GetTmpRealOriginalTarget(getter_AddRefs(eventTarget)); if (NS_FAILED(res)) return res; }