Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Unified Diff: ui/aura/display_change_observer_x11.cc

Issue 10826198: Use persistent ID/names for displays. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/aura/display_change_observer_x11.cc
diff --git a/ui/aura/display_change_observer_x11.cc b/ui/aura/display_change_observer_x11.cc
index 0d863803135f1182ac2db5d6bb75d139af9b12fa..b9622344e87fef839abd2f20e1b5dbb37043c654 100644
--- a/ui/aura/display_change_observer_x11.cc
+++ b/ui/aura/display_change_observer_x11.cc
@@ -15,6 +15,7 @@
#include "ui/aura/dispatcher_linux.h"
#include "ui/aura/env.h"
#include "ui/aura/display_manager.h"
+#include "ui/base/x/x11_util.h"
#include "ui/compositor/dip_util.h"
#include "ui/gfx/display.h"
@@ -150,6 +151,17 @@ void DisplayChangeObserverX11::NotifyDisplayChange() {
kHighDensityDIPThreshold) {
device_scale_factor = 2.0f;
}
+
+ uint16 manufacturer_id = 0;
+ uint32 serial_number = 0;
+ if (ui::GetOutputDeviceData(screen_resources->outputs[o], &manufacturer_id,
+ &serial_number, NULL)) {
Daniel Erat 2012/08/16 15:28:49 maybe also check that manufacturer_id is greater t
Jun Mukai 2012/08/17 05:50:10 Done.
+ // Fallback to use index in case that it fails to retrieve these data.
Daniel Erat 2012/08/16 15:28:49 nit: change to something like "An ID based on the
Jun Mukai 2012/08/17 05:50:10 Done.
+ // See below.
+ displays.back().set_id(
+ gfx::Display::GetID(manufacturer_id, serial_number));
+ }
+
displays.back().set_device_scale_factor(device_scale_factor);
y_coords.insert(crtc_info->y);
XRRFreeOutputInfo(output_info);
@@ -165,11 +177,14 @@ void DisplayChangeObserverX11::NotifyDisplayChange() {
// PowerManager lays out the outputs vertically. Sort them by Y
// coordinates.
std::sort(displays.begin(), displays.end(), CompareDisplayY);
- // TODO(oshima): Assisgn index as ID for now. Use unique ID.
int id = 0;
for (std::vector<gfx::Display>::iterator iter = displays.begin();
- iter != displays.end(); ++iter, ++id)
- (*iter).set_id(id);
+ iter != displays.end(); ++iter) {
+ if (iter->id() == -1) {
Daniel Erat 2012/08/16 15:28:49 nit: add a public constant static gfx::Display::kI
Jun Mukai 2012/08/17 05:50:10 Done.
+ iter->set_id(id);
+ ++id;
+ }
+ }
Env::GetInstance()->display_manager()->OnNativeDisplaysChanged(displays);
}

Powered by Google App Engine
This is Rietveld 408576698