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

Side by Side Diff: ui/events/x/device_data_manager_x11.h

Issue 618283003: Adds special support to the device manager for keyboards devices. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix blocked devices not updating. Created 6 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_EVENTS_X_DEVICE_DATA_MANAGER_X11_H_ 5 #ifndef UI_EVENTS_X_DEVICE_DATA_MANAGER_X11_H_
6 #define UI_EVENTS_X_DEVICE_DATA_MANAGER_X11_H_ 6 #define UI_EVENTS_X_DEVICE_DATA_MANAGER_X11_H_
7 7
8 // Generically-named #defines from Xlib is conflicting with symbols in GTest. 8 // Generically-named #defines from Xlib is conflicting with symbols in GTest.
9 // So many tests .cc file #undef Bool before including device_data_manager.h, 9 // So many tests .cc file #undef Bool before including device_data_manager.h,
10 // which makes Bool unrecognized in XInput2.h. 10 // which makes Bool unrecognized in XInput2.h.
11 #ifndef Bool 11 #ifndef Bool
12 #define Bool int 12 #define Bool int
13 #endif 13 #endif
14 14
15 #include <X11/extensions/XInput2.h> 15 #include <X11/extensions/XInput2.h>
16 16
17 #include <bitset> 17 #include <bitset>
18 #include <functional>
18 #include <map> 19 #include <map>
19 #include <set> 20 #include <set>
20 #include <vector> 21 #include <vector>
21 22
22 #include "base/basictypes.h" 23 #include "base/basictypes.h"
23 #include "base/event_types.h" 24 #include "base/event_types.h"
24 #include "base/memory/scoped_ptr.h" 25 #include "base/memory/scoped_ptr.h"
25 #include "ui/events/device_data_manager.h" 26 #include "ui/events/device_data_manager.h"
26 #include "ui/events/event_constants.h" 27 #include "ui/events/event_constants.h"
27 #include "ui/events/events_base_export.h" 28 #include "ui/events/events_base_export.h"
(...skipping 16 matching lines...) Expand all
44 class EVENTS_BASE_EXPORT DeviceDataManagerX11 : public DeviceDataManager { 45 class EVENTS_BASE_EXPORT DeviceDataManagerX11 : public DeviceDataManager {
45 public: 46 public:
46 // Enumerate additional data that one might be interested on an input event, 47 // Enumerate additional data that one might be interested on an input event,
47 // which are usually wrapped in X valuators. If you modify any of this, 48 // which are usually wrapped in X valuators. If you modify any of this,
48 // make sure to update the kCachedAtoms data structure in the source file 49 // make sure to update the kCachedAtoms data structure in the source file
49 // and the k*Type[Start/End] constants used by IsCMTDataType and 50 // and the k*Type[Start/End] constants used by IsCMTDataType and
50 // IsTouchDataType. 51 // IsTouchDataType.
51 enum DataType { 52 enum DataType {
52 // Define the valuators used the CrOS CMT driver. Used by mice and CrOS 53 // Define the valuators used the CrOS CMT driver. Used by mice and CrOS
53 // touchpads. 54 // touchpads.
54 DT_CMT_SCROLL_X = 0, // Scroll amount on the X (horizontal) direction. 55 DT_CMT_SCROLL_X = 0, // Scroll amount on the X (horizontal) direction.
55 DT_CMT_SCROLL_Y, // Scroll amount on the Y (vertical) direction. 56 DT_CMT_SCROLL_Y, // Scroll amount on the Y (vertical) direction.
56 DT_CMT_ORDINAL_X, // Original (unaccelerated) value on the X direction. 57 DT_CMT_ORDINAL_X, // Original (unaccelerated) value on the X direction.
57 // Can be used both for scrolls and flings. 58 // Can be used both for scrolls and flings.
58 DT_CMT_ORDINAL_Y, // Original (unaccelerated) value on the Y direction. 59 DT_CMT_ORDINAL_Y, // Original (unaccelerated) value on the Y direction.
59 // Can be used both for scrolls and flings. 60 // Can be used both for scrolls and flings.
60 DT_CMT_START_TIME, // Gesture start time. 61 DT_CMT_START_TIME, // Gesture start time.
61 DT_CMT_END_TIME, // Gesture end time. 62 DT_CMT_END_TIME, // Gesture end time.
62 DT_CMT_FLING_X, // Fling amount on the X (horizontal) direction. 63 DT_CMT_FLING_X, // Fling amount on the X (horizontal) direction.
63 DT_CMT_FLING_Y, // Fling amount on the Y (vertical) direction. 64 DT_CMT_FLING_Y, // Fling amount on the Y (vertical) direction.
64 DT_CMT_FLING_STATE, // The state of fling gesture (whether the user just 65 DT_CMT_FLING_STATE, // The state of fling gesture (whether the user just
65 // start flinging or that he/she taps down). 66 // start flinging or that he/she taps down).
66 DT_CMT_METRICS_TYPE, // Metrics type of the metrics gesture, which are 67 DT_CMT_METRICS_TYPE, // Metrics type of the metrics gesture, which are
67 // used to wrap interesting patterns that we would 68 // used to wrap interesting patterns that we would
68 // like to track via the UMA system. 69 // like to track via the UMA system.
69 DT_CMT_METRICS_DATA1, // Complementary data 1 of the metrics gesture. 70 DT_CMT_METRICS_DATA1, // Complementary data 1 of the metrics gesture.
70 DT_CMT_METRICS_DATA2, // Complementary data 2 of the metrics gesture. 71 DT_CMT_METRICS_DATA2, // Complementary data 2 of the metrics gesture.
71 DT_CMT_FINGER_COUNT, // Finger counts in the current gesture. A same type 72 DT_CMT_FINGER_COUNT, // Finger counts in the current gesture. A same type
72 // of gesture can have very different meanings based 73 // of gesture can have very different meanings based
73 // on that (e.g. 2f scroll v.s. 3f swipe). 74 // on that (e.g. 2f scroll v.s. 3f swipe).
74 75
75 // End of CMT data types. 76 // End of CMT data types.
76 // Beginning of touch data types. 77 // Beginning of touch data types.
77 78
78 // Define the valuators following the Multi-touch Protocol. Used by 79 // Define the valuators following the Multi-touch Protocol. Used by
79 // touchscreen devices. 80 // touchscreen devices.
80 DT_TOUCH_MAJOR, // Length of the touch area. 81 DT_TOUCH_MAJOR, // Length of the touch area.
81 DT_TOUCH_MINOR, // Width of the touch area. 82 DT_TOUCH_MINOR, // Width of the touch area.
82 DT_TOUCH_ORIENTATION, // Angle between the X-axis and the major axis of the 83 DT_TOUCH_ORIENTATION, // Angle between the X-axis and the major axis of the
83 // touch area. 84 // touch area.
84 DT_TOUCH_PRESSURE, // Pressure of the touch contact. 85 DT_TOUCH_PRESSURE, // Pressure of the touch contact.
85 86
86 DT_TOUCH_POSITION_X, // Touch X position. 87 DT_TOUCH_POSITION_X, // Touch X position.
87 DT_TOUCH_POSITION_Y, // Touch Y position. 88 DT_TOUCH_POSITION_Y, // Touch Y position.
88 89
89 // NOTE for XInput MT: 'Tracking ID' is provided in every touch event to 90 // NOTE for XInput MT: 'Tracking ID' is provided in every touch event to
90 // track individual touch. 'Tracking ID' is an unsigned 32-bit value and 91 // track individual touch. 'Tracking ID' is an unsigned 32-bit value and
91 // is increased for each new touch. It will wrap back to 0 when reaching 92 // is increased for each new touch. It will wrap back to 0 when reaching
92 // the numerical limit. 93 // the numerical limit.
93 DT_TOUCH_TRACKING_ID, // ID of the touch point. 94 DT_TOUCH_TRACKING_ID, // ID of the touch point.
94 95
95 // Kernel timestamp from touch screen (if available). 96 // Kernel timestamp from touch screen (if available).
96 DT_TOUCH_RAW_TIMESTAMP, 97 DT_TOUCH_RAW_TIMESTAMP,
97 98
98 // End of touch data types. 99 // End of touch data types.
99 100
100 DT_LAST_ENTRY // This must come last. 101 DT_LAST_ENTRY // This must come last.
101 }; 102 };
102 103
103 // Data struct to store extracted data from an input event. 104 // Data struct to store extracted data from an input event.
104 typedef std::map<int, double> EventData; 105 typedef std::map<int, double> EventData;
105 106
106 static void CreateInstance(); 107 static void CreateInstance();
107 108
108 // We use int because enums can be casted to ints but not vice versa. 109 // We use int because enums can be casted to ints but not vice versa.
109 static bool IsCMTDataType(const int type); 110 static bool IsCMTDataType(const int type);
110 static bool IsTouchDataType(const int type); 111 static bool IsTouchDataType(const int type);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 void SetDisabledKeyboardAllowedKeys( 232 void SetDisabledKeyboardAllowedKeys(
232 scoped_ptr<std::set<KeyboardCode> > excepted_keys); 233 scoped_ptr<std::set<KeyboardCode> > excepted_keys);
233 234
234 // Disables and enables events from devices by device id. 235 // Disables and enables events from devices by device id.
235 void DisableDevice(unsigned int deviceid); 236 void DisableDevice(unsigned int deviceid);
236 void EnableDevice(unsigned int deviceid); 237 void EnableDevice(unsigned int deviceid);
237 238
238 // Returns true if |native_event| should be blocked. 239 // Returns true if |native_event| should be blocked.
239 bool IsEventBlocked(const base::NativeEvent& native_event); 240 bool IsEventBlocked(const base::NativeEvent& native_event);
240 241
242 protected:
243 // DeviceHotplugEventObserver:
244 virtual void OnKeyboardDevicesUpdated(
245 const std::vector<KeyboardDevice>& devices) override;
246
241 private: 247 private:
242 DeviceDataManagerX11(); 248 DeviceDataManagerX11();
243 virtual ~DeviceDataManagerX11(); 249 virtual ~DeviceDataManagerX11();
244 250
245 // Initialize the XInput related system information. 251 // Initialize the XInput related system information.
246 bool InitializeXInputInternal(); 252 bool InitializeXInputInternal();
247 253
248 // Check if an XI event contains data of the specified type. 254 // Check if an XI event contains data of the specified type.
249 bool HasEventData(const XIDeviceEvent* xiev, const DataType type) const; 255 bool HasEventData(const XIDeviceEvent* xiev, const DataType type) const;
250 256
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 299
294 // Table to keep track of the last seen value for the specified valuator for 300 // Table to keep track of the last seen value for the specified valuator for
295 // a specified slot of a device. Defaults to 0 if the valuator for that slot 301 // a specified slot of a device. Defaults to 0 if the valuator for that slot
296 // was not specified in an earlier event. With MT-B/XI2.2, valuators in an 302 // was not specified in an earlier event. With MT-B/XI2.2, valuators in an
297 // XEvent are not reported if the values haven't changed from the previous 303 // XEvent are not reported if the values haven't changed from the previous
298 // event. So it is necessary to remember these valuators so that chrome 304 // event. So it is necessary to remember these valuators so that chrome
299 // doesn't think X/device doesn't know about the valuators. We currently 305 // doesn't think X/device doesn't know about the valuators. We currently
300 // use this only on touchscreen devices. 306 // use this only on touchscreen devices.
301 std::vector<double> last_seen_valuator_[kMaxDeviceNum][kMaxSlotNum]; 307 std::vector<double> last_seen_valuator_[kMaxDeviceNum][kMaxSlotNum];
302 308
309 // Map that stores meta-data for blocked keyboards. This is needed to restore
310 // devices when they are re-enabled.
311 std::map<unsigned int, ui::KeyboardDevice, std::less<int>> blocked_keyboards_;
flackr 2014/10/08 21:58:11 You need to specify the comparator for types where
rsadam 2014/10/09 05:19:03 Done.
312
303 // X11 atoms cache. 313 // X11 atoms cache.
304 X11AtomCache atom_cache_; 314 X11AtomCache atom_cache_;
305 315
306 unsigned char button_map_[256]; 316 unsigned char button_map_[256];
307 int button_map_count_; 317 int button_map_count_;
308 318
309 DISALLOW_COPY_AND_ASSIGN(DeviceDataManagerX11); 319 DISALLOW_COPY_AND_ASSIGN(DeviceDataManagerX11);
310 }; 320 };
311 321
312 } // namespace ui 322 } // namespace ui
313 323
314 #endif // UI_EVENTS_X_DEVICE_DATA_MANAGER_X11_H_ 324 #endif // UI_EVENTS_X_DEVICE_DATA_MANAGER_X11_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698