summaryrefslogtreecommitdiffstats
path: root/chrome/views
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-22 00:22:28 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-22 00:22:28 +0000
commita849f497f2707c59d104bef5b62f6e5cf0a9a5ea (patch)
treeea983c73974d795744169783f25ba8f69cff4ef1 /chrome/views
parentd06442883eb767e2b61de78f1d942fc0f9b87df1 (diff)
downloadchromium_src-a849f497f2707c59d104bef5b62f6e5cf0a9a5ea.zip
chromium_src-a849f497f2707c59d104bef5b62f6e5cf0a9a5ea.tar.gz
chromium_src-a849f497f2707c59d104bef5b62f6e5cf0a9a5ea.tar.bz2
Make sure radio buttons can't be toggled like checkboxes.
First part of: http://crbug.com/10834 TEST=open options, click on any of the already-checked radio buttons. It should stay checked and not uncheck. Review URL: http://codereview.chromium.org/87068 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14167 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/views')
-rw-r--r--chrome/views/controls/button/checkbox.cc2
-rw-r--r--chrome/views/controls/button/radio_button.cc9
-rw-r--r--chrome/views/controls/button/radio_button.h1
3 files changed, 11 insertions, 1 deletions
diff --git a/chrome/views/controls/button/checkbox.cc b/chrome/views/controls/button/checkbox.cc
index a67dbd4..ae523ed 100644
--- a/chrome/views/controls/button/checkbox.cc
+++ b/chrome/views/controls/button/checkbox.cc
@@ -123,7 +123,7 @@ bool Checkbox::OnMousePressed(const MouseEvent& e) {
void Checkbox::OnMouseReleased(const MouseEvent& e, bool canceled) {
native_wrapper_->SetPushed(false);
- if (!canceled & HitTestLabel(e)) {
+ if (!canceled && HitTestLabel(e)) {
SetChecked(!checked());
ButtonPressed();
}
diff --git a/chrome/views/controls/button/radio_button.cc b/chrome/views/controls/button/radio_button.cc
index fb09549..b8b870cb 100644
--- a/chrome/views/controls/button/radio_button.cc
+++ b/chrome/views/controls/button/radio_button.cc
@@ -81,6 +81,15 @@ bool RadioButton::IsGroupFocusTraversable() const {
return false;
}
+void RadioButton::OnMouseReleased(const views::MouseEvent& event,
+ bool canceled) {
+ native_wrapper_->SetPushed(false);
+ // Call through to toggle the button only if we're not already checked, since
+ // radio buttons can't be toggled like checkboxes.
+ if (!checked())
+ Checkbox::OnMouseReleased(event, canceled);
+}
+
std::string RadioButton::GetClassName() const {
return kViewClassName;
}
diff --git a/chrome/views/controls/button/radio_button.h b/chrome/views/controls/button/radio_button.h
index f1db45b..1e07bae 100644
--- a/chrome/views/controls/button/radio_button.h
+++ b/chrome/views/controls/button/radio_button.h
@@ -26,6 +26,7 @@ class RadioButton : public Checkbox {
// Overridden from View:
virtual View* GetSelectedViewForGroup(int group_id);
virtual bool IsGroupFocusTraversable() const;
+ virtual void OnMouseReleased(const views::MouseEvent& event, bool canceled);
protected:
virtual std::string GetClassName() const;