Index: ui/aura_shell/default_container_event_filter.cc |
diff --git a/ui/aura_shell/default_container_event_filter.cc b/ui/aura_shell/default_container_event_filter.cc |
index 954714843fa402370770fed5c3ee6cd01f50d7cd..e06aa0b19008ea06df98bd67dfa104c055c3611b 100644 |
--- a/ui/aura_shell/default_container_event_filter.cc |
+++ b/ui/aura_shell/default_container_event_filter.cc |
@@ -26,6 +26,10 @@ bool DefaultContainerEventFilter::PreHandleMouseEvent(aura::Window* target, |
static_cast<DefaultContainerLayoutManager*>(owner()->layout_manager()); |
DCHECK(layout_manager); |
+ // TODO(oshima|derat): Move ToplevelWindowEventFilter to the shell, |
+ // incorporate the logic below and intorduce DragObserver (or something |
+ // similar) to decouple DCLM. |
+ |
// Notify layout manager that drag event may move/resize the target wnidow. |
if (event->type() == ui::ET_MOUSE_DRAGGED && drag_state_ == DRAG_NONE) |
layout_manager->PrepareForMoveOrResize(target, event); |
@@ -36,8 +40,21 @@ bool DefaultContainerEventFilter::PreHandleMouseEvent(aura::Window* target, |
case ui::ET_MOUSE_DRAGGED: |
// Cancel move/resize if the event wasn't handled, or |
// drag_state_ didn't move to MOVE or RESIZE. |
- if (!handled || (drag_state_ == DRAG_NONE && !UpdateDragState())) |
+ if (handled) { |
+ switch (drag_state_) { |
+ case DRAG_NONE: |
+ if (!UpdateDragState()) |
+ layout_manager->CancelMoveOrResize(target, event); |
+ break; |
+ case DRAG_MOVE: |
+ layout_manager->ProcessMove(target, event); |
+ break; |
+ case DRAG_RESIZE: |
+ break; |
+ } |
+ } else { |
layout_manager->CancelMoveOrResize(target, event); |
+ } |
break; |
case ui::ET_MOUSE_RELEASED: |
if (drag_state_ == DRAG_MOVE) |