OLD | NEW |
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 |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 int device_id, | 308 int device_id, |
309 const std::string& device_name) { | 309 const std::string& device_name) { |
310 // Tests must avoid XI2 reserved device IDs. | 310 // Tests must avoid XI2 reserved device IDs. |
311 DCHECK((device_id < 0) || (device_id > 1)); | 311 DCHECK((device_id < 0) || (device_id > 1)); |
312 return KeyboardDeviceAddedInternal(device_id, device_name, kUnknownVendorId, | 312 return KeyboardDeviceAddedInternal(device_id, device_name, kUnknownVendorId, |
313 kUnknownProductId); | 313 kUnknownProductId); |
314 } | 314 } |
315 | 315 |
316 void EventRewriter::RewriteMouseButtonEventForTesting( | 316 void EventRewriter::RewriteMouseButtonEventForTesting( |
317 const ui::MouseEvent& event, | 317 const ui::MouseEvent& event, |
318 scoped_ptr<ui::Event>* rewritten_event) { | 318 std::unique_ptr<ui::Event>* rewritten_event) { |
319 RewriteMouseButtonEvent(event, rewritten_event); | 319 RewriteMouseButtonEvent(event, rewritten_event); |
320 } | 320 } |
321 | 321 |
322 ui::EventRewriteStatus EventRewriter::RewriteEvent( | 322 ui::EventRewriteStatus EventRewriter::RewriteEvent( |
323 const ui::Event& event, | 323 const ui::Event& event, |
324 scoped_ptr<ui::Event>* rewritten_event) { | 324 std::unique_ptr<ui::Event>* rewritten_event) { |
325 if ((event.type() == ui::ET_KEY_PRESSED) || | 325 if ((event.type() == ui::ET_KEY_PRESSED) || |
326 (event.type() == ui::ET_KEY_RELEASED)) { | 326 (event.type() == ui::ET_KEY_RELEASED)) { |
327 return RewriteKeyEvent(static_cast<const ui::KeyEvent&>(event), | 327 return RewriteKeyEvent(static_cast<const ui::KeyEvent&>(event), |
328 rewritten_event); | 328 rewritten_event); |
329 } | 329 } |
330 if ((event.type() == ui::ET_MOUSE_PRESSED) || | 330 if ((event.type() == ui::ET_MOUSE_PRESSED) || |
331 (event.type() == ui::ET_MOUSE_RELEASED)) { | 331 (event.type() == ui::ET_MOUSE_RELEASED)) { |
332 return RewriteMouseButtonEvent(static_cast<const ui::MouseEvent&>(event), | 332 return RewriteMouseButtonEvent(static_cast<const ui::MouseEvent&>(event), |
333 rewritten_event); | 333 rewritten_event); |
334 } | 334 } |
335 if (event.type() == ui::ET_MOUSEWHEEL) { | 335 if (event.type() == ui::ET_MOUSEWHEEL) { |
336 return RewriteMouseWheelEvent( | 336 return RewriteMouseWheelEvent( |
337 static_cast<const ui::MouseWheelEvent&>(event), rewritten_event); | 337 static_cast<const ui::MouseWheelEvent&>(event), rewritten_event); |
338 } | 338 } |
339 if ((event.type() == ui::ET_TOUCH_PRESSED) || | 339 if ((event.type() == ui::ET_TOUCH_PRESSED) || |
340 (event.type() == ui::ET_TOUCH_RELEASED)) { | 340 (event.type() == ui::ET_TOUCH_RELEASED)) { |
341 return RewriteTouchEvent(static_cast<const ui::TouchEvent&>(event), | 341 return RewriteTouchEvent(static_cast<const ui::TouchEvent&>(event), |
342 rewritten_event); | 342 rewritten_event); |
343 } | 343 } |
344 if (event.IsScrollEvent()) { | 344 if (event.IsScrollEvent()) { |
345 return RewriteScrollEvent(static_cast<const ui::ScrollEvent&>(event), | 345 return RewriteScrollEvent(static_cast<const ui::ScrollEvent&>(event), |
346 rewritten_event); | 346 rewritten_event); |
347 } | 347 } |
348 return ui::EVENT_REWRITE_CONTINUE; | 348 return ui::EVENT_REWRITE_CONTINUE; |
349 } | 349 } |
350 | 350 |
351 ui::EventRewriteStatus EventRewriter::NextDispatchEvent( | 351 ui::EventRewriteStatus EventRewriter::NextDispatchEvent( |
352 const ui::Event& last_event, | 352 const ui::Event& last_event, |
353 scoped_ptr<ui::Event>* new_event) { | 353 std::unique_ptr<ui::Event>* new_event) { |
354 if (sticky_keys_controller_) { | 354 if (sticky_keys_controller_) { |
355 // In the case of sticky keys, we know what the events obtained here are: | 355 // In the case of sticky keys, we know what the events obtained here are: |
356 // modifier key releases that match the ones previously discarded. So, we | 356 // modifier key releases that match the ones previously discarded. So, we |
357 // know that they don't have to be passed through the post-sticky key | 357 // know that they don't have to be passed through the post-sticky key |
358 // rewriting phases, |RewriteExtendedKeys()| and |RewriteFunctionKeys()|, | 358 // rewriting phases, |RewriteExtendedKeys()| and |RewriteFunctionKeys()|, |
359 // because those phases do nothing with modifier key releases. | 359 // because those phases do nothing with modifier key releases. |
360 return sticky_keys_controller_->NextDispatchEvent(new_event); | 360 return sticky_keys_controller_->NextDispatchEvent(new_event); |
361 } | 361 } |
362 NOTREACHED(); | 362 NOTREACHED(); |
363 return ui::EVENT_REWRITE_CONTINUE; | 363 return ui::EVENT_REWRITE_CONTINUE; |
364 } | 364 } |
365 | 365 |
366 void EventRewriter::BuildRewrittenKeyEvent( | 366 void EventRewriter::BuildRewrittenKeyEvent( |
367 const ui::KeyEvent& key_event, | 367 const ui::KeyEvent& key_event, |
368 const MutableKeyState& state, | 368 const MutableKeyState& state, |
369 scoped_ptr<ui::Event>* rewritten_event) { | 369 std::unique_ptr<ui::Event>* rewritten_event) { |
370 ui::KeyEvent* rewritten_key_event = | 370 ui::KeyEvent* rewritten_key_event = |
371 new ui::KeyEvent(key_event.type(), state.key_code, state.code, | 371 new ui::KeyEvent(key_event.type(), state.key_code, state.code, |
372 state.flags, state.key, key_event.time_stamp()); | 372 state.flags, state.key, key_event.time_stamp()); |
373 rewritten_event->reset(rewritten_key_event); | 373 rewritten_event->reset(rewritten_key_event); |
374 } | 374 } |
375 | 375 |
376 void EventRewriter::DeviceKeyPressedOrReleased(int device_id) { | 376 void EventRewriter::DeviceKeyPressedOrReleased(int device_id) { |
377 std::map<int, DeviceType>::const_iterator iter = | 377 std::map<int, DeviceType>::const_iterator iter = |
378 device_id_to_type_.find(device_id); | 378 device_id_to_type_.find(device_id); |
379 DeviceType type; | 379 DeviceType type; |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 if (remapped_key) { | 477 if (remapped_key) { |
478 unmodified_flags &= ~kModifierRemappings[i].flag; | 478 unmodified_flags &= ~kModifierRemappings[i].flag; |
479 rewritten_flags |= remapped_key->flag; | 479 rewritten_flags |= remapped_key->flag; |
480 } | 480 } |
481 } | 481 } |
482 return rewritten_flags | unmodified_flags; | 482 return rewritten_flags | unmodified_flags; |
483 } | 483 } |
484 | 484 |
485 ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( | 485 ui::EventRewriteStatus EventRewriter::RewriteKeyEvent( |
486 const ui::KeyEvent& key_event, | 486 const ui::KeyEvent& key_event, |
487 scoped_ptr<ui::Event>* rewritten_event) { | 487 std::unique_ptr<ui::Event>* rewritten_event) { |
488 if (IsExtensionCommandRegistered(key_event.key_code(), key_event.flags())) | 488 if (IsExtensionCommandRegistered(key_event.key_code(), key_event.flags())) |
489 return ui::EVENT_REWRITE_CONTINUE; | 489 return ui::EVENT_REWRITE_CONTINUE; |
490 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE) | 490 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE) |
491 DeviceKeyPressedOrReleased(key_event.source_device_id()); | 491 DeviceKeyPressedOrReleased(key_event.source_device_id()); |
492 | 492 |
493 // Drop repeated keys from Hotrod remote. | 493 // Drop repeated keys from Hotrod remote. |
494 if ((key_event.flags() & ui::EF_IS_REPEAT) && | 494 if ((key_event.flags() & ui::EF_IS_REPEAT) && |
495 (key_event.type() == ui::ET_KEY_PRESSED) && IsHotrodRemote() && | 495 (key_event.type() == ui::ET_KEY_PRESSED) && IsHotrodRemote() && |
496 key_event.key_code() != ui::VKEY_BACK) { | 496 key_event.key_code() != ui::VKEY_BACK) { |
497 return ui::EVENT_REWRITE_DISCARD; | 497 return ui::EVENT_REWRITE_DISCARD; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 // might be here because key_event changed, in which case we need to | 553 // might be here because key_event changed, in which case we need to |
554 // return |EVENT_REWRITE_REWRITTEN|. | 554 // return |EVENT_REWRITE_REWRITTEN|. |
555 if (status == ui::EVENT_REWRITE_CONTINUE) | 555 if (status == ui::EVENT_REWRITE_CONTINUE) |
556 status = ui::EVENT_REWRITE_REWRITTEN; | 556 status = ui::EVENT_REWRITE_REWRITTEN; |
557 BuildRewrittenKeyEvent(key_event, state, rewritten_event); | 557 BuildRewrittenKeyEvent(key_event, state, rewritten_event); |
558 return status; | 558 return status; |
559 } | 559 } |
560 | 560 |
561 ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent( | 561 ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent( |
562 const ui::MouseEvent& mouse_event, | 562 const ui::MouseEvent& mouse_event, |
563 scoped_ptr<ui::Event>* rewritten_event) { | 563 std::unique_ptr<ui::Event>* rewritten_event) { |
564 int flags = mouse_event.flags(); | 564 int flags = mouse_event.flags(); |
565 RewriteLocatedEvent(mouse_event, &flags); | 565 RewriteLocatedEvent(mouse_event, &flags); |
566 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; | 566 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; |
567 if (sticky_keys_controller_) | 567 if (sticky_keys_controller_) |
568 status = sticky_keys_controller_->RewriteMouseEvent(mouse_event, &flags); | 568 status = sticky_keys_controller_->RewriteMouseEvent(mouse_event, &flags); |
569 int changed_button = ui::EF_NONE; | 569 int changed_button = ui::EF_NONE; |
570 if ((mouse_event.type() == ui::ET_MOUSE_PRESSED) || | 570 if ((mouse_event.type() == ui::ET_MOUSE_PRESSED) || |
571 (mouse_event.type() == ui::ET_MOUSE_RELEASED)) { | 571 (mouse_event.type() == ui::ET_MOUSE_RELEASED)) { |
572 changed_button = RewriteModifierClick(mouse_event, &flags); | 572 changed_button = RewriteModifierClick(mouse_event, &flags); |
573 } | 573 } |
(...skipping 13 matching lines...) Expand all Loading... |
587 rewritten_mouse_event->set_changed_button_flags(changed_button); | 587 rewritten_mouse_event->set_changed_button_flags(changed_button); |
588 #if defined(USE_X11) | 588 #if defined(USE_X11) |
589 ui::UpdateX11EventForChangedButtonFlags(rewritten_mouse_event); | 589 ui::UpdateX11EventForChangedButtonFlags(rewritten_mouse_event); |
590 #endif | 590 #endif |
591 } | 591 } |
592 return status; | 592 return status; |
593 } | 593 } |
594 | 594 |
595 ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( | 595 ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent( |
596 const ui::MouseWheelEvent& wheel_event, | 596 const ui::MouseWheelEvent& wheel_event, |
597 scoped_ptr<ui::Event>* rewritten_event) { | 597 std::unique_ptr<ui::Event>* rewritten_event) { |
598 if (!sticky_keys_controller_) | 598 if (!sticky_keys_controller_) |
599 return ui::EVENT_REWRITE_CONTINUE; | 599 return ui::EVENT_REWRITE_CONTINUE; |
600 int flags = wheel_event.flags(); | 600 int flags = wheel_event.flags(); |
601 ui::EventRewriteStatus status = | 601 ui::EventRewriteStatus status = |
602 sticky_keys_controller_->RewriteMouseEvent(wheel_event, &flags); | 602 sticky_keys_controller_->RewriteMouseEvent(wheel_event, &flags); |
603 if ((wheel_event.flags() == flags) && | 603 if ((wheel_event.flags() == flags) && |
604 (status == ui::EVENT_REWRITE_CONTINUE)) { | 604 (status == ui::EVENT_REWRITE_CONTINUE)) { |
605 return ui::EVENT_REWRITE_CONTINUE; | 605 return ui::EVENT_REWRITE_CONTINUE; |
606 } | 606 } |
607 if (status == ui::EVENT_REWRITE_CONTINUE) | 607 if (status == ui::EVENT_REWRITE_CONTINUE) |
608 status = ui::EVENT_REWRITE_REWRITTEN; | 608 status = ui::EVENT_REWRITE_REWRITTEN; |
609 ui::MouseWheelEvent* rewritten_wheel_event = | 609 ui::MouseWheelEvent* rewritten_wheel_event = |
610 new ui::MouseWheelEvent(wheel_event); | 610 new ui::MouseWheelEvent(wheel_event); |
611 rewritten_event->reset(rewritten_wheel_event); | 611 rewritten_event->reset(rewritten_wheel_event); |
612 rewritten_wheel_event->set_flags(flags); | 612 rewritten_wheel_event->set_flags(flags); |
613 #if defined(USE_X11) | 613 #if defined(USE_X11) |
614 ui::UpdateX11EventForFlags(rewritten_wheel_event); | 614 ui::UpdateX11EventForFlags(rewritten_wheel_event); |
615 #endif | 615 #endif |
616 return status; | 616 return status; |
617 } | 617 } |
618 | 618 |
619 ui::EventRewriteStatus EventRewriter::RewriteTouchEvent( | 619 ui::EventRewriteStatus EventRewriter::RewriteTouchEvent( |
620 const ui::TouchEvent& touch_event, | 620 const ui::TouchEvent& touch_event, |
621 scoped_ptr<ui::Event>* rewritten_event) { | 621 std::unique_ptr<ui::Event>* rewritten_event) { |
622 int flags = touch_event.flags(); | 622 int flags = touch_event.flags(); |
623 RewriteLocatedEvent(touch_event, &flags); | 623 RewriteLocatedEvent(touch_event, &flags); |
624 if (touch_event.flags() == flags) | 624 if (touch_event.flags() == flags) |
625 return ui::EVENT_REWRITE_CONTINUE; | 625 return ui::EVENT_REWRITE_CONTINUE; |
626 ui::TouchEvent* rewritten_touch_event = new ui::TouchEvent(touch_event); | 626 ui::TouchEvent* rewritten_touch_event = new ui::TouchEvent(touch_event); |
627 rewritten_event->reset(rewritten_touch_event); | 627 rewritten_event->reset(rewritten_touch_event); |
628 rewritten_touch_event->set_flags(flags); | 628 rewritten_touch_event->set_flags(flags); |
629 #if defined(USE_X11) | 629 #if defined(USE_X11) |
630 ui::UpdateX11EventForFlags(rewritten_touch_event); | 630 ui::UpdateX11EventForFlags(rewritten_touch_event); |
631 #endif | 631 #endif |
632 return ui::EVENT_REWRITE_REWRITTEN; | 632 return ui::EVENT_REWRITE_REWRITTEN; |
633 } | 633 } |
634 | 634 |
635 ui::EventRewriteStatus EventRewriter::RewriteScrollEvent( | 635 ui::EventRewriteStatus EventRewriter::RewriteScrollEvent( |
636 const ui::ScrollEvent& scroll_event, | 636 const ui::ScrollEvent& scroll_event, |
637 scoped_ptr<ui::Event>* rewritten_event) { | 637 std::unique_ptr<ui::Event>* rewritten_event) { |
638 int flags = scroll_event.flags(); | 638 int flags = scroll_event.flags(); |
639 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; | 639 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; |
640 if (sticky_keys_controller_) | 640 if (sticky_keys_controller_) |
641 status = sticky_keys_controller_->RewriteScrollEvent(scroll_event, &flags); | 641 status = sticky_keys_controller_->RewriteScrollEvent(scroll_event, &flags); |
642 if (status == ui::EVENT_REWRITE_CONTINUE) | 642 if (status == ui::EVENT_REWRITE_CONTINUE) |
643 return status; | 643 return status; |
644 ui::ScrollEvent* rewritten_scroll_event = new ui::ScrollEvent(scroll_event); | 644 ui::ScrollEvent* rewritten_scroll_event = new ui::ScrollEvent(scroll_event); |
645 rewritten_event->reset(rewritten_scroll_event); | 645 rewritten_event->reset(rewritten_scroll_event); |
646 rewritten_scroll_event->set_flags(flags); | 646 rewritten_scroll_event->set_flags(flags); |
647 #if defined(USE_X11) | 647 #if defined(USE_X11) |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1145 for (const auto& keyboard : keyboards) { | 1145 for (const auto& keyboard : keyboards) { |
1146 if (keyboard.id == device_id) { | 1146 if (keyboard.id == device_id) { |
1147 return KeyboardDeviceAddedInternal( | 1147 return KeyboardDeviceAddedInternal( |
1148 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id); | 1148 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id); |
1149 } | 1149 } |
1150 } | 1150 } |
1151 return kDeviceUnknown; | 1151 return kDeviceUnknown; |
1152 } | 1152 } |
1153 | 1153 |
1154 } // namespace chromeos | 1154 } // namespace chromeos |
OLD | NEW |