зеркало из https://github.com/mozilla/gecko-dev.git
Adding new onselect event. Also slight modification to ender text widget focus behavior
This commit is contained in:
Родитель
cc92bf7af9
Коммит
11585608e8
|
@ -2485,7 +2485,8 @@ PRBool nsDocument::SetProperty(JSContext *aContext, jsval aID, jsval *aVp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mPropName == "onsubmit" || mPropName == "onreset" || mPropName == "onchange") {
|
else if (mPropName == "onsubmit" || mPropName == "onreset" || mPropName == "onchange" ||
|
||||||
|
mPropName == "onselect") {
|
||||||
if (NS_OK == GetListenerManager(&mManager)) {
|
if (NS_OK == GetListenerManager(&mManager)) {
|
||||||
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
||||||
if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) {
|
if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) {
|
||||||
|
|
|
@ -1118,7 +1118,8 @@ nsGenericElement::SetProperty(JSContext *aContext, jsval aID, jsval *aVp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (propName == "onsubmit" || propName == "onreset" || propName == "onchange") {
|
else if (propName == "onsubmit" || propName == "onreset" || propName == "onchange" ||
|
||||||
|
propName == "onselect") {
|
||||||
if (NS_OK == GetListenerManager(&manager)) {
|
if (NS_OK == GetListenerManager(&manager)) {
|
||||||
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
||||||
if (NS_OK != manager->RegisterScriptEventListener(mScriptCX, owner, kIDOMFormListenerIID)) {
|
if (NS_OK != manager->RegisterScriptEventListener(mScriptCX, owner, kIDOMFormListenerIID)) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ static char* mEventNames[] = {
|
||||||
"mousedown", "mouseup", "click", "dblclick", "mouseover",
|
"mousedown", "mouseup", "click", "dblclick", "mouseover",
|
||||||
"mouseout", "mousemove", "keydown", "keyup", "keypress",
|
"mouseout", "mousemove", "keydown", "keyup", "keypress",
|
||||||
"focus", "blur", "load", "unload", "abort", "error",
|
"focus", "blur", "load", "unload", "abort", "error",
|
||||||
"submit", "reset", "change", "paint" ,"text",
|
"submit", "reset", "change", "select", "paint" ,"text",
|
||||||
"create", "destroy", "action"
|
"create", "destroy", "action"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -646,6 +646,8 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
|
||||||
return mEventNames[eDOMEvents_reset];
|
return mEventNames[eDOMEvents_reset];
|
||||||
case NS_FORM_CHANGE:
|
case NS_FORM_CHANGE:
|
||||||
return mEventNames[eDOMEvents_change];
|
return mEventNames[eDOMEvents_change];
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
|
return mEventNames[eDOMEvents_select];
|
||||||
case NS_PAINT:
|
case NS_PAINT:
|
||||||
return mEventNames[eDOMEvents_paint];
|
return mEventNames[eDOMEvents_paint];
|
||||||
case NS_TEXT_EVENT:
|
case NS_TEXT_EVENT:
|
||||||
|
|
|
@ -57,6 +57,7 @@ public:
|
||||||
eDOMEvents_submit,
|
eDOMEvents_submit,
|
||||||
eDOMEvents_reset,
|
eDOMEvents_reset,
|
||||||
eDOMEvents_change,
|
eDOMEvents_change,
|
||||||
|
eDOMEvents_select,
|
||||||
eDOMEvents_paint,
|
eDOMEvents_paint,
|
||||||
eDOMEvents_text,
|
eDOMEvents_text,
|
||||||
eDOMEvents_create,
|
eDOMEvents_create,
|
||||||
|
|
|
@ -330,6 +330,10 @@ nsresult nsEventListenerManager::GetIdentifiersForType(const nsString& aType, ns
|
||||||
aIID = kIDOMFormListenerIID;
|
aIID = kIDOMFormListenerIID;
|
||||||
*aFlags = NS_EVENT_BITS_FORM_CHANGE;
|
*aFlags = NS_EVENT_BITS_FORM_CHANGE;
|
||||||
}
|
}
|
||||||
|
else if (aType == "select") {
|
||||||
|
aIID = kIDOMFormListenerIID;
|
||||||
|
*aFlags = NS_EVENT_BITS_FORM_SELECT;
|
||||||
|
}
|
||||||
else if (aType == "load") {
|
else if (aType == "load") {
|
||||||
aIID = kIDOMLoadListenerIID;
|
aIID = kIDOMLoadListenerIID;
|
||||||
*aFlags = NS_EVENT_BITS_LOAD_LOAD;
|
*aFlags = NS_EVENT_BITS_LOAD_LOAD;
|
||||||
|
@ -851,6 +855,7 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
|
||||||
case NS_FORM_SUBMIT:
|
case NS_FORM_SUBMIT:
|
||||||
case NS_FORM_RESET:
|
case NS_FORM_RESET:
|
||||||
case NS_FORM_CHANGE:
|
case NS_FORM_CHANGE:
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
if (nsnull != mFormListeners) {
|
if (nsnull != mFormListeners) {
|
||||||
if (nsnull == *aDOMEvent) {
|
if (nsnull == *aDOMEvent) {
|
||||||
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, aEvent);
|
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, aEvent);
|
||||||
|
@ -874,6 +879,9 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
|
||||||
case NS_FORM_CHANGE:
|
case NS_FORM_CHANGE:
|
||||||
ret = mFormListener->Change(*aDOMEvent);
|
ret = mFormListener->Change(*aDOMEvent);
|
||||||
break;
|
break;
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
|
ret = mFormListener->Select(*aDOMEvent);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -897,6 +905,11 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
|
||||||
correctSubType = PR_TRUE;
|
correctSubType = PR_TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
|
if (ls->mSubType & NS_EVENT_BITS_FORM_SELECT) {
|
||||||
|
correctSubType = PR_TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,6 +156,7 @@ protected:
|
||||||
#define NS_EVENT_BITS_FORM_SUBMIT 0x01
|
#define NS_EVENT_BITS_FORM_SUBMIT 0x01
|
||||||
#define NS_EVENT_BITS_FORM_RESET 0x02
|
#define NS_EVENT_BITS_FORM_RESET 0x02
|
||||||
#define NS_EVENT_BITS_FORM_CHANGE 0x04
|
#define NS_EVENT_BITS_FORM_CHANGE 0x04
|
||||||
|
#define NS_EVENT_BITS_FORM_SELECT 0x08
|
||||||
|
|
||||||
//nsIDOMLoadListener
|
//nsIDOMLoadListener
|
||||||
#define NS_EVENT_BITS_LOAD_NONE 0x00
|
#define NS_EVENT_BITS_LOAD_NONE 0x00
|
||||||
|
|
|
@ -1219,6 +1219,8 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIContent* targetBeforeEvent = mCurrentTargetContent;
|
||||||
|
|
||||||
if (mCurrentFocus) {
|
if (mCurrentFocus) {
|
||||||
ChangeFocus(mCurrentFocus, PR_FALSE);
|
ChangeFocus(mCurrentFocus, PR_FALSE);
|
||||||
|
|
||||||
|
@ -1228,9 +1230,14 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
|
||||||
event.eventStructType = NS_EVENT;
|
event.eventStructType = NS_EVENT;
|
||||||
event.message = NS_BLUR_CONTENT;
|
event.message = NS_BLUR_CONTENT;
|
||||||
|
|
||||||
|
mCurrentTargetContent = mCurrentFocus;
|
||||||
|
NS_ADDREF(mCurrentTargetContent);
|
||||||
|
|
||||||
if (nsnull != mPresContext) {
|
if (nsnull != mPresContext) {
|
||||||
mCurrentFocus->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
mCurrentFocus->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_RELEASE(mCurrentTargetContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nsnull != aContent) {
|
if (nsnull != aContent) {
|
||||||
|
@ -1240,10 +1247,18 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
|
||||||
event.eventStructType = NS_EVENT;
|
event.eventStructType = NS_EVENT;
|
||||||
event.message = NS_FOCUS_CONTENT;
|
event.message = NS_FOCUS_CONTENT;
|
||||||
|
|
||||||
|
mCurrentTargetContent = aContent;
|
||||||
|
NS_ADDREF(mCurrentTargetContent);
|
||||||
|
|
||||||
if (nsnull != mPresContext) {
|
if (nsnull != mPresContext) {
|
||||||
aContent->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
aContent->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_RELEASE(mCurrentTargetContent);
|
||||||
|
|
||||||
|
//reset mCurretTargetContent to what it was
|
||||||
|
mCurrentTargetContent = targetBeforeEvent;
|
||||||
|
|
||||||
nsAutoString tabIndex;
|
nsAutoString tabIndex;
|
||||||
aContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::tabindex, tabIndex);
|
aContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::tabindex, tabIndex);
|
||||||
PRInt32 ec, val = tabIndex.ToInteger(&ec);
|
PRInt32 ec, val = tabIndex.ToInteger(&ec);
|
||||||
|
|
|
@ -674,7 +674,8 @@ nsGenericHTMLElement::SetAttribute(PRInt32 aNameSpaceID,
|
||||||
AddScriptEventListener(aAttribute, aValue, kIDOMFocusListenerIID);
|
AddScriptEventListener(aAttribute, aValue, kIDOMFocusListenerIID);
|
||||||
else if ((nsHTMLAtoms::onsubmit == aAttribute) ||
|
else if ((nsHTMLAtoms::onsubmit == aAttribute) ||
|
||||||
(nsHTMLAtoms::onreset == aAttribute) ||
|
(nsHTMLAtoms::onreset == aAttribute) ||
|
||||||
(nsHTMLAtoms::onchange == aAttribute))
|
(nsHTMLAtoms::onchange == aAttribute) ||
|
||||||
|
(nsHTMLAtoms::onselect == aAttribute))
|
||||||
AddScriptEventListener(aAttribute, aValue, kIDOMFormListenerIID);
|
AddScriptEventListener(aAttribute, aValue, kIDOMFormListenerIID);
|
||||||
else if (nsHTMLAtoms::onpaint == aAttribute)
|
else if (nsHTMLAtoms::onpaint == aAttribute)
|
||||||
AddScriptEventListener(aAttribute, aValue, kIDOMPaintListenerIID);
|
AddScriptEventListener(aAttribute, aValue, kIDOMPaintListenerIID);
|
||||||
|
|
|
@ -187,6 +187,7 @@ HTML_ATOM(ol, "ol")
|
||||||
HTML_ATOM(onabort, "onabort")
|
HTML_ATOM(onabort, "onabort")
|
||||||
HTML_ATOM(onblur, "onblur")
|
HTML_ATOM(onblur, "onblur")
|
||||||
HTML_ATOM(onchange, "onchange")
|
HTML_ATOM(onchange, "onchange")
|
||||||
|
HTML_ATOM(onselect, "onselect")
|
||||||
HTML_ATOM(onclick, "onclick")
|
HTML_ATOM(onclick, "onclick")
|
||||||
HTML_ATOM(ondblclick, "ondblclick")
|
HTML_ATOM(ondblclick, "ondblclick")
|
||||||
HTML_ATOM(ondragdrop, "ondragdrop")
|
HTML_ATOM(ondragdrop, "ondragdrop")
|
||||||
|
|
|
@ -187,6 +187,7 @@ HTML_ATOM(ol, "ol")
|
||||||
HTML_ATOM(onabort, "onabort")
|
HTML_ATOM(onabort, "onabort")
|
||||||
HTML_ATOM(onblur, "onblur")
|
HTML_ATOM(onblur, "onblur")
|
||||||
HTML_ATOM(onchange, "onchange")
|
HTML_ATOM(onchange, "onchange")
|
||||||
|
HTML_ATOM(onselect, "onselect")
|
||||||
HTML_ATOM(onclick, "onclick")
|
HTML_ATOM(onclick, "onclick")
|
||||||
HTML_ATOM(ondblclick, "ondblclick")
|
HTML_ATOM(ondblclick, "ondblclick")
|
||||||
HTML_ATOM(ondragdrop, "ondragdrop")
|
HTML_ATOM(ondragdrop, "ondragdrop")
|
||||||
|
|
|
@ -376,6 +376,7 @@ static EventHandlerMapEntry kEventHandlerMap[] = {
|
||||||
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
|
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
|
||||||
{ "onreset", nsnull, &kIDOMFormListenerIID },
|
{ "onreset", nsnull, &kIDOMFormListenerIID },
|
||||||
{ "onchange", nsnull, &kIDOMFormListenerIID },
|
{ "onchange", nsnull, &kIDOMFormListenerIID },
|
||||||
|
{ "onselect", nsnull, &kIDOMFormListenerIID },
|
||||||
|
|
||||||
{ "onpaint", nsnull, &kIDOMPaintListenerIID },
|
{ "onpaint", nsnull, &kIDOMPaintListenerIID },
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,13 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual nsresult Change(nsIDOMEvent* aEvent) = 0;
|
virtual nsresult Change(nsIDOMEvent* aEvent) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes a form select event
|
||||||
|
* @param aEvent @see nsIDOMEvent.h
|
||||||
|
* @returns whether the event was consumed or ignored. @see nsresult
|
||||||
|
*/
|
||||||
|
virtual nsresult Select(nsIDOMEvent* aEvent) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // nsIDOMFormListener_h__
|
#endif // nsIDOMFormListener_h__
|
||||||
|
|
|
@ -2511,7 +2511,8 @@ GlobalWindowImpl::CheckForEventListener(JSContext *aContext, nsString& aPropName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (aPropName == "onsubmit" || aPropName == "onreset" || aPropName == "onchange") {
|
else if (aPropName == "onsubmit" || aPropName == "onreset" || aPropName == "onchange" ||
|
||||||
|
aPropName == "onselect") {
|
||||||
if (NS_OK == GetListenerManager(&mManager)) {
|
if (NS_OK == GetListenerManager(&mManager)) {
|
||||||
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
||||||
if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) {
|
if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) {
|
||||||
|
|
|
@ -2485,7 +2485,8 @@ PRBool nsDocument::SetProperty(JSContext *aContext, jsval aID, jsval *aVp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mPropName == "onsubmit" || mPropName == "onreset" || mPropName == "onchange") {
|
else if (mPropName == "onsubmit" || mPropName == "onreset" || mPropName == "onchange" ||
|
||||||
|
mPropName == "onselect") {
|
||||||
if (NS_OK == GetListenerManager(&mManager)) {
|
if (NS_OK == GetListenerManager(&mManager)) {
|
||||||
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
||||||
if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) {
|
if (NS_OK != mManager->RegisterScriptEventListener(mScriptCX, this, kIDOMFormListenerIID)) {
|
||||||
|
|
|
@ -1118,7 +1118,8 @@ nsGenericElement::SetProperty(JSContext *aContext, jsval aID, jsval *aVp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (propName == "onsubmit" || propName == "onreset" || propName == "onchange") {
|
else if (propName == "onsubmit" || propName == "onreset" || propName == "onchange" ||
|
||||||
|
propName == "onselect") {
|
||||||
if (NS_OK == GetListenerManager(&manager)) {
|
if (NS_OK == GetListenerManager(&manager)) {
|
||||||
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
|
||||||
if (NS_OK != manager->RegisterScriptEventListener(mScriptCX, owner, kIDOMFormListenerIID)) {
|
if (NS_OK != manager->RegisterScriptEventListener(mScriptCX, owner, kIDOMFormListenerIID)) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ static char* mEventNames[] = {
|
||||||
"mousedown", "mouseup", "click", "dblclick", "mouseover",
|
"mousedown", "mouseup", "click", "dblclick", "mouseover",
|
||||||
"mouseout", "mousemove", "keydown", "keyup", "keypress",
|
"mouseout", "mousemove", "keydown", "keyup", "keypress",
|
||||||
"focus", "blur", "load", "unload", "abort", "error",
|
"focus", "blur", "load", "unload", "abort", "error",
|
||||||
"submit", "reset", "change", "paint" ,"text",
|
"submit", "reset", "change", "select", "paint" ,"text",
|
||||||
"create", "destroy", "action"
|
"create", "destroy", "action"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -646,6 +646,8 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
|
||||||
return mEventNames[eDOMEvents_reset];
|
return mEventNames[eDOMEvents_reset];
|
||||||
case NS_FORM_CHANGE:
|
case NS_FORM_CHANGE:
|
||||||
return mEventNames[eDOMEvents_change];
|
return mEventNames[eDOMEvents_change];
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
|
return mEventNames[eDOMEvents_select];
|
||||||
case NS_PAINT:
|
case NS_PAINT:
|
||||||
return mEventNames[eDOMEvents_paint];
|
return mEventNames[eDOMEvents_paint];
|
||||||
case NS_TEXT_EVENT:
|
case NS_TEXT_EVENT:
|
||||||
|
|
|
@ -57,6 +57,7 @@ public:
|
||||||
eDOMEvents_submit,
|
eDOMEvents_submit,
|
||||||
eDOMEvents_reset,
|
eDOMEvents_reset,
|
||||||
eDOMEvents_change,
|
eDOMEvents_change,
|
||||||
|
eDOMEvents_select,
|
||||||
eDOMEvents_paint,
|
eDOMEvents_paint,
|
||||||
eDOMEvents_text,
|
eDOMEvents_text,
|
||||||
eDOMEvents_create,
|
eDOMEvents_create,
|
||||||
|
|
|
@ -330,6 +330,10 @@ nsresult nsEventListenerManager::GetIdentifiersForType(const nsString& aType, ns
|
||||||
aIID = kIDOMFormListenerIID;
|
aIID = kIDOMFormListenerIID;
|
||||||
*aFlags = NS_EVENT_BITS_FORM_CHANGE;
|
*aFlags = NS_EVENT_BITS_FORM_CHANGE;
|
||||||
}
|
}
|
||||||
|
else if (aType == "select") {
|
||||||
|
aIID = kIDOMFormListenerIID;
|
||||||
|
*aFlags = NS_EVENT_BITS_FORM_SELECT;
|
||||||
|
}
|
||||||
else if (aType == "load") {
|
else if (aType == "load") {
|
||||||
aIID = kIDOMLoadListenerIID;
|
aIID = kIDOMLoadListenerIID;
|
||||||
*aFlags = NS_EVENT_BITS_LOAD_LOAD;
|
*aFlags = NS_EVENT_BITS_LOAD_LOAD;
|
||||||
|
@ -851,6 +855,7 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
|
||||||
case NS_FORM_SUBMIT:
|
case NS_FORM_SUBMIT:
|
||||||
case NS_FORM_RESET:
|
case NS_FORM_RESET:
|
||||||
case NS_FORM_CHANGE:
|
case NS_FORM_CHANGE:
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
if (nsnull != mFormListeners) {
|
if (nsnull != mFormListeners) {
|
||||||
if (nsnull == *aDOMEvent) {
|
if (nsnull == *aDOMEvent) {
|
||||||
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, aEvent);
|
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, aEvent);
|
||||||
|
@ -874,6 +879,9 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
|
||||||
case NS_FORM_CHANGE:
|
case NS_FORM_CHANGE:
|
||||||
ret = mFormListener->Change(*aDOMEvent);
|
ret = mFormListener->Change(*aDOMEvent);
|
||||||
break;
|
break;
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
|
ret = mFormListener->Select(*aDOMEvent);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -897,6 +905,11 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
|
||||||
correctSubType = PR_TRUE;
|
correctSubType = PR_TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NS_FORM_SELECTED:
|
||||||
|
if (ls->mSubType & NS_EVENT_BITS_FORM_SELECT) {
|
||||||
|
correctSubType = PR_TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,6 +156,7 @@ protected:
|
||||||
#define NS_EVENT_BITS_FORM_SUBMIT 0x01
|
#define NS_EVENT_BITS_FORM_SUBMIT 0x01
|
||||||
#define NS_EVENT_BITS_FORM_RESET 0x02
|
#define NS_EVENT_BITS_FORM_RESET 0x02
|
||||||
#define NS_EVENT_BITS_FORM_CHANGE 0x04
|
#define NS_EVENT_BITS_FORM_CHANGE 0x04
|
||||||
|
#define NS_EVENT_BITS_FORM_SELECT 0x08
|
||||||
|
|
||||||
//nsIDOMLoadListener
|
//nsIDOMLoadListener
|
||||||
#define NS_EVENT_BITS_LOAD_NONE 0x00
|
#define NS_EVENT_BITS_LOAD_NONE 0x00
|
||||||
|
|
|
@ -1219,6 +1219,8 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIContent* targetBeforeEvent = mCurrentTargetContent;
|
||||||
|
|
||||||
if (mCurrentFocus) {
|
if (mCurrentFocus) {
|
||||||
ChangeFocus(mCurrentFocus, PR_FALSE);
|
ChangeFocus(mCurrentFocus, PR_FALSE);
|
||||||
|
|
||||||
|
@ -1228,9 +1230,14 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
|
||||||
event.eventStructType = NS_EVENT;
|
event.eventStructType = NS_EVENT;
|
||||||
event.message = NS_BLUR_CONTENT;
|
event.message = NS_BLUR_CONTENT;
|
||||||
|
|
||||||
|
mCurrentTargetContent = mCurrentFocus;
|
||||||
|
NS_ADDREF(mCurrentTargetContent);
|
||||||
|
|
||||||
if (nsnull != mPresContext) {
|
if (nsnull != mPresContext) {
|
||||||
mCurrentFocus->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
mCurrentFocus->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_RELEASE(mCurrentTargetContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nsnull != aContent) {
|
if (nsnull != aContent) {
|
||||||
|
@ -1240,10 +1247,18 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
|
||||||
event.eventStructType = NS_EVENT;
|
event.eventStructType = NS_EVENT;
|
||||||
event.message = NS_FOCUS_CONTENT;
|
event.message = NS_FOCUS_CONTENT;
|
||||||
|
|
||||||
|
mCurrentTargetContent = aContent;
|
||||||
|
NS_ADDREF(mCurrentTargetContent);
|
||||||
|
|
||||||
if (nsnull != mPresContext) {
|
if (nsnull != mPresContext) {
|
||||||
aContent->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
aContent->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_RELEASE(mCurrentTargetContent);
|
||||||
|
|
||||||
|
//reset mCurretTargetContent to what it was
|
||||||
|
mCurrentTargetContent = targetBeforeEvent;
|
||||||
|
|
||||||
nsAutoString tabIndex;
|
nsAutoString tabIndex;
|
||||||
aContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::tabindex, tabIndex);
|
aContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::tabindex, tabIndex);
|
||||||
PRInt32 ec, val = tabIndex.ToInteger(&ec);
|
PRInt32 ec, val = tabIndex.ToInteger(&ec);
|
||||||
|
|
|
@ -187,6 +187,7 @@ HTML_ATOM(ol, "ol")
|
||||||
HTML_ATOM(onabort, "onabort")
|
HTML_ATOM(onabort, "onabort")
|
||||||
HTML_ATOM(onblur, "onblur")
|
HTML_ATOM(onblur, "onblur")
|
||||||
HTML_ATOM(onchange, "onchange")
|
HTML_ATOM(onchange, "onchange")
|
||||||
|
HTML_ATOM(onselect, "onselect")
|
||||||
HTML_ATOM(onclick, "onclick")
|
HTML_ATOM(onclick, "onclick")
|
||||||
HTML_ATOM(ondblclick, "ondblclick")
|
HTML_ATOM(ondblclick, "ondblclick")
|
||||||
HTML_ATOM(ondragdrop, "ondragdrop")
|
HTML_ATOM(ondragdrop, "ondragdrop")
|
||||||
|
|
|
@ -674,7 +674,8 @@ nsGenericHTMLElement::SetAttribute(PRInt32 aNameSpaceID,
|
||||||
AddScriptEventListener(aAttribute, aValue, kIDOMFocusListenerIID);
|
AddScriptEventListener(aAttribute, aValue, kIDOMFocusListenerIID);
|
||||||
else if ((nsHTMLAtoms::onsubmit == aAttribute) ||
|
else if ((nsHTMLAtoms::onsubmit == aAttribute) ||
|
||||||
(nsHTMLAtoms::onreset == aAttribute) ||
|
(nsHTMLAtoms::onreset == aAttribute) ||
|
||||||
(nsHTMLAtoms::onchange == aAttribute))
|
(nsHTMLAtoms::onchange == aAttribute) ||
|
||||||
|
(nsHTMLAtoms::onselect == aAttribute))
|
||||||
AddScriptEventListener(aAttribute, aValue, kIDOMFormListenerIID);
|
AddScriptEventListener(aAttribute, aValue, kIDOMFormListenerIID);
|
||||||
else if (nsHTMLAtoms::onpaint == aAttribute)
|
else if (nsHTMLAtoms::onpaint == aAttribute)
|
||||||
AddScriptEventListener(aAttribute, aValue, kIDOMPaintListenerIID);
|
AddScriptEventListener(aAttribute, aValue, kIDOMPaintListenerIID);
|
||||||
|
|
|
@ -652,6 +652,53 @@ NS_IMETHODIMP nsGfxTextControlFrame::GetProperty(nsIAtom* aName, nsString& aValu
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nsGfxTextControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
|
||||||
|
{
|
||||||
|
if (mWebShell) {
|
||||||
|
if (aOn) {
|
||||||
|
nsresult result = NS_OK;
|
||||||
|
|
||||||
|
nsIContentViewer *viewer = nsnull;
|
||||||
|
mWebShell->GetContentViewer(&viewer);
|
||||||
|
if (viewer) {
|
||||||
|
nsIDocumentViewer* docv = nsnull;
|
||||||
|
viewer->QueryInterface(kIDocumentViewerIID, (void**) &docv);
|
||||||
|
if (nsnull != docv) {
|
||||||
|
nsIPresContext* cx = nsnull;
|
||||||
|
docv->GetPresContext(cx);
|
||||||
|
if (nsnull != cx) {
|
||||||
|
nsIPresShell *shell = nsnull;
|
||||||
|
cx->GetShell(&shell);
|
||||||
|
if (nsnull != shell) {
|
||||||
|
nsIViewManager *vm = nsnull;
|
||||||
|
shell->GetViewManager(&vm);
|
||||||
|
if (nsnull != vm) {
|
||||||
|
nsIView *rootview = nsnull;
|
||||||
|
vm->GetRootView(rootview);
|
||||||
|
if (rootview) {
|
||||||
|
nsIWidget* widget;
|
||||||
|
rootview->GetWidget(widget);
|
||||||
|
if (widget) {
|
||||||
|
result = widget->SetFocus();
|
||||||
|
NS_RELEASE(widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NS_RELEASE(vm);
|
||||||
|
}
|
||||||
|
NS_RELEASE(shell);
|
||||||
|
}
|
||||||
|
NS_RELEASE(cx);
|
||||||
|
}
|
||||||
|
NS_RELEASE(docv);
|
||||||
|
}
|
||||||
|
NS_RELEASE(viewer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mWebShell->RemoveFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------------- Ender methods ---------------------- */
|
/* --------------------- Ender methods ---------------------- */
|
||||||
|
|
||||||
|
|
|
@ -394,6 +394,7 @@ public:
|
||||||
// nsIFormControlFrame
|
// nsIFormControlFrame
|
||||||
NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue);
|
NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue);
|
||||||
NS_IMETHOD GetProperty(nsIAtom* aName, nsString& aValue);
|
NS_IMETHOD GetProperty(nsIAtom* aName, nsString& aValue);
|
||||||
|
virtual void SetFocus(PRBool aOn = PR_TRUE, PRBool aRepaint = PR_FALSE);
|
||||||
|
|
||||||
virtual nsWidgetInitData* GetWidgetInitData(nsIPresContext& aPresContext);
|
virtual nsWidgetInitData* GetWidgetInitData(nsIPresContext& aPresContext);
|
||||||
|
|
||||||
|
|
|
@ -376,6 +376,7 @@ static EventHandlerMapEntry kEventHandlerMap[] = {
|
||||||
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
|
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
|
||||||
{ "onreset", nsnull, &kIDOMFormListenerIID },
|
{ "onreset", nsnull, &kIDOMFormListenerIID },
|
||||||
{ "onchange", nsnull, &kIDOMFormListenerIID },
|
{ "onchange", nsnull, &kIDOMFormListenerIID },
|
||||||
|
{ "onselect", nsnull, &kIDOMFormListenerIID },
|
||||||
|
|
||||||
{ "onpaint", nsnull, &kIDOMPaintListenerIID },
|
{ "onpaint", nsnull, &kIDOMPaintListenerIID },
|
||||||
|
|
||||||
|
|
|
@ -376,6 +376,7 @@ static EventHandlerMapEntry kEventHandlerMap[] = {
|
||||||
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
|
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
|
||||||
{ "onreset", nsnull, &kIDOMFormListenerIID },
|
{ "onreset", nsnull, &kIDOMFormListenerIID },
|
||||||
{ "onchange", nsnull, &kIDOMFormListenerIID },
|
{ "onchange", nsnull, &kIDOMFormListenerIID },
|
||||||
|
{ "onselect", nsnull, &kIDOMFormListenerIID },
|
||||||
|
|
||||||
{ "onpaint", nsnull, &kIDOMPaintListenerIID },
|
{ "onpaint", nsnull, &kIDOMPaintListenerIID },
|
||||||
|
|
||||||
|
|
|
@ -300,6 +300,7 @@ enum nsDragDropEventStatus {
|
||||||
#define NS_FORM_SUBMIT (NS_FORM_EVENT_START)
|
#define NS_FORM_SUBMIT (NS_FORM_EVENT_START)
|
||||||
#define NS_FORM_RESET (NS_FORM_EVENT_START + 1)
|
#define NS_FORM_RESET (NS_FORM_EVENT_START + 1)
|
||||||
#define NS_FORM_CHANGE (NS_FORM_EVENT_START + 2)
|
#define NS_FORM_CHANGE (NS_FORM_EVENT_START + 2)
|
||||||
|
#define NS_FORM_SELECTED (NS_FORM_EVENT_START + 3)
|
||||||
|
|
||||||
//Need separate focus/blur notifications for non-native widgets
|
//Need separate focus/blur notifications for non-native widgets
|
||||||
#define NS_FOCUS_EVENT_START 1300
|
#define NS_FOCUS_EVENT_START 1300
|
||||||
|
|
|
@ -829,6 +829,7 @@ case _value: eventName = _name ; break
|
||||||
_ASSIGN_eventName(NS_DRAGDROP_EXIT,"NS_DRAGDROP_EXIT");
|
_ASSIGN_eventName(NS_DRAGDROP_EXIT,"NS_DRAGDROP_EXIT");
|
||||||
_ASSIGN_eventName(NS_DRAGDROP_OVER,"NS_DRAGDROP_OVER");
|
_ASSIGN_eventName(NS_DRAGDROP_OVER,"NS_DRAGDROP_OVER");
|
||||||
_ASSIGN_eventName(NS_FOCUS_CONTENT,"NS_FOCUS_CONTENT");
|
_ASSIGN_eventName(NS_FOCUS_CONTENT,"NS_FOCUS_CONTENT");
|
||||||
|
_ASSIGN_eventName(NS_FORM_SELECTED,"NS_FORM_SELECTED");
|
||||||
_ASSIGN_eventName(NS_FORM_CHANGE,"NS_FORM_CHANGE");
|
_ASSIGN_eventName(NS_FORM_CHANGE,"NS_FORM_CHANGE");
|
||||||
_ASSIGN_eventName(NS_FORM_RESET,"NS_FORM_RESET");
|
_ASSIGN_eventName(NS_FORM_RESET,"NS_FORM_RESET");
|
||||||
_ASSIGN_eventName(NS_FORM_SUBMIT,"NS_FORM_SUBMIT");
|
_ASSIGN_eventName(NS_FORM_SUBMIT,"NS_FORM_SUBMIT");
|
||||||
|
|
Загрузка…
Ссылка в новой задаче