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

Side by Side Diff: ash/wm/toplevel_window_event_handler.cc

Issue 11592011: events: Update mouse-event handlers to not return EventResult. (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 | « ash/wm/toplevel_window_event_handler.h ('k') | ash/wm/user_activity_detector.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 "ash/wm/toplevel_window_event_handler.h" 5 #include "ash/wm/toplevel_window_event_handler.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/wm/property_util.h" 8 #include "ash/wm/property_util.h"
9 #include "ash/wm/resize_shadow_controller.h" 9 #include "ash/wm/resize_shadow_controller.h"
10 #include "ash/wm/window_resizer.h" 10 #include "ash/wm/window_resizer.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 *destroyed_ = true; 123 *destroyed_ = true;
124 } 124 }
125 125
126 void ToplevelWindowEventHandler::OnKeyEvent(ui::KeyEvent* event) { 126 void ToplevelWindowEventHandler::OnKeyEvent(ui::KeyEvent* event) {
127 if (window_resizer_.get() && event->type() == ui::ET_KEY_PRESSED && 127 if (window_resizer_.get() && event->type() == ui::ET_KEY_PRESSED &&
128 event->key_code() == ui::VKEY_ESCAPE) { 128 event->key_code() == ui::VKEY_ESCAPE) {
129 CompleteDrag(DRAG_REVERT, event->flags()); 129 CompleteDrag(DRAG_REVERT, event->flags());
130 } 130 }
131 } 131 }
132 132
133 ui::EventResult ToplevelWindowEventHandler::OnMouseEvent( 133 void ToplevelWindowEventHandler::OnMouseEvent(
134 ui::MouseEvent* event) { 134 ui::MouseEvent* event) {
135 if ((event->flags() & 135 if ((event->flags() &
136 (ui::EF_MIDDLE_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON)) != 0) 136 (ui::EF_MIDDLE_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON)) != 0)
137 return ui::ER_UNHANDLED; 137 return;
138 138
139 aura::Window* target = static_cast<aura::Window*>(event->target()); 139 aura::Window* target = static_cast<aura::Window*>(event->target());
140 switch (event->type()) { 140 switch (event->type()) {
141 case ui::ET_MOUSE_PRESSED: 141 case ui::ET_MOUSE_PRESSED:
142 return HandleMousePressed(target, event); 142 HandleMousePressed(target, event);
143 break;
143 case ui::ET_MOUSE_DRAGGED: 144 case ui::ET_MOUSE_DRAGGED:
144 return HandleDrag(target, event) ? ui::ER_CONSUMED : ui::ER_UNHANDLED; 145 HandleDrag(target, event);
146 break;
145 case ui::ET_MOUSE_CAPTURE_CHANGED: 147 case ui::ET_MOUSE_CAPTURE_CHANGED:
146 case ui::ET_MOUSE_RELEASED: 148 case ui::ET_MOUSE_RELEASED:
147 return HandleMouseReleased(target, event); 149 HandleMouseReleased(target, event);
150 break;
148 case ui::ET_MOUSE_MOVED: 151 case ui::ET_MOUSE_MOVED:
149 return HandleMouseMoved(target, event); 152 HandleMouseMoved(target, event);
153 break;
150 case ui::ET_MOUSE_EXITED: 154 case ui::ET_MOUSE_EXITED:
151 return HandleMouseExited(target, event); 155 HandleMouseExited(target, event);
156 break;
152 default: 157 default:
153 break; 158 break;
154 } 159 }
155 return ui::ER_UNHANDLED;
156 } 160 }
157 161
158 void ToplevelWindowEventHandler::OnGestureEvent(ui::GestureEvent* event) { 162 void ToplevelWindowEventHandler::OnGestureEvent(ui::GestureEvent* event) {
159 aura::Window* target = static_cast<aura::Window*>(event->target()); 163 aura::Window* target = static_cast<aura::Window*>(event->target());
160 if (!target->delegate()) 164 if (!target->delegate())
161 return; 165 return;
162 166
163 switch (event->type()) { 167 switch (event->type()) {
164 case ui::ET_GESTURE_SCROLL_BEGIN: { 168 case ui::ET_GESTURE_SCROLL_BEGIN: {
165 int component = 169 int component =
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 int event_flags) { 318 int event_flags) {
315 scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release()); 319 scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release());
316 if (resizer.get()) { 320 if (resizer.get()) {
317 if (status == DRAG_COMPLETE) 321 if (status == DRAG_COMPLETE)
318 resizer->resizer()->CompleteDrag(event_flags); 322 resizer->resizer()->CompleteDrag(event_flags);
319 else 323 else
320 resizer->resizer()->RevertDrag(); 324 resizer->resizer()->RevertDrag();
321 } 325 }
322 } 326 }
323 327
324 ui::EventResult ToplevelWindowEventHandler::HandleMousePressed( 328 void ToplevelWindowEventHandler::HandleMousePressed(
325 aura::Window* target, 329 aura::Window* target,
326 ui::MouseEvent* event) { 330 ui::MouseEvent* event) {
327 // Move/size operations are initiated post-target handling to give the target 331 // Move/size operations are initiated post-target handling to give the target
328 // an opportunity to cancel this default behavior by returning ER_HANDLED. 332 // an opportunity to cancel this default behavior by returning ER_HANDLED.
329 if (ui::EventCanceledDefaultHandling(*event)) 333 if (ui::EventCanceledDefaultHandling(*event))
330 return ui::ER_UNHANDLED; 334 return;
331 335
332 // We also update the current window component here because for the 336 // We also update the current window component here because for the
333 // mouse-drag-release-press case, where the mouse is released and 337 // mouse-drag-release-press case, where the mouse is released and
334 // pressed without mouse move event. 338 // pressed without mouse move event.
335 int component = 339 int component =
336 target->delegate()->GetNonClientComponent(event->location()); 340 target->delegate()->GetNonClientComponent(event->location());
337 if ((event->flags() & 341 if ((event->flags() &
338 (ui::EF_IS_DOUBLE_CLICK | ui::EF_IS_TRIPLE_CLICK)) == 0 && 342 (ui::EF_IS_DOUBLE_CLICK | ui::EF_IS_TRIPLE_CLICK)) == 0 &&
339 WindowResizer::GetBoundsChangeForWindowComponent(component)) { 343 WindowResizer::GetBoundsChangeForWindowComponent(component)) {
340 gfx::Point location_in_parent( 344 gfx::Point location_in_parent(
341 ConvertPointToParent(target, event->location())); 345 ConvertPointToParent(target, event->location()));
342 CreateScopedWindowResizer(target, location_in_parent, component); 346 CreateScopedWindowResizer(target, location_in_parent, component);
343 } else { 347 } else {
344 window_resizer_.reset(); 348 window_resizer_.reset();
345 } 349 }
346 return WindowResizer::GetBoundsChangeForWindowComponent(component) != 0 ? 350 if (WindowResizer::GetBoundsChangeForWindowComponent(component) != 0)
347 ui::ER_CONSUMED : ui::ER_UNHANDLED; 351 event->StopPropagation();
348 } 352 }
349 353
350 ui::EventResult ToplevelWindowEventHandler::HandleMouseReleased( 354 void ToplevelWindowEventHandler::HandleMouseReleased(
351 aura::Window* target, 355 aura::Window* target,
352 ui::MouseEvent* event) { 356 ui::MouseEvent* event) {
353 if (event->phase() != ui::EP_PRETARGET) 357 if (event->phase() != ui::EP_PRETARGET)
354 return ui::ER_UNHANDLED; 358 return;
355 359
356 CompleteDrag(event->type() == ui::ET_MOUSE_RELEASED ? 360 CompleteDrag(event->type() == ui::ET_MOUSE_RELEASED ?
357 DRAG_COMPLETE : DRAG_REVERT, 361 DRAG_COMPLETE : DRAG_REVERT,
358 event->flags()); 362 event->flags());
359 if (in_move_loop_) { 363 if (in_move_loop_) {
360 quit_closure_.Run(); 364 quit_closure_.Run();
361 in_move_loop_ = false; 365 in_move_loop_ = false;
362 } 366 }
363 // Completing the drag may result in hiding the window. If this happens 367 // Completing the drag may result in hiding the window. If this happens
364 // return true so no other handlers/observers see the event. Otherwise 368 // return true so no other handlers/observers see the event. Otherwise
365 // they see the event on a hidden window. 369 // they see the event on a hidden window.
366 if (event->type() == ui::ET_MOUSE_CAPTURE_CHANGED && 370 if (event->type() == ui::ET_MOUSE_CAPTURE_CHANGED &&
367 !target->IsVisible()) { 371 !target->IsVisible()) {
368 return ui::ER_CONSUMED; 372 event->StopPropagation();
369 } 373 }
370 return ui::ER_UNHANDLED;
371 } 374 }
372 375
373 ui::EventResult ToplevelWindowEventHandler::HandleDrag( 376 void ToplevelWindowEventHandler::HandleDrag(
374 aura::Window* target, 377 aura::Window* target,
375 ui::LocatedEvent* event) { 378 ui::LocatedEvent* event) {
376 // This function only be triggered to move window 379 // This function only be triggered to move window
377 // by mouse drag or touch move event. 380 // by mouse drag or touch move event.
378 DCHECK(event->type() == ui::ET_MOUSE_DRAGGED || 381 DCHECK(event->type() == ui::ET_MOUSE_DRAGGED ||
379 event->type() == ui::ET_TOUCH_MOVED || 382 event->type() == ui::ET_TOUCH_MOVED ||
380 event->type() == ui::ET_GESTURE_SCROLL_UPDATE); 383 event->type() == ui::ET_GESTURE_SCROLL_UPDATE);
381 384
382 // Drag actions are performed pre-target handling to prevent spurious mouse 385 // Drag actions are performed pre-target handling to prevent spurious mouse
383 // moves from the move/size operation from being sent to the target. 386 // moves from the move/size operation from being sent to the target.
384 if (event->phase() != ui::EP_PRETARGET) 387 if (event->phase() != ui::EP_PRETARGET)
385 return ui::ER_UNHANDLED; 388 return;
386 389
387 if (!window_resizer_.get()) 390 if (!window_resizer_.get())
388 return ui::ER_UNHANDLED; 391 return;
389 window_resizer_->resizer()->Drag( 392 window_resizer_->resizer()->Drag(
390 ConvertPointToParent(target, event->location()), event->flags()); 393 ConvertPointToParent(target, event->location()), event->flags());
391 return ui::ER_CONSUMED; 394 event->StopPropagation();
392 } 395 }
393 396
394 ui::EventResult ToplevelWindowEventHandler::HandleMouseMoved( 397 void ToplevelWindowEventHandler::HandleMouseMoved(
395 aura::Window* target, 398 aura::Window* target,
396 ui::LocatedEvent* event) { 399 ui::LocatedEvent* event) {
397 // Shadow effects are applied after target handling. Note that we don't 400 // Shadow effects are applied after target handling. Note that we don't
398 // respect ER_HANDLED here right now since we have not had a reason to allow 401 // respect ER_HANDLED here right now since we have not had a reason to allow
399 // the target to cancel shadow rendering. 402 // the target to cancel shadow rendering.
400 if (event->phase() != ui::EP_POSTTARGET) 403 if (event->phase() != ui::EP_POSTTARGET)
401 return ui::ER_UNHANDLED; 404 return;
402 405
403 // TODO(jamescook): Move the resize cursor update code into here from 406 // TODO(jamescook): Move the resize cursor update code into here from
404 // CompoundEventFilter? 407 // CompoundEventFilter?
405 internal::ResizeShadowController* controller = 408 internal::ResizeShadowController* controller =
406 Shell::GetInstance()->resize_shadow_controller(); 409 Shell::GetInstance()->resize_shadow_controller();
407 if (controller) { 410 if (controller) {
408 if (event->flags() & ui::EF_IS_NON_CLIENT) { 411 if (event->flags() & ui::EF_IS_NON_CLIENT) {
409 int component = 412 int component =
410 target->delegate()->GetNonClientComponent(event->location()); 413 target->delegate()->GetNonClientComponent(event->location());
411 controller->ShowShadow(target, component); 414 controller->ShowShadow(target, component);
412 } else { 415 } else {
413 controller->HideShadow(target); 416 controller->HideShadow(target);
414 } 417 }
415 } 418 }
416 return ui::ER_UNHANDLED;
417 } 419 }
418 420
419 ui::EventResult ToplevelWindowEventHandler::HandleMouseExited( 421 void ToplevelWindowEventHandler::HandleMouseExited(
420 aura::Window* target, 422 aura::Window* target,
421 ui::LocatedEvent* event) { 423 ui::LocatedEvent* event) {
422 // Shadow effects are applied after target handling. Note that we don't 424 // Shadow effects are applied after target handling. Note that we don't
423 // respect ER_HANDLED here right now since we have not had a reason to allow 425 // respect ER_HANDLED here right now since we have not had a reason to allow
424 // the target to cancel shadow rendering. 426 // the target to cancel shadow rendering.
425 if (event->phase() != ui::EP_POSTTARGET) 427 if (event->phase() != ui::EP_POSTTARGET)
426 return ui::ER_UNHANDLED; 428 return;
427 429
428 internal::ResizeShadowController* controller = 430 internal::ResizeShadowController* controller =
429 Shell::GetInstance()->resize_shadow_controller(); 431 Shell::GetInstance()->resize_shadow_controller();
430 if (controller) 432 if (controller)
431 controller->HideShadow(target); 433 controller->HideShadow(target);
432 return ui::ER_UNHANDLED;
433 } 434 }
434 435
435 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { 436 void ToplevelWindowEventHandler::ResizerWindowDestroyed() {
436 // We explicitly don't invoke RevertDrag() since that may do things to window. 437 // We explicitly don't invoke RevertDrag() since that may do things to window.
437 // Instead we destroy the resizer. 438 // Instead we destroy the resizer.
438 window_resizer_.reset(); 439 window_resizer_.reset();
439 440
440 // End the move loop. This does nothing if we're not in a move loop. 441 // End the move loop. This does nothing if we're not in a move loop.
441 EndMoveLoop(); 442 EndMoveLoop();
442 } 443 }
443 444
444 } // namespace ash 445 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/toplevel_window_event_handler.h ('k') | ash/wm/user_activity_detector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698