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

Unified Diff: ui/events/platform/x11/x11_hotplug_event_handler.cc

Issue 1073573002: Ozone support for device special cases in keyboard event rewriting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: white space Created 5 years, 8 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/events/platform/x11/x11_hotplug_event_handler.cc
diff --git a/ui/events/platform/x11/x11_hotplug_event_handler.cc b/ui/events/platform/x11/x11_hotplug_event_handler.cc
index 5e69c23041eb9ed6133ed4ce29958cbed5b8d1f0..f240f3728ebfa5460d7384460c0598a0564e3e3b 100644
--- a/ui/events/platform/x11/x11_hotplug_event_handler.cc
+++ b/ui/events/platform/x11/x11_hotplug_event_handler.cc
@@ -32,6 +32,10 @@
#include "ui/events/devices/touchscreen_device.h"
#include "ui/gfx/x/x11_types.h"
+#ifndef XI_PROP_PRODUCT_ID
+#define XI_PROP_PRODUCT_ID "Device Product ID"
+#endif
+
namespace ui {
namespace {
@@ -230,6 +234,25 @@ base::FilePath GetDevicePath(XDisplay* dpy, const XIDeviceInfo& device) {
return base::FilePath(path);
}
+// Obtain the USB-style vendor and product identifiers for an InputDevice.
+// (On Linux, XI2 makes this available for all evdev devices.)
+void SetDeviceIdentification(InputDevice* input_device) {
+ Atom product_id_atom = XInternAtom(gfx::GetXDisplay(), XI_PROP_PRODUCT_ID, 1);
+ uint32_t* product_info;
+ Atom type;
+ int format_return;
+ unsigned long num_items_return;
+ unsigned long bytes_after_return;
+ if (XIGetProperty(gfx::GetXDisplay(), input_device->id, product_id_atom, 0, 2,
+ 0, XA_INTEGER, &type, &format_return, &num_items_return,
+ &bytes_after_return,
+ reinterpret_cast<unsigned char**>(&product_info)) == 0 &&
+ product_info) {
+ input_device->vendor_id = product_info[0];
+ input_device->product_id = product_info[0];
+ }
+}
sadrul 2015/04/09 01:07:43 The X11 calls in this function are happening in th
kpschoedel 2015/04/09 18:51:41 Done.
+
// Helper used to parse keyboard information. When it is done it uses
// |reply_runner| and |callback| to update the state on the UI thread.
void HandleKeyboardDevicesInWorker(
@@ -246,7 +269,9 @@ void HandleKeyboardDevicesInWorker(
if (IsKnownInvalidKeyboardDevice(device_info.name))
continue; // Skip invalid devices.
InputDeviceType type = GetInputDeviceTypeFromPath(device_info.path);
- devices.push_back(KeyboardDevice(device_info.id, type));
+ KeyboardDevice keyboard(device_info.id, type, device_info.name);
+ SetDeviceIdentification(&keyboard);
sadrul 2015/04/09 01:07:43 Note that we also want to collect the product/vend
kpschoedel 2015/04/09 18:51:41 Oh, joy.
+ devices.push_back(keyboard);
}
reply_runner->PostTask(FROM_HERE, base::Bind(callback, devices));
@@ -265,7 +290,7 @@ void HandleMouseDevicesInWorker(const std::vector<DeviceInfo>& device_infos,
}
InputDeviceType type = GetInputDeviceTypeFromPath(device_info.path);
- devices.push_back(InputDevice(device_info.id, type));
+ devices.push_back(InputDevice(device_info.id, type, device_info.name));
}
reply_runner->PostTask(FROM_HERE, base::Bind(callback, devices));
@@ -284,7 +309,7 @@ void HandleTouchpadDevicesInWorker(const std::vector<DeviceInfo>& device_infos,
}
InputDeviceType type = GetInputDeviceTypeFromPath(device_info.path);
- devices.push_back(InputDevice(device_info.id, type));
+ devices.push_back(InputDevice(device_info.id, type, device_info.name));
}
reply_runner->PostTask(FROM_HERE, base::Bind(callback, devices));
@@ -337,9 +362,10 @@ void HandleTouchscreenDevicesInWorker(
InputDeviceType type = GetInputDeviceTypeFromPath(device_info.path);
// |max_x| and |max_y| are inclusive values, so we need to add 1 to get
// the size.
- devices.push_back(TouchscreenDevice(
- device_info.id, type, gfx::Size(max_x + 1, max_y + 1),
- device_info.touch_class_info.num_touches));
+ devices.push_back(
+ TouchscreenDevice(device_info.id, type, device_info.name,
+ gfx::Size(max_x + 1, max_y + 1),
+ device_info.touch_class_info.num_touches));
}
}

Powered by Google App Engine
This is Rietveld 408576698