Bug 459323 - Drag and Drop in input controls is broken. r=smaug, sr=sicking.
This commit is contained in:
@@ -418,7 +418,7 @@
|
||||
<handlers>
|
||||
<handler event="focus" phase="capturing" action="this._hideURLTooltip();"/>
|
||||
<handler event="dragover" phase="capturing" action="nsDragAndDrop.dragOver(event, this);"/>
|
||||
<handler event="dragdrop" phase="capturing" action="nsDragAndDrop.drop(event, this);"/>
|
||||
<handler event="drop" phase="capturing" action="nsDragAndDrop.drop(event, this);"/>
|
||||
<handler event="select"><![CDATA[
|
||||
if (!Cc["@mozilla.org/widget/clipboard;1"]
|
||||
.getService(Ci.nsIClipboard)
|
||||
|
||||
@@ -845,7 +845,7 @@ FeedWriter.prototype = {
|
||||
|
||||
// nsIDomEventListener
|
||||
handleEvent: function(event) {
|
||||
// see comments in the write method
|
||||
// see comments in init()
|
||||
event = new XPCNativeWrapper(event);
|
||||
if (event.target.ownerDocument != this._document) {
|
||||
LOG("FeedWriter.handleEvent: Someone passed the feed writer as a listener to the events of another document!");
|
||||
@@ -1331,8 +1331,11 @@ FeedWriter.prototype = {
|
||||
|
||||
// nsIObserver
|
||||
observe: function FW_observe(subject, topic, data) {
|
||||
// see init()
|
||||
subject = new XPCNativeWrapper(subject);
|
||||
|
||||
if (!this._window) {
|
||||
// this._window is null unless this.write was called with a trusted
|
||||
// this._window is null unless this.init was called with a trusted
|
||||
// window object.
|
||||
return;
|
||||
}
|
||||
@@ -1397,6 +1400,9 @@ FeedWriter.prototype = {
|
||||
|
||||
// nsINavHistoryService
|
||||
onPageChanged: function FW_onPageChanged(aURI, aWhat, aValue) {
|
||||
// see init()
|
||||
aURI = new XPCNativeWrapper(aURI);
|
||||
|
||||
if (aWhat == Ci.nsINavHistoryObserver.ATTRIBUTE_FAVICON) {
|
||||
// Go through the readers menu and look for the corresponding
|
||||
// reader menu-item for the page if any.
|
||||
|
||||
@@ -777,7 +777,7 @@
|
||||
action="return this.openSearch();"/>
|
||||
#endif
|
||||
|
||||
<handler event="dragdrop" phase="capturing">
|
||||
<handler event="drop" phase="capturing">
|
||||
nsDragAndDrop.drop(event, this.searchbarDNDObserver);
|
||||
</handler>
|
||||
|
||||
|
||||
@@ -112,9 +112,8 @@ NS_IMPL_ADDREF(nsContentAreaDragDrop)
|
||||
NS_IMPL_RELEASE(nsContentAreaDragDrop)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsContentAreaDragDrop)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMDragListener)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMDragListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMDragListener)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMEventListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDragDropHandler)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
@@ -180,7 +179,7 @@ private:
|
||||
// nsContentAreaDragDrop ctor
|
||||
//
|
||||
nsContentAreaDragDrop::nsContentAreaDragDrop()
|
||||
: mListenerInstalled(PR_FALSE), mNavigator(nsnull)
|
||||
: mNavigator(nsnull)
|
||||
{
|
||||
} // ctor
|
||||
|
||||
@@ -200,9 +199,7 @@ nsContentAreaDragDrop::HookupTo(nsIDOMEventTarget *inAttachPoint,
|
||||
nsIWebNavigation* inNavigator)
|
||||
{
|
||||
NS_ASSERTION(inAttachPoint, "Can't hookup Drag Listeners to NULL receiver");
|
||||
mEventTarget = do_QueryInterface(inAttachPoint);
|
||||
NS_ASSERTION(mEventTarget,
|
||||
"Target doesn't implement nsPIDOMEventTarget as needed");
|
||||
mEventTarget = inAttachPoint;
|
||||
mNavigator = inNavigator;
|
||||
|
||||
return AddDragListener();
|
||||
@@ -224,17 +221,16 @@ nsContentAreaDragDrop::Detach()
|
||||
nsresult
|
||||
nsContentAreaDragDrop::AddDragListener()
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
if (mEventTarget) {
|
||||
nsIDOMDragListener *pListener = static_cast<nsIDOMDragListener *>(this);
|
||||
rv = mEventTarget->AddEventListenerByIID(pListener,
|
||||
NS_GET_IID(nsIDOMDragListener));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
mListenerInstalled = PR_TRUE;
|
||||
nsresult rv = mEventTarget->AddEventListener(NS_LITERAL_STRING("dragover"),
|
||||
this, PR_FALSE);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mEventTarget->AddEventListener(NS_LITERAL_STRING("drop"), this,
|
||||
PR_FALSE);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
return rv;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -246,33 +242,17 @@ nsContentAreaDragDrop::AddDragListener()
|
||||
nsresult
|
||||
nsContentAreaDragDrop::RemoveDragListener()
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
if (mEventTarget) {
|
||||
nsIDOMDragListener *pListener = static_cast<nsIDOMDragListener *>(this);
|
||||
rv =
|
||||
mEventTarget->RemoveEventListenerByIID(pListener,
|
||||
NS_GET_IID(nsIDOMDragListener));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
mListenerInstalled = PR_FALSE;
|
||||
nsresult rv =
|
||||
mEventTarget->RemoveEventListener(NS_LITERAL_STRING("dragover"), this,
|
||||
PR_FALSE);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = mEventTarget->RemoveEventListener(NS_LITERAL_STRING("drop"), this,
|
||||
PR_FALSE);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
mEventTarget = nsnull;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// DragEnter
|
||||
//
|
||||
// Called when an OS drag is in process and the mouse enters a gecko
|
||||
// window. We don't care so much about dragEnters.
|
||||
//
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::DragEnter(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// nothing really to do here.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -287,8 +267,8 @@ nsContentAreaDragDrop::DragEnter(nsIDOMEvent* aMouseEvent)
|
||||
// does is show feedback, it doesn't actually cancel the drop; that
|
||||
// comes later.
|
||||
//
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::DragOver(nsIDOMEvent* inEvent)
|
||||
nsresult
|
||||
nsContentAreaDragDrop::DragOver(nsIDOMDragEvent* inEvent)
|
||||
{
|
||||
// first check that someone hasn't already handled this event
|
||||
PRBool preventDefault = PR_TRUE;
|
||||
@@ -353,36 +333,6 @@ nsContentAreaDragDrop::DragOver(nsIDOMEvent* inEvent)
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// DragExit
|
||||
//
|
||||
// Called when an OS drag is in process and the mouse is over a gecko
|
||||
// window. We don't care so much about dragExits.
|
||||
//
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::DragExit(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// nothing really to do here.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::Drag(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// nothing really to do here.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::DragEnd(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
// nothing really to do here.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// ExtractURLFromData
|
||||
//
|
||||
@@ -440,14 +390,14 @@ nsContentAreaDragDrop::ExtractURLFromData(const nsACString & inFlavor,
|
||||
|
||||
|
||||
//
|
||||
// DragDrop
|
||||
// drop
|
||||
//
|
||||
// Called when an OS drag is in process and the mouse is released a
|
||||
// gecko window. Extract the data from the OS and do something with
|
||||
// it.
|
||||
//
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::DragDrop(nsIDOMEvent* inMouseEvent)
|
||||
nsresult
|
||||
nsContentAreaDragDrop::Drop(nsIDOMDragEvent* inDragEvent)
|
||||
{
|
||||
// if we don't have a nsIWebNavigation object to do anything with,
|
||||
// just bail. The client will have to have another way to deal with it
|
||||
@@ -457,7 +407,7 @@ nsContentAreaDragDrop::DragDrop(nsIDOMEvent* inMouseEvent)
|
||||
|
||||
// check that someone hasn't already handled this event
|
||||
PRBool preventDefault = PR_TRUE;
|
||||
nsCOMPtr<nsIDOMNSUIEvent> nsuiEvent(do_QueryInterface(inMouseEvent));
|
||||
nsCOMPtr<nsIDOMNSUIEvent> nsuiEvent(do_QueryInterface(inDragEvent));
|
||||
if (nsuiEvent) {
|
||||
nsuiEvent->GetPreventDefault(&preventDefault);
|
||||
}
|
||||
@@ -522,7 +472,7 @@ nsContentAreaDragDrop::DragDrop(nsIDOMEvent* inMouseEvent)
|
||||
if (NS_FAILED(rv)) {
|
||||
// Security check failed, stop event propagation right here
|
||||
// and return the error.
|
||||
inMouseEvent->StopPropagation();
|
||||
inDragEvent->StopPropagation();
|
||||
|
||||
return rv;
|
||||
}
|
||||
@@ -599,14 +549,6 @@ nsContentAreaDragDrop::GetEventDocument(nsIDOMEvent* inEvent,
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// DragGesture
|
||||
//
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::DragGesture(nsIDOMEvent* inMouseEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsContentAreaDragDrop::GetDragData(nsIDOMWindow* aWindow,
|
||||
@@ -631,8 +573,18 @@ nsContentAreaDragDrop::GetDragData(nsIDOMWindow* aWindow,
|
||||
NS_IMETHODIMP
|
||||
nsContentAreaDragDrop::HandleEvent(nsIDOMEvent *event)
|
||||
{
|
||||
return NS_OK;
|
||||
// make sure it's a drag event
|
||||
nsCOMPtr<nsIDOMDragEvent> dragEvent = do_QueryInterface(event);
|
||||
if (dragEvent) {
|
||||
nsAutoString eventType;
|
||||
event->GetType(eventType);
|
||||
if (eventType.EqualsLiteral("dragover"))
|
||||
return DragOver(dragEvent);
|
||||
if (eventType.EqualsLiteral("drop"))
|
||||
return Drop(dragEvent);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
@@ -43,18 +43,20 @@
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "nsIDragDropHandler.h"
|
||||
#include "nsIDOMDragListener.h"
|
||||
#include "nsPIDOMEventTarget.h"
|
||||
#include "nsIDOMEventTarget.h"
|
||||
#include "nsIDOMEventListener.h"
|
||||
#include "nsITransferable.h"
|
||||
|
||||
class nsIDOMNode;
|
||||
class nsIDOMWindow;
|
||||
class nsIDOMDocument;
|
||||
class nsIDOMDragEvent;
|
||||
class nsISelection;
|
||||
class nsITransferable;
|
||||
class nsIImage;
|
||||
class nsIPresShell;
|
||||
class nsPresContext;
|
||||
class nsIContent;
|
||||
class nsIDocument;
|
||||
class nsIURI;
|
||||
class nsIFile;
|
||||
class nsISimpleEnumerator;
|
||||
@@ -76,8 +78,8 @@ class nsDOMDataTransfer;
|
||||
// AddChromeListeners() and removes itself with
|
||||
// RemoveChromeListeners().
|
||||
//
|
||||
class nsContentAreaDragDrop : public nsIDOMDragListener,
|
||||
public nsIDragDropHandler
|
||||
class nsContentAreaDragDrop : public nsIDragDropHandler,
|
||||
public nsIDOMEventListener
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
@@ -86,14 +88,6 @@ public:
|
||||
nsContentAreaDragDrop();
|
||||
virtual ~nsContentAreaDragDrop();
|
||||
|
||||
// nsIDOMDragListener
|
||||
NS_IMETHOD DragEnter(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragOver(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragExit(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragDrop(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragGesture(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD Drag(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragEnd(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD HandleEvent(nsIDOMEvent *event);
|
||||
|
||||
/**
|
||||
@@ -129,6 +123,9 @@ private:
|
||||
nsresult AddDragListener();
|
||||
nsresult RemoveDragListener();
|
||||
|
||||
nsresult DragOver(nsIDOMDragEvent* aDragEvent);
|
||||
nsresult Drop(nsIDOMDragEvent* aDragEvent);
|
||||
|
||||
// utility routines
|
||||
static void NormalizeSelection(nsIDOMNode* inBaseNode,
|
||||
nsISelection* inSelection);
|
||||
@@ -139,9 +136,7 @@ private:
|
||||
nsISupports* inDataWrapper, PRUint32 inDataLen,
|
||||
nsAString & outURL);
|
||||
|
||||
PRPackedBool mListenerInstalled;
|
||||
|
||||
nsCOMPtr<nsPIDOMEventTarget> mEventTarget;
|
||||
nsCOMPtr<nsIDOMEventTarget> mEventTarget;
|
||||
|
||||
// weak ref, this is probably my owning webshell
|
||||
// FIXME: we set this and never null it out. That's bad! See bug 332187.
|
||||
|
||||
@@ -104,6 +104,7 @@
|
||||
#include "JoinElementTxn.h"
|
||||
#include "nsStyleSheetTxns.h"
|
||||
#include "IMETextTxn.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsEditor.h"
|
||||
#include "nsEditorUtils.h"
|
||||
@@ -319,8 +320,14 @@ nsEditor::InstallEventListeners()
|
||||
rv |= piTarget->AddEventListenerByIID(mCompositionListenerP,
|
||||
NS_GET_IID(nsIDOMCompositionListener));
|
||||
|
||||
rv |= piTarget->AddEventListenerByIID(mDragListenerP,
|
||||
NS_GET_IID(nsIDOMDragListener));
|
||||
nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(piTarget));
|
||||
if (target) {
|
||||
rv |= target->AddEventListener(NS_LITERAL_STRING("dragstart"), mDragListenerP, PR_FALSE);
|
||||
rv |= target->AddEventListener(NS_LITERAL_STRING("dragenter"), mDragListenerP, PR_FALSE);
|
||||
rv |= target->AddEventListener(NS_LITERAL_STRING("dragover"), mDragListenerP, PR_FALSE);
|
||||
rv |= target->AddEventListener(NS_LITERAL_STRING("dragleave"), mDragListenerP, PR_FALSE);
|
||||
rv |= target->AddEventListener(NS_LITERAL_STRING("drop"), mDragListenerP, PR_FALSE);
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
{
|
||||
@@ -388,8 +395,14 @@ nsEditor::RemoveEventListeners()
|
||||
|
||||
if (mDragListenerP)
|
||||
{
|
||||
piTarget->RemoveEventListenerByIID(mDragListenerP,
|
||||
NS_GET_IID(nsIDOMDragListener));
|
||||
nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(piTarget));
|
||||
if (target) {
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragstart"), mDragListenerP, PR_FALSE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragenter"), mDragListenerP, PR_FALSE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragover"), mDragListenerP, PR_FALSE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragleave"), mDragListenerP, PR_FALSE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("drop"), mDragListenerP, PR_FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
#include "nsIDOMEventTarget.h"
|
||||
#include "nsIEventStateManager.h"
|
||||
#include "nsISelectionPrivate.h"
|
||||
#include "nsIDOMDragEvent.h"
|
||||
|
||||
//#define DEBUG_IME
|
||||
|
||||
@@ -495,17 +496,33 @@ nsTextEditorDragListener::~nsTextEditorDragListener()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS2(nsTextEditorDragListener, nsIDOMEventListener, nsIDOMDragListener)
|
||||
NS_IMPL_ISUPPORTS1(nsTextEditorDragListener, nsIDOMEventListener)
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
// make sure it's a drag event
|
||||
nsCOMPtr<nsIDOMDragEvent> dragEvent = do_QueryInterface(aEvent);
|
||||
if (dragEvent) {
|
||||
nsAutoString eventType;
|
||||
aEvent->GetType(eventType);
|
||||
if (eventType.EqualsLiteral("dragstart"))
|
||||
return DragStart(dragEvent);
|
||||
if (eventType.EqualsLiteral("dragenter"))
|
||||
return DragStart(dragEvent);
|
||||
if (eventType.EqualsLiteral("dragover"))
|
||||
return DragOver(dragEvent);
|
||||
if (eventType.EqualsLiteral("dragleave"))
|
||||
return DragStart(dragEvent);
|
||||
if (eventType.EqualsLiteral("drop"))
|
||||
return Drop(dragEvent);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::DragGesture(nsIDOMEvent* aDragEvent)
|
||||
nsTextEditorDragListener::DragStart(nsIDOMDragEvent* aDragEvent)
|
||||
{
|
||||
if ( !mEditor )
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
@@ -521,7 +538,7 @@ nsTextEditorDragListener::DragGesture(nsIDOMEvent* aDragEvent)
|
||||
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent)
|
||||
nsTextEditorDragListener::DragEnter(nsIDOMDragEvent* aDragEvent)
|
||||
{
|
||||
nsCOMPtr<nsIPresShell> presShell = do_QueryReferent(mPresShell);
|
||||
if (!presShell)
|
||||
@@ -545,7 +562,7 @@ nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent)
|
||||
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::DragOver(nsIDOMEvent* aDragEvent)
|
||||
nsTextEditorDragListener::DragOver(nsIDOMDragEvent* aDragEvent)
|
||||
{
|
||||
// XXX cache this between drag events?
|
||||
nsresult rv;
|
||||
@@ -607,7 +624,7 @@ nsTextEditorDragListener::DragOver(nsIDOMEvent* aDragEvent)
|
||||
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::DragExit(nsIDOMEvent* aDragEvent)
|
||||
nsTextEditorDragListener::DragLeave(nsIDOMDragEvent* aDragEvent)
|
||||
{
|
||||
if (mCaret && mCaretDrawn)
|
||||
{
|
||||
@@ -625,7 +642,7 @@ nsTextEditorDragListener::DragExit(nsIDOMEvent* aDragEvent)
|
||||
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent)
|
||||
nsTextEditorDragListener::Drop(nsIDOMDragEvent* aMouseEvent)
|
||||
{
|
||||
if (mCaret)
|
||||
{
|
||||
@@ -684,20 +701,10 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent)
|
||||
return mEditor->InsertFromDrop(aMouseEvent);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::Drag(nsIDOMEvent* aDragEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsTextEditorDragListener::DragEnd(nsIDOMEvent* aDragEvent)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsTextEditorDragListener::CanDrop(nsIDOMEvent* aEvent)
|
||||
nsTextEditorDragListener::CanDrop(nsIDOMDragEvent* aEvent)
|
||||
{
|
||||
// if the target doc is read-only, we can't drop
|
||||
PRUint32 flags;
|
||||
|
||||
@@ -40,12 +40,10 @@
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
|
||||
#include "nsIDOMEvent.h"
|
||||
#include "nsIDOMKeyListener.h"
|
||||
#include "nsIDOMMouseListener.h"
|
||||
#include "nsIDOMTextListener.h"
|
||||
#include "nsIDOMDragListener.h"
|
||||
#include "nsIDOMCompositionListener.h"
|
||||
#include "nsIDOMFocusListener.h"
|
||||
|
||||
@@ -56,6 +54,8 @@
|
||||
#include "nsWeakPtr.h"
|
||||
#include "nsIWeakReferenceUtils.h"
|
||||
|
||||
class nsIDOMDragEvent;
|
||||
|
||||
/** The nsTextEditorKeyListener public nsIDOMKeyListener
|
||||
* This class will delegate events to its editor according to the translation
|
||||
* it is responsible for. i.e. 'c' becomes a keydown, but 'ESC' becomes nothing.
|
||||
@@ -193,7 +193,7 @@ protected:
|
||||
|
||||
/** editor Implementation of the DragListener interface
|
||||
*/
|
||||
class nsTextEditorDragListener : public nsIDOMDragListener
|
||||
class nsTextEditorDragListener : public nsIDOMEventListener
|
||||
{
|
||||
public:
|
||||
/** default constructor
|
||||
@@ -214,23 +214,18 @@ public:
|
||||
/*interfaces for addref and release and queryinterface*/
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
/*BEGIN implementations of dragevent handler interface*/
|
||||
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD DragEnter(nsIDOMEvent* aDragEvent);
|
||||
NS_IMETHOD DragOver(nsIDOMEvent* aDragEvent);
|
||||
NS_IMETHOD DragExit(nsIDOMEvent* aDragEvent);
|
||||
NS_IMETHOD DragDrop(nsIDOMEvent* aDragEvent);
|
||||
NS_IMETHOD DragGesture(nsIDOMEvent* aDragEvent);
|
||||
NS_IMETHOD Drag(nsIDOMEvent* aDragEvent);
|
||||
NS_IMETHOD DragEnd(nsIDOMEvent* aDragEvent);
|
||||
/*END implementations of dragevent handler interface*/
|
||||
|
||||
protected:
|
||||
|
||||
PRBool CanDrop(nsIDOMEvent* aEvent);
|
||||
|
||||
protected:
|
||||
PRBool CanDrop(nsIDOMDragEvent* aEvent);
|
||||
nsresult DragEnter(nsIDOMDragEvent* aDragEvent);
|
||||
nsresult DragOver(nsIDOMDragEvent* aDragEvent);
|
||||
nsresult DragLeave(nsIDOMDragEvent* aDragEvent);
|
||||
nsresult Drop(nsIDOMDragEvent* aDragEvent);
|
||||
nsresult DragStart(nsIDOMDragEvent* aDragEvent);
|
||||
|
||||
protected:
|
||||
nsIEditor* mEditor;
|
||||
nsWeakPtr mPresShell;
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
#include "nsIView.h"
|
||||
#include "nsIViewManager.h"
|
||||
#include "nsIDOMKeyListener.h"
|
||||
#include "nsIDOMDragEvent.h"
|
||||
#ifdef MOZ_X11
|
||||
#ifdef MOZ_WIDGET_QT
|
||||
#include <QWidget>
|
||||
@@ -96,7 +97,6 @@
|
||||
#include "nsIDOMMouseMotionListener.h"
|
||||
#include "nsIDOMFocusListener.h"
|
||||
#include "nsIDOMContextMenuListener.h"
|
||||
#include "nsIDOMDragListener.h"
|
||||
#include "nsIDOMEventTarget.h"
|
||||
#include "nsIDOMNSEvent.h"
|
||||
#include "nsIPrivateDOMEvent.h"
|
||||
@@ -237,8 +237,7 @@ class nsPluginInstanceOwner : public nsIPluginInstanceOwner,
|
||||
public nsIDOMMouseMotionListener,
|
||||
public nsIDOMKeyListener,
|
||||
public nsIDOMFocusListener,
|
||||
public nsIScrollPositionListener,
|
||||
public nsIDOMDragListener
|
||||
public nsIScrollPositionListener
|
||||
|
||||
{
|
||||
public:
|
||||
@@ -349,16 +348,6 @@ public:
|
||||
NS_IMETHOD Focus(nsIDOMEvent * aFocusEvent);
|
||||
NS_IMETHOD Blur(nsIDOMEvent * aFocusEvent);
|
||||
|
||||
// nsIDOMDragListener interfaces
|
||||
NS_IMETHOD DragEnter(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragOver(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragExit(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragDrop(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragGesture(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD Drag(nsIDOMEvent* aMouseEvent);
|
||||
NS_IMETHOD DragEnd(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
|
||||
nsresult Destroy();
|
||||
|
||||
void PrepareToStop(PRBool aDelayedStop);
|
||||
@@ -2234,7 +2223,6 @@ NS_INTERFACE_MAP_BEGIN(nsPluginInstanceOwner)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMKeyListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMFocusListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIScrollPositionListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMDragListener)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEventListener, nsIDOMMouseListener)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIPluginInstanceOwner)
|
||||
NS_INTERFACE_MAP_END
|
||||
@@ -3303,85 +3291,6 @@ nsresult nsPluginInstanceOwner::DispatchFocusToPlugin(nsIDOMEvent* aFocusEvent)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/*=============== nsIDOMDragListener ======================*/
|
||||
nsresult nsPluginInstanceOwner::DragEnter(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (mInstance) {
|
||||
// Let the plugin handle drag events.
|
||||
aMouseEvent->PreventDefault();
|
||||
aMouseEvent->StopPropagation();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsPluginInstanceOwner::DragOver(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (mInstance) {
|
||||
// Let the plugin handle drag events.
|
||||
aMouseEvent->PreventDefault();
|
||||
aMouseEvent->StopPropagation();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsPluginInstanceOwner::DragExit(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (mInstance) {
|
||||
// Let the plugin handle drag events.
|
||||
aMouseEvent->PreventDefault();
|
||||
aMouseEvent->StopPropagation();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsPluginInstanceOwner::DragDrop(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (mInstance) {
|
||||
// Let the plugin handle drag events.
|
||||
aMouseEvent->PreventDefault();
|
||||
aMouseEvent->StopPropagation();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsPluginInstanceOwner::DragGesture(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (mInstance) {
|
||||
// Let the plugin handle drag events.
|
||||
aMouseEvent->PreventDefault();
|
||||
aMouseEvent->StopPropagation();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsPluginInstanceOwner::Drag(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (mInstance) {
|
||||
// Let the plugin handle drag events.
|
||||
aMouseEvent->PreventDefault();
|
||||
aMouseEvent->StopPropagation();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsPluginInstanceOwner::DragEnd(nsIDOMEvent* aMouseEvent)
|
||||
{
|
||||
if (mInstance) {
|
||||
// Let the plugin handle drag events.
|
||||
aMouseEvent->PreventDefault();
|
||||
aMouseEvent->StopPropagation();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=============== nsIKeyListener ======================*/
|
||||
nsresult nsPluginInstanceOwner::KeyDown(nsIDOMEvent* aKeyEvent)
|
||||
@@ -3591,6 +3500,17 @@ nsresult nsPluginInstanceOwner::DispatchMouseToPlugin(nsIDOMEvent* aMouseEvent)
|
||||
nsresult
|
||||
nsPluginInstanceOwner::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
nsAutoString eventType;
|
||||
aEvent->GetType(eventType);
|
||||
|
||||
if (mInstance) {
|
||||
nsCOMPtr<nsIDOMDragEvent> dragEvent = do_QueryInterface(aEvent);
|
||||
if (dragEvent) {
|
||||
// Let the plugin handle drag events.
|
||||
aEvent->PreventDefault();
|
||||
aEvent->StopPropagation();
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -3914,11 +3834,16 @@ nsPluginInstanceOwner::Destroy()
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("keyup"), listener, PR_TRUE);
|
||||
|
||||
// Unregister drag event listener;
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("drop"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragdrop"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("drag"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragenter"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragover"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragexit"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragenter"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragleave"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragstart"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("draggesture"), listener, PR_TRUE);
|
||||
target->RemoveEventListener(NS_LITERAL_STRING("dragend"), listener, PR_TRUE);
|
||||
}
|
||||
|
||||
if (mWidget) {
|
||||
@@ -4408,11 +4333,16 @@ nsresult nsPluginInstanceOwner::Init(nsPresContext* aPresContext,
|
||||
target->AddEventListener(NS_LITERAL_STRING("keyup"), listener, PR_TRUE);
|
||||
|
||||
// Register drag listener
|
||||
target->AddEventListener(NS_LITERAL_STRING("drop"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragdrop"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragover"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragexit"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("drag"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragenter"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragover"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragleave"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragexit"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragstart"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("draggesture"), listener, PR_TRUE);
|
||||
target->AddEventListener(NS_LITERAL_STRING("dragend"), listener, PR_TRUE);
|
||||
}
|
||||
|
||||
// Register scroll position listener
|
||||
|
||||
@@ -57,10 +57,10 @@ function InitWithToolbox(aToolbox)
|
||||
gToolbox = aToolbox;
|
||||
gToolboxDocument = gToolbox.ownerDocument;
|
||||
|
||||
gToolbox.addEventListener("draggesture", onToolbarDragGesture, false);
|
||||
gToolbox.addEventListener("dragstart", onToolbarDragStart, false);
|
||||
gToolbox.addEventListener("dragover", onToolbarDragOver, false);
|
||||
gToolbox.addEventListener("dragexit", onToolbarDragExit, false);
|
||||
gToolbox.addEventListener("dragdrop", onToolbarDragDrop, false);
|
||||
gToolbox.addEventListener("dragleave", onToolbarDragLeave, false);
|
||||
gToolbox.addEventListener("drop", onToolbarDrop, false);
|
||||
|
||||
initDialog();
|
||||
}
|
||||
@@ -109,10 +109,10 @@ function repositionDialog()
|
||||
|
||||
function removeToolboxListeners()
|
||||
{
|
||||
gToolbox.removeEventListener("draggesture", onToolbarDragGesture, false);
|
||||
gToolbox.removeEventListener("dragstart", onToolbarDragStart, false);
|
||||
gToolbox.removeEventListener("dragover", onToolbarDragOver, false);
|
||||
gToolbox.removeEventListener("dragexit", onToolbarDragExit, false);
|
||||
gToolbox.removeEventListener("dragdrop", onToolbarDragDrop, false);
|
||||
gToolbox.removeEventListener("dragleave", onToolbarDragLeave, false);
|
||||
gToolbox.removeEventListener("drop", onToolbarDrop, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -741,7 +741,7 @@ function isToolbarItem(aElt)
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//// Drag and Drop observers
|
||||
|
||||
function onToolbarDragGesture(aEvent)
|
||||
function onToolbarDragStart(aEvent)
|
||||
{
|
||||
nsDragAndDrop.startDrag(aEvent, dragStartObserver);
|
||||
}
|
||||
@@ -751,12 +751,12 @@ function onToolbarDragOver(aEvent)
|
||||
nsDragAndDrop.dragOver(aEvent, toolbarDNDObserver);
|
||||
}
|
||||
|
||||
function onToolbarDragDrop(aEvent)
|
||||
function onToolbarDrop(aEvent)
|
||||
{
|
||||
nsDragAndDrop.drop(aEvent, toolbarDNDObserver);
|
||||
}
|
||||
|
||||
function onToolbarDragExit(aEvent)
|
||||
function onToolbarDragLeave(aEvent)
|
||||
{
|
||||
if (gCurrentDragOverItem)
|
||||
setDragActive(gCurrentDragOverItem, false);
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
findbar._setFindCloseTimeout();
|
||||
]]></handler>
|
||||
|
||||
<handler event="dragdrop" phase="capturing"><![CDATA[
|
||||
<handler event="drop" phase="capturing"><![CDATA[
|
||||
nsDragAndDrop.drop(event, this);
|
||||
]]></handler>
|
||||
</handlers>
|
||||
|
||||
Reference in New Issue
Block a user