Index: ui/events/ozone/evdev/input_controller_evdev.cc |
diff --git a/ui/events/ozone/evdev/input_controller_evdev.cc b/ui/events/ozone/evdev/input_controller_evdev.cc |
index 65ca67ec8cc4ebd86ff926c4fc819b87851ae2ce..989163aae5f611a05fecc596c05922a9aff86083 100644 |
--- a/ui/events/ozone/evdev/input_controller_evdev.cc |
+++ b/ui/events/ozone/evdev/input_controller_evdev.cc |
@@ -4,9 +4,11 @@ |
#include "ui/events/ozone/evdev/input_controller_evdev.h" |
+#include <algorithm> |
#include <linux/input.h> |
#include <vector> |
+#include "base/strings/stringprintf.h" |
#include "ui/events/ozone/evdev/event_factory_evdev.h" |
#include "ui/events/ozone/evdev/mouse_button_map_evdev.h" |
@@ -40,6 +42,42 @@ void SetGestureBoolProperty(GesturePropertyProvider* provider, |
property->SetBoolValue(values); |
} |
} |
+ |
achuithb
2015/01/22 20:42:12
Add a function comment
Shecky Lin
2015/01/23 07:46:46
Done.
|
+template <typename T> |
+std::string DumpArrayProperty(const std::vector<T>& value, const char* format) { |
+ std::string ret; |
+ for (size_t i = 0; i < value.size(); ++i) { |
+ if (i > 0) |
+ ret.append(", "); |
+ ret.append(base::StringPrintf(format, value[i])); |
+ } |
+ return ret; |
+} |
+ |
+std::string DumpGesturePropertyValue(GesturesProp* property) { |
achuithb
2015/01/22 20:42:12
Add a function comment
Shecky Lin
2015/01/23 07:46:46
Done.
|
+ switch (property->type()) { |
+ case GesturePropertyProvider::PT_INT: |
+ return DumpArrayProperty(property->GetIntValue(), "%d"); |
+ break; |
+ case GesturePropertyProvider::PT_SHORT: |
+ return DumpArrayProperty(property->GetShortValue(), "%d"); |
+ break; |
+ case GesturePropertyProvider::PT_BOOL: |
+ return DumpArrayProperty(property->GetBoolValue(), "%d"); |
+ break; |
+ case GesturePropertyProvider::PT_STRING: |
+ return "\"" + property->GetStringValue() + "\""; |
+ break; |
+ case GesturePropertyProvider::PT_REAL: |
+ return DumpArrayProperty(property->GetDoubleValue(), "%lf"); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
+ return std::string(); |
+} |
+ |
#endif |
} // namespace |
@@ -184,4 +222,37 @@ void InputControllerEvdev::SetTapToClickPaused(bool state) { |
SetBoolPropertyForOneType(DT_TOUCHPAD, "Tap Paused", state); |
} |
+std::string InputControllerEvdev::GetGestureDeviceStatus() { |
+ std::string ret; |
+#if defined(USE_EVDEV_GESTURES) |
+ // We use DT_ALL since we want gesture property values for all devices that |
+ // run with the gesture library, not just mice or touchpads. |
+ std::vector<int> ids; |
+ event_factory_->GetDeviceIdsByType(DT_ALL, &ids); |
+ |
+ // Dump the property names and values for each device. |
+ for (size_t i = 0; i < ids.size(); ++i) { |
+ std::vector<std::string> names = |
+ gesture_property_provider_->GetPropertyNamesById(ids[i]); |
+ ret.append("\n"); |
+ ret.append(base::StringPrintf("ID %d:\n", ids[i])); |
+ ret.append(base::StringPrintf( |
+ "Device \'%s\':\n", |
+ gesture_property_provider_->GetDeviceNameById(ids[i]).c_str())); |
+ |
+ // Note that, unlike X11, we don't maintain the "atom" concept here. |
+ // Therefore, the property name indices we output here shouldn't be treated |
+ // as unique identifiers of the properties. |
+ std::sort(names.begin(), names.end()); |
+ for (size_t j = 0; j < names.size(); ++j) { |
+ ret.append(base::StringPrintf("\t%s (%lu):", names[j].c_str(), j)); |
+ GesturesProp* property = |
+ gesture_property_provider_->GetProperty(ids[i], names[j]); |
+ ret.append("\t" + DumpGesturePropertyValue(property) + '\n'); |
+ } |
+ } |
+#endif |
+ return ret; |
+} |
+ |
} // namespace ui |