| Index: ui/keyboard/keyboard_ui.cc
|
| diff --git a/ui/keyboard/keyboard_ui.cc b/ui/keyboard/keyboard_ui.cc
|
| index 896add64cb2fa7fb0d84096e41a51c31141d9c9b..69b1f1e905a400dc1df1ef694e154cca48a71789 100644
|
| --- a/ui/keyboard/keyboard_ui.cc
|
| +++ b/ui/keyboard/keyboard_ui.cc
|
| @@ -4,9 +4,11 @@
|
|
|
| #include "ui/keyboard/keyboard_ui.h"
|
|
|
| +#include "base/command_line.h"
|
| #include "ui/aura/window.h"
|
| #include "ui/base/ime/input_method.h"
|
| #include "ui/base/ime/text_input_client.h"
|
| +#include "ui/base/ui_base_switches.h"
|
| #include "ui/keyboard/keyboard_controller.h"
|
|
|
| namespace keyboard {
|
| @@ -29,10 +31,26 @@ void KeyboardUI::HideKeyboardContainer(aura::Window* container) {
|
| }
|
|
|
| void KeyboardUI::EnsureCaretInWorkArea() {
|
| - if (GetInputMethod()->GetTextInputClient()) {
|
| - aura::Window* keyboard_window = GetKeyboardWindow();
|
| + if (!GetInputMethod())
|
| + return;
|
| +
|
| + const aura::Window* keyboard_window = GetKeyboardWindow();
|
| + const gfx::Rect keyboard_bounds_in_screen =
|
| + keyboard_window->IsVisible() ? keyboard_window->GetBoundsInScreen()
|
| + : gfx::Rect();
|
| +
|
| + // Use new virtual keyboard behavior only if the flag enabled and in
|
| + // non-sticky mode.
|
| + const bool new_vk_behavior =
|
| + (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + ::switches::kUseNewVirtualKeyboardBehavior) &&
|
| + !keyboard::KeyboardController::GetInstance()->keyboard_locked());
|
| +
|
| + if (new_vk_behavior) {
|
| + GetInputMethod()->SetOnScreenKeyboardBounds(keyboard_bounds_in_screen);
|
| + } else if (GetInputMethod()->GetTextInputClient()) {
|
| GetInputMethod()->GetTextInputClient()->EnsureCaretNotInRect(
|
| - keyboard_window->GetBoundsInScreen());
|
| + keyboard_bounds_in_screen);
|
| }
|
| }
|
|
|
|
|