Index: ui/events/event.cc |
diff --git a/ui/events/event.cc b/ui/events/event.cc |
index 41f4ca69ebb8a010a748cb70e4404fdfcb42d0ce..c0f8a51477c696df166c97c4f20a8b588d106f47 100644 |
--- a/ui/events/event.cc |
+++ b/ui/events/event.cc |
@@ -31,10 +31,15 @@ namespace { |
base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) { |
#if defined(USE_X11) |
- if (!event || event->type == GenericEvent) |
+ if (!event) |
return NULL; |
XEvent* copy = new XEvent; |
*copy = *event; |
+ if (event->type == GenericEvent) { |
+ copy->xcookie.data = new XIDeviceEvent; |
+ *(static_cast<XIDeviceEvent*>(copy->xcookie.data)) = |
+ *(static_cast<XIDeviceEvent*>(event->xcookie.data)); |
+ } |
return copy; |
#elif defined(OS_WIN) |
return event; |
@@ -120,8 +125,11 @@ namespace ui { |
Event::~Event() { |
#if defined(USE_X11) |
- if (delete_native_event_) |
+ if (delete_native_event_) { |
+ if (native_event_ && native_event_->type == GenericEvent) |
+ delete static_cast<XIDeviceEvent*>(native_event_->xcookie.data); |
delete native_event_; |
+ } |
#endif |
} |