summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-31 20:48:39 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-31 20:48:39 +0000
commit5378d79012fc21aad9df86c7502f0b8cf4daf8f3 (patch)
tree8b9eccd48cbebb7411844ca4d35ef8a5a1520165 /chromeos
parent4fc24b6fc8a2f232edd5b05d16d5985e298f5bdc (diff)
downloadchromium_src-5378d79012fc21aad9df86c7502f0b8cf4daf8f3.zip
chromium_src-5378d79012fc21aad9df86c7502f0b8cf4daf8f3.tar.gz
chromium_src-5378d79012fc21aad9df86c7502f0b8cf4daf8f3.tar.bz2
Don't try to switch display mode if there is no external display
Switch to Dual Display in Login screen. BUG=145844,145158 Review URL: https://chromiumcodereview.appspot.com/10899024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154499 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r--chromeos/display/output_configurator.cc17
-rw-r--r--chromeos/display/output_configurator.h5
2 files changed, 12 insertions, 10 deletions
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc
index 38aef89..d94215f 100644
--- a/chromeos/display/output_configurator.cc
+++ b/chromeos/display/output_configurator.cc
@@ -221,6 +221,7 @@ static float ComputeDeviceScaleFactor(unsigned int width,
OutputConfigurator::OutputConfigurator()
: is_running_on_chrome_os_(base::chromeos::IsRunningOnChromeOS()),
output_count_(0),
+ connected_output_count_(0),
output_cache_(NULL),
mirror_supported_(false),
primary_output_index_(-1),
@@ -359,6 +360,9 @@ bool OutputConfigurator::ScreenPowerSet(bool power_on, bool all_displays) {
}
bool OutputConfigurator::SetDisplayMode(OutputState new_state) {
+ if (output_state_ == new_state)
+ return true;
+
if (output_state_ == STATE_INVALID ||
output_state_ == STATE_HEADLESS ||
output_state_ == STATE_SINGLE)
@@ -421,8 +425,6 @@ void OutputConfigurator::RemoveObserver(Observer* observer) {
bool OutputConfigurator::TryRecacheOutputs(Display* display,
XRRScreenResources* screen) {
bool outputs_did_change = false;
- int previous_connected_count = 0;
- int new_connected_count = 0;
if (output_count_ != screen->noutput) {
outputs_did_change = true;
@@ -435,11 +437,6 @@ bool OutputConfigurator::TryRecacheOutputs(Display* display,
bool now_connected = (RR_Connected == output->connection);
outputs_did_change = (now_connected != output_cache_[i].is_connected);
XRRFreeOutputInfo(output);
-
- if (output_cache_[i].is_connected)
- previous_connected_count += 1;
- if (now_connected)
- new_connected_count += 1;
}
}
@@ -811,17 +808,17 @@ void OutputConfigurator::CheckIsProjectingAndNotify() {
// Determine if there is an "internal" output and how many outputs are
// connected.
bool has_internal_output = false;
- int connected_output_count = 0;
+ connected_output_count_ = 0;
for (int i = 0; i < output_count_; ++i) {
if (output_cache_[i].is_connected) {
- connected_output_count += 1;
+ connected_output_count_ += 1;
has_internal_output |= output_cache_[i].is_internal;
}
}
// "Projecting" is defined as having more than 1 output connected while at
// least one of them is an internal output.
- bool is_projecting = has_internal_output && (connected_output_count > 1);
+ bool is_projecting = has_internal_output && (connected_output_count_ > 1);
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()
->SetIsProjecting(is_projecting);
}
diff --git a/chromeos/display/output_configurator.h b/chromeos/display/output_configurator.h
index 6c526c8..32338b1 100644
--- a/chromeos/display/output_configurator.h
+++ b/chromeos/display/output_configurator.h
@@ -52,6 +52,8 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher {
OutputConfigurator();
virtual ~OutputConfigurator();
+ int connected_output_count() const { return connected_output_count_; }
+
OutputState output_state() const { return output_state_; }
// Called when the user hits ctrl-F4 to request a display mode change.
@@ -154,6 +156,9 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher {
// The number of outputs in the output_cache_ array.
int output_count_;
+ // The number of outputs that are connected.
+ int connected_output_count_;
+
// The list of cached output descriptions (|output_count_| elements long).
scoped_array<CachedOutputDescription> output_cache_;