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

Unified Diff: ash/accelerators/accelerator_controller.cc

Issue 308023002: Add EF_IS_REPEAT flag to KeyEvent to handle repeated accelerators correctly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use ui::EF_IS_REPEAT in test instead Created 6 years, 6 months 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
« no previous file with comments | « ash/accelerators/accelerator_controller.h ('k') | ash/accelerators/accelerator_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/accelerators/accelerator_controller.cc
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
index 96ee265d23b84e862c260c41ea42eceaa55c1b82..b1b77ccec02d351404cca2bb545d86971624eec0 100644
--- a/ash/accelerators/accelerator_controller.cc
+++ b/ash/accelerators/accelerator_controller.cc
@@ -743,21 +743,20 @@ bool HandlePrintUIHierarchies() {
return true;
}
-} // namespace
+class AutoSet {
+ public:
+ AutoSet(ui::Accelerator* scoped, ui::Accelerator new_value)
+ : scoped_(scoped), new_value_(new_value) {}
+ ~AutoSet() { *scoped_ = new_value_; }
-////////////////////////////////////////////////////////////////////////////////
-// AcceleratorControllerContext, public:
+ private:
+ ui::Accelerator* scoped_;
+ const ui::Accelerator new_value_;
-AcceleratorControllerContext::AcceleratorControllerContext() {
- current_accelerator_.set_type(ui::ET_UNKNOWN);
- previous_accelerator_.set_type(ui::ET_UNKNOWN);
-}
+ DISALLOW_COPY_AND_ASSIGN(AutoSet);
+};
-void AcceleratorControllerContext::UpdateContext(
- const ui::Accelerator& accelerator) {
- previous_accelerator_ = current_accelerator_;
- current_accelerator_ = accelerator;
-}
+} // namespace
////////////////////////////////////////////////////////////////////////////////
// AcceleratorController, public:
@@ -771,6 +770,7 @@ AcceleratorController::~AcceleratorController() {
}
void AcceleratorController::Init() {
+ previous_accelerator_.set_type(ui::ET_UNKNOWN);
for (size_t i = 0; i < kActionsAllowedAtLoginOrLockScreenLength; ++i) {
actions_allowed_at_login_screen_.insert(
kActionsAllowedAtLoginOrLockScreen[i]);
@@ -825,6 +825,8 @@ void AcceleratorController::UnregisterAll(ui::AcceleratorTarget* target) {
}
bool AcceleratorController::Process(const ui::Accelerator& accelerator) {
+ AutoSet auto_set(&previous_accelerator_, accelerator);
+
if (ime_control_delegate_) {
return accelerator_manager_->Process(
ime_control_delegate_->RemapAccelerator(accelerator));
@@ -889,18 +891,15 @@ bool AcceleratorController::PerformAction(int action,
// empty Accelerator() instance as the second argument. Such events
// should never be suspended.
const bool gesture_event = key_code == ui::VKEY_UNKNOWN;
-
// Ignore accelerators invoked as repeated (while holding a key for a long
// time, if their handling is nonrepeatable.
if (nonrepeatable_actions_.find(action) != nonrepeatable_actions_.end() &&
- context_.repeated() && !gesture_event) {
+ accelerator.IsRepeat() && !gesture_event) {
return true;
}
// Type of the previous accelerator. Used by NEXT_IME and DISABLE_CAPS_LOCK.
- const ui::EventType previous_event_type =
- context_.previous_accelerator().type();
- const ui::KeyboardCode previous_key_code =
- context_.previous_accelerator().key_code();
+ const ui::EventType previous_event_type = previous_accelerator_.type();
+ const ui::KeyboardCode previous_key_code = previous_accelerator_.key_code();
// You *MUST* return true when some action is performed. Otherwise, this
// function might be called *twice*, via BrowserView::PreHandleKeyboardEvent
« no previous file with comments | « ash/accelerators/accelerator_controller.h ('k') | ash/accelerators/accelerator_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698