Index: ui/wm/core/accelerator_filter.cc |
diff --git a/ui/wm/core/accelerator_filter.cc b/ui/wm/core/accelerator_filter.cc |
index 12e91316d21ce81ce0c8906c851bf13f24cedf83..b2d11201cc9054739a84c5806a22fbd1bc15bb62 100644 |
--- a/ui/wm/core/accelerator_filter.cc |
+++ b/ui/wm/core/accelerator_filter.cc |
@@ -71,6 +71,19 @@ void AcceleratorFilter::OnKeyEvent(ui::KeyEvent* event) { |
event->StopPropagation(); |
} |
+void AcceleratorFilter::OnMouseEvent(ui::MouseEvent* event) { |
+ // When a mouse event is interleaved between two key accelerators, we must |
+ // store this event as an empty default accelerator in the accelerator |
+ // history, so that the |AcceleratorController| can notice that something |
+ // actually happened between those two key accelerators. |
+ // Non-real synthesized mouse events should be ignored because we don't want |
+ // them to interfere with tracking the key accelerator. |
+ if (event->flags() & ui::EF_IS_SYNTHESIZED) |
+ return; |
+ |
+ accelerator_history_->StoreCurrentAccelerator(ui::Accelerator()); |
+} |
+ |
ui::Accelerator CreateAcceleratorFromKeyEvent(const ui::KeyEvent& key_event) { |
const int kModifierFlagMask = |
(ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN); |