diff --git a/layout/html/forms/src/nsButtonControlFrame.cpp b/layout/html/forms/src/nsButtonControlFrame.cpp
index cd2b67500621..9ca7fdf74eda 100644
--- a/layout/html/forms/src/nsButtonControlFrame.cpp
+++ b/layout/html/forms/src/nsButtonControlFrame.cpp
@@ -521,7 +521,7 @@ nsButtonControlFrame::HandleEvent(nsIPresContext& aPresContext,
case NS_KEY_DOWN:
if (NS_KEY_EVENT == aEvent->eventStructType) {
nsKeyEvent* keyEvent = (nsKeyEvent*)aEvent;
- if (NS_VK_SPACE == keyEvent->keyCode) {
+ if (NS_VK_SPACE == keyEvent->keyCode || NS_VK_RETURN == keyEvent->keyCode) {
MouseClicked(&aPresContext);
}
}
diff --git a/layout/html/forms/src/nsCheckboxControlFrame.cpp b/layout/html/forms/src/nsCheckboxControlFrame.cpp
index 761db7768349..92a5f4881188 100644
--- a/layout/html/forms/src/nsCheckboxControlFrame.cpp
+++ b/layout/html/forms/src/nsCheckboxControlFrame.cpp
@@ -353,13 +353,26 @@ nsCheckboxControlFrame::Paint(nsIPresContext& aPresContext,
}
NS_METHOD nsCheckboxControlFrame::HandleEvent(nsIPresContext& aPresContext,
- nsGUIEvent* aEvent,
- nsEventStatus& aEventStatus)
+ nsGUIEvent* aEvent,
+ nsEventStatus& aEventStatus)
{
if (nsEventStatus_eConsumeNoDefault == aEventStatus) {
return NS_OK;
}
+ switch(aEvent->message) {
+ case NS_KEY_PRESS:
+ if (NS_KEY_EVENT == aEvent->eventStructType) {
+ nsKeyEvent* keyEvent = (nsKeyEvent*)aEvent;
+ if (NS_VK_SPACE == keyEvent->keyCode || NS_VK_RETURN == keyEvent->keyCode) {
+ MouseClicked(&aPresContext);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
if (nsnull == mWidget) {
// Handle GFX rendered widget Mouse Down event
PRInt32 type;
diff --git a/layout/html/forms/src/nsRadioControlFrame.cpp b/layout/html/forms/src/nsRadioControlFrame.cpp
index 71a807658296..6cdfac6f705f 100644
--- a/layout/html/forms/src/nsRadioControlFrame.cpp
+++ b/layout/html/forms/src/nsRadioControlFrame.cpp
@@ -393,6 +393,31 @@ nsRadioControlFrame::Paint(nsIPresContext& aPresContext,
return NS_OK;
}
+NS_METHOD
+nsRadioControlFrame::HandleEvent(nsIPresContext& aPresContext,
+ nsGUIEvent* aEvent,
+ nsEventStatus& aEventStatus)
+{
+ if (nsEventStatus_eConsumeNoDefault == aEventStatus) {
+ return NS_OK;
+ }
+
+ switch(aEvent->message) {
+ case NS_KEY_PRESS:
+ if (NS_KEY_EVENT == aEvent->eventStructType) {
+ nsKeyEvent* keyEvent = (nsKeyEvent*)aEvent;
+ if (NS_VK_SPACE == keyEvent->keyCode || NS_VK_RETURN == keyEvent->keyCode) {
+ MouseClicked(&aPresContext);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ return(nsFormControlFrame::HandleEvent(aPresContext, aEvent, aEventStatus));
+}
+
void nsRadioControlFrame::GetRadioControlFrameState(nsString& aValue)
{
if (nsnull != mWidget) {
diff --git a/layout/html/forms/src/nsRadioControlFrame.h b/layout/html/forms/src/nsRadioControlFrame.h
index 8974d3c276d0..1ec93fc45b75 100644
--- a/layout/html/forms/src/nsRadioControlFrame.h
+++ b/layout/html/forms/src/nsRadioControlFrame.h
@@ -73,11 +73,15 @@ public:
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect,
nsFramePaintLayer aWhichLayer);
-
+
virtual void PaintRadioButton(nsIPresContext& aPresContext,
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect);
+ NS_IMETHOD HandleEvent(nsIPresContext& aPresContext,
+ nsGUIEvent* aEvent,
+ nsEventStatus& aEventStatus);
+
///XXX: End o the temporary methods
protected: