diff --git a/layout/forms/nsListControlFrame.cpp b/layout/forms/nsListControlFrame.cpp index ef670abc7c43..6f9cf59da243 100644 --- a/layout/forms/nsListControlFrame.cpp +++ b/layout/forms/nsListControlFrame.cpp @@ -2371,6 +2371,8 @@ nsListControlFrame::OptionDisabled(nsIContent * aContent) nsresult nsListControlFrame::SelectionChanged(nsIContent* aContent) { + nsresult ret = NS_ERROR_FAILURE; + // Dispatch the NS_FORM_CHANGE event nsEventStatus status = nsEventStatus_eIgnore; nsGUIEvent event; @@ -2379,40 +2381,12 @@ nsListControlFrame::SelectionChanged(nsIContent* aContent) event.message = NS_FORM_CHANGE; event.flags = NS_EVENT_FLAG_NONE; - // Here we create our own DOM event and set the target to the Select - // We'll pass this DOM event in, in hopes that the target is used. - nsIDOMEvent* DOMEvent = nsnull; - nsAutoString empty; - nsresult res = NS_NewDOMUIEvent(&DOMEvent, mPresContext, empty, &event); - if (NS_SUCCEEDED(res) && DOMEvent && mContent) { - nsCOMPtr target; - res = mContent->QueryInterface(kIDOMNodeIID, (void**)getter_AddRefs(target)); - if (NS_SUCCEEDED(res) && target) { - nsCOMPtr pDOMEvent; - res = DOMEvent->QueryInterface(kIPrivateDOMEventIID, (void**)getter_AddRefs(pDOMEvent)); - if (NS_SUCCEEDED(res) && pDOMEvent) { - res = pDOMEvent->SetTarget(target); - if (NS_SUCCEEDED(res)) { - // Have the content handle the event. - res = mContent->HandleDOMEvent(mPresContext, &event, &DOMEvent, NS_EVENT_FLAG_BUBBLE, &status); - } - } - } - NS_RELEASE(DOMEvent); + nsCOMPtr presShell; + mPresContext->GetShell(getter_AddRefs(presShell)); + if (presShell) { + ret = presShell->HandleEventWithTarget(&event, this, nsnull, &status); } - - // Now have the frame handle the event - if (NS_SUCCEEDED(res)) { - if (this) { - nsIFrame* frame = nsnull; - res = this->QueryInterface(kIFrameIID, (void**)&frame); - if ((NS_SUCCEEDED(res)) && (nsnull != frame)) { - res = frame->HandleEvent(mPresContext, &event, &status); - // NS_RELEASE(frame); - } - } - } - return res; + return ret; } //--------------------------------------------------------- diff --git a/layout/html/forms/src/nsGfxListControlFrame.cpp b/layout/html/forms/src/nsGfxListControlFrame.cpp index 40a5b28a8a62..5dd3fd251a9f 100644 --- a/layout/html/forms/src/nsGfxListControlFrame.cpp +++ b/layout/html/forms/src/nsGfxListControlFrame.cpp @@ -2527,6 +2527,8 @@ nsGfxListControlFrame::GetOptionsContainer(nsIPresContext* aPresContext, nsIFram nsresult nsGfxListControlFrame::SelectionChanged(nsIContent* aContent) { + nsresult ret = NS_ERROR_FAILURE; + // Dispatch the NS_FORM_CHANGE event nsEventStatus status = nsEventStatus_eIgnore; nsGUIEvent event; @@ -2535,40 +2537,12 @@ nsGfxListControlFrame::SelectionChanged(nsIContent* aContent) event.message = NS_FORM_CHANGE; event.flags = NS_EVENT_FLAG_NONE; - // Here we create our own DOM event and set the target to the Select - // We'll pass this DOM event in, in hopes that the target is used. - nsIDOMEvent* DOMEvent = nsnull; - nsAutoString empty; - nsresult res = NS_NewDOMUIEvent(&DOMEvent, mPresContext, empty, &event); - if (NS_SUCCEEDED(res) && DOMEvent && mContent) { - nsCOMPtr target; - res = mContent->QueryInterface(kIDOMNodeIID, (void**)getter_AddRefs(target)); - if (NS_SUCCEEDED(res) && target) { - nsCOMPtr pDOMEvent; - res = DOMEvent->QueryInterface(kIPrivateDOMEventIID, (void**)getter_AddRefs(pDOMEvent)); - if (NS_SUCCEEDED(res) && pDOMEvent) { - res = pDOMEvent->SetTarget(target); - if (NS_SUCCEEDED(res)) { - // Have the content handle the event. - res = mContent->HandleDOMEvent(mPresContext, &event, &DOMEvent, NS_EVENT_FLAG_BUBBLE, &status); - } - } - } - NS_RELEASE(DOMEvent); + nsCOMPtr presShell; + mPresContext->GetShell(getter_AddRefs(presShell)); + if (presShell) { + ret = presShell->HandleEventWithTarget(&event, this, nsnull, &status); } - - // Now have the frame handle the event - if (NS_SUCCEEDED(res)) { - if (this) { - nsIFrame* frame = nsnull; - res = this->QueryInterface(kIFrameIID, (void**)&frame); - if ((NS_SUCCEEDED(res)) && (nsnull != frame)) { - res = frame->HandleEvent(mPresContext, &event, &status); - // NS_RELEASE(frame); - } - } - } - return res; + return ret; } //--------------------------------------------------------- diff --git a/layout/html/forms/src/nsListControlFrame.cpp b/layout/html/forms/src/nsListControlFrame.cpp index ef670abc7c43..6f9cf59da243 100644 --- a/layout/html/forms/src/nsListControlFrame.cpp +++ b/layout/html/forms/src/nsListControlFrame.cpp @@ -2371,6 +2371,8 @@ nsListControlFrame::OptionDisabled(nsIContent * aContent) nsresult nsListControlFrame::SelectionChanged(nsIContent* aContent) { + nsresult ret = NS_ERROR_FAILURE; + // Dispatch the NS_FORM_CHANGE event nsEventStatus status = nsEventStatus_eIgnore; nsGUIEvent event; @@ -2379,40 +2381,12 @@ nsListControlFrame::SelectionChanged(nsIContent* aContent) event.message = NS_FORM_CHANGE; event.flags = NS_EVENT_FLAG_NONE; - // Here we create our own DOM event and set the target to the Select - // We'll pass this DOM event in, in hopes that the target is used. - nsIDOMEvent* DOMEvent = nsnull; - nsAutoString empty; - nsresult res = NS_NewDOMUIEvent(&DOMEvent, mPresContext, empty, &event); - if (NS_SUCCEEDED(res) && DOMEvent && mContent) { - nsCOMPtr target; - res = mContent->QueryInterface(kIDOMNodeIID, (void**)getter_AddRefs(target)); - if (NS_SUCCEEDED(res) && target) { - nsCOMPtr pDOMEvent; - res = DOMEvent->QueryInterface(kIPrivateDOMEventIID, (void**)getter_AddRefs(pDOMEvent)); - if (NS_SUCCEEDED(res) && pDOMEvent) { - res = pDOMEvent->SetTarget(target); - if (NS_SUCCEEDED(res)) { - // Have the content handle the event. - res = mContent->HandleDOMEvent(mPresContext, &event, &DOMEvent, NS_EVENT_FLAG_BUBBLE, &status); - } - } - } - NS_RELEASE(DOMEvent); + nsCOMPtr presShell; + mPresContext->GetShell(getter_AddRefs(presShell)); + if (presShell) { + ret = presShell->HandleEventWithTarget(&event, this, nsnull, &status); } - - // Now have the frame handle the event - if (NS_SUCCEEDED(res)) { - if (this) { - nsIFrame* frame = nsnull; - res = this->QueryInterface(kIFrameIID, (void**)&frame); - if ((NS_SUCCEEDED(res)) && (nsnull != frame)) { - res = frame->HandleEvent(mPresContext, &event, &status); - // NS_RELEASE(frame); - } - } - } - return res; + return ret; } //---------------------------------------------------------