Commit 4613e010 authored by Avery Musbach's avatar Avery Musbach Committed by Commit Bot

overview: Clean up OverviewItem::Restack

OverviewItem::Restack refers to the "dragged" window in variable names
and comments, but as of [1], the window is no longer guaranteed to be
the dragged window. Also, the whole function is hard to read.

[1] https://chromium-review.googlesource.com/c/chromium/src/+/2024148

Fixed: 1047486
Change-Id: I10c51e80ef8c9b1fce86ab60f8834fd5eaca8a06
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2031925
Commit-Queue: Avery Musbach <amusbach@chromium.org>
Reviewed-by: default avatarSammie Quon <sammiequon@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737081}
parent 5384546a
...@@ -654,48 +654,38 @@ bool OverviewItem::IsDragItem() { ...@@ -654,48 +654,38 @@ bool OverviewItem::IsDragItem() {
} }
void OverviewItem::Restack() { void OverviewItem::Restack() {
// First stack this item's window below the snapped window if split view aura::Window* window = GetWindow();
// mode is active. aura::Window* parent_window = window->parent();
aura::Window* dragged_window = GetWindow(); aura::Window* stacking_target = nullptr;
aura::Window* dragged_widget_window = item_widget_->GetNativeWindow(); // Stack |window| below the split view window if split view is active.
aura::Window* parent_window = dragged_widget_window->parent();
SplitViewController* split_view_controller = SplitViewController* split_view_controller =
SplitViewController::Get(root_window_); SplitViewController::Get(root_window_);
if (split_view_controller->InSplitViewMode()) { if (split_view_controller->InSplitViewMode()) {
aura::Window* snapped_window = aura::Window* snapped_window =
split_view_controller->GetDefaultSnappedWindow(); split_view_controller->GetDefaultSnappedWindow();
if (snapped_window->parent() == parent_window && if (snapped_window->parent() == parent_window)
dragged_window->parent() == parent_window) { stacking_target = snapped_window;
parent_window->StackChildBelow(dragged_window, snapped_window);
parent_window->StackChildBelow(dragged_widget_window, dragged_window);
}
} }
// Stack |window| below the last window in |overview_grid_| that comes before
// Then find the window which was stacked right above this overview item's // |window| and has the same parent.
// window before dragging and stack this overview item's window below it. for (const std::unique_ptr<OverviewItem>& overview_item :
const std::vector<std::unique_ptr<OverviewItem>>& overview_items = overview_grid_->window_list()) {
overview_grid_->window_list(); if (overview_item.get() == this)
aura::Window* stacking_target = nullptr;
for (size_t index = 0; index < overview_items.size(); ++index) {
if (index > 0) {
aura::Window* window = overview_items[index - 1].get()->GetWindow();
if (window->parent() == parent_window &&
dragged_window->parent() == parent_window) {
stacking_target =
overview_items[index - 1].get()->item_widget()->GetNativeWindow();
}
}
if (overview_items[index].get() == this && stacking_target) {
parent_window->StackChildBelow(dragged_window, stacking_target);
parent_window->StackChildBelow(dragged_widget_window, dragged_window);
break; break;
} if (overview_item->GetWindow()->parent() == parent_window)
stacking_target = overview_item->item_widget()->GetNativeWindow();
} }
if (stacking_target) {
DCHECK_EQ(parent_window, stacking_target->parent());
parent_window->StackChildBelow(window, stacking_target);
}
DCHECK_EQ(parent_window, item_widget_->GetNativeWindow()->parent());
parent_window->StackChildBelow(item_widget_->GetNativeWindow(), window);
if (cannot_snap_widget_) { if (cannot_snap_widget_) {
DCHECK_EQ(parent_window, cannot_snap_widget_->GetNativeWindow()->parent()); DCHECK_EQ(parent_window, cannot_snap_widget_->GetNativeWindow()->parent());
parent_window->StackChildAbove(cannot_snap_widget_->GetNativeWindow(), parent_window->StackChildAbove(cannot_snap_widget_->GetNativeWindow(),
dragged_window); window);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment