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

Side by Side Diff: chrome/browser/chromeos/events/event_rewriter.cc

Issue 394553002: Add EF_FINAL_MODIFIERS to suppress remapping. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restore guard on rewriting extended and function keys. Created 6 years, 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/events/event_rewriter_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/events/event_rewriter.h" 5 #include "chrome/browser/chromeos/events/event_rewriter.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/sticky_keys/sticky_keys_controller.h" 9 #include "ash/sticky_keys/sticky_keys_controller.h"
10 #include "ash/wm/window_state.h" 10 #include "ash/wm/window_state.h"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 case ui::EF_MIDDLE_MOUSE_BUTTON: 158 case ui::EF_MIDDLE_MOUSE_BUTTON:
159 *x_button = Button2; 159 *x_button = Button2;
160 break; 160 break;
161 case ui::EF_RIGHT_MOUSE_BUTTON: 161 case ui::EF_RIGHT_MOUSE_BUTTON:
162 *x_button = Button3; 162 *x_button = Button3;
163 break; 163 break;
164 } 164 }
165 } 165 }
166 #endif // defined(USE_X11) 166 #endif // defined(USE_X11)
167 167
168 bool IsSendEvent(const ui::Event& event) {
169 #if defined(USE_X11)
170 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
171 // crbug.com/136465.
172 XEvent* xev = event.native_event();
173 if (xev && xev->xany.send_event)
174 return true;
175 #endif
176 return false;
177 }
178
179 } // namespace 168 } // namespace
180 169
181 EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller) 170 EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller)
182 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE), 171 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE),
183 ime_keyboard_for_testing_(NULL), 172 ime_keyboard_for_testing_(NULL),
184 pref_service_for_testing_(NULL), 173 pref_service_for_testing_(NULL),
185 sticky_keys_controller_(sticky_keys_controller) { 174 sticky_keys_controller_(sticky_keys_controller) {
186 } 175 }
187 176
188 EventRewriter::~EventRewriter() { 177 EventRewriter::~EventRewriter() {
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 } 376 }
388 return false; 377 return false;
389 } 378 }
390 379
391 ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( 380 ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
392 const ui::KeyEvent& key_event, 381 const ui::KeyEvent& key_event,
393 scoped_ptr<ui::Event>* rewritten_event) { 382 scoped_ptr<ui::Event>* rewritten_event) {
394 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE) 383 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE)
395 DeviceKeyPressedOrReleased(key_event.source_device_id()); 384 DeviceKeyPressedOrReleased(key_event.source_device_id());
396 MutableKeyState state = {key_event.flags(), key_event.key_code()}; 385 MutableKeyState state = {key_event.flags(), key_event.key_code()};
397 bool is_send_event = IsSendEvent(key_event); 386 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
398 if (!is_send_event) { 387 // crbug.com/136465.
388 if (!(key_event.flags() & ui::EF_FINAL)) {
399 RewriteModifierKeys(key_event, &state); 389 RewriteModifierKeys(key_event, &state);
400 RewriteNumPadKeys(key_event, &state); 390 RewriteNumPadKeys(key_event, &state);
401 } 391 }
402 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; 392 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE;
403 if (sticky_keys_controller_) { 393 if (sticky_keys_controller_) {
404 status = sticky_keys_controller_->RewriteKeyEvent( 394 status = sticky_keys_controller_->RewriteKeyEvent(
405 key_event, state.key_code, &state.flags); 395 key_event, state.key_code, &state.flags);
406 if (status == ui::EVENT_REWRITE_DISCARD) 396 if (status == ui::EVENT_REWRITE_DISCARD)
407 return ui::EVENT_REWRITE_DISCARD; 397 return ui::EVENT_REWRITE_DISCARD;
408 } 398 }
409 if (!is_send_event) { 399 if (!(key_event.flags() & ui::EF_FINAL)) {
410 RewriteExtendedKeys(key_event, &state); 400 RewriteExtendedKeys(key_event, &state);
411 RewriteFunctionKeys(key_event, &state); 401 RewriteFunctionKeys(key_event, &state);
412 } 402 }
413 if ((key_event.flags() == state.flags) && 403 if ((key_event.flags() == state.flags) &&
414 (key_event.key_code() == state.key_code) && 404 (key_event.key_code() == state.key_code) &&
415 #if defined(USE_X11) 405 #if defined(USE_X11)
416 // TODO(kpschoedel): This test is present because several consumers of 406 // TODO(kpschoedel): This test is present because several consumers of
417 // key events depend on having a native core X11 event, so we rewrite 407 // key events depend on having a native core X11 event, so we rewrite
418 // all XI2 key events (GenericEvent) into corresponding core X11 key 408 // all XI2 key events (GenericEvent) into corresponding core X11 key
419 // events. Remove this when event consumers no longer care about 409 // events. Remove this when event consumers no longer care about
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 KeyboardDeviceAddedInternal(device_info[i].deviceid, device_info[i].name); 932 KeyboardDeviceAddedInternal(device_info[i].deviceid, device_info[i].name);
943 } 933 }
944 934
945 XIFreeDeviceInfo(device_info); 935 XIFreeDeviceInfo(device_info);
946 #else 936 #else
947 KeyboardDeviceAddedInternal(device_id, "keyboard"); 937 KeyboardDeviceAddedInternal(device_id, "keyboard");
948 #endif 938 #endif
949 } 939 }
950 940
951 } // namespace chromeos 941 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/events/event_rewriter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698