summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-16 19:09:02 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-16 19:09:02 +0000
commitbadc5a57fd63efdb03ce99e65d4dd9e90a2f870e (patch)
tree700c204a8e994b0c3e42b4d88b48c248d1353b6e /ui
parentaf9884f13671ccbab814a99cf97c9d63ba58d0d5 (diff)
downloadchromium_src-badc5a57fd63efdb03ce99e65d4dd9e90a2f870e.zip
chromium_src-badc5a57fd63efdb03ce99e65d4dd9e90a2f870e.tar.gz
chromium_src-badc5a57fd63efdb03ce99e65d4dd9e90a2f870e.tar.bz2
Copy native event when creating new NativeWebKeyboardEvent
BUG=none TEST=none Review URL: http://codereview.chromium.org/8961006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114837 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/aura/event.cc38
-rw-r--r--ui/aura/event.h9
2 files changed, 44 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_);
diff --git a/ui/aura/event.h b/ui/aura/event.h
index f4478f8..2f36516 100644
--- a/ui/aura/event.h
+++ b/ui/aura/event.h
@@ -25,6 +25,8 @@ class Window;
class AURA_EXPORT Event {
public:
+ virtual ~Event();
+
const base::NativeEvent& native_event() const { return native_event_; }
ui::EventType type() const { return type_; }
const base::Time& time_stamp() const { return time_stamp_; }
@@ -43,6 +45,9 @@ class AURA_EXPORT Event {
Event(const Event& copy);
void set_type(ui::EventType type) { type_ = type; }
void set_flags(int flags) { flags_ = flags; }
+ void set_delete_native_event(bool delete_native_event) {
+ delete_native_event_ = delete_native_event;
+ }
private:
void operator=(const Event&);
@@ -55,6 +60,7 @@ class AURA_EXPORT Event {
ui::EventType type_;
base::Time time_stamp_;
int flags_;
+ bool delete_native_event_;
};
class AURA_EXPORT LocatedEvent : public Event {
@@ -168,6 +174,9 @@ class AURA_EXPORT KeyEvent : public Event {
// modifiers (except shift).
uint16 GetUnmodifiedCharacter() const;
+ // Returns the copy of this key event. Used in NativeWebKeyboardEvent.
+ KeyEvent* Copy();
+
ui::KeyboardCode key_code() const { return key_code_; }
bool is_char() const { return is_char_; }