diff --git a/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp b/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp index b498688250a..f2502717723 100644 --- a/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp +++ b/mozilla/layout/html/forms/src/nsSelectControlFrame.cpp @@ -120,6 +120,7 @@ public: ///XXX: End o the temporary methods virtual void MouseClicked(nsIPresContext* aPresContext); + virtual void ControlChanged(nsIPresContext* aPresContext); // nsIFormControLFrame NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue); @@ -1022,13 +1023,18 @@ nsSelectControlFrame::Paint(nsIPresContext& aPresContext, return NS_OK; } -// Update the locally cached selection array. -// XXX Note, this is not sufficient. The selected state of the widget can change -// with mouse clicks, key presses, and focus changes. This problem is particularly -// evident for combo boxes, which don't reliably receive mouseup (therefore click) -// We need to register this method as a "selection changed" callback. +// Forward this on as a control changed event - this enables onChange for +// list boxes as ControlChanged is currently only sent for combos void nsSelectControlFrame::MouseClicked(nsIPresContext* aPresContext) +{ + ControlChanged(aPresContext); +} + +// Update the locally cached selection array. +// If different option(s) are selected, send a DOM onChange event. +void +nsSelectControlFrame::ControlChanged(nsIPresContext* aPresContext) { if (!nsFormFrame::GetDisabled(this)) {