Chromium Code Reviews| Index: chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc |
| =================================================================== |
| --- chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc (revision 115229) |
| +++ chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc (working copy) |
| @@ -44,9 +44,9 @@ |
| // Checks the |event| and asynchronously sets the XKB layout when necessary. |
| void HandleHierarchyChangedEvent(XIHierarchyEvent* event) { |
| - if (!(event->flags & XISlaveAdded)) { |
| + if (!(event->flags & XISlaveAdded)) |
| return; |
| - } |
| + |
| for (int i = 0; i < event->num_info; ++i) { |
| XIHierarchyInfo* info = &event->info[i]; |
| if ((info->flags & XISlaveAdded) && (info->use == XIFloatingSlave)) { |
| @@ -91,17 +91,35 @@ |
| xiopcode_ = -1; |
| } |
| +void XInputHierarchyChangedEventListener::AddObserver(Observer* observer) { |
| + observer_list_.AddObserver(observer); |
| +} |
| + |
| +void XInputHierarchyChangedEventListener::RemoveObserver(Observer* observer) { |
| + observer_list_.RemoveObserver(observer); |
| +} |
| + |
| bool XInputHierarchyChangedEventListener::ProcessedXEvent(XEvent* xevent) { |
| if ((xevent->xcookie.type != GenericEvent) || |
| (xevent->xcookie.extension != xiopcode_)) { |
| return false; |
| } |
| + |
| XGenericEventCookie* cookie = &(xevent->xcookie); |
| const bool should_consume = (cookie->evtype == XI_HierarchyChanged); |
| + XIHierarchyEvent* event = static_cast<XIHierarchyEvent*>(cookie->data); |
|
xiyuan
2011/12/21 03:38:24
Should this cast only valid when cookie->evtype ==
achuithb
2011/12/21 22:15:01
Yup, I did not look at the surrounding code carefu
|
| + |
| if (should_consume) |
| - HandleHierarchyChangedEvent(static_cast<XIHierarchyEvent*>(cookie->data)); |
| + HandleHierarchyChangedEvent(event); |
| + if (event->flags & XIDeviceEnabled || event->flags & XIDeviceDisabled) |
|
xiyuan
2011/12/21 03:38:24
this is also only valid when cookie->evtype == XI_
achuithb
2011/12/21 22:15:01
Done.
|
| + NotifyDeviceChanged(); |
| + |
| return should_consume; |
| } |
| +void XInputHierarchyChangedEventListener::NotifyDeviceChanged() { |
| + FOR_EACH_OBSERVER(Observer, observer_list_, DeviceChanged()); |
| +} |
| + |
| } // namespace chromeos |