diff options
Diffstat (limited to 'ui/aura/event.cc')
-rw-r--r-- | ui/aura/event.cc | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/ui/aura/event.cc b/ui/aura/event.cc index 980b129..5628863 100644 --- a/ui/aura/event.cc +++ b/ui/aura/event.cc @@ -54,10 +54,18 @@ bool IsDoubleClick(const aura::MouseEvent& event) { namespace aura { +Event::~Event() { +#if defined(USE_X11) + if (delete_native_event_) + delete native_event_; +#endif +} + Event::Event(ui::EventType type, int flags) : type_(type), time_stamp_(base::Time::NowFromSystemTime()), - flags_(flags) { + flags_(flags), + delete_native_event_(false) { Init(); } @@ -66,7 +74,8 @@ Event::Event(const base::NativeEvent& native_event, int flags) : type_(type), time_stamp_(base::Time::NowFromSystemTime()), - flags_(flags) { + flags_(flags), + delete_native_event_(false) { InitWithNativeEvent(native_event); } @@ -74,7 +83,8 @@ Event::Event(const Event& copy) : native_event_(copy.native_event_), type_(copy.type_), time_stamp_(copy.time_stamp_), - flags_(copy.flags_) { + flags_(copy.flags_), + delete_native_event_(false) { } void Event::Init() { @@ -251,6 +261,28 @@ uint16 KeyEvent::GetUnmodifiedCharacter() const { #endif } +base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) { +#if defined(USE_X11) + XEvent* copy = new XEvent; + *copy = *event; + return copy; +#elif defined(OS_WIN) + return event; +#else + NOTREACHED() << + "Don't know how to copy base::NativeEvent for this platform"; +#endif +} + +KeyEvent* KeyEvent::Copy() { + KeyEvent* copy = new KeyEvent(CopyNativeEvent(native_event()), + is_char()); +#if defined(USE_X11) + copy->set_delete_native_event(true); +#endif + return copy; +} + ScrollEvent::ScrollEvent(const base::NativeEvent& native_event) : MouseEvent(native_event) { ui::GetScrollOffsets(native_event, &x_offset_, &y_offset_); |