12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef UI_EVENTS_X_DEVICE_LIST_CACHE_X_H_ 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define UI_EVENTS_X_DEVICE_LIST_CACHE_X_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <X11/extensions/XInput.h> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <X11/extensions/XInput2.h> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/events/events_base_export.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <typename T> struct DefaultSingletonTraits; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef struct _XDisplay Display; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <typename T> 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct DeviceList { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DeviceList() : devices(NULL), count(0) { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T& operator[] (int x) { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return devices[x]; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const T& operator[](int x) const { return devices[x]; } 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T* devices; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int count; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef struct DeviceList<XDeviceInfo> XDeviceList; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef struct DeviceList<XIDeviceInfo> XIDeviceList; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ui { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A class to cache the current XInput device list. This minimized the 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// round-trip time to the X server whenever such a device list is needed. The 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// update function will be called on each incoming XI_HierarchyChanged event. 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class EVENTS_BASE_EXPORT DeviceListCacheX { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static DeviceListCacheX* GetInstance(); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateDeviceList(Display* display); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns the list of devices associated with |display|. Uses the old X11 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // protocol to get the list of the devices. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const XDeviceList& GetXDeviceList(Display* display); 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns the list of devices associated with |display|. Uses the newer 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // XINPUT2 protocol to get the list of devices. Before making this call, make 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // sure that XInput2 support is available (e.g. by calling 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // IsXInput2Available()). 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const XIDeviceList& GetXI2DeviceList(Display* display); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend struct DefaultSingletonTraits<DeviceListCacheX>; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DeviceListCacheX(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~DeviceListCacheX(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<Display*, XDeviceList> x_dev_list_map_; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<Display*, XIDeviceList> xi_dev_list_map_; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceListCacheX); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ui 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif // UI_EVENTS_X_DEVICE_LIST_CACHE_X_H_ 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72