Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Unified Diff: ui/keyboard/keyboard_controller.cc

Issue 14477010: Partial fix for keyboard occlusion. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: gyp fix Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/keyboard/keyboard_controller.h ('k') | ui/keyboard/keyboard_controller_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/keyboard/keyboard_controller.cc
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc
index c948ca04beee84730d823e4ac4c436f2de71a76a..ec561921c627098f219276d03e7d4304eb18937f 100644
--- a/ui/keyboard/keyboard_controller.cc
+++ b/ui/keyboard/keyboard_controller.cc
@@ -14,6 +14,7 @@
#include "ui/gfx/path.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/skia_util.h"
+#include "ui/keyboard/keyboard_controller_observer.h"
#include "ui/keyboard/keyboard_controller_proxy.h"
namespace {
@@ -141,6 +142,14 @@ aura::Window* KeyboardController::GetContainerWindow() {
return container_;
}
+void KeyboardController::AddObserver(KeyboardControllerObserver* observer) {
+ observer_list_.AddObserver(observer);
+}
+
+void KeyboardController::RemoveObserver(KeyboardControllerObserver* observer) {
+ observer_list_.RemoveObserver(observer);
+}
+
void KeyboardController::OnWindowParentChanged(aura::Window* window,
aura::Window* parent) {
OnTextInputStateChanged(proxy_->GetInputMethod()->GetTextInputClient());
@@ -156,8 +165,10 @@ void KeyboardController::OnTextInputStateChanged(
if (!container_)
return;
+ bool was_showing = container_->IsVisible();
+ bool should_show = was_showing;
if (!client || client->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) {
- container_->Hide();
+ should_show = false;
} else {
if (container_->children().empty()) {
aura::Window* keyboard = proxy_->GetKeyboardWindow();
@@ -166,8 +177,24 @@ void KeyboardController::OnTextInputStateChanged(
container_->layout_manager()->OnWindowResized();
}
container_->parent()->StackChildAtTop(container_);
- container_->Show();
+ should_show = true;
}
+
+ if (was_showing != should_show) {
+ gfx::Rect new_bounds(
+ should_show ? container_->children()[0]->bounds() : gfx::Rect());
+
+ FOR_EACH_OBSERVER(
+ KeyboardControllerObserver,
+ observer_list_,
+ OnKeyboardBoundsChanging(new_bounds));
+
+ if (should_show)
+ container_->Show();
+ else
+ container_->Hide();
+ }
+
// TODO(bryeung): whenever the TextInputClient changes we need to notify the
// keyboard (with the TextInputType) so that it can reset it's state (e.g.
// abandon compositions in progress)
« no previous file with comments | « ui/keyboard/keyboard_controller.h ('k') | ui/keyboard/keyboard_controller_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698