зеркало из https://github.com/mozilla/gecko-dev.git
Clean up for autoscrolling menu landing. ScrollBox events need their own type and should not be
on top of menu events. -r hyatt
This commit is contained in:
Родитель
5734dfa3be
Коммит
4db3654be5
|
@ -50,7 +50,7 @@ static char* mEventNames[] = {
|
|||
"submit", "reset", "change", "select", "input", "paint" ,"text",
|
||||
"create", "close", "destroy", "command", "broadcast", "commandupdate",
|
||||
"dragenter", "dragover", "dragexit", "dragdrop", "draggesture", "resize",
|
||||
"scroll","overflow", "underflow"
|
||||
"scroll","overflow", "underflow", "overflowchanged"
|
||||
};
|
||||
|
||||
nsDOMEvent::nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsString& aEventType) {
|
||||
|
@ -1147,6 +1147,8 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
|
|||
return mEventNames[eDOMEvents_overflow];
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
return mEventNames[eDOMEvents_underflow];
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
return mEventNames[eDOMEvents_overflowchanged];
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -86,7 +86,8 @@ public:
|
|||
eDOMEvents_resize,
|
||||
eDOMEvents_scroll,
|
||||
eDOMEvents_overflow,
|
||||
eDOMEvents_underflow
|
||||
eDOMEvents_underflow,
|
||||
eDOMEvents_overflowchanged
|
||||
};
|
||||
|
||||
nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsString& aEventType);
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "nsIDOMTextListener.h"
|
||||
#include "nsIDOMCompositionListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
|
||||
NS_DEFINE_IID(kIDOMMouseListenerIID, NS_IDOMMOUSELISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMKeyListenerIID, NS_IDOMKEYLISTENER_IID);
|
||||
|
@ -43,3 +44,4 @@ NS_DEFINE_IID(kIDOMPaintListenerIID, NS_IDOMPAINTLISTENER_IID);
|
|||
NS_DEFINE_IID(kIDOMTextListenerIID,NS_IDOMTEXTLISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMCompositionListenerIID,NS_IDOMCOMPOSITIONLISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMMenuListenerIID, NS_IDOMMENULISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMScrollListenerIID, NS_IDOMSCROLLLISTENER_IID);
|
||||
|
|
|
@ -35,5 +35,6 @@ extern const nsIID kIDOMPaintListenerIID;
|
|||
extern const nsIID kIDOMTextListenerIID;
|
||||
extern const nsIID kIDOMCompositionListenerIID;
|
||||
extern const nsIID kIDOMMenuListenerIID;
|
||||
extern const nsIID kIDOMScrollListenerIID;
|
||||
|
||||
#endif /* nsDOMEVENTSIIDs_h___ */
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "nsIDOMTextListener.h"
|
||||
#include "nsIDOMCompositionListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
#include "nsIEventStateManager.h"
|
||||
#include "nsIPrivateDOMEvent.h"
|
||||
#include "nsIScriptObjectOwner.h"
|
||||
|
@ -75,6 +76,7 @@ nsEventListenerManager::nsEventListenerManager()
|
|||
mTextListeners = nsnull;
|
||||
mCompositionListeners = nsnull;
|
||||
mMenuListeners = nsnull;
|
||||
mScrollListeners = nsnull;
|
||||
mDestroyed = PR_FALSE;
|
||||
mTarget = nsnull;
|
||||
NS_INIT_REFCNT();
|
||||
|
@ -94,6 +96,7 @@ nsEventListenerManager::~nsEventListenerManager()
|
|||
ReleaseListeners(&mTextListeners, PR_FALSE);
|
||||
ReleaseListeners(&mCompositionListeners, PR_FALSE);
|
||||
ReleaseListeners(&mMenuListeners, PR_FALSE);
|
||||
ReleaseListeners(&mScrollListeners, PR_FALSE);
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsEventListenerManager)
|
||||
|
@ -178,6 +181,9 @@ nsVoidArray** nsEventListenerManager::GetListenersByIID(const nsIID& aIID)
|
|||
else if (aIID.Equals(kIDOMMenuListenerIID)) {
|
||||
return &mMenuListeners;
|
||||
}
|
||||
else if (aIID.Equals(kIDOMScrollListenerIID)) {
|
||||
return &mScrollListeners;
|
||||
}
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
|
@ -451,13 +457,17 @@ nsresult nsEventListenerManager::GetIdentifiersForType(nsIAtom* aType, nsIID& aI
|
|||
*aFlags = NS_EVENT_BITS_XUL_COMMAND_UPDATE;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::onoverflow) {
|
||||
aIID = kIDOMMenuListenerIID;
|
||||
aIID = kIDOMScrollListenerIID;
|
||||
*aFlags = NS_EVENT_BITS_SCROLLPORT_OVERFLOW;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::onunderflow) {
|
||||
aIID = kIDOMMenuListenerIID;
|
||||
aIID = kIDOMScrollListenerIID;
|
||||
*aFlags = NS_EVENT_BITS_SCROLLPORT_UNDERFLOW;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::onoverflowchanged) {
|
||||
aIID = kIDOMScrollListenerIID;
|
||||
*aFlags = NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::ondragenter) {
|
||||
aIID = NS_GET_IID(nsIDOMDragListener);
|
||||
*aFlags = NS_EVENT_BITS_DRAG_ENTER;
|
||||
|
@ -1481,14 +1491,76 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
if (nsnull != mScrollListeners) {
|
||||
if (nsnull == *aDOMEvent) {
|
||||
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, empty, aEvent);
|
||||
}
|
||||
if (NS_OK == ret) {
|
||||
for (int i=0; mScrollListeners && i<mScrollListeners->Count(); i++) {
|
||||
nsListenerStruct* ls;
|
||||
nsIDOMScrollListener* scrollListener;
|
||||
|
||||
ls = (nsListenerStruct*)mScrollListeners->ElementAt(i);
|
||||
|
||||
if (ls->mFlags & aFlags) {
|
||||
if (NS_OK == ls->mListener->QueryInterface(kIDOMScrollListenerIID, (void**)&scrollListener)) {
|
||||
switch(aEvent->message) {
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
ret = scrollListener->Overflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
ret = scrollListener->Underflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
ret = scrollListener->OverflowChanged(*aDOMEvent);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(scrollListener);
|
||||
}
|
||||
else {
|
||||
PRBool correctSubType = PR_FALSE;
|
||||
PRUint32 subType = 0;
|
||||
switch(aEvent->message) {
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_OVERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_OVERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_UNDERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_UNDERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (correctSubType || ls->mSubType == NS_EVENT_BITS_NONE) {
|
||||
ret = HandleEventSubType(ls, *aDOMEvent, aCurrentTarget, subType, aFlags);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NS_MENU_CREATE:
|
||||
case NS_XUL_CLOSE:
|
||||
case NS_MENU_DESTROY:
|
||||
case NS_MENU_ACTION:
|
||||
case NS_XUL_BROADCAST:
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
case NS_XUL_COMMAND_UPDATE:
|
||||
if (nsnull != mMenuListeners) {
|
||||
if (nsnull == *aDOMEvent) {
|
||||
|
@ -1519,12 +1591,6 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
case NS_XUL_BROADCAST:
|
||||
ret = mMenuListener->Broadcast(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
ret = mMenuListener->Overflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
ret = mMenuListener->Underflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_XUL_COMMAND_UPDATE:
|
||||
ret = mMenuListener->CommandUpdate(*aDOMEvent);
|
||||
break;
|
||||
|
@ -1567,18 +1633,6 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_OVERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_OVERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_UNDERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_UNDERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_XUL_COMMAND_UPDATE:
|
||||
subType = NS_EVENT_BITS_XUL_COMMAND_UPDATE;
|
||||
if (ls->mSubType & NS_EVENT_BITS_XUL_COMMAND_UPDATE) {
|
||||
|
|
|
@ -150,6 +150,7 @@ protected:
|
|||
nsVoidArray* mTextListeners;
|
||||
nsVoidArray* mCompositionListeners;
|
||||
nsVoidArray* mMenuListeners;
|
||||
nsVoidArray* mScrollListeners;
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
PRBool mDestroyed;
|
||||
|
||||
|
@ -220,8 +221,12 @@ protected:
|
|||
#define NS_EVENT_BITS_MENU_ACTION 0x08
|
||||
#define NS_EVENT_BITS_XUL_BROADCAST 0x10
|
||||
#define NS_EVENT_BITS_XUL_COMMAND_UPDATE 0x20
|
||||
#define NS_EVENT_BITS_SCROLLPORT_OVERFLOW 0x40
|
||||
#define NS_EVENT_BITS_SCROLLPORT_UNDERFLOW 0x80
|
||||
|
||||
//nsIScrollListener
|
||||
#define NS_EVENT_BITS_SCROLLPORT_NONE 0x00
|
||||
#define NS_EVENT_BITS_SCROLLPORT_OVERFLOW 0x01
|
||||
#define NS_EVENT_BITS_SCROLLPORT_UNDERFLOW 0x02
|
||||
#define NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED 0x04
|
||||
|
||||
//nsIDOMDragListener
|
||||
#define NS_EVENT_BITS_DRAG_NONE 0x00
|
||||
|
|
|
@ -162,7 +162,7 @@ LAYOUT_ATOM(onunload, "onunload")
|
|||
// scrolling
|
||||
LAYOUT_ATOM(onoverflow, "onoverflow")
|
||||
LAYOUT_ATOM(onunderflow, "onunderflow")
|
||||
|
||||
LAYOUT_ATOM(onoverflowchanged, "onoverflowchanged")
|
||||
|
||||
#ifdef DEBUG
|
||||
// Alphabetical list of atoms used by debugging code
|
||||
|
|
|
@ -184,8 +184,10 @@ nsXBLBinding::kEventHandlerMap[] = {
|
|||
{ "command", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "broadcast", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "commandupdate", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "overflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "underflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
|
||||
{ "overflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "underflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "overflowchanged", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
|
||||
{ "focus", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
{ "blur", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
|
@ -513,10 +515,11 @@ nsXBLBinding::InstallEventHandlers(nsIContent* aBoundElement)
|
|||
GetEventHandlerIID(eventAtom, &iid, &found);
|
||||
if (found) {
|
||||
// Add an event listener for mouse and key events only.
|
||||
PRBool mouse = IsMouseHandler(type);
|
||||
PRBool key = IsKeyHandler(type);
|
||||
PRBool focus = IsFocusHandler(type);
|
||||
PRBool xul = IsXULHandler(type);
|
||||
PRBool mouse = IsMouseHandler(type);
|
||||
PRBool key = IsKeyHandler(type);
|
||||
PRBool focus = IsFocusHandler(type);
|
||||
PRBool xul = IsXULHandler(type);
|
||||
PRBool scroll = IsScrollHandler(type);
|
||||
|
||||
nsCOMPtr<nsIDOMEventReceiver> receiver = do_QueryInterface(mBoundElement);
|
||||
nsAutoString attachType;
|
||||
|
@ -562,6 +565,8 @@ nsXBLBinding::InstallEventHandlers(nsIContent* aBoundElement)
|
|||
receiver->AddEventListener(type, (nsIDOMKeyListener*)handler, useCapture);
|
||||
else if(focus)
|
||||
receiver->AddEventListener(type, (nsIDOMFocusListener*)handler, useCapture);
|
||||
else if (scroll)
|
||||
receiver->AddEventListener(type, (nsIDOMScrollListener*)handler, useCapture);
|
||||
else
|
||||
receiver->AddEventListener(type, (nsIDOMMenuListener*)handler, useCapture);
|
||||
|
||||
|
@ -1430,9 +1435,15 @@ PRBool
|
|||
nsXBLBinding::IsXULHandler(const nsString& aName)
|
||||
{
|
||||
return ((aName.EqualsWithConversion("create")) || (aName.EqualsWithConversion("destroy")) || (aName.EqualsWithConversion("broadcast")) ||
|
||||
(aName.EqualsWithConversion("command")) || (aName.EqualsWithConversion("commandupdate")) || (aName.EqualsWithConversion("close")) ||
|
||||
(aName.EqualsWithConversion("overflow")) ||
|
||||
(aName.EqualsWithConversion("underflow")) );
|
||||
(aName.EqualsWithConversion("command")) || (aName.EqualsWithConversion("commandupdate")) || (aName.EqualsWithConversion("close")));
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXBLBinding::IsScrollHandler(const nsString& aName)
|
||||
{
|
||||
return (aName.EqualsWithConversion("overflow") ||
|
||||
aName.EqualsWithConversion("underflow") ||
|
||||
aName.EqualsWithConversion("overflowchanged"));
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -125,6 +125,7 @@ public:
|
|||
static PRBool IsKeyHandler(const nsString& aName);
|
||||
static PRBool IsFocusHandler(const nsString& aName);
|
||||
static PRBool IsXULHandler(const nsString& aName);
|
||||
static PRBool IsScrollHandler(const nsString& aName);
|
||||
|
||||
// Internal member functions
|
||||
protected:
|
||||
|
|
|
@ -103,7 +103,7 @@ nsXBLEventHandler::~nsXBLEventHandler()
|
|||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS4(nsXBLEventHandler, nsIDOMKeyListener, nsIDOMMouseListener, nsIDOMMenuListener, nsIDOMFocusListener)
|
||||
NS_IMPL_ISUPPORTS5(nsXBLEventHandler, nsIDOMKeyListener, nsIDOMMouseListener, nsIDOMMenuListener, nsIDOMFocusListener, nsIDOMScrollListener)
|
||||
|
||||
nsresult nsXBLEventHandler::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
|
@ -293,6 +293,15 @@ nsresult nsXBLEventHandler::Underflow(nsIDOMEvent* aEvent)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::OverflowChanged(nsIDOMEvent* aEvent)
|
||||
{
|
||||
if (!mEventName.EqualsWithConversion("underflowchanged"))
|
||||
return NS_OK;
|
||||
|
||||
ExecuteHandler(NS_ConvertASCIItoUCS2("underflowchanged"), aEvent);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::Destroy(nsIDOMEvent* aEvent)
|
||||
{
|
||||
if (!mEventName.EqualsWithConversion("destroy"))
|
||||
|
@ -666,6 +675,7 @@ nsXBLEventHandler::RemoveEventHandlers()
|
|||
PRBool key = nsXBLBinding::IsKeyHandler(type);
|
||||
PRBool focus = nsXBLBinding::IsFocusHandler(type);
|
||||
PRBool xul = nsXBLBinding::IsXULHandler(type);
|
||||
PRBool scroll = nsXBLBinding::IsScrollHandler(type);
|
||||
|
||||
// Remove the event listener.
|
||||
if (mouse)
|
||||
|
@ -674,6 +684,8 @@ nsXBLEventHandler::RemoveEventHandlers()
|
|||
receiver->RemoveEventListener(type, (nsIDOMKeyListener*)this, useCapture);
|
||||
else if(focus)
|
||||
receiver->RemoveEventListener(type, (nsIDOMFocusListener*)this, useCapture);
|
||||
else if(scroll)
|
||||
receiver->RemoveEventListener(type, (nsIDOMScrollListener*)this, useCapture);
|
||||
else
|
||||
receiver->RemoveEventListener(type, (nsIDOMMenuListener*)this, useCapture);
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "nsIDOMKeyListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMFocusListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
|
||||
class nsIXBLBinding;
|
||||
class nsIDOMEvent;
|
||||
|
@ -42,7 +43,8 @@ class nsIController;
|
|||
class nsXBLEventHandler : public nsIDOMKeyListener,
|
||||
public nsIDOMMouseListener,
|
||||
public nsIDOMMenuListener,
|
||||
public nsIDOMFocusListener
|
||||
public nsIDOMFocusListener,
|
||||
public nsIDOMScrollListener
|
||||
{
|
||||
public:
|
||||
nsXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement, const nsString& aEventName);
|
||||
|
@ -64,14 +66,18 @@ public:
|
|||
virtual nsresult Focus(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult Blur(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
// menu
|
||||
NS_IMETHOD Create(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Close(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Destroy(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Action(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent);
|
||||
|
||||
// scroll
|
||||
NS_IMETHOD Overflow(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Underflow(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD OverflowChanged(nsIDOMEvent* aEvent);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
#include "nsIDOMKeyListener.h"
|
||||
#include "nsIDOMFormListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
#include "nsIDOMDragListener.h"
|
||||
#include "nsIRDFNode.h"
|
||||
#include "nsINameSpace.h"
|
||||
|
@ -218,8 +219,10 @@ nsXULContentUtils::kEventHandlerMap[] = {
|
|||
{ "oncommand", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "onbroadcast", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "oncommandupdate", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "onoverflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "onunderflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
|
||||
{ "onoverflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "onunderflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "onoverflowchanged",nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
|
||||
{ "onfocus", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
{ "onblur", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
|
|
|
@ -49,6 +49,7 @@ EXPORTS = \
|
|||
nsIDOMTextListener.h \
|
||||
nsIDOMCompositionListener.h \
|
||||
nsIDOMMenuListener.h \
|
||||
nsIDOMScrollListener.h \
|
||||
$(NULL)
|
||||
|
||||
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
|
||||
|
|
|
@ -45,6 +45,7 @@ EXPORTS = \
|
|||
nsIDOMTextListener.h \
|
||||
nsIDOMCompositionListener.h \
|
||||
nsIDOMMenuListener.h \
|
||||
nsIDOMScrollListener.h \
|
||||
$(NULL)
|
||||
|
||||
MODULE=dom
|
||||
|
|
|
@ -42,8 +42,6 @@ public:
|
|||
NS_IMETHOD Action(nsIDOMEvent* aEvent) = 0;
|
||||
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent) = 0;
|
||||
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent) = 0;
|
||||
NS_IMETHOD Overflow(nsIDOMEvent* aEvent) = 0;
|
||||
NS_IMETHOD Underflow(nsIDOMEvent* aEvent) = 0;
|
||||
};
|
||||
|
||||
#endif // nsIDOMMenuListener_h__
|
||||
|
|
|
@ -162,7 +162,7 @@ LAYOUT_ATOM(onunload, "onunload")
|
|||
// scrolling
|
||||
LAYOUT_ATOM(onoverflow, "onoverflow")
|
||||
LAYOUT_ATOM(onunderflow, "onunderflow")
|
||||
|
||||
LAYOUT_ATOM(onoverflowchanged, "onoverflowchanged")
|
||||
|
||||
#ifdef DEBUG
|
||||
// Alphabetical list of atoms used by debugging code
|
||||
|
|
|
@ -162,7 +162,7 @@ LAYOUT_ATOM(onunload, "onunload")
|
|||
// scrolling
|
||||
LAYOUT_ATOM(onoverflow, "onoverflow")
|
||||
LAYOUT_ATOM(onunderflow, "onunderflow")
|
||||
|
||||
LAYOUT_ATOM(onoverflowchanged, "onoverflowchanged")
|
||||
|
||||
#ifdef DEBUG
|
||||
// Alphabetical list of atoms used by debugging code
|
||||
|
|
|
@ -50,7 +50,7 @@ static char* mEventNames[] = {
|
|||
"submit", "reset", "change", "select", "input", "paint" ,"text",
|
||||
"create", "close", "destroy", "command", "broadcast", "commandupdate",
|
||||
"dragenter", "dragover", "dragexit", "dragdrop", "draggesture", "resize",
|
||||
"scroll","overflow", "underflow"
|
||||
"scroll","overflow", "underflow", "overflowchanged"
|
||||
};
|
||||
|
||||
nsDOMEvent::nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsString& aEventType) {
|
||||
|
@ -1147,6 +1147,8 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
|
|||
return mEventNames[eDOMEvents_overflow];
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
return mEventNames[eDOMEvents_underflow];
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
return mEventNames[eDOMEvents_overflowchanged];
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -86,7 +86,8 @@ public:
|
|||
eDOMEvents_resize,
|
||||
eDOMEvents_scroll,
|
||||
eDOMEvents_overflow,
|
||||
eDOMEvents_underflow
|
||||
eDOMEvents_underflow,
|
||||
eDOMEvents_overflowchanged
|
||||
};
|
||||
|
||||
nsDOMEvent(nsIPresContext* aPresContext, nsEvent* aEvent, const nsString& aEventType);
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "nsIDOMTextListener.h"
|
||||
#include "nsIDOMCompositionListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
|
||||
NS_DEFINE_IID(kIDOMMouseListenerIID, NS_IDOMMOUSELISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMKeyListenerIID, NS_IDOMKEYLISTENER_IID);
|
||||
|
@ -43,3 +44,4 @@ NS_DEFINE_IID(kIDOMPaintListenerIID, NS_IDOMPAINTLISTENER_IID);
|
|||
NS_DEFINE_IID(kIDOMTextListenerIID,NS_IDOMTEXTLISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMCompositionListenerIID,NS_IDOMCOMPOSITIONLISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMMenuListenerIID, NS_IDOMMENULISTENER_IID);
|
||||
NS_DEFINE_IID(kIDOMScrollListenerIID, NS_IDOMSCROLLLISTENER_IID);
|
||||
|
|
|
@ -35,5 +35,6 @@ extern const nsIID kIDOMPaintListenerIID;
|
|||
extern const nsIID kIDOMTextListenerIID;
|
||||
extern const nsIID kIDOMCompositionListenerIID;
|
||||
extern const nsIID kIDOMMenuListenerIID;
|
||||
extern const nsIID kIDOMScrollListenerIID;
|
||||
|
||||
#endif /* nsDOMEVENTSIIDs_h___ */
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "nsIDOMTextListener.h"
|
||||
#include "nsIDOMCompositionListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
#include "nsIEventStateManager.h"
|
||||
#include "nsIPrivateDOMEvent.h"
|
||||
#include "nsIScriptObjectOwner.h"
|
||||
|
@ -75,6 +76,7 @@ nsEventListenerManager::nsEventListenerManager()
|
|||
mTextListeners = nsnull;
|
||||
mCompositionListeners = nsnull;
|
||||
mMenuListeners = nsnull;
|
||||
mScrollListeners = nsnull;
|
||||
mDestroyed = PR_FALSE;
|
||||
mTarget = nsnull;
|
||||
NS_INIT_REFCNT();
|
||||
|
@ -94,6 +96,7 @@ nsEventListenerManager::~nsEventListenerManager()
|
|||
ReleaseListeners(&mTextListeners, PR_FALSE);
|
||||
ReleaseListeners(&mCompositionListeners, PR_FALSE);
|
||||
ReleaseListeners(&mMenuListeners, PR_FALSE);
|
||||
ReleaseListeners(&mScrollListeners, PR_FALSE);
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsEventListenerManager)
|
||||
|
@ -178,6 +181,9 @@ nsVoidArray** nsEventListenerManager::GetListenersByIID(const nsIID& aIID)
|
|||
else if (aIID.Equals(kIDOMMenuListenerIID)) {
|
||||
return &mMenuListeners;
|
||||
}
|
||||
else if (aIID.Equals(kIDOMScrollListenerIID)) {
|
||||
return &mScrollListeners;
|
||||
}
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
|
@ -451,13 +457,17 @@ nsresult nsEventListenerManager::GetIdentifiersForType(nsIAtom* aType, nsIID& aI
|
|||
*aFlags = NS_EVENT_BITS_XUL_COMMAND_UPDATE;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::onoverflow) {
|
||||
aIID = kIDOMMenuListenerIID;
|
||||
aIID = kIDOMScrollListenerIID;
|
||||
*aFlags = NS_EVENT_BITS_SCROLLPORT_OVERFLOW;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::onunderflow) {
|
||||
aIID = kIDOMMenuListenerIID;
|
||||
aIID = kIDOMScrollListenerIID;
|
||||
*aFlags = NS_EVENT_BITS_SCROLLPORT_UNDERFLOW;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::onoverflowchanged) {
|
||||
aIID = kIDOMScrollListenerIID;
|
||||
*aFlags = NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED;
|
||||
}
|
||||
else if (aType == nsLayoutAtoms::ondragenter) {
|
||||
aIID = NS_GET_IID(nsIDOMDragListener);
|
||||
*aFlags = NS_EVENT_BITS_DRAG_ENTER;
|
||||
|
@ -1481,14 +1491,76 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
if (nsnull != mScrollListeners) {
|
||||
if (nsnull == *aDOMEvent) {
|
||||
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, empty, aEvent);
|
||||
}
|
||||
if (NS_OK == ret) {
|
||||
for (int i=0; mScrollListeners && i<mScrollListeners->Count(); i++) {
|
||||
nsListenerStruct* ls;
|
||||
nsIDOMScrollListener* scrollListener;
|
||||
|
||||
ls = (nsListenerStruct*)mScrollListeners->ElementAt(i);
|
||||
|
||||
if (ls->mFlags & aFlags) {
|
||||
if (NS_OK == ls->mListener->QueryInterface(kIDOMScrollListenerIID, (void**)&scrollListener)) {
|
||||
switch(aEvent->message) {
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
ret = scrollListener->Overflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
ret = scrollListener->Underflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
ret = scrollListener->OverflowChanged(*aDOMEvent);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
NS_RELEASE(scrollListener);
|
||||
}
|
||||
else {
|
||||
PRBool correctSubType = PR_FALSE;
|
||||
PRUint32 subType = 0;
|
||||
switch(aEvent->message) {
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_OVERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_OVERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_UNDERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_UNDERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOWCHANGED:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (correctSubType || ls->mSubType == NS_EVENT_BITS_NONE) {
|
||||
ret = HandleEventSubType(ls, *aDOMEvent, aCurrentTarget, subType, aFlags);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NS_MENU_CREATE:
|
||||
case NS_XUL_CLOSE:
|
||||
case NS_MENU_DESTROY:
|
||||
case NS_MENU_ACTION:
|
||||
case NS_XUL_BROADCAST:
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
case NS_XUL_COMMAND_UPDATE:
|
||||
if (nsnull != mMenuListeners) {
|
||||
if (nsnull == *aDOMEvent) {
|
||||
|
@ -1519,12 +1591,6 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
case NS_XUL_BROADCAST:
|
||||
ret = mMenuListener->Broadcast(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
ret = mMenuListener->Overflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
ret = mMenuListener->Underflow(*aDOMEvent);
|
||||
break;
|
||||
case NS_XUL_COMMAND_UPDATE:
|
||||
ret = mMenuListener->CommandUpdate(*aDOMEvent);
|
||||
break;
|
||||
|
@ -1567,18 +1633,6 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext* aPresContext,
|
|||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_OVERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_OVERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_OVERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_SCROLLPORT_UNDERFLOW:
|
||||
subType = NS_EVENT_BITS_SCROLLPORT_UNDERFLOW;
|
||||
if (ls->mSubType & NS_EVENT_BITS_SCROLLPORT_UNDERFLOW) {
|
||||
correctSubType = PR_TRUE;
|
||||
}
|
||||
break;
|
||||
case NS_XUL_COMMAND_UPDATE:
|
||||
subType = NS_EVENT_BITS_XUL_COMMAND_UPDATE;
|
||||
if (ls->mSubType & NS_EVENT_BITS_XUL_COMMAND_UPDATE) {
|
||||
|
|
|
@ -150,6 +150,7 @@ protected:
|
|||
nsVoidArray* mTextListeners;
|
||||
nsVoidArray* mCompositionListeners;
|
||||
nsVoidArray* mMenuListeners;
|
||||
nsVoidArray* mScrollListeners;
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
PRBool mDestroyed;
|
||||
|
||||
|
@ -220,8 +221,12 @@ protected:
|
|||
#define NS_EVENT_BITS_MENU_ACTION 0x08
|
||||
#define NS_EVENT_BITS_XUL_BROADCAST 0x10
|
||||
#define NS_EVENT_BITS_XUL_COMMAND_UPDATE 0x20
|
||||
#define NS_EVENT_BITS_SCROLLPORT_OVERFLOW 0x40
|
||||
#define NS_EVENT_BITS_SCROLLPORT_UNDERFLOW 0x80
|
||||
|
||||
//nsIScrollListener
|
||||
#define NS_EVENT_BITS_SCROLLPORT_NONE 0x00
|
||||
#define NS_EVENT_BITS_SCROLLPORT_OVERFLOW 0x01
|
||||
#define NS_EVENT_BITS_SCROLLPORT_UNDERFLOW 0x02
|
||||
#define NS_EVENT_BITS_SCROLLPORT_OVERFLOWCHANGED 0x04
|
||||
|
||||
//nsIDOMDragListener
|
||||
#define NS_EVENT_BITS_DRAG_NONE 0x00
|
||||
|
|
|
@ -184,8 +184,10 @@ nsXBLBinding::kEventHandlerMap[] = {
|
|||
{ "command", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "broadcast", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "commandupdate", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "overflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "underflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
|
||||
{ "overflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "underflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "overflowchanged", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
|
||||
{ "focus", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
{ "blur", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
|
@ -513,10 +515,11 @@ nsXBLBinding::InstallEventHandlers(nsIContent* aBoundElement)
|
|||
GetEventHandlerIID(eventAtom, &iid, &found);
|
||||
if (found) {
|
||||
// Add an event listener for mouse and key events only.
|
||||
PRBool mouse = IsMouseHandler(type);
|
||||
PRBool key = IsKeyHandler(type);
|
||||
PRBool focus = IsFocusHandler(type);
|
||||
PRBool xul = IsXULHandler(type);
|
||||
PRBool mouse = IsMouseHandler(type);
|
||||
PRBool key = IsKeyHandler(type);
|
||||
PRBool focus = IsFocusHandler(type);
|
||||
PRBool xul = IsXULHandler(type);
|
||||
PRBool scroll = IsScrollHandler(type);
|
||||
|
||||
nsCOMPtr<nsIDOMEventReceiver> receiver = do_QueryInterface(mBoundElement);
|
||||
nsAutoString attachType;
|
||||
|
@ -562,6 +565,8 @@ nsXBLBinding::InstallEventHandlers(nsIContent* aBoundElement)
|
|||
receiver->AddEventListener(type, (nsIDOMKeyListener*)handler, useCapture);
|
||||
else if(focus)
|
||||
receiver->AddEventListener(type, (nsIDOMFocusListener*)handler, useCapture);
|
||||
else if (scroll)
|
||||
receiver->AddEventListener(type, (nsIDOMScrollListener*)handler, useCapture);
|
||||
else
|
||||
receiver->AddEventListener(type, (nsIDOMMenuListener*)handler, useCapture);
|
||||
|
||||
|
@ -1430,9 +1435,15 @@ PRBool
|
|||
nsXBLBinding::IsXULHandler(const nsString& aName)
|
||||
{
|
||||
return ((aName.EqualsWithConversion("create")) || (aName.EqualsWithConversion("destroy")) || (aName.EqualsWithConversion("broadcast")) ||
|
||||
(aName.EqualsWithConversion("command")) || (aName.EqualsWithConversion("commandupdate")) || (aName.EqualsWithConversion("close")) ||
|
||||
(aName.EqualsWithConversion("overflow")) ||
|
||||
(aName.EqualsWithConversion("underflow")) );
|
||||
(aName.EqualsWithConversion("command")) || (aName.EqualsWithConversion("commandupdate")) || (aName.EqualsWithConversion("close")));
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXBLBinding::IsScrollHandler(const nsString& aName)
|
||||
{
|
||||
return (aName.EqualsWithConversion("overflow") ||
|
||||
aName.EqualsWithConversion("underflow") ||
|
||||
aName.EqualsWithConversion("overflowchanged"));
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -125,6 +125,7 @@ public:
|
|||
static PRBool IsKeyHandler(const nsString& aName);
|
||||
static PRBool IsFocusHandler(const nsString& aName);
|
||||
static PRBool IsXULHandler(const nsString& aName);
|
||||
static PRBool IsScrollHandler(const nsString& aName);
|
||||
|
||||
// Internal member functions
|
||||
protected:
|
||||
|
|
|
@ -103,7 +103,7 @@ nsXBLEventHandler::~nsXBLEventHandler()
|
|||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS4(nsXBLEventHandler, nsIDOMKeyListener, nsIDOMMouseListener, nsIDOMMenuListener, nsIDOMFocusListener)
|
||||
NS_IMPL_ISUPPORTS5(nsXBLEventHandler, nsIDOMKeyListener, nsIDOMMouseListener, nsIDOMMenuListener, nsIDOMFocusListener, nsIDOMScrollListener)
|
||||
|
||||
nsresult nsXBLEventHandler::HandleEvent(nsIDOMEvent* aEvent)
|
||||
{
|
||||
|
@ -293,6 +293,15 @@ nsresult nsXBLEventHandler::Underflow(nsIDOMEvent* aEvent)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::OverflowChanged(nsIDOMEvent* aEvent)
|
||||
{
|
||||
if (!mEventName.EqualsWithConversion("underflowchanged"))
|
||||
return NS_OK;
|
||||
|
||||
ExecuteHandler(NS_ConvertASCIItoUCS2("underflowchanged"), aEvent);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult nsXBLEventHandler::Destroy(nsIDOMEvent* aEvent)
|
||||
{
|
||||
if (!mEventName.EqualsWithConversion("destroy"))
|
||||
|
@ -666,6 +675,7 @@ nsXBLEventHandler::RemoveEventHandlers()
|
|||
PRBool key = nsXBLBinding::IsKeyHandler(type);
|
||||
PRBool focus = nsXBLBinding::IsFocusHandler(type);
|
||||
PRBool xul = nsXBLBinding::IsXULHandler(type);
|
||||
PRBool scroll = nsXBLBinding::IsScrollHandler(type);
|
||||
|
||||
// Remove the event listener.
|
||||
if (mouse)
|
||||
|
@ -674,6 +684,8 @@ nsXBLEventHandler::RemoveEventHandlers()
|
|||
receiver->RemoveEventListener(type, (nsIDOMKeyListener*)this, useCapture);
|
||||
else if(focus)
|
||||
receiver->RemoveEventListener(type, (nsIDOMFocusListener*)this, useCapture);
|
||||
else if(scroll)
|
||||
receiver->RemoveEventListener(type, (nsIDOMScrollListener*)this, useCapture);
|
||||
else
|
||||
receiver->RemoveEventListener(type, (nsIDOMMenuListener*)this, useCapture);
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "nsIDOMKeyListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMFocusListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
|
||||
class nsIXBLBinding;
|
||||
class nsIDOMEvent;
|
||||
|
@ -42,7 +43,8 @@ class nsIController;
|
|||
class nsXBLEventHandler : public nsIDOMKeyListener,
|
||||
public nsIDOMMouseListener,
|
||||
public nsIDOMMenuListener,
|
||||
public nsIDOMFocusListener
|
||||
public nsIDOMFocusListener,
|
||||
public nsIDOMScrollListener
|
||||
{
|
||||
public:
|
||||
nsXBLEventHandler(nsIContent* aBoundElement, nsIContent* aHandlerElement, const nsString& aEventName);
|
||||
|
@ -64,14 +66,18 @@ public:
|
|||
virtual nsresult Focus(nsIDOMEvent* aMouseEvent);
|
||||
virtual nsresult Blur(nsIDOMEvent* aMouseEvent);
|
||||
|
||||
// menu
|
||||
NS_IMETHOD Create(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Close(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Destroy(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Action(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent);
|
||||
|
||||
// scroll
|
||||
NS_IMETHOD Overflow(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD Underflow(nsIDOMEvent* aEvent);
|
||||
NS_IMETHOD OverflowChanged(nsIDOMEvent* aEvent);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
#include "nsIDOMKeyListener.h"
|
||||
#include "nsIDOMFormListener.h"
|
||||
#include "nsIDOMMenuListener.h"
|
||||
#include "nsIDOMScrollListener.h"
|
||||
#include "nsIDOMDragListener.h"
|
||||
#include "nsIRDFNode.h"
|
||||
#include "nsINameSpace.h"
|
||||
|
@ -218,8 +219,10 @@ nsXULContentUtils::kEventHandlerMap[] = {
|
|||
{ "oncommand", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "onbroadcast", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "oncommandupdate", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "onoverflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
{ "onunderflow", nsnull, &NS_GET_IID(nsIDOMMenuListener) },
|
||||
|
||||
{ "onoverflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "onunderflow", nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
{ "onoverflowchanged",nsnull, &NS_GET_IID(nsIDOMScrollListener) },
|
||||
|
||||
{ "onfocus", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
{ "onblur", nsnull, &NS_GET_IID(nsIDOMFocusListener) },
|
||||
|
|
|
@ -423,6 +423,7 @@ enum nsDragDropEventStatus {
|
|||
#define NS_SCROLLPORT_START 1700
|
||||
#define NS_SCROLLPORT_UNDERFLOW (NS_SCROLLPORT_START)
|
||||
#define NS_SCROLLPORT_OVERFLOW (NS_SCROLLPORT_START+1)
|
||||
#define NS_SCROLLPORT_OVERFLOWCHANGED (NS_SCROLLPORT_START+2)
|
||||
|
||||
#define NS_IS_MOUSE_EVENT(evnt) \
|
||||
(((evnt)->message == NS_MOUSE_LEFT_BUTTON_DOWN) || \
|
||||
|
|
Загрузка…
Ссылка в новой задаче