Chromium Code Reviews| Index: ui/views/controls/button/custom_button.cc |
| diff --git a/ui/views/controls/button/custom_button.cc b/ui/views/controls/button/custom_button.cc |
| index 115dcb4b486be897aa89d77250af8ee40d0c7e31..db8ca5d4fb4b42f9f20143cb0256836d90beab5f 100644 |
| --- a/ui/views/controls/button/custom_button.cc |
| +++ b/ui/views/controls/button/custom_button.cc |
| @@ -20,6 +20,7 @@ |
| #include "ui/views/controls/button/menu_button.h" |
| #include "ui/views/controls/button/radio_button.h" |
| #include "ui/views/controls/button/toggle_button.h" |
| +#include "ui/views/style/platform_style.h" |
| #include "ui/views/widget/widget.h" |
| #if defined(USE_AURA) |
| @@ -34,6 +35,16 @@ namespace { |
| // How long the hover animation takes if uninterrupted. |
| const int kHoverFadeDurationMs = 150; |
| +CustomButton::ButtonAction GetButtonActionForKeyEvent( |
| + const ui::KeyEvent& event) { |
| + if (event.key_code() == ui::VKEY_SPACE) |
| + return PlatformStyle::kButtonActionOnSpace; |
| + else if (event.key_code() == ui::VKEY_RETURN && |
|
tapted
2017/01/04 04:54:31
nit: "no else after return" - https://chromium.goo
karandeepb
2017/01/04 06:14:45
Done.
|
| + PlatformStyle::kClickControlOnReturn) |
| + return CustomButton::ACTION_CLICK; |
| + return CustomButton::ACTION_NONE; |
| +} |
| + |
| } // namespace |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -238,31 +249,39 @@ bool CustomButton::OnKeyPressed(const ui::KeyEvent& event) { |
| if (state_ == STATE_DISABLED) |
| return false; |
| - // Space sets button state to pushed. Enter clicks the button. This matches |
| - // the Windows native behavior of buttons, where Space clicks the button on |
| - // KeyRelease and Enter clicks the button on KeyPressed. |
| - if (event.key_code() == ui::VKEY_SPACE) { |
| - SetState(STATE_PRESSED); |
| - if (GetInkDrop()->GetTargetInkDropState() != |
| - views::InkDropState::ACTION_PENDING) { |
| - AnimateInkDrop(views::InkDropState::ACTION_PENDING, nullptr /* event */); |
| - } |
| - } else if (event.key_code() == ui::VKEY_RETURN) { |
| - SetState(STATE_NORMAL); |
| - NotifyClick(event); |
| - } else { |
| - return false; |
| + switch (GetButtonActionForKeyEvent(event)) { |
| + case ButtonAction::ACTION_PRESS: |
| + SetState(STATE_PRESSED); |
| + if (GetInkDrop()->GetTargetInkDropState() != |
| + views::InkDropState::ACTION_PENDING) { |
|
tapted
2017/01/04 04:54:31
views:: not needed, same below
karandeepb
2017/01/04 06:14:45
Done.
|
| + AnimateInkDrop(views::InkDropState::ACTION_PENDING, |
| + nullptr /* event */); |
| + } |
| + return true; |
| + break; |
|
tapted
2017/01/04 04:54:31
nit: no break
karandeepb
2017/01/04 06:14:45
Done.
|
| + case ButtonAction::ACTION_CLICK: |
| + SetState(STATE_NORMAL); |
| + NotifyClick(event); |
| + return true; |
| + break; |
|
tapted
2017/01/04 04:54:31
nit: no break
karandeepb
2017/01/04 06:14:45
Done.
|
| + case ButtonAction::ACTION_NONE: |
| + return false; |
| } |
| - return true; |
| + |
| + NOTREACHED(); |
| + return false; |
| } |
| bool CustomButton::OnKeyReleased(const ui::KeyEvent& event) { |
| - if ((state_ == STATE_PRESSED) && (event.key_code() == ui::VKEY_SPACE)) { |
| - SetState(STATE_NORMAL); |
| - NotifyClick(event); |
| - return true; |
| - } |
| - return false; |
| + const bool click_button = |
| + state_ == STATE_PRESSED && |
| + GetButtonActionForKeyEvent(event) == ButtonAction::ACTION_PRESS; |
| + if (!click_button) |
| + return false; |
| + |
| + SetState(STATE_NORMAL); |
| + NotifyClick(event); |
| + return true; |
| } |
| void CustomButton::OnGestureEvent(ui::GestureEvent* event) { |
| @@ -306,9 +325,9 @@ bool CustomButton::AcceleratorPressed(const ui::Accelerator& accelerator) { |
| bool CustomButton::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) { |
| // If this button is focused and the user presses space or enter, don't let |
| - // that be treated as an accelerator. |
| - return (event.key_code() == ui::VKEY_SPACE) || |
| - (event.key_code() == ui::VKEY_RETURN); |
|
karandeepb
2017/01/04 03:55:40
I am not entirely sure about the reason behind thi
tapted
2017/01/04 04:54:31
I think it would reach here if CustomButton::OnKey
karandeepb
2017/01/04 06:14:45
Yeah that was my guess as well. This I guess can h
tapted
2017/01/05 00:34:41
Ah. Yup.
karandeepb
2017/01/05 10:50:08
Will do!
|
| + // that be treated as an accelerator if there is a button action corresponding |
| + // to it. |
| + return GetButtonActionForKeyEvent(event) != ButtonAction::ACTION_NONE; |
| } |
| void CustomButton::ShowContextMenu(const gfx::Point& p, |