Adding new onselect event. Also slight modification to ender text widget focus behavior

This commit is contained in:
joki%netscape.com 1999-08-07 23:18:35 +00:00
Родитель cc92bf7af9
Коммит 11585608e8
28 изменённых файлов: 143 добавлений и 9 удалений

Просмотреть файл

@ -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)) {
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
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)) {
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
if (NS_OK != manager->RegisterScriptEventListener(mScriptCX, owner, kIDOMFormListenerIID)) {

Просмотреть файл

@ -43,7 +43,7 @@ static char* mEventNames[] = {
"mousedown", "mouseup", "click", "dblclick", "mouseover",
"mouseout", "mousemove", "keydown", "keyup", "keypress",
"focus", "blur", "load", "unload", "abort", "error",
"submit", "reset", "change", "paint" ,"text",
"submit", "reset", "change", "select", "paint" ,"text",
"create", "destroy", "action"
};
@ -646,6 +646,8 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
return mEventNames[eDOMEvents_reset];
case NS_FORM_CHANGE:
return mEventNames[eDOMEvents_change];
case NS_FORM_SELECTED:
return mEventNames[eDOMEvents_select];
case NS_PAINT:
return mEventNames[eDOMEvents_paint];
case NS_TEXT_EVENT:

Просмотреть файл

@ -57,6 +57,7 @@ public:
eDOMEvents_submit,
eDOMEvents_reset,
eDOMEvents_change,
eDOMEvents_select,
eDOMEvents_paint,
eDOMEvents_text,
eDOMEvents_create,

Просмотреть файл

@ -330,6 +330,10 @@ nsresult nsEventListenerManager::GetIdentifiersForType(const nsString& aType, ns
aIID = kIDOMFormListenerIID;
*aFlags = NS_EVENT_BITS_FORM_CHANGE;
}
else if (aType == "select") {
aIID = kIDOMFormListenerIID;
*aFlags = NS_EVENT_BITS_FORM_SELECT;
}
else if (aType == "load") {
aIID = kIDOMLoadListenerIID;
*aFlags = NS_EVENT_BITS_LOAD_LOAD;
@ -851,6 +855,7 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
case NS_FORM_SUBMIT:
case NS_FORM_RESET:
case NS_FORM_CHANGE:
case NS_FORM_SELECTED:
if (nsnull != mFormListeners) {
if (nsnull == *aDOMEvent) {
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, aEvent);
@ -874,6 +879,9 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
case NS_FORM_CHANGE:
ret = mFormListener->Change(*aDOMEvent);
break;
case NS_FORM_SELECTED:
ret = mFormListener->Select(*aDOMEvent);
break;
default:
break;
}
@ -897,6 +905,11 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
correctSubType = PR_TRUE;
}
break;
case NS_FORM_SELECTED:
if (ls->mSubType & NS_EVENT_BITS_FORM_SELECT) {
correctSubType = PR_TRUE;
}
break;
default:
break;
}

Просмотреть файл

@ -156,6 +156,7 @@ protected:
#define NS_EVENT_BITS_FORM_SUBMIT 0x01
#define NS_EVENT_BITS_FORM_RESET 0x02
#define NS_EVENT_BITS_FORM_CHANGE 0x04
#define NS_EVENT_BITS_FORM_SELECT 0x08
//nsIDOMLoadListener
#define NS_EVENT_BITS_LOAD_NONE 0x00

Просмотреть файл

@ -1219,6 +1219,8 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
return NS_OK;
}
nsIContent* targetBeforeEvent = mCurrentTargetContent;
if (mCurrentFocus) {
ChangeFocus(mCurrentFocus, PR_FALSE);
@ -1228,9 +1230,14 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
event.eventStructType = NS_EVENT;
event.message = NS_BLUR_CONTENT;
mCurrentTargetContent = mCurrentFocus;
NS_ADDREF(mCurrentTargetContent);
if (nsnull != mPresContext) {
mCurrentFocus->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
NS_RELEASE(mCurrentTargetContent);
}
if (nsnull != aContent) {
@ -1240,10 +1247,18 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
event.eventStructType = NS_EVENT;
event.message = NS_FOCUS_CONTENT;
mCurrentTargetContent = aContent;
NS_ADDREF(mCurrentTargetContent);
if (nsnull != mPresContext) {
aContent->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
NS_RELEASE(mCurrentTargetContent);
//reset mCurretTargetContent to what it was
mCurrentTargetContent = targetBeforeEvent;
nsAutoString tabIndex;
aContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::tabindex, tabIndex);
PRInt32 ec, val = tabIndex.ToInteger(&ec);

Просмотреть файл

@ -674,7 +674,8 @@ nsGenericHTMLElement::SetAttribute(PRInt32 aNameSpaceID,
AddScriptEventListener(aAttribute, aValue, kIDOMFocusListenerIID);
else if ((nsHTMLAtoms::onsubmit == aAttribute) ||
(nsHTMLAtoms::onreset == aAttribute) ||
(nsHTMLAtoms::onchange == aAttribute))
(nsHTMLAtoms::onchange == aAttribute) ||
(nsHTMLAtoms::onselect == aAttribute))
AddScriptEventListener(aAttribute, aValue, kIDOMFormListenerIID);
else if (nsHTMLAtoms::onpaint == aAttribute)
AddScriptEventListener(aAttribute, aValue, kIDOMPaintListenerIID);

Просмотреть файл

@ -187,6 +187,7 @@ HTML_ATOM(ol, "ol")
HTML_ATOM(onabort, "onabort")
HTML_ATOM(onblur, "onblur")
HTML_ATOM(onchange, "onchange")
HTML_ATOM(onselect, "onselect")
HTML_ATOM(onclick, "onclick")
HTML_ATOM(ondblclick, "ondblclick")
HTML_ATOM(ondragdrop, "ondragdrop")

Просмотреть файл

@ -187,6 +187,7 @@ HTML_ATOM(ol, "ol")
HTML_ATOM(onabort, "onabort")
HTML_ATOM(onblur, "onblur")
HTML_ATOM(onchange, "onchange")
HTML_ATOM(onselect, "onselect")
HTML_ATOM(onclick, "onclick")
HTML_ATOM(ondblclick, "ondblclick")
HTML_ATOM(ondragdrop, "ondragdrop")

Просмотреть файл

@ -376,6 +376,7 @@ static EventHandlerMapEntry kEventHandlerMap[] = {
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
{ "onreset", nsnull, &kIDOMFormListenerIID },
{ "onchange", nsnull, &kIDOMFormListenerIID },
{ "onselect", nsnull, &kIDOMFormListenerIID },
{ "onpaint", nsnull, &kIDOMPaintListenerIID },

Просмотреть файл

@ -57,6 +57,13 @@ public:
*/
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__

Просмотреть файл

@ -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)) {
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
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)) {
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
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)) {
nsIScriptContext *mScriptCX = (nsIScriptContext *)JS_GetContextPrivate(aContext);
if (NS_OK != manager->RegisterScriptEventListener(mScriptCX, owner, kIDOMFormListenerIID)) {

Просмотреть файл

@ -43,7 +43,7 @@ static char* mEventNames[] = {
"mousedown", "mouseup", "click", "dblclick", "mouseover",
"mouseout", "mousemove", "keydown", "keyup", "keypress",
"focus", "blur", "load", "unload", "abort", "error",
"submit", "reset", "change", "paint" ,"text",
"submit", "reset", "change", "select", "paint" ,"text",
"create", "destroy", "action"
};
@ -646,6 +646,8 @@ const char* nsDOMEvent::GetEventName(PRUint32 aEventType)
return mEventNames[eDOMEvents_reset];
case NS_FORM_CHANGE:
return mEventNames[eDOMEvents_change];
case NS_FORM_SELECTED:
return mEventNames[eDOMEvents_select];
case NS_PAINT:
return mEventNames[eDOMEvents_paint];
case NS_TEXT_EVENT:

Просмотреть файл

@ -57,6 +57,7 @@ public:
eDOMEvents_submit,
eDOMEvents_reset,
eDOMEvents_change,
eDOMEvents_select,
eDOMEvents_paint,
eDOMEvents_text,
eDOMEvents_create,

Просмотреть файл

@ -330,6 +330,10 @@ nsresult nsEventListenerManager::GetIdentifiersForType(const nsString& aType, ns
aIID = kIDOMFormListenerIID;
*aFlags = NS_EVENT_BITS_FORM_CHANGE;
}
else if (aType == "select") {
aIID = kIDOMFormListenerIID;
*aFlags = NS_EVENT_BITS_FORM_SELECT;
}
else if (aType == "load") {
aIID = kIDOMLoadListenerIID;
*aFlags = NS_EVENT_BITS_LOAD_LOAD;
@ -851,6 +855,7 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
case NS_FORM_SUBMIT:
case NS_FORM_RESET:
case NS_FORM_CHANGE:
case NS_FORM_SELECTED:
if (nsnull != mFormListeners) {
if (nsnull == *aDOMEvent) {
ret = NS_NewDOMUIEvent(aDOMEvent, aPresContext, aEvent);
@ -874,6 +879,9 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
case NS_FORM_CHANGE:
ret = mFormListener->Change(*aDOMEvent);
break;
case NS_FORM_SELECTED:
ret = mFormListener->Select(*aDOMEvent);
break;
default:
break;
}
@ -897,6 +905,11 @@ nsresult nsEventListenerManager::HandleEvent(nsIPresContext& aPresContext,
correctSubType = PR_TRUE;
}
break;
case NS_FORM_SELECTED:
if (ls->mSubType & NS_EVENT_BITS_FORM_SELECT) {
correctSubType = PR_TRUE;
}
break;
default:
break;
}

Просмотреть файл

@ -156,6 +156,7 @@ protected:
#define NS_EVENT_BITS_FORM_SUBMIT 0x01
#define NS_EVENT_BITS_FORM_RESET 0x02
#define NS_EVENT_BITS_FORM_CHANGE 0x04
#define NS_EVENT_BITS_FORM_SELECT 0x08
//nsIDOMLoadListener
#define NS_EVENT_BITS_LOAD_NONE 0x00

Просмотреть файл

@ -1219,6 +1219,8 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
return NS_OK;
}
nsIContent* targetBeforeEvent = mCurrentTargetContent;
if (mCurrentFocus) {
ChangeFocus(mCurrentFocus, PR_FALSE);
@ -1228,9 +1230,14 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
event.eventStructType = NS_EVENT;
event.message = NS_BLUR_CONTENT;
mCurrentTargetContent = mCurrentFocus;
NS_ADDREF(mCurrentTargetContent);
if (nsnull != mPresContext) {
mCurrentFocus->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
NS_RELEASE(mCurrentTargetContent);
}
if (nsnull != aContent) {
@ -1240,10 +1247,18 @@ nsEventStateManager::SendFocusBlur(nsIContent *aContent)
event.eventStructType = NS_EVENT;
event.message = NS_FOCUS_CONTENT;
mCurrentTargetContent = aContent;
NS_ADDREF(mCurrentTargetContent);
if (nsnull != mPresContext) {
aContent->HandleDOMEvent(*mPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
NS_RELEASE(mCurrentTargetContent);
//reset mCurretTargetContent to what it was
mCurrentTargetContent = targetBeforeEvent;
nsAutoString tabIndex;
aContent->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::tabindex, tabIndex);
PRInt32 ec, val = tabIndex.ToInteger(&ec);

Просмотреть файл

@ -187,6 +187,7 @@ HTML_ATOM(ol, "ol")
HTML_ATOM(onabort, "onabort")
HTML_ATOM(onblur, "onblur")
HTML_ATOM(onchange, "onchange")
HTML_ATOM(onselect, "onselect")
HTML_ATOM(onclick, "onclick")
HTML_ATOM(ondblclick, "ondblclick")
HTML_ATOM(ondragdrop, "ondragdrop")

Просмотреть файл

@ -674,7 +674,8 @@ nsGenericHTMLElement::SetAttribute(PRInt32 aNameSpaceID,
AddScriptEventListener(aAttribute, aValue, kIDOMFocusListenerIID);
else if ((nsHTMLAtoms::onsubmit == aAttribute) ||
(nsHTMLAtoms::onreset == aAttribute) ||
(nsHTMLAtoms::onchange == aAttribute))
(nsHTMLAtoms::onchange == aAttribute) ||
(nsHTMLAtoms::onselect == aAttribute))
AddScriptEventListener(aAttribute, aValue, kIDOMFormListenerIID);
else if (nsHTMLAtoms::onpaint == aAttribute)
AddScriptEventListener(aAttribute, aValue, kIDOMPaintListenerIID);

Просмотреть файл

@ -652,6 +652,53 @@ NS_IMETHODIMP nsGfxTextControlFrame::GetProperty(nsIAtom* aName, nsString& aValu
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 ---------------------- */

Просмотреть файл

@ -394,6 +394,7 @@ public:
// nsIFormControlFrame
NS_IMETHOD SetProperty(nsIAtom* aName, const 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);

Просмотреть файл

@ -376,6 +376,7 @@ static EventHandlerMapEntry kEventHandlerMap[] = {
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
{ "onreset", nsnull, &kIDOMFormListenerIID },
{ "onchange", nsnull, &kIDOMFormListenerIID },
{ "onselect", nsnull, &kIDOMFormListenerIID },
{ "onpaint", nsnull, &kIDOMPaintListenerIID },

Просмотреть файл

@ -376,6 +376,7 @@ static EventHandlerMapEntry kEventHandlerMap[] = {
{ "onsubmit", nsnull, &kIDOMFormListenerIID },
{ "onreset", nsnull, &kIDOMFormListenerIID },
{ "onchange", nsnull, &kIDOMFormListenerIID },
{ "onselect", nsnull, &kIDOMFormListenerIID },
{ "onpaint", nsnull, &kIDOMPaintListenerIID },

Просмотреть файл

@ -300,6 +300,7 @@ enum nsDragDropEventStatus {
#define NS_FORM_SUBMIT (NS_FORM_EVENT_START)
#define NS_FORM_RESET (NS_FORM_EVENT_START + 1)
#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
#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_OVER,"NS_DRAGDROP_OVER");
_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_RESET,"NS_FORM_RESET");
_ASSIGN_eventName(NS_FORM_SUBMIT,"NS_FORM_SUBMIT");