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 "chromeos/display/output_configurator.h" | 5 #include "chromeos/display/output_configurator.h" |
6 | 6 |
7 #include <X11/Xlib.h> | 7 #include <X11/Xlib.h> |
8 #include <X11/extensions/dpms.h> | 8 #include <X11/extensions/dpms.h> |
9 #include <X11/extensions/Xrandr.h> | 9 #include <X11/extensions/Xrandr.h> |
10 | 10 |
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
654 connected_output_count_)) { | 654 connected_output_count_)) { |
655 did_change = true; | 655 did_change = true; |
656 } | 656 } |
657 // We have seen cases where the XRandR data can get out of sync with our own | 657 // We have seen cases where the XRandR data can get out of sync with our own |
658 // cache so over-write it with whatever we detected, even if we didn't think | 658 // cache so over-write it with whatever we detected, even if we didn't think |
659 // anything changed. | 659 // anything changed. |
660 output_state_ = next_state; | 660 output_state_ = next_state; |
661 | 661 |
662 XRRFreeScreenResources(screen); | 662 XRRFreeScreenResources(screen); |
663 XUngrabServer(display); | 663 XUngrabServer(display); |
664 | |
665 if (!did_change) | |
666 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayModeChangeFailed()); | |
664 return did_change; | 667 return did_change; |
665 } | 668 } |
666 | 669 |
667 bool OutputConfigurator::ScreenPowerSet(bool power_on, bool all_displays) { | 670 bool OutputConfigurator::ScreenPowerSet(bool power_on, bool all_displays) { |
668 VLOG(1) << "OutputConfigurator::SetScreensOn " << power_on | 671 VLOG(1) << "OutputConfigurator::SetScreensOn " << power_on |
669 << " all displays " << all_displays; | 672 << " all displays " << all_displays; |
670 if (!is_running_on_chrome_os_) | 673 if (!is_running_on_chrome_os_) |
671 return false; | 674 return false; |
672 | 675 |
673 bool success = false; | 676 bool success = false; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
728 XRRFreeScreenResources(screen); | 731 XRRFreeScreenResources(screen); |
729 XUngrabServer(display); | 732 XUngrabServer(display); |
730 | 733 |
731 return success; | 734 return success; |
732 } | 735 } |
733 | 736 |
734 bool OutputConfigurator::SetDisplayMode(OutputState new_state) { | 737 bool OutputConfigurator::SetDisplayMode(OutputState new_state) { |
735 if (output_state_ == STATE_INVALID || | 738 if (output_state_ == STATE_INVALID || |
736 output_state_ == STATE_HEADLESS || | 739 output_state_ == STATE_HEADLESS || |
737 output_state_ == STATE_SINGLE) | 740 output_state_ == STATE_SINGLE) |
738 return false; | 741 return false; |
oshima
2012/10/01 21:44:02
is it possible to return output_state_ == new_stat
Jun Mukai
2012/10/01 21:49:35
The header said it "returns false if it was called
oshima
2012/10/01 22:16:19
I was thinking to add
if (output_state_ == new_st
Jun Mukai
2012/10/01 22:36:56
That would be safe. Added.
| |
739 | 742 |
740 Display* display = base::MessagePumpAuraX11::GetDefaultXDisplay(); | 743 Display* display = base::MessagePumpAuraX11::GetDefaultXDisplay(); |
741 CHECK(display != NULL); | 744 CHECK(display != NULL); |
742 XGrabServer(display); | 745 XGrabServer(display); |
743 Window window = DefaultRootWindow(display); | 746 Window window = DefaultRootWindow(display); |
744 XRRScreenResources* screen = GetScreenResourcesAndRecordUMA(display, window); | 747 XRRScreenResources* screen = GetScreenResourcesAndRecordUMA(display, window); |
745 CHECK(screen != NULL); | 748 CHECK(screen != NULL); |
746 | 749 |
750 bool did_change = false; | |
747 OutputSnapshot outputs[2] = { {0}, {0} }; | 751 OutputSnapshot outputs[2] = { {0}, {0} }; |
748 connected_output_count_ = | 752 connected_output_count_ = |
749 GetDualOutputs(display, screen, &outputs[0], &outputs[1]); | 753 GetDualOutputs(display, screen, &outputs[0], &outputs[1]); |
750 if (EnterState(display, | 754 if (EnterState(display, |
751 screen, | 755 screen, |
752 window, | 756 window, |
753 new_state, | 757 new_state, |
754 outputs, | 758 outputs, |
755 connected_output_count_)) { | 759 connected_output_count_)) { |
756 output_state_ = new_state; | 760 output_state_ = new_state; |
761 did_change = true; | |
757 } | 762 } |
758 | 763 |
759 XRRFreeScreenResources(screen); | 764 XRRFreeScreenResources(screen); |
760 XUngrabServer(display); | 765 XUngrabServer(display); |
766 | |
767 if (!did_change) | |
768 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayModeChangeFailed()); | |
761 return true; | 769 return true; |
762 } | 770 } |
763 | 771 |
764 bool OutputConfigurator::Dispatch(const base::NativeEvent& event) { | 772 bool OutputConfigurator::Dispatch(const base::NativeEvent& event) { |
765 // Ignore this event if the Xrandr extension isn't supported. | 773 // Ignore this event if the Xrandr extension isn't supported. |
766 if (!is_running_on_chrome_os_ || | 774 if (!is_running_on_chrome_os_ || |
767 (event->type - xrandr_event_base_ != RRNotify)) { | 775 (event->type - xrandr_event_base_ != RRNotify)) { |
768 return true; | 776 return true; |
769 } | 777 } |
770 XEvent* xevent = static_cast<XEvent*>(event); | 778 XEvent* xevent = static_cast<XEvent*>(event); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
845 // distinguish internal display. | 853 // distinguish internal display. |
846 return false; | 854 return false; |
847 } | 855 } |
848 | 856 |
849 void OutputConfigurator::NotifyOnDisplayChanged() { | 857 void OutputConfigurator::NotifyOnDisplayChanged() { |
850 notification_timer_.reset(); | 858 notification_timer_.reset(); |
851 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayModeChanged()); | 859 FOR_EACH_OBSERVER(Observer, observers_, OnDisplayModeChanged()); |
852 } | 860 } |
853 | 861 |
854 } // namespace chromeos | 862 } // namespace chromeos |
OLD | NEW |