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 |