Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ui / ozone / platform / dri / chromeos / display_message_handler.cc
index fec666e..42f18a9 100644 (file)
@@ -4,8 +4,8 @@
 
 #include "ui/ozone/platform/dri/chromeos/display_message_handler.h"
 
-#include "ui/display/types/chromeos/display_mode.h"
-#include "ui/display/types/chromeos/display_snapshot.h"
+#include "ui/display/types/display_mode.h"
+#include "ui/display/types/display_snapshot.h"
 #include "ui/ozone/common/chromeos/display_util.h"
 #include "ui/ozone/common/gpu/ozone_gpu_message_params.h"
 #include "ui/ozone/common/gpu/ozone_gpu_messages.h"
 
 namespace ui {
 
+namespace {
+
+class FindDisplayById {
+ public:
+  FindDisplayById(int64_t display_id) : display_id_(display_id) {}
+
+  bool operator()(const DisplaySnapshot_Params& display) const {
+    return display.display_id == display_id_;
+  }
+
+ private:
+  int64_t display_id_;
+};
+
+}  // namespace
+
 DisplayMessageHandler::DisplayMessageHandler(
     scoped_ptr<NativeDisplayDelegateDri> ndd)
     : sender_(NULL),
@@ -45,9 +61,28 @@ void DisplayMessageHandler::OnForceDPMSOn() {
   ndd_->ForceDPMSOn();
 }
 
-void DisplayMessageHandler::OnRefreshNativeDisplays() {
+void DisplayMessageHandler::OnRefreshNativeDisplays(
+    const std::vector<DisplaySnapshot_Params>& cached_displays) {
   std::vector<DisplaySnapshot_Params> displays;
   std::vector<DisplaySnapshot*> native_displays = ndd_->GetDisplays();
+
+  // If any of the cached displays are in the list of new displays then apply
+  // their configuration immediately.
+  for (size_t i = 0; i < native_displays.size(); ++i) {
+    std::vector<DisplaySnapshot_Params>::const_iterator it =
+        std::find_if(cached_displays.begin(),
+                     cached_displays.end(),
+                     FindDisplayById(native_displays[i]->display_id()));
+
+    if (it == cached_displays.end())
+      continue;
+
+    if (it->has_current_mode)
+      OnConfigureNativeDisplay(it->display_id, it->current_mode, it->origin);
+    else
+      OnDisableNativeDisplay(it->display_id);
+  }
+
   for (size_t i = 0; i < native_displays.size(); ++i)
     displays.push_back(GetDisplaySnapshotParams(*native_displays[i]));