OLD | NEW |
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/display/display_controller.h" | 5 #include "ash/display/display_controller.h" |
6 | 6 |
7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
8 #include "ash/display/display_info.h" | 8 #include "ash/display/display_info.h" |
9 #include "ash/display/display_layout_store.h" | 9 #include "ash/display/display_layout_store.h" |
10 #include "ash/display/display_manager.h" | 10 #include "ash/display/display_manager.h" |
11 #include "ash/launcher/launcher.h" | |
12 #include "ash/screen_ash.h" | 11 #include "ash/screen_ash.h" |
| 12 #include "ash/shelf/shelf.h" |
13 #include "ash/shelf/shelf_widget.h" | 13 #include "ash/shelf/shelf_widget.h" |
14 #include "ash/shell.h" | 14 #include "ash/shell.h" |
15 #include "ash/test/ash_test_base.h" | 15 #include "ash/test/ash_test_base.h" |
16 #include "ash/test/cursor_manager_test_api.h" | 16 #include "ash/test/cursor_manager_test_api.h" |
17 #include "ash/test/display_manager_test_api.h" | 17 #include "ash/test/display_manager_test_api.h" |
18 #include "ash/wm/window_state.h" | 18 #include "ash/wm/window_state.h" |
19 #include "base/command_line.h" | 19 #include "base/command_line.h" |
20 #include "ui/aura/client/activation_change_observer.h" | 20 #include "ui/aura/client/activation_change_observer.h" |
21 #include "ui/aura/client/activation_client.h" | 21 #include "ui/aura/client/activation_client.h" |
22 #include "ui/aura/client/focus_change_observer.h" | 22 #include "ui/aura/client/focus_change_observer.h" |
23 #include "ui/aura/client/focus_client.h" | 23 #include "ui/aura/client/focus_client.h" |
24 #include "ui/aura/env.h" | 24 #include "ui/aura/env.h" |
25 #include "ui/aura/root_window.h" | 25 #include "ui/aura/root_window.h" |
26 #include "ui/aura/test/event_generator.h" | 26 #include "ui/aura/test/event_generator.h" |
27 #include "ui/aura/window_tracker.h" | 27 #include "ui/aura/window_tracker.h" |
28 #include "ui/events/event_handler.h" | 28 #include "ui/events/event_handler.h" |
29 #include "ui/gfx/display.h" | 29 #include "ui/gfx/display.h" |
30 #include "ui/gfx/screen.h" | 30 #include "ui/gfx/screen.h" |
31 #include "ui/views/widget/widget.h" | 31 #include "ui/views/widget/widget.h" |
32 | 32 |
33 #if defined(USE_X11) | 33 #if defined(USE_X11) |
| 34 #include <X11/Xlib.h> |
34 #include "ui/gfx/x/x11_types.h" | 35 #include "ui/gfx/x/x11_types.h" |
35 #include <X11/Xlib.h> | |
36 #undef RootWindow | 36 #undef RootWindow |
37 #endif | 37 #endif |
38 | 38 |
39 namespace ash { | 39 namespace ash { |
40 namespace { | 40 namespace { |
41 | 41 |
42 const char kDesktopBackgroundView[] = "DesktopBackgroundView"; | 42 const char kDesktopBackgroundView[] = "DesktopBackgroundView"; |
43 | 43 |
44 template<typename T> | 44 template<typename T> |
45 class Resetter { | 45 class Resetter { |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
608 | 608 |
609 DisplayLayout display_layout(DisplayLayout::RIGHT, 50); | 609 DisplayLayout display_layout(DisplayLayout::RIGHT, 50); |
610 display_manager->SetLayoutForCurrentDisplays(display_layout); | 610 display_manager->SetLayoutForCurrentDisplays(display_layout); |
611 | 611 |
612 EXPECT_NE(primary_display.id(), secondary_display.id()); | 612 EXPECT_NE(primary_display.id(), secondary_display.id()); |
613 aura::Window* primary_root = | 613 aura::Window* primary_root = |
614 display_controller->GetRootWindowForDisplayId(primary_display.id()); | 614 display_controller->GetRootWindowForDisplayId(primary_display.id()); |
615 aura::Window* secondary_root = | 615 aura::Window* secondary_root = |
616 display_controller->GetRootWindowForDisplayId(secondary_display.id()); | 616 display_controller->GetRootWindowForDisplayId(secondary_display.id()); |
617 EXPECT_NE(primary_root, secondary_root); | 617 EXPECT_NE(primary_root, secondary_root); |
618 aura::Window* launcher_window = | 618 aura::Window* shelf_window = |
619 Launcher::ForPrimaryDisplay()->shelf_widget()->GetNativeView(); | 619 Shelf::ForPrimaryDisplay()->shelf_widget()->GetNativeView(); |
620 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 620 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
621 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 621 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
622 EXPECT_EQ(primary_display.id(), | 622 EXPECT_EQ(primary_display.id(), |
623 Shell::GetScreen()->GetDisplayNearestPoint( | 623 Shell::GetScreen()->GetDisplayNearestPoint( |
624 gfx::Point(-100, -100)).id()); | 624 gfx::Point(-100, -100)).id()); |
625 EXPECT_EQ(primary_display.id(), | 625 EXPECT_EQ(primary_display.id(), |
626 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 626 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
627 | 627 |
628 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); | 628 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); |
629 EXPECT_EQ("0,0 200x153", primary_display.work_area().ToString()); | 629 EXPECT_EQ("0,0 200x153", primary_display.work_area().ToString()); |
630 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); | 630 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); |
631 EXPECT_EQ("200,0 300x253", secondary_display.work_area().ToString()); | 631 EXPECT_EQ("200,0 300x253", secondary_display.work_area().ToString()); |
(...skipping 14 matching lines...) Expand all Loading... |
646 gfx::Point(-100, -100)).id()); | 646 gfx::Point(-100, -100)).id()); |
647 EXPECT_EQ(secondary_display.id(), | 647 EXPECT_EQ(secondary_display.id(), |
648 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 648 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
649 | 649 |
650 EXPECT_EQ( | 650 EXPECT_EQ( |
651 primary_root, | 651 primary_root, |
652 display_controller->GetRootWindowForDisplayId(secondary_display.id())); | 652 display_controller->GetRootWindowForDisplayId(secondary_display.id())); |
653 EXPECT_EQ( | 653 EXPECT_EQ( |
654 secondary_root, | 654 secondary_root, |
655 display_controller->GetRootWindowForDisplayId(primary_display.id())); | 655 display_controller->GetRootWindowForDisplayId(primary_display.id())); |
656 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 656 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
657 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 657 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
658 | 658 |
659 // Test if the bounds are correctly swapped. | 659 // Test if the bounds are correctly swapped. |
660 gfx::Display swapped_primary = Shell::GetScreen()->GetPrimaryDisplay(); | 660 gfx::Display swapped_primary = Shell::GetScreen()->GetPrimaryDisplay(); |
661 gfx::Display swapped_secondary = ScreenAsh::GetSecondaryDisplay(); | 661 gfx::Display swapped_secondary = ScreenAsh::GetSecondaryDisplay(); |
662 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); | 662 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); |
663 EXPECT_EQ("0,0 300x253", swapped_primary.work_area().ToString()); | 663 EXPECT_EQ("0,0 300x253", swapped_primary.work_area().ToString()); |
664 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); | 664 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); |
665 | 665 |
666 EXPECT_EQ("-200,-50 200x153", swapped_secondary.work_area().ToString()); | 666 EXPECT_EQ("-200,-50 200x153", swapped_secondary.work_area().ToString()); |
667 | 667 |
668 aura::WindowTracker tracker; | 668 aura::WindowTracker tracker; |
669 tracker.Add(primary_root); | 669 tracker.Add(primary_root); |
670 tracker.Add(secondary_root); | 670 tracker.Add(secondary_root); |
671 | 671 |
672 // Deleting 2nd display should move the primary to original primary display. | 672 // Deleting 2nd display should move the primary to original primary display. |
673 UpdateDisplay("200x200"); | 673 UpdateDisplay("200x200"); |
674 RunAllPendingInMessageLoop(); // RootWindow is deleted in a posted task. | 674 RunAllPendingInMessageLoop(); // RootWindow is deleted in a posted task. |
675 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); | 675 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); |
676 EXPECT_EQ(primary_display.id(), Shell::GetScreen()->GetPrimaryDisplay().id()); | 676 EXPECT_EQ(primary_display.id(), Shell::GetScreen()->GetPrimaryDisplay().id()); |
677 EXPECT_EQ(primary_display.id(), | 677 EXPECT_EQ(primary_display.id(), |
678 Shell::GetScreen()->GetDisplayNearestPoint( | 678 Shell::GetScreen()->GetDisplayNearestPoint( |
679 gfx::Point(-100, -100)).id()); | 679 gfx::Point(-100, -100)).id()); |
680 EXPECT_EQ(primary_display.id(), | 680 EXPECT_EQ(primary_display.id(), |
681 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 681 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
682 EXPECT_TRUE(tracker.Contains(primary_root)); | 682 EXPECT_TRUE(tracker.Contains(primary_root)); |
683 EXPECT_FALSE(tracker.Contains(secondary_root)); | 683 EXPECT_FALSE(tracker.Contains(secondary_root)); |
684 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 684 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
685 } | 685 } |
686 | 686 |
687 TEST_F(DisplayControllerTest, SwapPrimaryForLegacyShelfLayout) { | 687 TEST_F(DisplayControllerTest, SwapPrimaryForLegacyShelfLayout) { |
688 if (!SupportsMultipleDisplays()) | 688 if (!SupportsMultipleDisplays()) |
689 return; | 689 return; |
690 | 690 |
691 CommandLine::ForCurrentProcess()->AppendSwitch( | 691 CommandLine::ForCurrentProcess()->AppendSwitch( |
692 ash::switches::kAshDisableAlternateShelfLayout); | 692 ash::switches::kAshDisableAlternateShelfLayout); |
693 | 693 |
694 DisplayController* display_controller = | 694 DisplayController* display_controller = |
695 Shell::GetInstance()->display_controller(); | 695 Shell::GetInstance()->display_controller(); |
696 internal::DisplayManager* display_manager = | 696 internal::DisplayManager* display_manager = |
697 Shell::GetInstance()->display_manager(); | 697 Shell::GetInstance()->display_manager(); |
698 | 698 |
699 UpdateDisplay("200x200,300x300"); | 699 UpdateDisplay("200x200,300x300"); |
700 gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); | 700 gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); |
701 gfx::Display secondary_display = ScreenAsh::GetSecondaryDisplay(); | 701 gfx::Display secondary_display = ScreenAsh::GetSecondaryDisplay(); |
702 | 702 |
703 DisplayLayout display_layout(DisplayLayout::RIGHT, 50); | 703 DisplayLayout display_layout(DisplayLayout::RIGHT, 50); |
704 display_manager->SetLayoutForCurrentDisplays(display_layout); | 704 display_manager->SetLayoutForCurrentDisplays(display_layout); |
705 | 705 |
706 EXPECT_NE(primary_display.id(), secondary_display.id()); | 706 EXPECT_NE(primary_display.id(), secondary_display.id()); |
707 aura::Window* primary_root = | 707 aura::Window* primary_root = |
708 display_controller->GetRootWindowForDisplayId(primary_display.id()); | 708 display_controller->GetRootWindowForDisplayId(primary_display.id()); |
709 aura::Window* secondary_root = | 709 aura::Window* secondary_root = |
710 display_controller->GetRootWindowForDisplayId(secondary_display.id()); | 710 display_controller->GetRootWindowForDisplayId(secondary_display.id()); |
711 EXPECT_NE(primary_root, secondary_root); | 711 EXPECT_NE(primary_root, secondary_root); |
712 aura::Window* launcher_window = | 712 aura::Window* shelf_window = |
713 Launcher::ForPrimaryDisplay()->shelf_widget()->GetNativeView(); | 713 Shelf::ForPrimaryDisplay()->shelf_widget()->GetNativeView(); |
714 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 714 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
715 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 715 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
716 EXPECT_EQ(primary_display.id(), | 716 EXPECT_EQ(primary_display.id(), |
717 Shell::GetScreen()->GetDisplayNearestPoint( | 717 Shell::GetScreen()->GetDisplayNearestPoint( |
718 gfx::Point(-100, -100)).id()); | 718 gfx::Point(-100, -100)).id()); |
719 EXPECT_EQ(primary_display.id(), | 719 EXPECT_EQ(primary_display.id(), |
720 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 720 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
721 | 721 |
722 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); | 722 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); |
723 EXPECT_EQ("0,0 200x152", primary_display.work_area().ToString()); | 723 EXPECT_EQ("0,0 200x152", primary_display.work_area().ToString()); |
724 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); | 724 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); |
725 EXPECT_EQ("200,0 300x252", secondary_display.work_area().ToString()); | 725 EXPECT_EQ("200,0 300x252", secondary_display.work_area().ToString()); |
(...skipping 14 matching lines...) Expand all Loading... |
740 gfx::Point(-100, -100)).id()); | 740 gfx::Point(-100, -100)).id()); |
741 EXPECT_EQ(secondary_display.id(), | 741 EXPECT_EQ(secondary_display.id(), |
742 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 742 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
743 | 743 |
744 EXPECT_EQ( | 744 EXPECT_EQ( |
745 primary_root, | 745 primary_root, |
746 display_controller->GetRootWindowForDisplayId(secondary_display.id())); | 746 display_controller->GetRootWindowForDisplayId(secondary_display.id())); |
747 EXPECT_EQ( | 747 EXPECT_EQ( |
748 secondary_root, | 748 secondary_root, |
749 display_controller->GetRootWindowForDisplayId(primary_display.id())); | 749 display_controller->GetRootWindowForDisplayId(primary_display.id())); |
750 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 750 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
751 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 751 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
752 | 752 |
753 // Test if the bounds are correctly swapped. | 753 // Test if the bounds are correctly swapped. |
754 gfx::Display swapped_primary = Shell::GetScreen()->GetPrimaryDisplay(); | 754 gfx::Display swapped_primary = Shell::GetScreen()->GetPrimaryDisplay(); |
755 gfx::Display swapped_secondary = ScreenAsh::GetSecondaryDisplay(); | 755 gfx::Display swapped_secondary = ScreenAsh::GetSecondaryDisplay(); |
756 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); | 756 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); |
757 EXPECT_EQ("0,0 300x252", swapped_primary.work_area().ToString()); | 757 EXPECT_EQ("0,0 300x252", swapped_primary.work_area().ToString()); |
758 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); | 758 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); |
759 | 759 |
760 EXPECT_EQ("-200,-50 200x152", swapped_secondary.work_area().ToString()); | 760 EXPECT_EQ("-200,-50 200x152", swapped_secondary.work_area().ToString()); |
761 | 761 |
762 aura::WindowTracker tracker; | 762 aura::WindowTracker tracker; |
763 tracker.Add(primary_root); | 763 tracker.Add(primary_root); |
764 tracker.Add(secondary_root); | 764 tracker.Add(secondary_root); |
765 | 765 |
766 // Deleting 2nd display should move the primary to original primary display. | 766 // Deleting 2nd display should move the primary to original primary display. |
767 UpdateDisplay("200x200"); | 767 UpdateDisplay("200x200"); |
768 RunAllPendingInMessageLoop(); // RootWindow is deleted in a posted task. | 768 RunAllPendingInMessageLoop(); // RootWindow is deleted in a posted task. |
769 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); | 769 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); |
770 EXPECT_EQ(primary_display.id(), Shell::GetScreen()->GetPrimaryDisplay().id()); | 770 EXPECT_EQ(primary_display.id(), Shell::GetScreen()->GetPrimaryDisplay().id()); |
771 EXPECT_EQ(primary_display.id(), | 771 EXPECT_EQ(primary_display.id(), |
772 Shell::GetScreen()->GetDisplayNearestPoint( | 772 Shell::GetScreen()->GetDisplayNearestPoint( |
773 gfx::Point(-100, -100)).id()); | 773 gfx::Point(-100, -100)).id()); |
774 EXPECT_EQ(primary_display.id(), | 774 EXPECT_EQ(primary_display.id(), |
775 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 775 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
776 EXPECT_TRUE(tracker.Contains(primary_root)); | 776 EXPECT_TRUE(tracker.Contains(primary_root)); |
777 EXPECT_FALSE(tracker.Contains(secondary_root)); | 777 EXPECT_FALSE(tracker.Contains(secondary_root)); |
778 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 778 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
779 } | 779 } |
780 | 780 |
781 TEST_F(DisplayControllerTest, SwapPrimaryById) { | 781 TEST_F(DisplayControllerTest, SwapPrimaryById) { |
782 if (!SupportsMultipleDisplays()) | 782 if (!SupportsMultipleDisplays()) |
783 return; | 783 return; |
784 | 784 |
785 DisplayController* display_controller = | 785 DisplayController* display_controller = |
786 Shell::GetInstance()->display_controller(); | 786 Shell::GetInstance()->display_controller(); |
787 internal::DisplayManager* display_manager = | 787 internal::DisplayManager* display_manager = |
788 Shell::GetInstance()->display_manager(); | 788 Shell::GetInstance()->display_manager(); |
789 | 789 |
790 UpdateDisplay("200x200,300x300"); | 790 UpdateDisplay("200x200,300x300"); |
791 gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); | 791 gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); |
792 gfx::Display secondary_display = ScreenAsh::GetSecondaryDisplay(); | 792 gfx::Display secondary_display = ScreenAsh::GetSecondaryDisplay(); |
793 | 793 |
794 DisplayLayout display_layout(DisplayLayout::RIGHT, 50); | 794 DisplayLayout display_layout(DisplayLayout::RIGHT, 50); |
795 display_manager->SetLayoutForCurrentDisplays(display_layout); | 795 display_manager->SetLayoutForCurrentDisplays(display_layout); |
796 | 796 |
797 EXPECT_NE(primary_display.id(), secondary_display.id()); | 797 EXPECT_NE(primary_display.id(), secondary_display.id()); |
798 aura::Window* primary_root = | 798 aura::Window* primary_root = |
799 display_controller->GetRootWindowForDisplayId(primary_display.id()); | 799 display_controller->GetRootWindowForDisplayId(primary_display.id()); |
800 aura::Window* secondary_root = | 800 aura::Window* secondary_root = |
801 display_controller->GetRootWindowForDisplayId(secondary_display.id()); | 801 display_controller->GetRootWindowForDisplayId(secondary_display.id()); |
802 aura::Window* launcher_window = | 802 aura::Window* shelf_window = |
803 Launcher::ForPrimaryDisplay()->shelf_widget()->GetNativeView(); | 803 Shelf::ForPrimaryDisplay()->shelf_widget()->GetNativeView(); |
804 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 804 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
805 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 805 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
806 EXPECT_NE(primary_root, secondary_root); | 806 EXPECT_NE(primary_root, secondary_root); |
807 EXPECT_EQ(primary_display.id(), | 807 EXPECT_EQ(primary_display.id(), |
808 Shell::GetScreen()->GetDisplayNearestPoint( | 808 Shell::GetScreen()->GetDisplayNearestPoint( |
809 gfx::Point(-100, -100)).id()); | 809 gfx::Point(-100, -100)).id()); |
810 EXPECT_EQ(primary_display.id(), | 810 EXPECT_EQ(primary_display.id(), |
811 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 811 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
812 | 812 |
813 // Switch primary and secondary by display ID. | 813 // Switch primary and secondary by display ID. |
814 TestObserver observer; | 814 TestObserver observer; |
815 display_controller->SetPrimaryDisplayId(secondary_display.id()); | 815 display_controller->SetPrimaryDisplayId(secondary_display.id()); |
816 EXPECT_EQ(secondary_display.id(), | 816 EXPECT_EQ(secondary_display.id(), |
817 Shell::GetScreen()->GetPrimaryDisplay().id()); | 817 Shell::GetScreen()->GetPrimaryDisplay().id()); |
818 EXPECT_EQ(primary_display.id(), ScreenAsh::GetSecondaryDisplay().id()); | 818 EXPECT_EQ(primary_display.id(), ScreenAsh::GetSecondaryDisplay().id()); |
819 EXPECT_LT(0, observer.CountAndReset()); | 819 EXPECT_LT(0, observer.CountAndReset()); |
820 | 820 |
821 EXPECT_EQ( | 821 EXPECT_EQ( |
822 primary_root, | 822 primary_root, |
823 display_controller->GetRootWindowForDisplayId(secondary_display.id())); | 823 display_controller->GetRootWindowForDisplayId(secondary_display.id())); |
824 EXPECT_EQ( | 824 EXPECT_EQ( |
825 secondary_root, | 825 secondary_root, |
826 display_controller->GetRootWindowForDisplayId(primary_display.id())); | 826 display_controller->GetRootWindowForDisplayId(primary_display.id())); |
827 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 827 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
828 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 828 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
829 | 829 |
830 const DisplayLayout& inverted_layout = | 830 const DisplayLayout& inverted_layout = |
831 display_manager->GetCurrentDisplayLayout(); | 831 display_manager->GetCurrentDisplayLayout(); |
832 | 832 |
833 EXPECT_EQ("left, -50", inverted_layout.ToString()); | 833 EXPECT_EQ("left, -50", inverted_layout.ToString()); |
834 | 834 |
835 // Calling the same ID don't do anything. | 835 // Calling the same ID don't do anything. |
836 display_controller->SetPrimaryDisplayId(secondary_display.id()); | 836 display_controller->SetPrimaryDisplayId(secondary_display.id()); |
837 EXPECT_EQ(0, observer.CountAndReset()); | 837 EXPECT_EQ(0, observer.CountAndReset()); |
838 | 838 |
839 aura::WindowTracker tracker; | 839 aura::WindowTracker tracker; |
840 tracker.Add(primary_root); | 840 tracker.Add(primary_root); |
841 tracker.Add(secondary_root); | 841 tracker.Add(secondary_root); |
842 | 842 |
843 // Deleting 2nd display should move the primary to original primary display. | 843 // Deleting 2nd display should move the primary to original primary display. |
844 UpdateDisplay("200x200"); | 844 UpdateDisplay("200x200"); |
845 RunAllPendingInMessageLoop(); // RootWindow is deleted in a posted task. | 845 RunAllPendingInMessageLoop(); // RootWindow is deleted in a posted task. |
846 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); | 846 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); |
847 EXPECT_EQ(primary_display.id(), Shell::GetScreen()->GetPrimaryDisplay().id()); | 847 EXPECT_EQ(primary_display.id(), Shell::GetScreen()->GetPrimaryDisplay().id()); |
848 EXPECT_EQ(primary_display.id(), | 848 EXPECT_EQ(primary_display.id(), |
849 Shell::GetScreen()->GetDisplayNearestPoint( | 849 Shell::GetScreen()->GetDisplayNearestPoint( |
850 gfx::Point(-100, -100)).id()); | 850 gfx::Point(-100, -100)).id()); |
851 EXPECT_EQ(primary_display.id(), | 851 EXPECT_EQ(primary_display.id(), |
852 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 852 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
853 EXPECT_TRUE(tracker.Contains(primary_root)); | 853 EXPECT_TRUE(tracker.Contains(primary_root)); |
854 EXPECT_FALSE(tracker.Contains(secondary_root)); | 854 EXPECT_FALSE(tracker.Contains(secondary_root)); |
855 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 855 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
856 | 856 |
857 // Adding 2nd display with the same ID. The 2nd display should become primary | 857 // Adding 2nd display with the same ID. The 2nd display should become primary |
858 // since secondary id is still stored as desirable_primary_id. | 858 // since secondary id is still stored as desirable_primary_id. |
859 std::vector<internal::DisplayInfo> display_info_list; | 859 std::vector<internal::DisplayInfo> display_info_list; |
860 display_info_list.push_back( | 860 display_info_list.push_back( |
861 display_manager->GetDisplayInfo(primary_display.id())); | 861 display_manager->GetDisplayInfo(primary_display.id())); |
862 display_info_list.push_back( | 862 display_info_list.push_back( |
863 display_manager->GetDisplayInfo(secondary_display.id())); | 863 display_manager->GetDisplayInfo(secondary_display.id())); |
864 display_manager->OnNativeDisplaysChanged(display_info_list); | 864 display_manager->OnNativeDisplaysChanged(display_info_list); |
865 | 865 |
866 EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 866 EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
867 EXPECT_EQ(secondary_display.id(), | 867 EXPECT_EQ(secondary_display.id(), |
868 Shell::GetScreen()->GetPrimaryDisplay().id()); | 868 Shell::GetScreen()->GetPrimaryDisplay().id()); |
869 EXPECT_EQ(primary_display.id(), ScreenAsh::GetSecondaryDisplay().id()); | 869 EXPECT_EQ(primary_display.id(), ScreenAsh::GetSecondaryDisplay().id()); |
870 EXPECT_EQ( | 870 EXPECT_EQ( |
871 primary_root, | 871 primary_root, |
872 display_controller->GetRootWindowForDisplayId(secondary_display.id())); | 872 display_controller->GetRootWindowForDisplayId(secondary_display.id())); |
873 EXPECT_NE( | 873 EXPECT_NE( |
874 primary_root, | 874 primary_root, |
875 display_controller->GetRootWindowForDisplayId(primary_display.id())); | 875 display_controller->GetRootWindowForDisplayId(primary_display.id())); |
876 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 876 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
877 | 877 |
878 // Deleting 2nd display and adding 2nd display with a different ID. The 2nd | 878 // Deleting 2nd display and adding 2nd display with a different ID. The 2nd |
879 // display shouldn't become primary. | 879 // display shouldn't become primary. |
880 UpdateDisplay("200x200"); | 880 UpdateDisplay("200x200"); |
881 internal::DisplayInfo third_display_info( | 881 internal::DisplayInfo third_display_info( |
882 secondary_display.id() + 1, std::string(), false); | 882 secondary_display.id() + 1, std::string(), false); |
883 third_display_info.SetBounds(secondary_display.bounds()); | 883 third_display_info.SetBounds(secondary_display.bounds()); |
884 ASSERT_NE(primary_display.id(), third_display_info.id()); | 884 ASSERT_NE(primary_display.id(), third_display_info.id()); |
885 | 885 |
886 const internal::DisplayInfo& primary_display_info = | 886 const internal::DisplayInfo& primary_display_info = |
887 display_manager->GetDisplayInfo(primary_display.id()); | 887 display_manager->GetDisplayInfo(primary_display.id()); |
888 std::vector<internal::DisplayInfo> display_info_list2; | 888 std::vector<internal::DisplayInfo> display_info_list2; |
889 display_info_list2.push_back(primary_display_info); | 889 display_info_list2.push_back(primary_display_info); |
890 display_info_list2.push_back(third_display_info); | 890 display_info_list2.push_back(third_display_info); |
891 display_manager->OnNativeDisplaysChanged(display_info_list2); | 891 display_manager->OnNativeDisplaysChanged(display_info_list2); |
892 EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 892 EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
893 EXPECT_EQ(primary_display.id(), | 893 EXPECT_EQ(primary_display.id(), |
894 Shell::GetScreen()->GetPrimaryDisplay().id()); | 894 Shell::GetScreen()->GetPrimaryDisplay().id()); |
895 EXPECT_EQ(third_display_info.id(), ScreenAsh::GetSecondaryDisplay().id()); | 895 EXPECT_EQ(third_display_info.id(), ScreenAsh::GetSecondaryDisplay().id()); |
896 EXPECT_EQ( | 896 EXPECT_EQ( |
897 primary_root, | 897 primary_root, |
898 display_controller->GetRootWindowForDisplayId(primary_display.id())); | 898 display_controller->GetRootWindowForDisplayId(primary_display.id())); |
899 EXPECT_NE( | 899 EXPECT_NE( |
900 primary_root, | 900 primary_root, |
901 display_controller->GetRootWindowForDisplayId(third_display_info.id())); | 901 display_controller->GetRootWindowForDisplayId(third_display_info.id())); |
902 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 902 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
903 } | 903 } |
904 | 904 |
905 TEST_F(DisplayControllerTest, CursorDeviceScaleFactorSwapPrimary) { | 905 TEST_F(DisplayControllerTest, CursorDeviceScaleFactorSwapPrimary) { |
906 if (!SupportsMultipleDisplays()) | 906 if (!SupportsMultipleDisplays()) |
907 return; | 907 return; |
908 | 908 |
909 DisplayController* display_controller = | 909 DisplayController* display_controller = |
910 Shell::GetInstance()->display_controller(); | 910 Shell::GetInstance()->display_controller(); |
911 | 911 |
912 UpdateDisplay("200x200,200x200*2"); | 912 UpdateDisplay("200x200,200x200*2"); |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1285 EXPECT_EQ("aura_root_x", GetXWindowName(secondary->GetDispatcher())); | 1285 EXPECT_EQ("aura_root_x", GetXWindowName(secondary->GetDispatcher())); |
1286 | 1286 |
1287 // Switching back to single display. | 1287 // Switching back to single display. |
1288 UpdateDisplay("300x400"); | 1288 UpdateDisplay("300x400"); |
1289 EXPECT_EQ("aura_root_0", GetXWindowName( | 1289 EXPECT_EQ("aura_root_0", GetXWindowName( |
1290 Shell::GetPrimaryRootWindow()->GetDispatcher())); | 1290 Shell::GetPrimaryRootWindow()->GetDispatcher())); |
1291 } | 1291 } |
1292 #endif | 1292 #endif |
1293 | 1293 |
1294 } // namespace ash | 1294 } // namespace ash |
OLD | NEW |