Index: ash/common/wm/window_cycle_list.cc |
diff --git a/ash/common/wm/window_cycle_list.cc b/ash/common/wm/window_cycle_list.cc |
index 4006b03d71a2b8b1e7b587b7c33114891b15ce24..17591a081d7202d24f45f35ec35e6080ee716f7b 100644 |
--- a/ash/common/wm/window_cycle_list.cc |
+++ b/ash/common/wm/window_cycle_list.cc |
@@ -390,6 +390,10 @@ class WindowCycleView : public views::WidgetDelegateView { |
} |
} |
+ void OnMouseCaptureLost() override { |
+ WmShell::Get()->window_cycle_controller()->StopCycling(); |
+ } |
+ |
View* GetContentsView() override { return this; } |
View* GetInitiallyFocusedView() override { |
@@ -464,6 +468,7 @@ WindowCycleList::WindowCycleList(const WindowList& windows) |
current_index_(0), |
initial_direction_(WindowCycleController::FORWARD), |
cycle_view_(nullptr), |
+ cycle_ui_widget_(nullptr), |
screen_observer_(this) { |
if (!ShouldShowUi()) |
WmShell::Get()->mru_window_tracker()->SetIgnoreActivations(true); |
@@ -495,6 +500,9 @@ WindowCycleList::~WindowCycleList() { |
target_window->Show(); |
target_window->GetWindowState()->Activate(); |
} |
+ |
+ if (cycle_ui_widget_) |
+ cycle_ui_widget_->Close(); |
} |
void WindowCycleList::Step(WindowCycleController::Direction direction) { |
@@ -598,7 +606,6 @@ void WindowCycleList::InitWindowCycleView() { |
views::Widget::InitParams params; |
params.delegate = cycle_view_; |
params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; |
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
params.accept_events = true; |
params.name = "WindowCycleList (Alt+Tab)"; |
@@ -616,7 +623,9 @@ void WindowCycleList::InitWindowCycleView() { |
widget_rect.set_height(widget_height); |
widget->SetBounds(widget_rect); |
widget->Show(); |
- cycle_ui_widget_.reset(widget); |
+ widget->SetCapture(cycle_view_); |
+ widget->set_auto_release_capture(false); |
+ cycle_ui_widget_ = widget; |
} |
} // namespace ash |