Index: chromeos/display/output_configurator.cc |
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc |
index fb545aaf7cb45720c94884524486f5cdce3374a5..3edb3a00026694ccb63a9e90fb1da19b5e881be6 100644 |
--- a/chromeos/display/output_configurator.cc |
+++ b/chromeos/display/output_configurator.cc |
@@ -106,20 +106,6 @@ int GetOutputPower( |
return num_on_outputs; |
} |
-// Determine if there is an "internal" output and how many outputs are |
-// connected. |
-bool IsProjecting( |
- const std::vector<OutputConfigurator::OutputSnapshot>& outputs) { |
- bool has_internal_output = false; |
- int connected_output_count = outputs.size(); |
- for (size_t i = 0; i < outputs.size(); ++i) |
- has_internal_output |= outputs[i].type == OUTPUT_TYPE_INTERNAL; |
- |
- // "Projecting" is defined as having more than 1 output connected while at |
- // least one of them is an internal output. |
- return has_internal_output && (connected_output_count > 1); |
-} |
- |
} // namespace |
OutputConfigurator::ModeInfo::ModeInfo() |
@@ -252,7 +238,8 @@ OutputConfigurator::OutputConfigurator() |
xrandr_event_base_(0), |
output_state_(STATE_INVALID), |
power_state_(DISPLAY_POWER_ALL_ON), |
- next_output_protection_client_id_(1) { |
+ next_output_protection_client_id_(1), |
+ screen_sharing_count_(0) { |
} |
OutputConfigurator::~OutputConfigurator() {} |
@@ -267,6 +254,18 @@ void OutputConfigurator::SetInitialDisplayPower(DisplayPowerState power_state) { |
power_state_ = power_state; |
} |
+void OutputConfigurator::SendProjectingStateToPowerManager() { |
Daniel Erat
2014/01/15 22:42:59
the order of methods in the .cc file should match
hshi1
2014/01/16 02:01:44
Done.
|
+ bool has_internal_output = false; |
+ int connected_output_count = cached_outputs_.size() + screen_sharing_count_; |
+ for (size_t i = 0; i < cached_outputs_.size(); ++i) |
+ has_internal_output |= cached_outputs_[i].type == OUTPUT_TYPE_INTERNAL; |
Daniel Erat
2014/01/15 22:42:59
nit: just do:
if (cached_outputs_[i].type == OU
hshi1
2014/01/16 02:01:44
Done.
|
+ |
+ // "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); |
+ delegate_->SendProjectingStateToPowerManager(is_projecting); |
+} |
+ |
void OutputConfigurator::Init(bool is_panel_fitting_enabled) { |
is_panel_fitting_enabled_ = is_panel_fitting_enabled; |
if (!configure_display_) |
@@ -294,7 +293,7 @@ void OutputConfigurator::Start(uint32 background_color_argb) { |
// that all displays are on when signing out. |
delegate_->ForceDPMSOn(); |
delegate_->UngrabServer(); |
- delegate_->SendProjectingStateToPowerManager(IsProjecting(cached_outputs_)); |
+ SendProjectingStateToPowerManager(); |
NotifyObservers(success, new_state); |
} |
@@ -777,7 +776,7 @@ void OutputConfigurator::ConfigureOutputs() { |
delegate_->UngrabServer(); |
NotifyObservers(success, new_state); |
- delegate_->SendProjectingStateToPowerManager(IsProjecting(cached_outputs_)); |
+ SendProjectingStateToPowerManager(); |
} |
void OutputConfigurator::NotifyObservers(bool success, |
@@ -1136,4 +1135,14 @@ float OutputConfigurator::GetMirroredDisplayAreaRatio( |
return area_ratio; |
} |
+void OutputConfigurator::OnScreenSharingStateChanged(bool started) { |
Daniel Erat
2014/01/15 22:42:59
same here
hshi1
2014/01/16 02:01:44
Done.
|
+ if (started) { |
+ ++screen_sharing_count_; |
Daniel Erat
2014/01/15 22:42:59
indent two spaces beyond the previous line, not fo
hshi1
2014/01/16 02:01:44
Done.
|
+ } else { |
+ DCHECK_GT(screen_sharing_count_, 0); |
+ --screen_sharing_count_; |
+ } |
+ SendProjectingStateToPowerManager(); |
+} |
+ |
} // namespace chromeos |