OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/common/system/chromeos/ime_menu/ime_menu_tray.h" | 5 #include "ash/common/system/chromeos/ime_menu/ime_menu_tray.h" |
6 | 6 |
7 #include "ash/common/accessibility_delegate.h" | 7 #include "ash/common/accessibility_delegate.h" |
8 #include "ash/common/ash_constants.h" | 8 #include "ash/common/ash_constants.h" |
9 #include "ash/common/material_design/material_design_controller.h" | 9 #include "ash/common/material_design/material_design_controller.h" |
10 #include "ash/common/session/session_state_delegate.h" | 10 #include "ash/common/session/session_state_delegate.h" |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 }; | 335 }; |
336 | 336 |
337 } // namespace | 337 } // namespace |
338 | 338 |
339 ImeMenuTray::ImeMenuTray(WmShelf* wm_shelf) | 339 ImeMenuTray::ImeMenuTray(WmShelf* wm_shelf) |
340 : TrayBackgroundView(wm_shelf), | 340 : TrayBackgroundView(wm_shelf), |
341 label_(new ImeMenuLabel()), | 341 label_(new ImeMenuLabel()), |
342 show_keyboard_(false), | 342 show_keyboard_(false), |
343 force_show_keyboard_(false), | 343 force_show_keyboard_(false), |
344 should_block_shelf_auto_hide_(false), | 344 should_block_shelf_auto_hide_(false), |
345 keyboard_suppressed_(false) { | 345 keyboard_suppressed_(false), |
| 346 show_bubble_after_keyboard_hidden_(false) { |
346 if (MaterialDesignController::IsShelfMaterial()) { | 347 if (MaterialDesignController::IsShelfMaterial()) { |
347 SetInkDropMode(InkDropMode::ON); | 348 SetInkDropMode(InkDropMode::ON); |
348 SetContentsBackground(false); | 349 SetContentsBackground(false); |
349 } else { | 350 } else { |
350 SetContentsBackground(true); | 351 SetContentsBackground(true); |
351 } | 352 } |
352 SetupLabelForTray(label_); | 353 SetupLabelForTray(label_); |
353 tray_container()->AddChildView(label_); | 354 tray_container()->AddChildView(label_); |
354 SystemTrayNotifier* tray_notifier = WmShell::Get()->system_tray_notifier(); | 355 SystemTrayNotifier* tray_notifier = WmShell::Get()->system_tray_notifier(); |
355 tray_notifier->AddIMEObserver(this); | 356 tray_notifier->AddIMEObserver(this); |
356 tray_notifier->AddVirtualKeyboardObserver(this); | 357 tray_notifier->AddVirtualKeyboardObserver(this); |
357 } | 358 } |
358 | 359 |
359 ImeMenuTray::~ImeMenuTray() { | 360 ImeMenuTray::~ImeMenuTray() { |
360 if (bubble_) | 361 if (bubble_) |
361 bubble_->bubble_view()->reset_delegate(); | 362 bubble_->bubble_view()->reset_delegate(); |
362 SystemTrayNotifier* tray_notifier = WmShell::Get()->system_tray_notifier(); | 363 SystemTrayNotifier* tray_notifier = WmShell::Get()->system_tray_notifier(); |
363 tray_notifier->RemoveIMEObserver(this); | 364 tray_notifier->RemoveIMEObserver(this); |
364 tray_notifier->RemoveVirtualKeyboardObserver(this); | 365 tray_notifier->RemoveVirtualKeyboardObserver(this); |
365 } | 366 } |
366 | 367 |
367 void ImeMenuTray::ShowImeMenuBubble() { | 368 void ImeMenuTray::ShowImeMenuBubble() { |
| 369 keyboard::KeyboardController* keyboard_controller = |
| 370 keyboard::KeyboardController::GetInstance(); |
| 371 if (keyboard_controller && keyboard_controller->keyboard_visible()) { |
| 372 show_bubble_after_keyboard_hidden_ = true; |
| 373 keyboard_controller->AddObserver(this); |
| 374 keyboard_controller->HideKeyboard( |
| 375 keyboard::KeyboardController::HIDE_REASON_AUTOMATIC); |
| 376 } else { |
| 377 ShowImeMenuBubbleInternal(); |
| 378 } |
| 379 } |
| 380 |
| 381 void ImeMenuTray::ShowImeMenuBubbleInternal() { |
368 int minimum_menu_width = GetMinimumMenuWidth(); | 382 int minimum_menu_width = GetMinimumMenuWidth(); |
369 should_block_shelf_auto_hide_ = true; | 383 should_block_shelf_auto_hide_ = true; |
370 views::TrayBubbleView::InitParams init_params( | 384 views::TrayBubbleView::InitParams init_params( |
371 GetAnchorAlignment(), minimum_menu_width, minimum_menu_width); | 385 GetAnchorAlignment(), minimum_menu_width, minimum_menu_width); |
372 init_params.can_activate = true; | 386 init_params.can_activate = true; |
373 init_params.close_on_deactivate = true; | 387 init_params.close_on_deactivate = true; |
374 | 388 |
375 views::TrayBubbleView* bubble_view = | 389 views::TrayBubbleView* bubble_view = |
376 views::TrayBubbleView::Create(GetBubbleAnchor(), this, &init_params); | 390 views::TrayBubbleView::Create(GetBubbleAnchor(), this, &init_params); |
377 bubble_view->set_anchor_view_insets(GetBubbleAnchorInsets()); | 391 bubble_view->set_anchor_view_insets(GetBubbleAnchorInsets()); |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 void ImeMenuTray::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) {} | 561 void ImeMenuTray::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) {} |
548 | 562 |
549 void ImeMenuTray::OnKeyboardClosed() { | 563 void ImeMenuTray::OnKeyboardClosed() { |
550 if (InputMethodManager::Get()) | 564 if (InputMethodManager::Get()) |
551 InputMethodManager::Get()->OverrideKeyboardUrlRef(std::string()); | 565 InputMethodManager::Get()->OverrideKeyboardUrlRef(std::string()); |
552 show_keyboard_ = false; | 566 show_keyboard_ = false; |
553 force_show_keyboard_ = false; | 567 force_show_keyboard_ = false; |
554 } | 568 } |
555 | 569 |
556 void ImeMenuTray::OnKeyboardHidden() { | 570 void ImeMenuTray::OnKeyboardHidden() { |
| 571 if (show_bubble_after_keyboard_hidden_) { |
| 572 show_bubble_after_keyboard_hidden_ = false; |
| 573 keyboard::KeyboardController* keyboard_controller = |
| 574 keyboard::KeyboardController::GetInstance(); |
| 575 if (keyboard_controller) |
| 576 keyboard_controller->RemoveObserver(this); |
| 577 |
| 578 ShowImeMenuBubbleInternal(); |
| 579 return; |
| 580 } |
| 581 |
557 if (!show_keyboard_) | 582 if (!show_keyboard_) |
558 return; | 583 return; |
559 | 584 |
560 // If the the IME menu has overriding the input view url, we should write it | 585 // If the the IME menu has overriding the input view url, we should write it |
561 // back to normal keyboard when hiding the input view. | 586 // back to normal keyboard when hiding the input view. |
562 if (InputMethodManager::Get()) | 587 if (InputMethodManager::Get()) |
563 InputMethodManager::Get()->OverrideKeyboardUrlRef(std::string()); | 588 InputMethodManager::Get()->OverrideKeyboardUrlRef(std::string()); |
564 show_keyboard_ = false; | 589 show_keyboard_ = false; |
565 | 590 |
566 // If the keyboard is forced to be shown by IME menu for once, we need to | 591 // If the keyboard is forced to be shown by IME menu for once, we need to |
(...skipping 20 matching lines...) Expand all Loading... |
587 WmShell::Get()->system_tray_delegate()->GetCurrentIME(¤t_ime_); | 612 WmShell::Get()->system_tray_delegate()->GetCurrentIME(¤t_ime_); |
588 | 613 |
589 // Updates the tray label based on the current input method. | 614 // Updates the tray label based on the current input method. |
590 if (current_ime_.third_party) | 615 if (current_ime_.third_party) |
591 label_->SetText(current_ime_.short_name + base::UTF8ToUTF16("*")); | 616 label_->SetText(current_ime_.short_name + base::UTF8ToUTF16("*")); |
592 else | 617 else |
593 label_->SetText(current_ime_.short_name); | 618 label_->SetText(current_ime_.short_name); |
594 } | 619 } |
595 | 620 |
596 } // namespace ash | 621 } // namespace ash |
OLD | NEW |