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

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

Issue 2731283004: Do not use ash in chromeos::EventRewriter. (Closed)
Patch Set: Fix chromeos x11 build Created 3 years, 9 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 | « chrome/browser/chromeos/events/event_rewriter.h ('k') | no next file » | 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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "ash/common/wm/window_state.h"
12 #include "ash/sticky_keys/sticky_keys_controller.h"
13 #include "ash/wm/window_util.h"
14 #include "base/command_line.h" 11 #include "base/command_line.h"
15 #include "base/logging.h" 12 #include "base/logging.h"
16 #include "base/macros.h" 13 #include "base/macros.h"
17 #include "base/strings/string_split.h" 14 #include "base/strings/string_split.h"
18 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
19 #include "base/sys_info.h" 16 #include "base/sys_info.h"
20 #include "chrome/browser/chromeos/login/ui/login_display_host.h" 17 #include "chrome/browser/chromeos/login/ui/login_display_host.h"
21 #include "chrome/browser/extensions/extension_commands_global_registry.h" 18 #include "chrome/browser/extensions/extension_commands_global_registry.h"
22 #include "chrome/browser/profiles/profile_manager.h" 19 #include "chrome/browser/profiles/profile_manager.h"
23 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 20 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
24 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 21 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
25 #include "chrome/common/pref_names.h" 22 #include "chrome/common/pref_names.h"
26 #include "chromeos/chromeos_switches.h" 23 #include "chromeos/chromeos_switches.h"
27 #include "components/prefs/pref_service.h" 24 #include "components/prefs/pref_service.h"
28 #include "components/user_manager/user_manager.h" 25 #include "components/user_manager/user_manager.h"
29 #include "ui/base/ime/chromeos/ime_keyboard.h" 26 #include "ui/base/ime/chromeos/ime_keyboard.h"
30 #include "ui/base/ime/chromeos/input_method_manager.h" 27 #include "ui/base/ime/chromeos/input_method_manager.h"
31 #include "ui/events/devices/input_device_manager.h" 28 #include "ui/events/devices/input_device_manager.h"
32 #include "ui/events/event.h" 29 #include "ui/events/event.h"
33 #include "ui/events/event_utils.h" 30 #include "ui/events/event_utils.h"
34 #include "ui/events/keycodes/dom/dom_code.h" 31 #include "ui/events/keycodes/dom/dom_code.h"
35 #include "ui/events/keycodes/dom/dom_key.h" 32 #include "ui/events/keycodes/dom/dom_key.h"
36 #include "ui/events/keycodes/dom/keycode_converter.h" 33 #include "ui/events/keycodes/dom/keycode_converter.h"
37 #include "ui/events/keycodes/keyboard_code_conversion.h" 34 #include "ui/events/keycodes/keyboard_code_conversion.h"
38 #include "ui/wm/core/window_util.h"
39 35
40 #if defined(USE_X11) 36 #if defined(USE_X11)
41 #include <X11/extensions/XInput2.h> 37 #include <X11/extensions/XInput2.h>
42 #include <X11/Xlib.h> 38 #include <X11/Xlib.h>
43 39
44 // Get rid of macros from Xlib.h that conflicts with other parts of the code. 40 // Get rid of macros from Xlib.h that conflicts with other parts of the code.
45 #undef RootWindow 41 #undef RootWindow
46 #undef Status 42 #undef Status
47 43
48 #include "ui/base/x/x11_util.h" 44 #include "ui/base/x/x11_util.h"
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 case ui::DomCode::META_RIGHT: 295 case ui::DomCode::META_RIGHT:
300 return right ? ui::DomCode::META_RIGHT : ui::DomCode::META_LEFT; 296 return right ? ui::DomCode::META_RIGHT : ui::DomCode::META_LEFT;
301 default: 297 default:
302 break; 298 break;
303 } 299 }
304 return code; 300 return code;
305 } 301 }
306 302
307 } // namespace 303 } // namespace
308 304
309 EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller) 305 EventRewriter::EventRewriter(ui::EventRewriter* sticky_keys_controller)
310 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE), 306 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE),
311 ime_keyboard_for_testing_(NULL), 307 ime_keyboard_for_testing_(NULL),
312 pref_service_for_testing_(NULL), 308 pref_service_for_testing_(NULL),
313 sticky_keys_controller_(sticky_keys_controller), 309 sticky_keys_controller_(sticky_keys_controller),
314 pressed_modifier_latches_(ui::EF_NONE), 310 pressed_modifier_latches_(ui::EF_NONE),
315 latched_modifier_latches_(ui::EF_NONE), 311 latched_modifier_latches_(ui::EF_NONE),
316 used_modifier_latches_(ui::EF_NONE) {} 312 used_modifier_latches_(ui::EF_NONE) {}
317 313
318 EventRewriter::~EventRewriter() {} 314 EventRewriter::~EventRewriter() {}
319 315
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 359
364 ui::EventRewriteStatus EventRewriter::NextDispatchEvent( 360 ui::EventRewriteStatus EventRewriter::NextDispatchEvent(
365 const ui::Event& last_event, 361 const ui::Event& last_event,
366 std::unique_ptr<ui::Event>* new_event) { 362 std::unique_ptr<ui::Event>* new_event) {
367 if (sticky_keys_controller_) { 363 if (sticky_keys_controller_) {
368 // In the case of sticky keys, we know what the events obtained here are: 364 // In the case of sticky keys, we know what the events obtained here are:
369 // modifier key releases that match the ones previously discarded. So, we 365 // modifier key releases that match the ones previously discarded. So, we
370 // know that they don't have to be passed through the post-sticky key 366 // know that they don't have to be passed through the post-sticky key
371 // rewriting phases, |RewriteExtendedKeys()| and |RewriteFunctionKeys()|, 367 // rewriting phases, |RewriteExtendedKeys()| and |RewriteFunctionKeys()|,
372 // because those phases do nothing with modifier key releases. 368 // because those phases do nothing with modifier key releases.
373 return sticky_keys_controller_->NextDispatchEvent(new_event); 369 return sticky_keys_controller_->NextDispatchEvent(last_event, new_event);
374 } 370 }
375 NOTREACHED(); 371 NOTREACHED();
376 return ui::EVENT_REWRITE_CONTINUE; 372 return ui::EVENT_REWRITE_CONTINUE;
377 } 373 }
378 374
379 void EventRewriter::BuildRewrittenKeyEvent( 375 void EventRewriter::BuildRewrittenKeyEvent(
380 const ui::KeyEvent& key_event, 376 const ui::KeyEvent& key_event,
381 const MutableKeyState& state, 377 const MutableKeyState& state,
382 std::unique_ptr<ui::Event>* rewritten_event) { 378 std::unique_ptr<ui::Event>* rewritten_event) {
383 ui::KeyEvent* rewritten_key_event = 379 ui::KeyEvent* rewritten_key_event =
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 // Early exit with completed event. 512 // Early exit with completed event.
517 BuildRewrittenKeyEvent(key_event, state, rewritten_event); 513 BuildRewrittenKeyEvent(key_event, state, rewritten_event);
518 return ui::EVENT_REWRITE_REWRITTEN; 514 return ui::EVENT_REWRITE_REWRITTEN;
519 } 515 }
520 RewriteNumPadKeys(key_event, &state); 516 RewriteNumPadKeys(key_event, &state);
521 } 517 }
522 518
523 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; 519 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE;
524 bool is_sticky_key_extension_command = false; 520 bool is_sticky_key_extension_command = false;
525 if (sticky_keys_controller_) { 521 if (sticky_keys_controller_) {
526 status = sticky_keys_controller_->RewriteKeyEvent(key_event, state.key_code, 522 std::unique_ptr<ui::Event> tmp_event = ui::Event::Clone(key_event);
sadrul 2017/03/09 06:28:12 Can you simply make a copy, i.e: ui::KeyEvent t
Peng 2017/03/09 15:56:47 Done.
527 &state.flags); 523 tmp_event->AsKeyEvent()->set_key_code(state.key_code);
524 tmp_event->AsKeyEvent()->set_flags(state.flags);
525 std::unique_ptr<ui::Event> output_event;
526 status = sticky_keys_controller_->RewriteEvent(*tmp_event, &output_event);
527 if (status == ui::EVENT_REWRITE_REWRITTEN ||
528 status == ui::EVENT_REWRITE_DISPATCH_ANOTHER)
529 state.flags = output_event->flags();
528 if (status == ui::EVENT_REWRITE_DISCARD) 530 if (status == ui::EVENT_REWRITE_DISCARD)
529 return ui::EVENT_REWRITE_DISCARD; 531 return ui::EVENT_REWRITE_DISCARD;
530 is_sticky_key_extension_command = 532 is_sticky_key_extension_command =
531 IsExtensionCommandRegistered(state.key_code, state.flags); 533 IsExtensionCommandRegistered(state.key_code, state.flags);
532 } 534 }
533 535
534 // If flags have changed, this may change the interpretation of the key, 536 // If flags have changed, this may change the interpretation of the key,
535 // so reapply layout. 537 // so reapply layout.
536 if (state.flags != key_event.flags()) 538 if (state.flags != key_event.flags())
537 SetMeaningForLayout(key_event.type(), &state); 539 SetMeaningForLayout(key_event.type(), &state);
(...skipping 28 matching lines...) Expand all
566 BuildRewrittenKeyEvent(key_event, state, rewritten_event); 568 BuildRewrittenKeyEvent(key_event, state, rewritten_event);
567 return status; 569 return status;
568 } 570 }
569 571
570 ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent( 572 ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent(
571 const ui::MouseEvent& mouse_event, 573 const ui::MouseEvent& mouse_event,
572 std::unique_ptr<ui::Event>* rewritten_event) { 574 std::unique_ptr<ui::Event>* rewritten_event) {
573 int flags = mouse_event.flags(); 575 int flags = mouse_event.flags();
574 RewriteLocatedEvent(mouse_event, &flags); 576 RewriteLocatedEvent(mouse_event, &flags);
575 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; 577 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE;
576 if (sticky_keys_controller_) 578 if (sticky_keys_controller_) {
577 status = sticky_keys_controller_->RewriteMouseEvent(mouse_event, &flags); 579 std::unique_ptr<ui::Event> tmp_event = ui::Event::Clone(mouse_event);
sadrul 2017/03/09 06:28:13 Just make a copy, as above?
Peng 2017/03/09 15:56:47 Done.
580 tmp_event->set_flags(flags);
581 std::unique_ptr<ui::Event> output_event;
582 status = sticky_keys_controller_->RewriteEvent(*tmp_event, &output_event);
583 if (status == ui::EVENT_REWRITE_REWRITTEN ||
584 status == ui::EVENT_REWRITE_DISPATCH_ANOTHER)
585 flags = output_event->flags();
586 }
578 int changed_button = ui::EF_NONE; 587 int changed_button = ui::EF_NONE;
579 if ((mouse_event.type() == ui::ET_MOUSE_PRESSED) || 588 if ((mouse_event.type() == ui::ET_MOUSE_PRESSED) ||
580 (mouse_event.type() == ui::ET_MOUSE_RELEASED)) { 589 (mouse_event.type() == ui::ET_MOUSE_RELEASED)) {
581 changed_button = RewriteModifierClick(mouse_event, &flags); 590 changed_button = RewriteModifierClick(mouse_event, &flags);
582 } 591 }
583 if ((mouse_event.flags() == flags) && 592 if ((mouse_event.flags() == flags) &&
584 (status == ui::EVENT_REWRITE_CONTINUE)) { 593 (status == ui::EVENT_REWRITE_CONTINUE)) {
585 return ui::EVENT_REWRITE_CONTINUE; 594 return ui::EVENT_REWRITE_CONTINUE;
586 } 595 }
587 if (status == ui::EVENT_REWRITE_CONTINUE) 596 if (status == ui::EVENT_REWRITE_CONTINUE)
(...skipping 13 matching lines...) Expand all
601 return status; 610 return status;
602 } 611 }
603 612
604 ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( 613 ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent(
605 const ui::MouseWheelEvent& wheel_event, 614 const ui::MouseWheelEvent& wheel_event,
606 std::unique_ptr<ui::Event>* rewritten_event) { 615 std::unique_ptr<ui::Event>* rewritten_event) {
607 if (!sticky_keys_controller_) 616 if (!sticky_keys_controller_)
608 return ui::EVENT_REWRITE_CONTINUE; 617 return ui::EVENT_REWRITE_CONTINUE;
609 int flags = wheel_event.flags(); 618 int flags = wheel_event.flags();
610 RewriteLocatedEvent(wheel_event, &flags); 619 RewriteLocatedEvent(wheel_event, &flags);
620 std::unique_ptr<ui::Event> tmp_event = ui::Event::Clone(wheel_event);
621 tmp_event->set_flags(flags);
611 ui::EventRewriteStatus status = 622 ui::EventRewriteStatus status =
612 sticky_keys_controller_->RewriteMouseEvent(wheel_event, &flags); 623 sticky_keys_controller_->RewriteEvent(*tmp_event, rewritten_event);
613 if ((wheel_event.flags() == flags) && 624
614 (status == ui::EVENT_REWRITE_CONTINUE)) { 625 switch (status) {
615 return ui::EVENT_REWRITE_CONTINUE; 626 case ui::EVENT_REWRITE_REWRITTEN:
627 case ui::EVENT_REWRITE_DISPATCH_ANOTHER:
628 // whell event has been rewritten and stored in |rewritten_event|.
sadrul 2017/03/09 06:28:12 indentation seems off here.
Peng 2017/03/09 15:56:47 Done.
629 #if defined(USE_X11)
630 ui::UpdateX11EventForFlags(rewritten_event->get());
631 #endif
632 break;
633 case ui::EVENT_REWRITE_CONTINUE:
634 if (flags != wheel_event.flags()) {
635 *rewritten_event = base::MakeUnique<ui::MouseWheelEvent>(wheel_event);
636 (*rewritten_event)->set_flags(flags);
637 status = ui::EVENT_REWRITE_REWRITTEN;
638 #if defined(USE_X11)
639 ui::UpdateX11EventForFlags(rewritten_event->get());
640 #endif
sadrul 2017/03/09 06:28:12 Can you remove the USE_X11 changes? Because those
Peng 2017/03/09 15:56:46 I tried, but seems linux_chromium_chromeos_rel_ng
641 }
642 break;
643 case ui::EVENT_REWRITE_DISCARD:
644 NOTREACHED();
645 break;
616 } 646 }
617 if (status == ui::EVENT_REWRITE_CONTINUE) 647
618 status = ui::EVENT_REWRITE_REWRITTEN;
619 ui::MouseWheelEvent* rewritten_wheel_event =
620 new ui::MouseWheelEvent(wheel_event);
621 rewritten_event->reset(rewritten_wheel_event);
622 rewritten_wheel_event->set_flags(flags);
623 #if defined(USE_X11)
624 ui::UpdateX11EventForFlags(rewritten_wheel_event);
625 #endif
626 return status; 648 return status;
627 } 649 }
628 650
629 ui::EventRewriteStatus EventRewriter::RewriteTouchEvent( 651 ui::EventRewriteStatus EventRewriter::RewriteTouchEvent(
630 const ui::TouchEvent& touch_event, 652 const ui::TouchEvent& touch_event,
631 std::unique_ptr<ui::Event>* rewritten_event) { 653 std::unique_ptr<ui::Event>* rewritten_event) {
632 int flags = touch_event.flags(); 654 int flags = touch_event.flags();
633 RewriteLocatedEvent(touch_event, &flags); 655 RewriteLocatedEvent(touch_event, &flags);
634 if (touch_event.flags() == flags) 656 if (touch_event.flags() == flags)
635 return ui::EVENT_REWRITE_CONTINUE; 657 return ui::EVENT_REWRITE_CONTINUE;
636 ui::TouchEvent* rewritten_touch_event = new ui::TouchEvent(touch_event); 658 ui::TouchEvent* rewritten_touch_event = new ui::TouchEvent(touch_event);
637 rewritten_event->reset(rewritten_touch_event); 659 rewritten_event->reset(rewritten_touch_event);
638 rewritten_touch_event->set_flags(flags); 660 rewritten_touch_event->set_flags(flags);
639 #if defined(USE_X11) 661 #if defined(USE_X11)
640 ui::UpdateX11EventForFlags(rewritten_touch_event); 662 ui::UpdateX11EventForFlags(rewritten_touch_event);
641 #endif 663 #endif
642 return ui::EVENT_REWRITE_REWRITTEN; 664 return ui::EVENT_REWRITE_REWRITTEN;
643 } 665 }
644 666
645 ui::EventRewriteStatus EventRewriter::RewriteScrollEvent( 667 ui::EventRewriteStatus EventRewriter::RewriteScrollEvent(
646 const ui::ScrollEvent& scroll_event, 668 const ui::ScrollEvent& scroll_event,
647 std::unique_ptr<ui::Event>* rewritten_event) { 669 std::unique_ptr<ui::Event>* rewritten_event) {
648 int flags = scroll_event.flags(); 670 if (!sticky_keys_controller_)
649 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; 671 return ui::EVENT_REWRITE_CONTINUE;
650 if (sticky_keys_controller_) 672 ui::EventRewriteStatus status =
651 status = sticky_keys_controller_->RewriteScrollEvent(scroll_event, &flags); 673 sticky_keys_controller_->RewriteEvent(scroll_event, rewritten_event);
652 if (status == ui::EVENT_REWRITE_CONTINUE) 674 // Scroll event shouldn't be discarded.
653 return status; 675 DCHECK_NE(status, ui::EVENT_REWRITE_DISCARD);
654 ui::ScrollEvent* rewritten_scroll_event = new ui::ScrollEvent(scroll_event);
655 rewritten_event->reset(rewritten_scroll_event);
656 rewritten_scroll_event->set_flags(flags);
657 #if defined(USE_X11) 676 #if defined(USE_X11)
658 ui::UpdateX11EventForFlags(rewritten_scroll_event); 677 if (status != ui::EVENT_REWRITE_CONTINUE)
678 ui::UpdateX11EventForFlags(rewritten_event->get());
659 #endif 679 #endif
660 return status; 680 return status;
661 } 681 }
662 682
663 bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, 683 bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
664 MutableKeyState* state) { 684 MutableKeyState* state) {
665 DCHECK(key_event.type() == ui::ET_KEY_PRESSED || 685 DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
666 key_event.type() == ui::ET_KEY_RELEASED); 686 key_event.type() == ui::ET_KEY_RELEASED);
667 687
668 // Do nothing if we have just logged in as guest but have not restarted chrome 688 // Do nothing if we have just logged in as guest but have not restarted chrome
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 for (const auto& keyboard : keyboard_devices) { 1187 for (const auto& keyboard : keyboard_devices) {
1168 if (keyboard.id == device_id) { 1188 if (keyboard.id == device_id) {
1169 return KeyboardDeviceAddedInternal( 1189 return KeyboardDeviceAddedInternal(
1170 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id); 1190 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id);
1171 } 1191 }
1172 } 1192 }
1173 return kDeviceUnknown; 1193 return kDeviceUnknown;
1174 } 1194 }
1175 1195
1176 } // namespace chromeos 1196 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/events/event_rewriter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698