Index: ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
diff --git a/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc b/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
index 2fd3d3f74625a7ff65c66fd7f1dc518d52bc18c6..66d9e2918dcd57b6d46023decf14dd3d9e805554 100644 |
--- a/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
+++ b/ash/common/system/chromeos/ime_menu/ime_menu_tray.cc |
@@ -342,7 +342,8 @@ ImeMenuTray::ImeMenuTray(WmShelf* wm_shelf) |
show_keyboard_(false), |
force_show_keyboard_(false), |
should_block_shelf_auto_hide_(false), |
- keyboard_suppressed_(false) { |
+ keyboard_suppressed_(false), |
+ show_bubble_after_keyboard_hidden_(false) { |
if (MaterialDesignController::IsShelfMaterial()) { |
SetInkDropMode(InkDropMode::ON); |
SetContentsBackground(false); |
@@ -365,6 +366,19 @@ ImeMenuTray::~ImeMenuTray() { |
} |
void ImeMenuTray::ShowImeMenuBubble() { |
+ keyboard::KeyboardController* keyboard_controller = |
+ keyboard::KeyboardController::GetInstance(); |
+ if (keyboard_controller && keyboard_controller->keyboard_visible()) { |
+ show_bubble_after_keyboard_hidden_ = true; |
+ keyboard_controller->AddObserver(this); |
+ keyboard_controller->HideKeyboard( |
+ keyboard::KeyboardController::HIDE_REASON_AUTOMATIC); |
+ } else { |
+ ShowImeMenuBubbleInternal(); |
+ } |
+} |
+ |
+void ImeMenuTray::ShowImeMenuBubbleInternal() { |
int minimum_menu_width = GetMinimumMenuWidth(); |
should_block_shelf_auto_hide_ = true; |
views::TrayBubbleView::InitParams init_params( |
@@ -554,6 +568,17 @@ void ImeMenuTray::OnKeyboardClosed() { |
} |
void ImeMenuTray::OnKeyboardHidden() { |
+ if (show_bubble_after_keyboard_hidden_) { |
+ show_bubble_after_keyboard_hidden_ = false; |
+ keyboard::KeyboardController* keyboard_controller = |
+ keyboard::KeyboardController::GetInstance(); |
+ if (keyboard_controller) |
+ keyboard_controller->RemoveObserver(this); |
+ |
+ ShowImeMenuBubbleInternal(); |
+ return; |
+ } |
+ |
if (!show_keyboard_) |
return; |