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

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: 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
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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 } 371 }
383 return false; 372 return false;
384 } 373 }
385 374
386 ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( 375 ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
387 const ui::KeyEvent& key_event, 376 const ui::KeyEvent& key_event,
388 scoped_ptr<ui::Event>* rewritten_event) { 377 scoped_ptr<ui::Event>* rewritten_event) {
389 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE) 378 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE)
390 DeviceKeyPressedOrReleased(key_event.source_device_id()); 379 DeviceKeyPressedOrReleased(key_event.source_device_id());
391 MutableKeyState state = {key_event.flags(), key_event.key_code()}; 380 MutableKeyState state = {key_event.flags(), key_event.key_code()};
392 bool is_send_event = IsSendEvent(key_event); 381 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
393 if (!is_send_event) { 382 // crbug.com/136465.
383 if (!(key_event.flags() & ui::EF_FINAL_MODIFIERS)) {
394 RewriteModifierKeys(key_event, &state); 384 RewriteModifierKeys(key_event, &state);
395 RewriteNumPadKeys(key_event, &state); 385 RewriteNumPadKeys(key_event, &state);
396 } 386 }
397 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; 387 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE;
398 if (sticky_keys_controller_) { 388 if (sticky_keys_controller_) {
399 status = sticky_keys_controller_->RewriteKeyEvent( 389 status = sticky_keys_controller_->RewriteKeyEvent(
400 key_event, state.key_code, &state.flags); 390 key_event, state.key_code, &state.flags);
401 if (status == ui::EVENT_REWRITE_DISCARD) 391 if (status == ui::EVENT_REWRITE_DISCARD)
402 return ui::EVENT_REWRITE_DISCARD; 392 return ui::EVENT_REWRITE_DISCARD;
403 } 393 }
404 if (!is_send_event) { 394 RewriteExtendedKeys(key_event, &state);
sadrul 2014/07/15 04:48:07 Do you not need the check here anymore?
kpschoedel 2014/07/15 14:27:46 It was never actually needed here. Before sticky k
kpschoedel 2014/07/16 20:18:25 It turns out this is necessary; the KeyboardAccess
405 RewriteExtendedKeys(key_event, &state); 395 RewriteFunctionKeys(key_event, &state);
406 RewriteFunctionKeys(key_event, &state);
407 }
408 if ((key_event.flags() == state.flags) && 396 if ((key_event.flags() == state.flags) &&
409 (key_event.key_code() == state.key_code) && 397 (key_event.key_code() == state.key_code) &&
410 #if defined(USE_X11) 398 #if defined(USE_X11)
411 // TODO(kpschoedel): This test is present because several consumers of 399 // TODO(kpschoedel): This test is present because several consumers of
412 // key events depend on having a native core X11 event, so we rewrite 400 // key events depend on having a native core X11 event, so we rewrite
413 // all XI2 key events (GenericEvent) into corresponding core X11 key 401 // all XI2 key events (GenericEvent) into corresponding core X11 key
414 // events. Remove this when event consumers no longer care about 402 // events. Remove this when event consumers no longer care about
415 // native X11 event details (crbug.com/380349). 403 // native X11 event details (crbug.com/380349).
416 (!key_event.HasNativeEvent() || 404 (!key_event.HasNativeEvent() ||
417 (key_event.native_event()->type != GenericEvent)) && 405 (key_event.native_event()->type != GenericEvent)) &&
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 KeyboardDeviceAddedInternal(device_info[i].deviceid, device_info[i].name); 925 KeyboardDeviceAddedInternal(device_info[i].deviceid, device_info[i].name);
938 } 926 }
939 927
940 XIFreeDeviceInfo(device_info); 928 XIFreeDeviceInfo(device_info);
941 #else 929 #else
942 KeyboardDeviceAddedInternal(device_id, "keyboard"); 930 KeyboardDeviceAddedInternal(device_id, "keyboard");
943 #endif 931 #endif
944 } 932 }
945 933
946 } // namespace chromeos 934 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/events/event_rewriter_unittest.cc » ('j') | ui/events/x/events_x.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698