| 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 |