diff --git a/mozilla/content/xul/content/src/nsXULElement.cpp b/mozilla/content/xul/content/src/nsXULElement.cpp index 593369ca49c..8c1ebbba3b0 100644 --- a/mozilla/content/xul/content/src/nsXULElement.cpp +++ b/mozilla/content/xul/content/src/nsXULElement.cpp @@ -234,11 +234,17 @@ public: NS_IMETHOD SetNameSpaceID(PRInt32 aNameSpaceID); // nsIDOMEventReceiver - NS_IMETHOD AddEventListener(nsIDOMEventListener *aListener, const nsIID& aIID); - NS_IMETHOD RemoveEventListener(nsIDOMEventListener *aListener, const nsIID& aIID); + NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID); + NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID); NS_IMETHOD GetListenerManager(nsIEventListenerManager** aInstancePtrResult); NS_IMETHOD GetNewListenerManager(nsIEventListenerManager **aInstancePtrResult); + // nsIDOMEventTarget interface + NS_IMETHOD AddEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture); + NS_IMETHOD RemoveEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture); + // nsIJSScriptObject virtual PRBool AddProperty(JSContext *aContext, jsval aID, jsval *aVp); @@ -1022,12 +1028,12 @@ RDFElementImpl::SetNameSpaceID(PRInt32 aNameSpaceID) // nsIDOMEventReceiver interface NS_IMETHODIMP -RDFElementImpl::AddEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) +RDFElementImpl::AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID) { nsIEventListenerManager *manager; if (NS_OK == GetListenerManager(&manager)) { - manager->AddEventListener(aListener, aIID); + manager->AddEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE); NS_RELEASE(manager); return NS_OK; } @@ -1035,15 +1041,46 @@ RDFElementImpl::AddEventListener(nsIDOMEventListener *aListener, const nsIID& aI } NS_IMETHODIMP -RDFElementImpl::RemoveEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) +RDFElementImpl::RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID) { if (nsnull != mListenerManager) { - mListenerManager->RemoveEventListener(aListener, aIID); + mListenerManager->RemoveEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE); return NS_OK; } return NS_ERROR_FAILURE; } +NS_IMETHODIMP +RDFElementImpl::AddEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture) +{ + nsIEventListenerManager *manager; + + if (NS_OK == GetListenerManager(&manager)) { + PRInt32 flags = (aPostProcess ? NS_EVENT_FLAG_POST_PROCESS : NS_EVENT_FLAG_NONE) | + (aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE); + + manager->AddEventListenerByType(aListener, aType, flags); + NS_RELEASE(manager); + return NS_OK; + } + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +RDFElementImpl::RemoveEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture) +{ + if (nsnull != mListenerManager) { + PRInt32 flags = (aPostProcess ? NS_EVENT_FLAG_POST_PROCESS : NS_EVENT_FLAG_NONE) | + (aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE); + + mListenerManager->RemoveEventListenerByType(aListener, aType, flags); + return NS_OK; + } + return NS_ERROR_FAILURE; +} + NS_IMETHODIMP RDFElementImpl::GetListenerManager(nsIEventListenerManager** aResult) { @@ -2111,7 +2148,7 @@ RDFElementImpl::HandleDOMEvent(nsIPresContext& aPresContext, nsresult ret = NS_OK; nsIDOMEvent* domEvent = nsnull; - if (DOM_EVENT_INIT == aFlags) { + if (NS_EVENT_FLAG_INIT == aFlags) { aDOMEvent = &domEvent; // In order for the event to have a proper target for menus (which have no corresponding // frame target in the visual model), we have to explicitly set the target of the @@ -2134,19 +2171,20 @@ RDFElementImpl::HandleDOMEvent(nsIPresContext& aPresContext, } //Capturing stage + //XXX Nees impl. Talk to joki@netscape.com for help. //Local handling stage if (nsnull != mListenerManager) { - mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent, aEventStatus); + mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent, aFlags, aEventStatus); } //Bubbling stage - if ((DOM_EVENT_CAPTURE != aFlags) && (mParent != nsnull)) { + if ((NS_EVENT_FLAG_CAPTURE != aFlags) && (mParent != nsnull)) { ret = mParent->HandleDOMEvent(aPresContext, aEvent, aDOMEvent, - DOM_EVENT_BUBBLE, aEventStatus); + NS_EVENT_FLAG_BUBBLE, aEventStatus); } - if (DOM_EVENT_INIT == aFlags) { + if (NS_EVENT_FLAG_INIT == aFlags) { // We're leaving the DOM event loop so if we created a DOM event, // release here. if (nsnull != *aDOMEvent) { @@ -2412,7 +2450,7 @@ RDFElementImpl::ExecuteJSCode(nsIDOMElement* anElement) nsEvent event; event.eventStructType = NS_EVENT; event.message = NS_FORM_CHANGE; // XXX: I feel dirty and evil for subverting this. - content->HandleDOMEvent(*aPresContext, &event, nsnull, DOM_EVENT_INIT, status); + content->HandleDOMEvent(*aPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status); } return NS_OK; diff --git a/mozilla/docshell/base/nsWebShell.cpp b/mozilla/docshell/base/nsWebShell.cpp index 619e9b65cd0..638668ab202 100644 --- a/mozilla/docshell/base/nsWebShell.cpp +++ b/mozilla/docshell/base/nsWebShell.cpp @@ -2085,7 +2085,7 @@ nsWebShell::OnConnectionsComplete() nsMouseEvent event; event.eventStructType = NS_EVENT; event.message = NS_PAGE_LOAD; - rv = mScriptGlobal->HandleDOMEvent(*presContext, &event, nsnull, DOM_EVENT_INIT, status); + rv = mScriptGlobal->HandleDOMEvent(*presContext, &event, nsnull, NS_EVENT_FLAG_INIT, status); NS_RELEASE(presContext); } diff --git a/mozilla/editor/base/nsEditorEventListeners.cpp b/mozilla/editor/base/nsEditorEventListeners.cpp index b142bae168f..4c3c1602af3 100644 --- a/mozilla/editor/base/nsEditorEventListeners.cpp +++ b/mozilla/editor/base/nsEditorEventListeners.cpp @@ -85,7 +85,7 @@ nsTextEditorKeyListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) nsresult -nsTextEditorKeyListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorKeyListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } @@ -480,7 +480,7 @@ nsTextEditorMouseListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) nsresult -nsTextEditorMouseListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorMouseListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } @@ -617,7 +617,7 @@ nsTextEditorTextListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) } nsresult -nsTextEditorTextListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorTextListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } @@ -690,7 +690,7 @@ nsTextEditorDragListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) nsresult -nsTextEditorDragListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorDragListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } diff --git a/mozilla/editor/base/nsEditorEventListeners.h b/mozilla/editor/base/nsEditorEventListeners.h index 942a15e6c5e..ccfd89523ee 100644 --- a/mozilla/editor/base/nsEditorEventListeners.h +++ b/mozilla/editor/base/nsEditorEventListeners.h @@ -51,7 +51,7 @@ public: /*BEGIN interfaces in to the keylister base interface. must be supplied to handle pure virtual interfaces see the nsIDOMKeyListener interface implementation for details */ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); virtual nsresult KeyDown(nsIDOMEvent* aKeyEvent); virtual nsresult KeyUp(nsIDOMEvent* aKeyEvent); virtual nsresult KeyPress(nsIDOMEvent* aKeyEvent); @@ -87,7 +87,7 @@ public: NS_DECL_ISUPPORTS /*BEGIN implementations of textevent handler interface*/ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult HandleText(nsIDOMEvent* aTextEvent); /*END implementations of textevent handler interface*/ @@ -120,7 +120,7 @@ public: NS_DECL_ISUPPORTS /*BEGIN implementations of mouseevent handler interface*/ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent); virtual nsresult MouseUp(nsIDOMEvent* aMouseEvent); @@ -157,7 +157,7 @@ public: NS_DECL_ISUPPORTS /*BEGIN implementations of mouseevent handler interface*/ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult DragStart(nsIDOMEvent* aDragEvent); virtual nsresult DragDrop(nsIDOMEvent* aDragEvent); diff --git a/mozilla/editor/base/nsTextEditor.cpp b/mozilla/editor/base/nsTextEditor.cpp index 3c3490ee01d..ebc43525050 100644 --- a/mozilla/editor/base/nsTextEditor.cpp +++ b/mozilla/editor/base/nsTextEditor.cpp @@ -113,18 +113,18 @@ nsTextEditor::~nsTextEditor() if (NS_SUCCEEDED(result) && erP) { if (mKeyListenerP) { - erP->RemoveEventListener(mKeyListenerP, kIDOMKeyListenerIID); + erP->RemoveEventListenerByIID(mKeyListenerP, kIDOMKeyListenerIID); } if (mMouseListenerP) { - erP->RemoveEventListener(mMouseListenerP, kIDOMMouseListenerIID); + erP->RemoveEventListenerByIID(mMouseListenerP, kIDOMMouseListenerIID); } if (mTextListenerP) { - erP->RemoveEventListener(mTextListenerP, kIDOMTextListenerIID); + erP->RemoveEventListenerByIID(mTextListenerP, kIDOMTextListenerIID); } if (mDragListenerP) { - erP->RemoveEventListener(mDragListenerP, kIDOMDragListenerIID); + erP->RemoveEventListenerByIID(mDragListenerP, kIDOMDragListenerIID); } } @@ -216,11 +216,11 @@ NS_IMETHODIMP nsTextEditor::Init(nsIDOMDocument *aDoc, nsIPresShell *aPresShell) return result; } //cmanske: Shouldn't we check result from this? - erP->AddEventListener(mKeyListenerP, kIDOMKeyListenerIID); - //erP->AddEventListener(mDragListenerP, kIDOMDragListenerIID); - //erP->AddEventListener(mMouseListenerP, kIDOMMouseListenerIID); + erP->AddEventListenerByIID(mKeyListenerP, kIDOMKeyListenerIID); + //erP->AddEventListenerByIID(mDragListenerP, kIDOMDragListenerIID); + //erP->AddEventListenerByIID(mMouseListenerP, kIDOMMouseListenerIID); - erP->AddEventListener(mTextListenerP,kIDOMTextListenerIID); + erP->AddEventListenerByIID(mTextListenerP,kIDOMTextListenerIID); // instantiate the rules for this text editor // XXX: we should be told which set of rules to instantiate diff --git a/mozilla/editor/libeditor/text/nsEditorEventListeners.cpp b/mozilla/editor/libeditor/text/nsEditorEventListeners.cpp index b142bae168f..4c3c1602af3 100644 --- a/mozilla/editor/libeditor/text/nsEditorEventListeners.cpp +++ b/mozilla/editor/libeditor/text/nsEditorEventListeners.cpp @@ -85,7 +85,7 @@ nsTextEditorKeyListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) nsresult -nsTextEditorKeyListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorKeyListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } @@ -480,7 +480,7 @@ nsTextEditorMouseListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) nsresult -nsTextEditorMouseListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorMouseListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } @@ -617,7 +617,7 @@ nsTextEditorTextListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) } nsresult -nsTextEditorTextListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorTextListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } @@ -690,7 +690,7 @@ nsTextEditorDragListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) nsresult -nsTextEditorDragListener::ProcessEvent(nsIDOMEvent* aEvent) +nsTextEditorDragListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } diff --git a/mozilla/editor/libeditor/text/nsEditorEventListeners.h b/mozilla/editor/libeditor/text/nsEditorEventListeners.h index 942a15e6c5e..ccfd89523ee 100644 --- a/mozilla/editor/libeditor/text/nsEditorEventListeners.h +++ b/mozilla/editor/libeditor/text/nsEditorEventListeners.h @@ -51,7 +51,7 @@ public: /*BEGIN interfaces in to the keylister base interface. must be supplied to handle pure virtual interfaces see the nsIDOMKeyListener interface implementation for details */ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); virtual nsresult KeyDown(nsIDOMEvent* aKeyEvent); virtual nsresult KeyUp(nsIDOMEvent* aKeyEvent); virtual nsresult KeyPress(nsIDOMEvent* aKeyEvent); @@ -87,7 +87,7 @@ public: NS_DECL_ISUPPORTS /*BEGIN implementations of textevent handler interface*/ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult HandleText(nsIDOMEvent* aTextEvent); /*END implementations of textevent handler interface*/ @@ -120,7 +120,7 @@ public: NS_DECL_ISUPPORTS /*BEGIN implementations of mouseevent handler interface*/ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent); virtual nsresult MouseUp(nsIDOMEvent* aMouseEvent); @@ -157,7 +157,7 @@ public: NS_DECL_ISUPPORTS /*BEGIN implementations of mouseevent handler interface*/ - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult DragStart(nsIDOMEvent* aDragEvent); virtual nsresult DragDrop(nsIDOMEvent* aDragEvent); diff --git a/mozilla/rdf/content/src/nsRDFElement.cpp b/mozilla/rdf/content/src/nsRDFElement.cpp index 593369ca49c..8c1ebbba3b0 100644 --- a/mozilla/rdf/content/src/nsRDFElement.cpp +++ b/mozilla/rdf/content/src/nsRDFElement.cpp @@ -234,11 +234,17 @@ public: NS_IMETHOD SetNameSpaceID(PRInt32 aNameSpaceID); // nsIDOMEventReceiver - NS_IMETHOD AddEventListener(nsIDOMEventListener *aListener, const nsIID& aIID); - NS_IMETHOD RemoveEventListener(nsIDOMEventListener *aListener, const nsIID& aIID); + NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID); + NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID); NS_IMETHOD GetListenerManager(nsIEventListenerManager** aInstancePtrResult); NS_IMETHOD GetNewListenerManager(nsIEventListenerManager **aInstancePtrResult); + // nsIDOMEventTarget interface + NS_IMETHOD AddEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture); + NS_IMETHOD RemoveEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture); + // nsIJSScriptObject virtual PRBool AddProperty(JSContext *aContext, jsval aID, jsval *aVp); @@ -1022,12 +1028,12 @@ RDFElementImpl::SetNameSpaceID(PRInt32 aNameSpaceID) // nsIDOMEventReceiver interface NS_IMETHODIMP -RDFElementImpl::AddEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) +RDFElementImpl::AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID) { nsIEventListenerManager *manager; if (NS_OK == GetListenerManager(&manager)) { - manager->AddEventListener(aListener, aIID); + manager->AddEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE); NS_RELEASE(manager); return NS_OK; } @@ -1035,15 +1041,46 @@ RDFElementImpl::AddEventListener(nsIDOMEventListener *aListener, const nsIID& aI } NS_IMETHODIMP -RDFElementImpl::RemoveEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) +RDFElementImpl::RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID) { if (nsnull != mListenerManager) { - mListenerManager->RemoveEventListener(aListener, aIID); + mListenerManager->RemoveEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE); return NS_OK; } return NS_ERROR_FAILURE; } +NS_IMETHODIMP +RDFElementImpl::AddEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture) +{ + nsIEventListenerManager *manager; + + if (NS_OK == GetListenerManager(&manager)) { + PRInt32 flags = (aPostProcess ? NS_EVENT_FLAG_POST_PROCESS : NS_EVENT_FLAG_NONE) | + (aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE); + + manager->AddEventListenerByType(aListener, aType, flags); + NS_RELEASE(manager); + return NS_OK; + } + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +RDFElementImpl::RemoveEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture) +{ + if (nsnull != mListenerManager) { + PRInt32 flags = (aPostProcess ? NS_EVENT_FLAG_POST_PROCESS : NS_EVENT_FLAG_NONE) | + (aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE); + + mListenerManager->RemoveEventListenerByType(aListener, aType, flags); + return NS_OK; + } + return NS_ERROR_FAILURE; +} + NS_IMETHODIMP RDFElementImpl::GetListenerManager(nsIEventListenerManager** aResult) { @@ -2111,7 +2148,7 @@ RDFElementImpl::HandleDOMEvent(nsIPresContext& aPresContext, nsresult ret = NS_OK; nsIDOMEvent* domEvent = nsnull; - if (DOM_EVENT_INIT == aFlags) { + if (NS_EVENT_FLAG_INIT == aFlags) { aDOMEvent = &domEvent; // In order for the event to have a proper target for menus (which have no corresponding // frame target in the visual model), we have to explicitly set the target of the @@ -2134,19 +2171,20 @@ RDFElementImpl::HandleDOMEvent(nsIPresContext& aPresContext, } //Capturing stage + //XXX Nees impl. Talk to joki@netscape.com for help. //Local handling stage if (nsnull != mListenerManager) { - mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent, aEventStatus); + mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent, aFlags, aEventStatus); } //Bubbling stage - if ((DOM_EVENT_CAPTURE != aFlags) && (mParent != nsnull)) { + if ((NS_EVENT_FLAG_CAPTURE != aFlags) && (mParent != nsnull)) { ret = mParent->HandleDOMEvent(aPresContext, aEvent, aDOMEvent, - DOM_EVENT_BUBBLE, aEventStatus); + NS_EVENT_FLAG_BUBBLE, aEventStatus); } - if (DOM_EVENT_INIT == aFlags) { + if (NS_EVENT_FLAG_INIT == aFlags) { // We're leaving the DOM event loop so if we created a DOM event, // release here. if (nsnull != *aDOMEvent) { @@ -2412,7 +2450,7 @@ RDFElementImpl::ExecuteJSCode(nsIDOMElement* anElement) nsEvent event; event.eventStructType = NS_EVENT; event.message = NS_FORM_CHANGE; // XXX: I feel dirty and evil for subverting this. - content->HandleDOMEvent(*aPresContext, &event, nsnull, DOM_EVENT_INIT, status); + content->HandleDOMEvent(*aPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status); } return NS_OK; diff --git a/mozilla/rdf/content/src/nsXULElement.cpp b/mozilla/rdf/content/src/nsXULElement.cpp index 593369ca49c..8c1ebbba3b0 100644 --- a/mozilla/rdf/content/src/nsXULElement.cpp +++ b/mozilla/rdf/content/src/nsXULElement.cpp @@ -234,11 +234,17 @@ public: NS_IMETHOD SetNameSpaceID(PRInt32 aNameSpaceID); // nsIDOMEventReceiver - NS_IMETHOD AddEventListener(nsIDOMEventListener *aListener, const nsIID& aIID); - NS_IMETHOD RemoveEventListener(nsIDOMEventListener *aListener, const nsIID& aIID); + NS_IMETHOD AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID); + NS_IMETHOD RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID); NS_IMETHOD GetListenerManager(nsIEventListenerManager** aInstancePtrResult); NS_IMETHOD GetNewListenerManager(nsIEventListenerManager **aInstancePtrResult); + // nsIDOMEventTarget interface + NS_IMETHOD AddEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture); + NS_IMETHOD RemoveEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture); + // nsIJSScriptObject virtual PRBool AddProperty(JSContext *aContext, jsval aID, jsval *aVp); @@ -1022,12 +1028,12 @@ RDFElementImpl::SetNameSpaceID(PRInt32 aNameSpaceID) // nsIDOMEventReceiver interface NS_IMETHODIMP -RDFElementImpl::AddEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) +RDFElementImpl::AddEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID) { nsIEventListenerManager *manager; if (NS_OK == GetListenerManager(&manager)) { - manager->AddEventListener(aListener, aIID); + manager->AddEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE); NS_RELEASE(manager); return NS_OK; } @@ -1035,15 +1041,46 @@ RDFElementImpl::AddEventListener(nsIDOMEventListener *aListener, const nsIID& aI } NS_IMETHODIMP -RDFElementImpl::RemoveEventListener(nsIDOMEventListener *aListener, const nsIID& aIID) +RDFElementImpl::RemoveEventListenerByIID(nsIDOMEventListener *aListener, const nsIID& aIID) { if (nsnull != mListenerManager) { - mListenerManager->RemoveEventListener(aListener, aIID); + mListenerManager->RemoveEventListenerByIID(aListener, aIID, NS_EVENT_FLAG_BUBBLE); return NS_OK; } return NS_ERROR_FAILURE; } +NS_IMETHODIMP +RDFElementImpl::AddEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture) +{ + nsIEventListenerManager *manager; + + if (NS_OK == GetListenerManager(&manager)) { + PRInt32 flags = (aPostProcess ? NS_EVENT_FLAG_POST_PROCESS : NS_EVENT_FLAG_NONE) | + (aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE); + + manager->AddEventListenerByType(aListener, aType, flags); + NS_RELEASE(manager); + return NS_OK; + } + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +RDFElementImpl::RemoveEventListener(const nsString& aType, nsIDOMEventListener* aListener, + PRBool aPostProcess, PRBool aUseCapture) +{ + if (nsnull != mListenerManager) { + PRInt32 flags = (aPostProcess ? NS_EVENT_FLAG_POST_PROCESS : NS_EVENT_FLAG_NONE) | + (aUseCapture ? NS_EVENT_FLAG_CAPTURE : NS_EVENT_FLAG_BUBBLE); + + mListenerManager->RemoveEventListenerByType(aListener, aType, flags); + return NS_OK; + } + return NS_ERROR_FAILURE; +} + NS_IMETHODIMP RDFElementImpl::GetListenerManager(nsIEventListenerManager** aResult) { @@ -2111,7 +2148,7 @@ RDFElementImpl::HandleDOMEvent(nsIPresContext& aPresContext, nsresult ret = NS_OK; nsIDOMEvent* domEvent = nsnull; - if (DOM_EVENT_INIT == aFlags) { + if (NS_EVENT_FLAG_INIT == aFlags) { aDOMEvent = &domEvent; // In order for the event to have a proper target for menus (which have no corresponding // frame target in the visual model), we have to explicitly set the target of the @@ -2134,19 +2171,20 @@ RDFElementImpl::HandleDOMEvent(nsIPresContext& aPresContext, } //Capturing stage + //XXX Nees impl. Talk to joki@netscape.com for help. //Local handling stage if (nsnull != mListenerManager) { - mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent, aEventStatus); + mListenerManager->HandleEvent(aPresContext, aEvent, aDOMEvent, aFlags, aEventStatus); } //Bubbling stage - if ((DOM_EVENT_CAPTURE != aFlags) && (mParent != nsnull)) { + if ((NS_EVENT_FLAG_CAPTURE != aFlags) && (mParent != nsnull)) { ret = mParent->HandleDOMEvent(aPresContext, aEvent, aDOMEvent, - DOM_EVENT_BUBBLE, aEventStatus); + NS_EVENT_FLAG_BUBBLE, aEventStatus); } - if (DOM_EVENT_INIT == aFlags) { + if (NS_EVENT_FLAG_INIT == aFlags) { // We're leaving the DOM event loop so if we created a DOM event, // release here. if (nsnull != *aDOMEvent) { @@ -2412,7 +2450,7 @@ RDFElementImpl::ExecuteJSCode(nsIDOMElement* anElement) nsEvent event; event.eventStructType = NS_EVENT; event.message = NS_FORM_CHANGE; // XXX: I feel dirty and evil for subverting this. - content->HandleDOMEvent(*aPresContext, &event, nsnull, DOM_EVENT_INIT, status); + content->HandleDOMEvent(*aPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status); } return NS_OK; diff --git a/mozilla/silentdl/makefile.win b/mozilla/silentdl/makefile.win index 3a2594565da..2c283a2ce95 100644 --- a/mozilla/silentdl/makefile.win +++ b/mozilla/silentdl/makefile.win @@ -50,6 +50,7 @@ LLIBS = \ $(DIST)\lib\xplib.lib \ $(DIST)\lib\js3250.lib \ $(DIST)\lib\jsdombase_s.lib \ + $(DIST)\lib\jsdomevents_s.lib \ $(DIST)\lib\raptorbase.lib \ $(DIST)\lib\raptorgfxwin.lib \ $(LIBNSPR) \ diff --git a/mozilla/webshell/src/nsWebShell.cpp b/mozilla/webshell/src/nsWebShell.cpp index 619e9b65cd0..638668ab202 100644 --- a/mozilla/webshell/src/nsWebShell.cpp +++ b/mozilla/webshell/src/nsWebShell.cpp @@ -2085,7 +2085,7 @@ nsWebShell::OnConnectionsComplete() nsMouseEvent event; event.eventStructType = NS_EVENT; event.message = NS_PAGE_LOAD; - rv = mScriptGlobal->HandleDOMEvent(*presContext, &event, nsnull, DOM_EVENT_INIT, status); + rv = mScriptGlobal->HandleDOMEvent(*presContext, &event, nsnull, NS_EVENT_FLAG_INIT, status); NS_RELEASE(presContext); } diff --git a/mozilla/webshell/tests/viewer/nsEditorInterfaces.h b/mozilla/webshell/tests/viewer/nsEditorInterfaces.h index 87544a51a63..10129f2e4bf 100644 --- a/mozilla/webshell/tests/viewer/nsEditorInterfaces.h +++ b/mozilla/webshell/tests/viewer/nsEditorInterfaces.h @@ -31,7 +31,7 @@ public: NS_DECL_ISUPPORTS - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult KeyDown(nsIDOMEvent* aKeyEvent); @@ -50,7 +50,7 @@ public: NS_DECL_ISUPPORTS - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent); diff --git a/mozilla/webshell/tests/viewer/nsXPBaseWindow.cpp b/mozilla/webshell/tests/viewer/nsXPBaseWindow.cpp index b138780f8c5..55446dc630b 100644 --- a/mozilla/webshell/tests/viewer/nsXPBaseWindow.cpp +++ b/mozilla/webshell/tests/viewer/nsXPBaseWindow.cpp @@ -469,7 +469,7 @@ NS_IMETHODIMP nsXPBaseWindow::AddEventListener(nsIDOMNode * aNode) NS_PRECONDITION(nsnull != aNode, "adding event listener to null node"); if (NS_OK == aNode->QueryInterface(kIDOMEventReceiverIID, (void**) &receiver)) { - receiver->AddEventListener((nsIDOMMouseListener*)this, kIDOMMouseListenerIID); + receiver->AddEventListenerByIID((nsIDOMMouseListener*)this, kIDOMMouseListenerIID); NS_RELEASE(receiver); return NS_OK; } @@ -484,7 +484,7 @@ NS_IMETHODIMP nsXPBaseWindow::RemoveEventListener(nsIDOMNode * aNode) NS_PRECONDITION(nsnull != aNode, "removing event listener from null node"); if (NS_OK == aNode->QueryInterface(kIDOMEventReceiverIID, (void**) &receiver)) { - receiver->RemoveEventListener(this, kIDOMMouseListenerIID); + receiver->RemoveEventListenerByIID(this, kIDOMMouseListenerIID); NS_RELEASE(receiver); return NS_OK; } @@ -715,7 +715,7 @@ NS_IMETHODIMP nsXPBaseWindow::GetPresShell(nsIPresShell*& aPresShell) //----------------------------------------------------------------- //----------------------------------------------------------------- -nsresult nsXPBaseWindow::ProcessEvent(nsIDOMEvent* aEvent) +nsresult nsXPBaseWindow::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } diff --git a/mozilla/webshell/tests/viewer/nsXPBaseWindow.h b/mozilla/webshell/tests/viewer/nsXPBaseWindow.h index 319d27eb148..a2e5b0f4171 100644 --- a/mozilla/webshell/tests/viewer/nsXPBaseWindow.h +++ b/mozilla/webshell/tests/viewer/nsXPBaseWindow.h @@ -130,7 +130,7 @@ public: NS_IMETHOD AddWindowListener(nsIWindowListener * aWindowListener); // nsIDOMEventListener - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); // nsIDOMMouseListener (is derived from nsIDOMEventListener) virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent); diff --git a/mozilla/widget/public/nsGUIEvent.h b/mozilla/widget/public/nsGUIEvent.h index a41cb6034b2..fefabc5fb98 100644 --- a/mozilla/widget/public/nsGUIEvent.h +++ b/mozilla/widget/public/nsGUIEvent.h @@ -290,16 +290,23 @@ struct nsDragDropEvent : public nsGUIEvent { #define NS_IS_MOUSE_EVENT(evnt) \ (((evnt)->message == NS_MOUSE_LEFT_BUTTON_DOWN) || \ ((evnt)->message == NS_MOUSE_LEFT_BUTTON_UP) || \ + ((evnt)->message == NS_MOUSE_LEFT_CLICK) || \ + ((evnt)->message == NS_MOUSE_LEFT_DOUBLECLICK) || \ ((evnt)->message == NS_MOUSE_MIDDLE_BUTTON_DOWN) || \ ((evnt)->message == NS_MOUSE_MIDDLE_BUTTON_UP) || \ + ((evnt)->message == NS_MOUSE_MIDDLE_CLICK) || \ + ((evnt)->message == NS_MOUSE_MIDDLE_DOUBLECLICK) || \ ((evnt)->message == NS_MOUSE_RIGHT_BUTTON_DOWN) || \ ((evnt)->message == NS_MOUSE_RIGHT_BUTTON_UP) || \ + ((evnt)->message == NS_MOUSE_RIGHT_CLICK) || \ + ((evnt)->message == NS_MOUSE_RIGHT_DOUBLECLICK) || \ ((evnt)->message == NS_MOUSE_ENTER) || \ ((evnt)->message == NS_MOUSE_EXIT) || \ ((evnt)->message == NS_MOUSE_MOVE)) #define NS_IS_KEY_EVENT(evnt) \ (((evnt)->message == NS_KEY_DOWN) || \ + ((evnt)->message == NS_KEY_PRESS) || \ ((evnt)->message == NS_KEY_UP)) /* @@ -312,6 +319,7 @@ struct nsDragDropEvent : public nsGUIEvent { #define NS_VK_TAB 0x09 #define NS_VK_CLEAR 0x0C #define NS_VK_RETURN 0x0D +#define NS_VK_ENTER 0x0E #define NS_VK_SHIFT 0x10 #define NS_VK_CONTROL 0x11 #define NS_VK_ALT 0x12 diff --git a/mozilla/xpfe/AppCores/src/makefile.win b/mozilla/xpfe/AppCores/src/makefile.win index b3bd3142946..eeb8ccffc35 100644 --- a/mozilla/xpfe/AppCores/src/makefile.win +++ b/mozilla/xpfe/AppCores/src/makefile.win @@ -54,6 +54,7 @@ LLIBS = \ $(DIST)\lib\xplib.lib \ $(DIST)\lib\js3250.lib \ $(DIST)\lib\jsdombase_s.lib \ + $(DIST)\lib\jsdomevents_s.lib \ $(DIST)\lib\raptorbase.lib \ $(DIST)\lib\raptorgfxwin.lib \ $(LIBNSPR) \ diff --git a/mozilla/xpfe/AppCores/src/nsEditorInterfaces.h b/mozilla/xpfe/AppCores/src/nsEditorInterfaces.h index 87544a51a63..10129f2e4bf 100755 --- a/mozilla/xpfe/AppCores/src/nsEditorInterfaces.h +++ b/mozilla/xpfe/AppCores/src/nsEditorInterfaces.h @@ -31,7 +31,7 @@ public: NS_DECL_ISUPPORTS - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult KeyDown(nsIDOMEvent* aKeyEvent); @@ -50,7 +50,7 @@ public: NS_DECL_ISUPPORTS - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); public: virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent); diff --git a/mozilla/xpfe/appshell/src/makefile.win b/mozilla/xpfe/appshell/src/makefile.win index 6bb9cf28d85..e5291c85d1b 100644 --- a/mozilla/xpfe/appshell/src/makefile.win +++ b/mozilla/xpfe/appshell/src/makefile.win @@ -72,6 +72,7 @@ LLIBS= \ $(DIST)\lib\netlib.lib \ $(DIST)\lib\js3250.lib \ $(DIST)\lib\jsdombase_s.lib \ + $(DIST)\lib\jsdomevents_s.lib \ $(LIBNSPR) \ $(NULL) diff --git a/mozilla/xpfe/appshell/src/nsXULCommand.cpp b/mozilla/xpfe/appshell/src/nsXULCommand.cpp index f9d5f2767db..97c0158a2d3 100644 --- a/mozilla/xpfe/appshell/src/nsXULCommand.cpp +++ b/mozilla/xpfe/appshell/src/nsXULCommand.cpp @@ -171,7 +171,7 @@ NS_IMETHODIMP nsXULCommand::DoCommand() return rv; } - rv = contentNode->HandleDOMEvent(*presContext, &event, nsnull, DOM_EVENT_INIT, status); + rv = contentNode->HandleDOMEvent(*presContext, &event, nsnull, NS_EVENT_FLAG_INIT, status); return rv; } diff --git a/mozilla/xpfe/browser/src/nsWidgetListener.cpp b/mozilla/xpfe/browser/src/nsWidgetListener.cpp index 776db150f47..694706329ab 100644 --- a/mozilla/xpfe/browser/src/nsWidgetListener.cpp +++ b/mozilla/xpfe/browser/src/nsWidgetListener.cpp @@ -92,7 +92,7 @@ nsresult nsWidgetListener::AddEventListener(nsISupports* aNode, if (nsnull != aNode) { rv = aNode->QueryInterface(kIDOMEventReceiverIID, (void**) &receiver); if (NS_SUCCEEDED(rv)) { - receiver->AddEventListener((nsIDOMEventListener*)(nsIDOMMouseListener*)this, + receiver->AddEventListenerByIID((nsIDOMEventListener*)(nsIDOMMouseListener*)this, aInterfaceIID); NS_RELEASE(receiver); } @@ -106,7 +106,7 @@ nsresult nsWidgetListener::AddEventListener(nsISupports* aNode, //----------------------------------------------------------------- // nsIDOMMouseListener interface... // -nsresult nsWidgetListener::ProcessEvent(nsIDOMEvent* aEvent) +nsresult nsWidgetListener::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } diff --git a/mozilla/xpfe/browser/src/nsWidgetListener.h b/mozilla/xpfe/browser/src/nsWidgetListener.h index 9122bbcc00f..696d9eb72d6 100644 --- a/mozilla/xpfe/browser/src/nsWidgetListener.h +++ b/mozilla/xpfe/browser/src/nsWidgetListener.h @@ -42,7 +42,7 @@ public: NS_DECL_ISUPPORTS // nsIDOMMouseListener interface - virtual nsresult ProcessEvent (nsIDOMEvent* aEvent); + virtual nsresult HandleEvent (nsIDOMEvent* aEvent); virtual nsresult MouseDown (nsIDOMEvent* aMouseEvent); virtual nsresult MouseUp (nsIDOMEvent* aMouseEvent); virtual nsresult MouseClick (nsIDOMEvent* aMouseEvent); diff --git a/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.cpp b/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.cpp index f7e00eba666..e761d5c2745 100644 --- a/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.cpp +++ b/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.cpp @@ -465,7 +465,7 @@ NS_IMETHODIMP nsXPBaseWindow::AddEventListener(nsIDOMNode * aNode) nsIDOMEventReceiver * receiver; if (NS_OK == aNode->QueryInterface(kIDOMEventReceiverIID, (void**) &receiver)) { - receiver->AddEventListener((nsIDOMMouseListener*)this, kIDOMMouseListenerIID); + receiver->AddEventListenerByIID((nsIDOMMouseListener*)this, kIDOMMouseListenerIID); NS_RELEASE(receiver); return NS_OK; } @@ -705,7 +705,7 @@ NS_IMETHODIMP nsXPBaseWindow::GetPresShell(nsIPresShell*& aPresShell) //----------------------------------------------------------------- //----------------------------------------------------------------- -nsresult nsXPBaseWindow::ProcessEvent(nsIDOMEvent* aEvent) +nsresult nsXPBaseWindow::HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; } diff --git a/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.h b/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.h index 5d3f67504e0..2bae5728f89 100644 --- a/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.h +++ b/mozilla/xpfe/xpviewer/src/nsXPBaseWindow.h @@ -130,7 +130,7 @@ public: NS_IMETHOD AddWindowListener(nsWindowListener * aWindowListener); // nsIDOMEventListener - virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + virtual nsresult HandleEvent(nsIDOMEvent* aEvent); // nsIDOMMouseListener (is derived from nsIDOMEventListener) virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent); diff --git a/mozilla/xpinstall/src/makefile.win b/mozilla/xpinstall/src/makefile.win index 8523ba4828f..b7e67dd68a8 100644 --- a/mozilla/xpinstall/src/makefile.win +++ b/mozilla/xpinstall/src/makefile.win @@ -59,6 +59,7 @@ LLIBS = \ $(DIST)\lib\xppref32.lib \ $(DIST)\lib\js3250.lib \ $(DIST)\lib\jsdombase_s.lib \ + $(DIST)\lib\jsdomevents_s.lib \ $(DIST)\lib\raptorbase.lib \ $(LIBNSPR) \ $(NULL)