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

Side by Side Diff: ash/root_window_controller.cc

Issue 25111002: Only show virtual keyboard on primary root window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/root_window_controller.h" 5 #include "ash/root_window_controller.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/ash_constants.h" 10 #include "ash/ash_constants.h"
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 const aura::Window* RootWindowController::GetContainer(int container_id) const { 324 const aura::Window* RootWindowController::GetContainer(int container_id) const {
325 return root_window_->GetChildById(container_id); 325 return root_window_->GetChildById(container_id);
326 } 326 }
327 327
328 void RootWindowController::Init(bool first_run_after_boot) { 328 void RootWindowController::Init(bool first_run_after_boot) {
329 root_window_->SetCursor(ui::kCursorPointer); 329 root_window_->SetCursor(ui::kCursorPointer);
330 CreateContainersInRootWindow(root_window_.get()); 330 CreateContainersInRootWindow(root_window_.get());
331 CreateSystemBackground(first_run_after_boot); 331 CreateSystemBackground(first_run_after_boot);
332 332
333 InitLayoutManagers(); 333 InitLayoutManagers();
334 InitKeyboard();
335 InitTouchHuds(); 334 InitTouchHuds();
336 335
337 if (Shell::GetPrimaryRootWindowController()-> 336 if (Shell::GetPrimaryRootWindowController()->
338 GetSystemModalLayoutManager(NULL)->has_modal_background()) { 337 GetSystemModalLayoutManager(NULL)->has_modal_background()) {
339 GetSystemModalLayoutManager(NULL)->CreateModalBackground(); 338 GetSystemModalLayoutManager(NULL)->CreateModalBackground();
340 } 339 }
341 340
342 Shell::GetInstance()->AddShellObserver(this); 341 Shell::GetInstance()->AddShellObserver(this);
343 } 342 }
344 343
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 // before move it to |kDesktopController|. 399 // before move it to |kDesktopController|.
401 DCHECK_EQ(controller->widget(), widget); 400 DCHECK_EQ(controller->widget(), widget);
402 // Release the old controller and close its background widget. 401 // Release the old controller and close its background widget.
403 SetWallpaperController(controller); 402 SetWallpaperController(controller);
404 } 403 }
405 } 404 }
406 405
407 void RootWindowController::CloseChildWindows() { 406 void RootWindowController::CloseChildWindows() {
408 mouse_event_target_.reset(); 407 mouse_event_target_.reset();
409 408
409 // Deactivate keyboard container before closing child windows and shutting
410 // down associated layout managers.
411 DeactivateKeyboard(Shell::GetInstance()->keyboard_controller());
412
410 if (!shelf_.get()) 413 if (!shelf_.get())
411 return; 414 return;
412 // panel_layout_manager_ needs to be shut down before windows are destroyed. 415 // panel_layout_manager_ needs to be shut down before windows are destroyed.
413 if (panel_layout_manager_) { 416 if (panel_layout_manager_) {
414 panel_layout_manager_->Shutdown(); 417 panel_layout_manager_->Shutdown();
415 panel_layout_manager_ = NULL; 418 panel_layout_manager_ = NULL;
416 } 419 }
417 // docked_layout_manager_ needs to be shut down before windows are destroyed. 420 // docked_layout_manager_ needs to be shut down before windows are destroyed.
418 if (docked_layout_manager_) { 421 if (docked_layout_manager_) {
419 if (shelf_->shelf_layout_manager()) 422 if (shelf_->shelf_layout_manager())
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 const aura::Window::Windows& windows = 524 const aura::Window::Windows& windows =
522 GetContainer(kShellWindowId_DefaultContainer)->children(); 525 GetContainer(kShellWindowId_DefaultContainer)->children();
523 for (aura::Window::Windows::const_reverse_iterator iter = windows.rbegin(); 526 for (aura::Window::Windows::const_reverse_iterator iter = windows.rbegin();
524 iter != windows.rend(); ++iter) { 527 iter != windows.rend(); ++iter) {
525 if (wm::GetWindowState(*iter)->IsFullscreen()) 528 if (wm::GetWindowState(*iter)->IsFullscreen())
526 return *iter; 529 return *iter;
527 } 530 }
528 return NULL; 531 return NULL;
529 } 532 }
530 533
531 void RootWindowController::InitKeyboard() { 534 void RootWindowController::ActivateKeyboard(
532 if (keyboard::IsKeyboardEnabled()) { 535 keyboard::KeyboardController* keyboard_controller) {
533 aura::Window* parent = root_window(); 536 if (!keyboard::IsKeyboardEnabled() ||
537 GetContainer(kShellWindowId_VirtualKeyboardContainer)) {
538 return;
539 }
540 DCHECK(keyboard_controller);
541 keyboard_controller->AddObserver(shelf()->shelf_layout_manager());
542 keyboard_controller->AddObserver(panel_layout_manager_);
543 keyboard_controller->AddObserver(docked_layout_manager_);
544 aura::Window* parent = root_window();
545 aura::Window* keyboard_container =
546 keyboard_controller->GetContainerWindow();
547 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer);
548 parent->AddChild(keyboard_container);
549 keyboard_container->SetBounds(parent->bounds());
oshima 2013/10/04 16:50:17 won't RootWindowLayoutManager handle this?
bshe 2013/10/04 17:38:32 Sorry, just to confirm, do you mean the SetBounds
oshima 2013/10/04 17:51:35 I see. Maybe it's doing this way to avoid some iss
bshe 2013/10/04 18:05:52 Thanks! Added a TODO. On 2013/10/04 17:51:35, osh
550 }
534 551
535 keyboard::KeyboardControllerProxy* proxy = 552 void RootWindowController::DeactivateKeyboard(
536 Shell::GetInstance()->delegate()->CreateKeyboardControllerProxy(); 553 keyboard::KeyboardController* keyboard_controller) {
537 keyboard_controller_.reset( 554 if (!keyboard::IsKeyboardEnabled())
538 new keyboard::KeyboardController(proxy)); 555 return;
539 556
540 keyboard_controller_->AddObserver(shelf()->shelf_layout_manager()); 557 DCHECK(keyboard_controller);
541 keyboard_controller_->AddObserver(panel_layout_manager_); 558 aura::Window* keyboard_container =
542 keyboard_controller_->AddObserver(docked_layout_manager_); 559 keyboard_controller->GetContainerWindow();
543 560 if (keyboard_container->GetRootWindow() == root_window()) {
544 // Deletes the old container since |keyboard_controller_| creates a 561 root_window()->RemoveChild(keyboard_container);
545 // new container window in GetContainerWindow(). 562 keyboard_controller->RemoveObserver(shelf()->shelf_layout_manager());
546 delete GetContainer(kShellWindowId_VirtualKeyboardContainer); 563 keyboard_controller->RemoveObserver(panel_layout_manager_);
547 564 keyboard_controller->RemoveObserver(docked_layout_manager_);
548 aura::Window* keyboard_container =
549 keyboard_controller_->GetContainerWindow();
550 keyboard_container->set_id(kShellWindowId_VirtualKeyboardContainer);
551 parent->AddChild(keyboard_container);
552 keyboard_container->SetBounds(parent->bounds());
553 } 565 }
554 } 566 }
555 567
556 568
557 //////////////////////////////////////////////////////////////////////////////// 569 ////////////////////////////////////////////////////////////////////////////////
558 // RootWindowController, private: 570 // RootWindowController, private:
559 571
560 void RootWindowController::InitLayoutManagers() { 572 void RootWindowController::InitLayoutManagers() {
561 root_window_layout_ = 573 root_window_layout_ =
562 new RootWindowLayoutManager(root_window_.get()); 574 new RootWindowLayoutManager(root_window_.get());
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 set_touch_hud_projection(new TouchHudProjection(root_window_.get())); 832 set_touch_hud_projection(new TouchHudProjection(root_window_.get()));
821 } 833 }
822 834
823 void RootWindowController::DisableTouchHudProjection() { 835 void RootWindowController::DisableTouchHudProjection() {
824 if (!touch_hud_projection_) 836 if (!touch_hud_projection_)
825 return; 837 return;
826 touch_hud_projection_->Remove(); 838 touch_hud_projection_->Remove();
827 } 839 }
828 840
829 void RootWindowController::OnLoginStateChanged(user::LoginStatus status) { 841 void RootWindowController::OnLoginStateChanged(user::LoginStatus status) {
830 if (status != user::LOGGED_IN_NONE)
831 InitKeyboard();
832 shelf_->shelf_layout_manager()->UpdateVisibilityState(); 842 shelf_->shelf_layout_manager()->UpdateVisibilityState();
833 } 843 }
834 844
835 void RootWindowController::OnTouchHudProjectionToggled(bool enabled) { 845 void RootWindowController::OnTouchHudProjectionToggled(bool enabled) {
836 if (enabled) 846 if (enabled)
837 EnableTouchHudProjection(); 847 EnableTouchHudProjection();
838 else 848 else
839 DisableTouchHudProjection(); 849 DisableTouchHudProjection();
840 } 850 }
841 851
842 RootWindowController* GetRootWindowController( 852 RootWindowController* GetRootWindowController(
843 const aura::RootWindow* root_window) { 853 const aura::RootWindow* root_window) {
844 return root_window ? GetRootWindowSettings(root_window)->controller : NULL; 854 return root_window ? GetRootWindowSettings(root_window)->controller : NULL;
845 } 855 }
846 856
847 } // namespace internal 857 } // namespace internal
848 } // namespace ash 858 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698