Chromium Code Reviews| 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..c8433539119cbd95dba43feec7cfb477023e0596 100644 |
| --- a/ash/wm/dock/docked_window_layout_manager.cc |
| +++ b/ash/wm/dock/docked_window_layout_manager.cc |
| @@ -458,6 +458,16 @@ void DockedWindowLayoutManager::StartDragging(aura::Window* window) { |
| DCHECK(!dragged_window_); |
| dragged_window_ = window; |
| DCHECK(!IsPopupOrTransient(window)); |
| + |
| + // If there are no other docked windows clear alignment when a docked window |
| + // is moved. |
| + if (dragged_window_->parent() == dock_container_ && |
| + !IsAnyWindowDocked() && |
| + wm::GetWindowState(dragged_window_)->drag_details() && |
| + !(wm::GetWindowState(dragged_window_)->drag_details()->bounds_change & |
| + WindowResizer::kBoundsChange_Resizes)) { |
| + alignment_ = DOCKED_ALIGNMENT_NONE; |
| + } |
| // Start observing a window unless it is docked container's child in which |
| // case it is already observed. |
| wm::WindowState* dragged_state = wm::GetWindowState(dragged_window_); |
| @@ -507,6 +517,15 @@ void DockedWindowLayoutManager::FinishDragging(DockedAction action, |
| if (is_dragged_window_docked_) |
| OnDraggedWindowUndocked(); |
| DCHECK (!is_dragged_window_docked_); |
| + |
| + // If this is the first window getting docked by moving it - update alignment. |
| + if (dragged_window_->parent() == dock_container_ && |
| + !IsAnyWindowDocked() && |
| + wm::GetWindowState(dragged_window_)->drag_details() && |
| + !(wm::GetWindowState(dragged_window_)->drag_details()->bounds_change & |
| + WindowResizer::kBoundsChange_Resizes)) { |
|
pkotwicz
2014/01/16 21:43:27
I wonder whether it is possible to have a new func
varkha
2014/01/16 23:34:14
I will try to use the "closest to edge" logic when
|
| + alignment_ = GetAlignmentOfWindow(dragged_window_); |
| + } |
| // Stop observing a window unless it is docked container's child in which |
| // case it needs to keep being observed after the drag completes. |
| if (dragged_window_->parent() != dock_container_) { |
| @@ -985,25 +1004,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; |
| } |