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

Side by Side Diff: ui/aura/root_window.cc

Issue 135483002: aura: Fix a couple of issues related to held touch events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « ui/aura/root_window.h ('k') | ui/aura/root_window_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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/aura/root_window.h" 5 #include "ui/aura/root_window.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 DispatchDetails details; 618 DispatchDetails details;
619 if (target != event_dispatch_target_) 619 if (target != event_dispatch_target_)
620 details.target_destroyed = true; 620 details.target_destroyed = true;
621 event_dispatch_target_ = old_dispatch_target_; 621 event_dispatch_target_ = old_dispatch_target_;
622 old_dispatch_target_ = NULL; 622 old_dispatch_target_ = NULL;
623 #ifndef NDEBUG 623 #ifndef NDEBUG
624 DCHECK(!event_dispatch_target_ || window()->Contains(event_dispatch_target_)); 624 DCHECK(!event_dispatch_target_ || window()->Contains(event_dispatch_target_));
625 #endif 625 #endif
626 626
627 if (event.IsTouchEvent() && !details.target_destroyed) { 627 if (event.IsTouchEvent() && !details.target_destroyed) {
628 ui::TouchEvent orig_event(static_cast<const ui::TouchEvent&>(event), 628 // Do not let 'held' touch events contribute to any gestures.
629 static_cast<Window*>(event.target()), window()); 629 if (!held_move_event_ || !held_move_event_->IsTouchEvent()) {
630 // Get the list of GestureEvents from GestureRecognizer. 630 ui::TouchEvent orig_event(static_cast<const ui::TouchEvent&>(event),
631 scoped_ptr<ui::GestureRecognizer::Gestures> gestures; 631 static_cast<Window*>(event.target()), window());
632 gestures.reset(ui::GestureRecognizer::Get()-> 632 // Get the list of GestureEvents from GestureRecognizer.
633 ProcessTouchEventForGesture(orig_event, event.result(), 633 scoped_ptr<ui::GestureRecognizer::Gestures> gestures;
634 static_cast<Window*>(target))); 634 gestures.reset(ui::GestureRecognizer::Get()->
635 return ProcessGestures(gestures.get()); 635 ProcessTouchEventForGesture(orig_event, event.result(),
636 static_cast<Window*>(target)));
637 return ProcessGestures(gestures.get());
638 }
636 } 639 }
637 640
638 return details; 641 return details;
639 } 642 }
640 643
641 //////////////////////////////////////////////////////////////////////////////// 644 ////////////////////////////////////////////////////////////////////////////////
642 // RootWindow, ui::GestureEventHelper implementation: 645 // RootWindow, ui::GestureEventHelper implementation:
643 646
644 bool RootWindow::CanDispatchToConsumer(ui::GestureConsumer* consumer) { 647 bool RootWindow::CanDispatchToConsumer(ui::GestureConsumer* consumer) {
645 Window* consumer_window = ConsumerToWindow(consumer);; 648 Window* consumer_window = ConsumerToWindow(consumer);;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 return this; 757 return this;
755 } 758 }
756 759
757 //////////////////////////////////////////////////////////////////////////////// 760 ////////////////////////////////////////////////////////////////////////////////
758 // RootWindow, private: 761 // RootWindow, private:
759 762
760 ui::EventDispatchDetails RootWindow::OnHostMouseEventImpl( 763 ui::EventDispatchDetails RootWindow::OnHostMouseEventImpl(
761 ui::MouseEvent* event) { 764 ui::MouseEvent* event) {
762 if (IsEventCandidateForHold(*event)) { 765 if (IsEventCandidateForHold(*event)) {
763 if (move_hold_count_) { 766 if (move_hold_count_) {
764 Window* null_window = static_cast<Window*>(NULL); 767 held_move_event_.reset(new ui::MouseEvent(*event));
765 held_move_event_.reset(
766 new ui::MouseEvent(*event, null_window, null_window));
767 event->SetHandled(); 768 event->SetHandled();
768 return DispatchDetails(); 769 return DispatchDetails();
769 } else { 770 } else {
770 // We may have a held event for a period between the time move_hold_count_ 771 // We may have a held event for a period between the time move_hold_count_
771 // fell to 0 and the DispatchHeldEvents executes. Since we're going to 772 // fell to 0 and the DispatchHeldEvents executes. Since we're going to
772 // dispatch the new event directly below, we can reset the old one. 773 // dispatch the new event directly below, we can reset the old one.
773 held_move_event_.reset(); 774 held_move_event_.reset();
774 } 775 }
775 } 776 }
776 DispatchDetails details = DispatchHeldEvents(); 777 DispatchDetails details = DispatchHeldEvents();
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 break; 994 break;
994 // fallthrough 995 // fallthrough
995 case ui::ET_TOUCH_RELEASED: 996 case ui::ET_TOUCH_RELEASED:
996 touch_ids_down_ = (touch_ids_down_ | (1 << event->touch_id())) ^ 997 touch_ids_down_ = (touch_ids_down_ | (1 << event->touch_id())) ^
997 (1 << event->touch_id()); 998 (1 << event->touch_id());
998 Env::GetInstance()->set_touch_down(touch_ids_down_ != 0); 999 Env::GetInstance()->set_touch_down(touch_ids_down_ != 0);
999 break; 1000 break;
1000 1001
1001 case ui::ET_TOUCH_MOVED: 1002 case ui::ET_TOUCH_MOVED:
1002 if (move_hold_count_) { 1003 if (move_hold_count_) {
1003 held_move_event_.reset(new ui::TouchEvent(*event)); 1004 held_move_event_.reset(new ui::TouchEvent(*event, target, window()));
1004 event->SetHandled(); 1005 event->SetHandled();
1005 return; 1006 return;
1006 } 1007 }
1007 break; 1008 break;
1008 1009
1009 default: 1010 default:
1010 NOTREACHED(); 1011 NOTREACHED();
1011 break; 1012 break;
1012 } 1013 }
1013 PreDispatchLocatedEvent(target, event); 1014 PreDispatchLocatedEvent(target, event);
1014 } 1015 }
1015 1016
1016 } // namespace aura 1017 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/root_window.h ('k') | ui/aura/root_window_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698