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 61b595bbfeb2f059327527ad3c1ef18e76afb270..aafbf2d65a63aa32810d6da8d352f9bf1663f8af 100644 |
--- a/ui/views/controls/button/custom_button.cc |
+++ b/ui/views/controls/button/custom_button.cc |
@@ -251,6 +251,13 @@ void CustomButton::OnGestureEvent(ui::GestureEvent* event) { |
} |
bool CustomButton::AcceleratorPressed(const ui::Accelerator& accelerator) { |
+ // Should only handle accelerators when active. However, only top level |
+ // widgets can be active, so for child widgets check if they are focused |
+ // instead. |
+ if ((IsChildWidget() && !FocusInChildWidget()) || |
+ (!IsChildWidget() && !GetWidget()->IsActive())) { |
+ return false; |
+ } |
SetState(STATE_NORMAL); |
// TODO(beng): remove once NotifyClick takes ui::Event. |
ui::MouseEvent synthetic_event( |
@@ -378,4 +385,14 @@ void CustomButton::OnBlur() { |
SetState(STATE_NORMAL); |
} |
+bool CustomButton::IsChildWidget() const { |
+ return GetWidget() && GetWidget()->GetTopLevelWidget() != GetWidget(); |
+} |
+ |
+bool CustomButton::FocusInChildWidget() const { |
+ return GetWidget() && |
+ GetWidget()->GetRootView()->Contains( |
+ GetFocusManager()->GetFocusedView()); |
+} |
+ |
} // namespace views |