Index: ash/wm/dock/docked_window_layout_manager.cc |
diff --git a/ash/wm/dock/docked_window_layout_manager.cc b/ash/wm/dock/docked_window_layout_manager.cc |
index fcbecfc00f4255e730db781b11349fae71853c1f..d5a3734cee1dbece4d3733ef125e3810956fbc04 100644 |
--- a/ash/wm/dock/docked_window_layout_manager.cc |
+++ b/ash/wm/dock/docked_window_layout_manager.cc |
@@ -464,6 +464,14 @@ void DockedWindowLayoutManager::StartDragging(aura::Window* window) { |
if (dragged_window_->parent() != dock_container_) { |
dragged_window_->AddObserver(this); |
dragged_state->AddObserver(this); |
+ } else if (!IsAnyWindowDocked() && |
+ dragged_state->drag_details() && |
+ !(dragged_state->drag_details()->bounds_change & |
+ WindowResizer::kBoundsChange_Resizes)) { |
+ // If there are no other docked windows clear alignment when a docked window |
+ // is moved (but not when it is resized or the window could get undocked |
+ // when resized away from the edge while docked). |
+ alignment_ = DOCKED_ALIGNMENT_NONE; |
} |
is_dragged_from_dock_ = window->parent() == dock_container_; |
DCHECK(!is_dragged_window_docked_); |
@@ -518,6 +526,12 @@ void DockedWindowLayoutManager::FinishDragging(DockedAction action, |
views::corewm::SetWindowShowAnimationDuration(dragged_window_, |
base::TimeDelta()); |
} else { |
+ // If this is the first window that got docked by a move update alignment. |
+ if (alignment_ == DOCKED_ALIGNMENT_NONE) { |
+ alignment_ = GetAlignmentOfWindow(dragged_window_); |
+ DCHECK(action == DOCKED_ACTION_NONE || |
+ alignment_ != DOCKED_ALIGNMENT_NONE); |
+ } |
// A window is no longer dragged and is a child. |
// When a window becomes a child at drag start this is |
// the only opportunity we will have to enforce a window |
@@ -657,7 +671,7 @@ void DockedWindowLayoutManager::OnWindowAddedToLayout(aura::Window* child) { |
// change, so the the alignment may not be valid. |
if (alignment_ == DOCKED_ALIGNMENT_NONE) { |
alignment_ = GetAlignmentOfWindow(child); |
- DCHECK(alignment_ != DOCKED_ALIGNMENT_NONE); |
+ DCHECK_NE(DOCKED_ALIGNMENT_NONE, alignment_); |
} |
MaybeMinimizeChildrenExcept(child); |
child->AddObserver(this); |
@@ -830,7 +844,7 @@ void DockedWindowLayoutManager::OnWindowDestroying(aura::Window* window) { |
if (dragged_window_ == window) { |
FinishDragging(DOCKED_ACTION_NONE, DOCKED_ACTION_SOURCE_UNKNOWN); |
DCHECK(!dragged_window_); |
- DCHECK (!is_dragged_window_docked_); |
+ DCHECK(!is_dragged_window_docked_); |
} |
if (window == last_active_window_) |
last_active_window_ = NULL; |
@@ -985,25 +999,9 @@ void DockedWindowLayoutManager::UpdateDockedWidth(int width) { |
void DockedWindowLayoutManager::OnDraggedWindowDocked(aura::Window* window) { |
DCHECK(!is_dragged_window_docked_); |
is_dragged_window_docked_ = true; |
- |
- // If there are no other docked windows update alignment when the window is |
- // moved. |
- if (!IsAnyWindowDocked() && |
- wm::GetWindowState(dragged_window_)->drag_details() && |
- !(wm::GetWindowState(dragged_window_)->drag_details()->bounds_change & |
- WindowResizer::kBoundsChange_Resizes)) { |
- alignment_ = DOCKED_ALIGNMENT_NONE; |
- } |
} |
void DockedWindowLayoutManager::OnDraggedWindowUndocked() { |
- // If this is the first window getting docked by moving it - update alignment. |
- if (!IsAnyWindowDocked() && |
- wm::GetWindowState(dragged_window_)->drag_details() && |
- !(wm::GetWindowState(dragged_window_)->drag_details()->bounds_change & |
- WindowResizer::kBoundsChange_Resizes)) { |
- alignment_ = GetAlignmentOfWindow(dragged_window_); |
- } |
DCHECK (is_dragged_window_docked_); |
is_dragged_window_docked_ = false; |
} |