| Index: ash/wm/workspace/workspace_event_filter.cc
|
| diff --git a/ash/wm/workspace/workspace_event_filter.cc b/ash/wm/workspace/workspace_event_filter.cc
|
| index 66aecb491bf3f4ad369759fe38b7e5aafe6d8705..0988e2bee61f2ae500b38d6a55fbad19d9af56ba 100644
|
| --- a/ash/wm/workspace/workspace_event_filter.cc
|
| +++ b/ash/wm/workspace/workspace_event_filter.cc
|
| @@ -38,6 +38,8 @@ WorkspaceEventFilter::WorkspaceEventFilter(aura::Window* owner)
|
| }
|
|
|
| WorkspaceEventFilter::~WorkspaceEventFilter() {
|
| + if (hovered_window_)
|
| + hovered_window_->RemoveObserver(this);
|
| }
|
|
|
| bool WorkspaceEventFilter::PreHandleMouseEvent(aura::Window* target,
|
| @@ -95,6 +97,12 @@ bool WorkspaceEventFilter::PreHandleMouseEvent(aura::Window* target,
|
| return handled;
|
| }
|
|
|
| +void WorkspaceEventFilter::OnWindowDestroyed(aura::Window* window) {
|
| + DCHECK_EQ(hovered_window_, window);
|
| + hovered_window_->RemoveObserver(this);
|
| + hovered_window_ = NULL;
|
| +}
|
| +
|
| bool WorkspaceEventFilter::UpdateDragState() {
|
| DCHECK_EQ(DRAG_NONE, drag_state_);
|
| switch (window_component()) {
|
| @@ -122,9 +130,13 @@ void WorkspaceEventFilter::UpdateHoveredWindow(
|
| aura::Window* toplevel_window) {
|
| if (toplevel_window == hovered_window_)
|
| return;
|
| + if (hovered_window_)
|
| + hovered_window_->RemoveObserver(this);
|
| WindowHoverChanged(hovered_window_, false);
|
| hovered_window_ = toplevel_window;
|
| WindowHoverChanged(hovered_window_, true);
|
| + if (hovered_window_)
|
| + hovered_window_->AddObserver(this);
|
| }
|
|
|
| } // namespace internal
|
|
|