Index: ui/keyboard/keyboard_controller.cc |
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc |
index ceef5941f7e424a9e912a7ad8ee0f8fe9ff73751..7abfc76d7e884407e5da67b2401e65007c9bbdb7 100644 |
--- a/ui/keyboard/keyboard_controller.cc |
+++ b/ui/keyboard/keyboard_controller.cc |
@@ -244,6 +244,10 @@ KeyboardController::~KeyboardController() { |
if (input_method_) |
input_method_->RemoveObserver(this); |
ResetWindowInsets(); |
+ |
+ for (std::set<aura::Window*>::iterator it = observed_windows_.begin(); |
+ it != observed_windows_.end(); ++it) |
+ (*it)->RemoveObserver(window_bounds_observer_.get()); |
} |
// static |
@@ -561,6 +565,7 @@ void KeyboardController::AddBoundsChangedObserver(aura::Window* window) { |
if (target_window && |
!target_window->HasObserver(window_bounds_observer_.get())) { |
target_window->AddObserver(window_bounds_observer_.get()); |
+ observed_windows_.insert(target_window); |
} |
} |
@@ -569,6 +574,7 @@ void KeyboardController::RemoveBoundsChangedObserver(aura::Window* window) { |
if (target_window && |
target_window->HasObserver(window_bounds_observer_.get())) { |
target_window->RemoveObserver(window_bounds_observer_.get()); |
+ observed_windows_.erase(target_window); |
} |
} |