Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Unified Diff: ui/base/accelerators/accelerator_history.cc

Issue 727583002: Regression: Search+Key pops up app launcher (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/base/accelerators/accelerator_history.cc
diff --git a/ui/base/accelerators/accelerator_history.cc b/ui/base/accelerators/accelerator_history.cc
new file mode 100644
index 0000000000000000000000000000000000000000..11a05919946133a718453a61e22d9ced8ab672ee
--- /dev/null
+++ b/ui/base/accelerators/accelerator_history.cc
@@ -0,0 +1,86 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/base/accelerators/accelerator_history.h"
+#include "ui/events/event_constants.h"
+
+namespace ui {
+
+namespace {
+
+inline int CalculateModifiers(const ui::KeyEvent& event) {
+ int modifiers = ui::EF_NONE;
+ if (event.IsShiftDown())
+ modifiers |= ui::EF_SHIFT_DOWN;
+ if (event.IsControlDown())
+ modifiers |= ui::EF_CONTROL_DOWN;
+ if (event.IsAltDown())
+ modifiers |= ui::EF_ALT_DOWN;
+#if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+ if (event.IsCommandDown())
+ modifiers |= ui::EF_COMMAND_DOWN;
+#endif
+ return modifiers;
+}
+
+};
+
+// ----------------------------------------------------------------------
+// Public Methods
+// ----------------------------------------------------------------------
+
+AcceleratorHistory* AcceleratorHistory::GetInstance() {
+ return Singleton<AcceleratorHistory>::get();
+}
+
+void AcceleratorHistory::BuildCurrentAccelerator(const ui::KeyEvent& event) {
+ // Only build accelerators for 'pressed' or 'released' key events.
+ if (event.type() != ui::ET_KEY_PRESSED && event.type() != ui::ET_KEY_RELEASED)
Jun Mukai 2014/11/14 02:09:48 Can this line be IsKeyEvent() instead?
afakhry 2014/11/14 17:30:57 No, because we want to avoid types like ET_TRANSLA
+ return;
+
+ // Record the new accelerator only if the new key event is different from the
+ // previous one.
+ int modifiers = CalculateModifiers(event);
Jun Mukai 2014/11/14 02:09:48 why not directly using event.flags()?
afakhry 2014/11/14 17:30:57 We are only interested in the flags used by the Ac
+ if (ShouldBuildCurrentAccelerator(event, modifiers)) {
+ ui::Accelerator accelerator(event.key_code(), modifiers);
+ accelerator.set_type(event.type());
+ accelerator.set_is_repeat(event.IsRepeat());
+
+ previous_accelerator_ = current_accelerator_;
+ current_accelerator_ = AcceleratorEvent(accelerator);
+ }
+}
+
+const AcceleratorEvent& AcceleratorHistory::GetCurrentAccelerator() const {
+ return current_accelerator_;
+}
+
+const AcceleratorEvent& AcceleratorHistory::GetPreviousAccelerator() const {
+ return previous_accelerator_;
+}
+
+// ----------------------------------------------------------------------
+// Private Methods
+// ----------------------------------------------------------------------
+
+AcceleratorHistory::AcceleratorHistory()
+ : current_accelerator_(),
+ previous_accelerator_() {
+}
+
+AcceleratorHistory::~AcceleratorHistory() {
+}
+
+bool AcceleratorHistory::ShouldBuildCurrentAccelerator(
+ const ui::KeyEvent& event,
+ const int event_modifiers) const {
+ return !(event.type() == current_accelerator_.accelerator.type() &&
+ event.key_code() == current_accelerator_.accelerator.key_code() &&
+ event.IsRepeat() == current_accelerator_.accelerator.IsRepeat() &&
+ event_modifiers == current_accelerator_.accelerator.modifiers());
+}
+
+}; // namespace ui
+
+

Powered by Google App Engine
This is Rietveld 408576698