summaryrefslogtreecommitdiffstats
path: root/ui/aura/event.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/aura/event.cc')
-rw-r--r--ui/aura/event.cc38
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_);