/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 2000 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Tom Pixley (original author) * Johnny Stenback * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "domstubs.idl" %{C++ #include "nsEvent.h" class nsPresContext; class nsEventChainPreVisitor; class nsEventChainPostVisitor; struct JSContext; class nsEventListenerManager; %} /** * The nsIDOMEventTarget interface is the interface implemented by all * event targets in the Document Object Model. * * For more information on this interface please see * http://www.w3.org/TR/DOM-Level-2-Events/ */ [ref] native nsEventChainPreVisitorRef(nsEventChainPreVisitor); [ref] native nsEventChainPostVisitorRef(nsEventChainPostVisitor); [ptr] native nsEventPtr(nsEvent); [ptr] native nsPresContextPtr(nsPresContext); [ptr] native nsEventStatusPtr(nsEventStatus); [ptr] native JSContextPtr(JSContext); [ptr] native nsEventListenerManagerPtr(nsEventListenerManager); interface nsIScriptContext; interface nsIDOMEventListener; interface nsIDOMEvent; [scriptable, builtinclass, uuid(1797d5a4-b12a-428d-9eef-a0e13839728c)] interface nsIDOMEventTarget : nsISupports { /** * This method allows the registration of event listeners on the event target. * If an EventListener is added to an EventTarget while it is processing an * event, it will not be triggered by the current actions but may be * triggered during a later stage of event flow, such as the bubbling phase. * * If multiple identical EventListeners are registered on the same * EventTarget with the same parameters the duplicate instances are * discarded. They do not cause the EventListener to be called twice * and since they are discarded they do not need to be removed with the * removeEventListener method. * * @param type The event type for which the user is registering * @param listener The listener parameter takes an interface * implemented by the user which contains the methods * to be called when the event occurs. * @param useCapture If true, useCapture indicates that the user * wishes to initiate capture. After initiating * capture, all events of the specified type will be * dispatched to the registered EventListener before * being dispatched to any EventTargets beneath them * in the tree. Events which are bubbling upward * through the tree will not trigger an * EventListener designated to use capture. * @param wantsUntrusted If false, the listener will not receive any * untrusted events (see above), if true, the * listener will receive events whether or not * they're trusted */ [optional_argc] void addEventListener(in DOMString type, in nsIDOMEventListener listener, [optional] in boolean useCapture, [optional] in boolean wantsUntrusted); %{C++ // non-virtual so it won't affect the vtable nsresult AddEventListener(const nsAString& aType, nsIDOMEventListener* aListener, bool aUseCapture) { return AddEventListener(aType, aListener, aUseCapture, PR_FALSE, 1); } // non-virtual so it won't affect the vtable nsresult AddEventListener(const nsAString& aType, nsIDOMEventListener* aListener, bool aUseCapture, bool aWantsUntrusted) { return AddEventListener(aType, aListener, aUseCapture, aWantsUntrusted, 2); } %} /** * This method allows the removal of event listeners from the event * target. If an EventListener is removed from an EventTarget while it * is processing an event, it will not be triggered by the current actions. * EventListeners can never be invoked after being removed. * Calling removeEventListener with arguments which do not identify any * currently registered EventListener on the EventTarget has no effect. * * @param type Specifies the event type of the EventListener being * removed. * @param listener The EventListener parameter indicates the * EventListener to be removed. * @param useCapture Specifies whether the EventListener being * removed was registered as a capturing listener or * not. If a listener was registered twice, one with * capture and one without, each must be removed * separately. Removal of a capturing listener does * not affect a non-capturing version of the same * listener, and vice versa. */ void removeEventListener(in DOMString type, in nsIDOMEventListener listener, [optional] in boolean useCapture); /** * This method allows the dispatch of events into the implementations * event model. Events dispatched in this manner will have the same * capturing and bubbling behavior as events dispatched directly by the * implementation. The target of the event is the EventTarget on which * dispatchEvent is called. * * @param evt Specifies the event type, behavior, and contextual * information to be used in processing the event. * @return Indicates whether any of the listeners which handled the * event called preventDefault. If preventDefault was called * the value is false, else the value is true. * @throws INVALID_STATE_ERR: Raised if the Event's type was * not specified by initializing the event before * dispatchEvent was called. Specification of the Event's * type as null or an empty string will also trigger this * exception. */ boolean dispatchEvent(in nsIDOMEvent evt) raises(DOMException); /** * Returns the nsPIDOMEventTarget object which should be used as the target * of DOMEvents. * Usually |this| is returned, but for example global object returns * the outer object. */ [notxpcom, nostdcall] nsIDOMEventTarget GetTargetForDOMEvent(); /** * Returns the nsPIDOMEventTarget object which should be used as the target * of the event and when constructing event target chain. * Usually |this| is returned, but for example global object returns * the inner object. */ [notxpcom, nostdcall] nsIDOMEventTarget GetTargetForEventTargetChain(); /** * Called before the capture phase of the event flow. * This is used to create the event target chain and implementations * should set the necessary members of nsEventChainPreVisitor. * At least aVisitor.mCanHandle must be set, * usually also aVisitor.mParentTarget if mCanHandle is PR_TRUE. * First one tells that this object can handle the aVisitor.mEvent event and * the latter one is the possible parent object for the event target chain. * @see nsEventDispatcher.h for more documentation about aVisitor. * * @param aVisitor the visitor object which is used to create the * event target chain for event dispatching. * * @note Only nsEventDispatcher should call this method. */ [noscript, nostdcall] void PreHandleEvent(in nsEventChainPreVisitorRef aVisitor); /** * If nsEventChainPreVisitor.mWantsWillHandleEvent is set PR_TRUE, * called just before possible event handlers on this object will be called. */ [noscript, nostdcall] void WillHandleEvent(in nsEventChainPostVisitorRef aVisitor); /** * Called after the bubble phase of the system event group. * The default handling of the event should happen here. * @param aVisitor the visitor object which is used during post handling. * * @see nsEventDispatcher.h for documentation about aVisitor. * @note Only nsEventDispatcher should call this method. */ [noscript, nostdcall] void PostHandleEvent(in nsEventChainPostVisitorRef aVisitor); /** * Dispatch an event. * @param aEvent the event that is being dispatched. * @param aDOMEvent the event that is being dispatched, use if you want to * dispatch nsIDOMEvent, not only nsEvent. * @param aPresContext the current presentation context, can be nsnull. * @param aEventStatus the status returned from the function, can be nsnull. * * @note If both aEvent and aDOMEvent are used, aEvent must be the internal * event of the aDOMEvent. * * If aDOMEvent is not nsnull (in which case aEvent can be nsnull) it is used * for dispatching, otherwise aEvent is used. * * @deprecated This method is here just until all the callers outside Gecko * have been converted to use nsIDOMEventTarget::dispatchEvent. */ [noscript, nostdcall] void DispatchDOMEvent(in nsEventPtr aEvent, in nsIDOMEvent aDOMEvent, in nsPresContextPtr aPresContext, in nsEventStatusPtr aEventStatus); /** * Get the event listener manager, the guy you talk to to register for events * on this node. * @param aMayCreate If PR_FALSE, returns a listener manager only if * one already exists. */ [notxpcom, nostdcall] nsEventListenerManagerPtr GetListenerManager(in boolean aMayCreate); /** * Get the script context in which the event handlers should be run. * May return null. * @note Caller *must* check the value of aRv. */ [notxpcom, nostdcall] nsIScriptContext GetContextForEventHandlers(out nsresult aRv); /** * If the method above returns null, but a success code, this method * is called. */ [notxpcom, nostdcall] JSContextPtr GetJSContextForEventHandlers(); }; %{C++ typedef nsIDOMEventTarget nsPIDOMEventTarget; #define NS_IMPL_DOMTARGET_DEFAULTS(_class) \ nsPIDOMEventTarget* _class::GetTargetForDOMEvent() { return this; } \ nsPIDOMEventTarget* _class::GetTargetForEventTargetChain() { return this; } \ nsresult _class::WillHandleEvent(nsEventChainPostVisitor& aVisitor) { return NS_OK; } \ JSContext* _class::GetJSContextForEventHandlers() { return nsnull; } %}