From a4bd0b269f72c4edfeb415dfcdd77861bb24737d Mon Sep 17 00:00:00 2001 From: "jkeiser%netscape.com" Date: Wed, 21 May 2003 00:42:32 +0000 Subject: [PATCH] Fix drag and drop to/from textarea and input (bug 194802), r=bryner@netscape.com, sr=jst@netscape.com, a=sspitzer@netscape.com git-svn-id: svn://10.0.0.236/trunk@142672 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/events/src/nsDOMEvent.cpp | 13 +++++++++++++ mozilla/content/events/src/nsDOMEvent.h | 1 + mozilla/dom/public/idl/events/nsIDOMNSEvent.idl | 6 ++++++ .../libeditor/text/nsPlaintextDataTransfer.cpp | 2 +- 4 files changed, 21 insertions(+), 1 deletion(-) 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; }