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

Side by Side Diff: ui/views/widget/root_view.cc

Issue 11280290: events: Change gesture-event handler in EventHandler to not return any values. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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/views/widget/root_view.h ('k') | ui/views/widget/widget.h » ('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/views/widget/root_view.h" 5 #include "ui/views/widget/root_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 return status; 190 return status;
191 } 191 }
192 192
193 // Reset touch_pressed_handler_ to indicate that no processing is occurring. 193 // Reset touch_pressed_handler_ to indicate that no processing is occurring.
194 touch_pressed_handler_ = NULL; 194 touch_pressed_handler_ = NULL;
195 195
196 return status; 196 return status;
197 } 197 }
198 198
199 ui::EventResult RootView::DispatchGestureEvent(ui::GestureEvent* event) { 199 void RootView::DispatchGestureEvent(ui::GestureEvent* event) {
200 ui::EventResult status = ui::ER_UNHANDLED;
201
202 if (gesture_handler_) { 200 if (gesture_handler_) {
203 // |gesture_handler_| (or |scroll_gesture_handler_|) can be deleted during 201 // |gesture_handler_| (or |scroll_gesture_handler_|) can be deleted during
204 // processing. 202 // processing.
205 View* handler = scroll_gesture_handler_ && 203 View* handler = scroll_gesture_handler_ &&
206 (event->IsScrollGestureEvent() || event->IsFlingScrollEvent()) ? 204 (event->IsScrollGestureEvent() || event->IsFlingScrollEvent()) ?
207 scroll_gesture_handler_ : gesture_handler_; 205 scroll_gesture_handler_ : gesture_handler_;
208 ui::GestureEvent handler_event(*event, static_cast<View*>(this), handler); 206 ui::GestureEvent handler_event(*event, static_cast<View*>(this), handler);
209 207 handler->ProcessGestureEvent(&handler_event);
210 ui::EventResult status = handler->ProcessGestureEvent(&handler_event);
211 208
212 if (event->type() == ui::ET_GESTURE_END && 209 if (event->type() == ui::ET_GESTURE_END &&
213 event->details().touch_points() <= 1) { 210 event->details().touch_points() <= 1) {
214 // In case a drag was in progress, reset all the handlers. Otherwise, just 211 // In case a drag was in progress, reset all the handlers. Otherwise, just
215 // reset the gesture handler. 212 // reset the gesture handler.
216 if (gesture_handler_ == mouse_pressed_handler_) 213 if (gesture_handler_ == mouse_pressed_handler_)
217 SetMouseHandler(NULL); 214 SetMouseHandler(NULL);
218 else 215 else
219 gesture_handler_ = NULL; 216 gesture_handler_ = NULL;
220 } 217 }
221 218
222 if (scroll_gesture_handler_ && 219 if (scroll_gesture_handler_ &&
223 (event->type() == ui::ET_GESTURE_SCROLL_END || 220 (event->type() == ui::ET_GESTURE_SCROLL_END ||
224 event->type() == ui::ET_SCROLL_FLING_START)) { 221 event->type() == ui::ET_SCROLL_FLING_START)) {
225 scroll_gesture_handler_ = NULL; 222 scroll_gesture_handler_ = NULL;
226 } 223 }
227 224
228 if (status == ui::ER_CONSUMED) 225 if (handler_event.stopped_propagation()) {
229 return status; 226 event->StopPropagation();
230 227 return;
231 DCHECK_EQ(ui::ER_UNHANDLED, status); 228 } else if (handler_event.handled()) {
229 event->SetHandled();
230 return;
231 }
232 232
233 if (event->type() == ui::ET_GESTURE_SCROLL_BEGIN && 233 if (event->type() == ui::ET_GESTURE_SCROLL_BEGIN &&
234 !scroll_gesture_handler_) { 234 !scroll_gesture_handler_) {
235 // Some view started processing gesture events, however it does not 235 // Some view started processing gesture events, however it does not
236 // process scroll-gesture events. In such case, we allow the event to 236 // process scroll-gesture events. In such case, we allow the event to
237 // bubble up, and install a different scroll-gesture handler different 237 // bubble up, and install a different scroll-gesture handler different
238 // from the default gesture handler. 238 // from the default gesture handler.
239 for (scroll_gesture_handler_ = gesture_handler_->parent(); 239 for (scroll_gesture_handler_ = gesture_handler_->parent();
240 scroll_gesture_handler_ && scroll_gesture_handler_ != this; 240 scroll_gesture_handler_ && scroll_gesture_handler_ != this;
241 scroll_gesture_handler_ = scroll_gesture_handler_->parent()) { 241 scroll_gesture_handler_ = scroll_gesture_handler_->parent()) {
242 ui::GestureEvent gesture_event(*event, static_cast<View*>(this), 242 ui::GestureEvent gesture_event(*event, static_cast<View*>(this),
243 scroll_gesture_handler_); 243 scroll_gesture_handler_);
244 status = scroll_gesture_handler_->ProcessGestureEvent(&gesture_event); 244 scroll_gesture_handler_->ProcessGestureEvent(&gesture_event);
245 if (status == ui::ER_CONSUMED) 245 if (gesture_event.stopped_propagation()) {
246 return status; 246 event->StopPropagation();
247 return;
248 } else if (gesture_event.handled()) {
249 event->SetHandled();
250 return;
251 }
247 } 252 }
248 scroll_gesture_handler_ = NULL; 253 scroll_gesture_handler_ = NULL;
249 } 254 }
250 255
251 return ui::ER_UNHANDLED; 256 return;
252 } 257 }
253 258
254 // Walk up the tree until we find a view that wants the gesture event. 259 // Walk up the tree until we find a view that wants the gesture event.
255 for (gesture_handler_ = GetEventHandlerForPoint(event->location()); 260 for (gesture_handler_ = GetEventHandlerForPoint(event->location());
256 gesture_handler_ && (gesture_handler_ != this); 261 gesture_handler_ && (gesture_handler_ != this);
257 gesture_handler_ = gesture_handler_->parent()) { 262 gesture_handler_ = gesture_handler_->parent()) {
258 if (!gesture_handler_->enabled()) { 263 if (!gesture_handler_->enabled()) {
259 // Disabled views eat events but are treated as not handled. 264 // Disabled views eat events but are treated as not handled.
260 return ui::ER_UNHANDLED; 265 return;
261 } 266 }
262 267
263 // See if this view wants to handle the Gesture. 268 // See if this view wants to handle the Gesture.
264 ui::GestureEvent gesture_event(*event, static_cast<View*>(this), 269 ui::GestureEvent gesture_event(*event, static_cast<View*>(this),
265 gesture_handler_); 270 gesture_handler_);
266 status = gesture_handler_->ProcessGestureEvent(&gesture_event); 271 gesture_handler_->ProcessGestureEvent(&gesture_event);
267 272
268 // The view could have removed itself from the tree when handling 273 // The view could have removed itself from the tree when handling
269 // OnGestureEvent(). So handle as per OnMousePressed. NB: we 274 // OnGestureEvent(). So handle as per OnMousePressed. NB: we
270 // assume that the RootView itself cannot be so removed. 275 // assume that the RootView itself cannot be so removed.
271 if (!gesture_handler_) 276 if (!gesture_handler_)
272 return ui::ER_UNHANDLED; 277 return;
273 278
274 if (status == ui::ER_CONSUMED) { 279 if (gesture_event.handled()) {
275 if (gesture_event.type() == ui::ET_GESTURE_SCROLL_BEGIN) 280 if (gesture_event.type() == ui::ET_GESTURE_SCROLL_BEGIN)
276 scroll_gesture_handler_ = gesture_handler_; 281 scroll_gesture_handler_ = gesture_handler_;
277 return status; 282 if (gesture_event.stopped_propagation())
283 event->StopPropagation();
284 else
285 event->SetHandled();
286 return;
278 } 287 }
279 288
280 // The gesture event wasn't processed. Go up the view hierarchy and 289 // The gesture event wasn't processed. Go up the view hierarchy and
281 // dispatch the gesture event. 290 // dispatch the gesture event.
282 DCHECK_EQ(ui::ER_UNHANDLED, status);
283 } 291 }
284 292
285 gesture_handler_ = NULL; 293 gesture_handler_ = NULL;
286
287 return status;
288 } 294 }
289 295
290 // Focus ----------------------------------------------------------------------- 296 // Focus -----------------------------------------------------------------------
291 297
292 void RootView::SetFocusTraversableParent(FocusTraversable* focus_traversable) { 298 void RootView::SetFocusTraversableParent(FocusTraversable* focus_traversable) {
293 DCHECK(focus_traversable != this); 299 DCHECK(focus_traversable != this);
294 focus_traversable_parent_ = focus_traversable; 300 focus_traversable_parent_ = focus_traversable;
295 } 301 }
296 302
297 void RootView::SetFocusTraversableParentView(View* view) { 303 void RootView::SetFocusTraversableParentView(View* view) {
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 } 619 }
614 620
615 void RootView::SetMouseLocationAndFlags(const ui::MouseEvent& event) { 621 void RootView::SetMouseLocationAndFlags(const ui::MouseEvent& event) {
616 last_mouse_event_flags_ = event.flags(); 622 last_mouse_event_flags_ = event.flags();
617 last_mouse_event_x_ = event.x(); 623 last_mouse_event_x_ = event.x();
618 last_mouse_event_y_ = event.y(); 624 last_mouse_event_y_ = event.y();
619 } 625 }
620 626
621 } // namespace internal 627 } // namespace internal
622 } // namespace views 628 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/root_view.h ('k') | ui/views/widget/widget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698