| 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 |