summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/aura/event.cc6
-rw-r--r--ui/aura/event_unittest.cc37
-rw-r--r--ui/views/events/event_x.cc6
3 files changed, 44 insertions, 5 deletions
diff --git a/ui/aura/event.cc b/ui/aura/event.cc
index bdd4764..18687d1 100644
--- a/ui/aura/event.cc
+++ b/ui/aura/event.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -229,7 +229,9 @@ uint16 KeyEvent::GetCharacter() const {
DCHECK(native_event()->type == KeyPress ||
native_event()->type == KeyRelease);
- uint16 ch = ui::GetCharacterFromXEvent(native_event());
+ uint16 ch = 0;
+ if (!IsControlDown())
+ ch = ui::GetCharacterFromXEvent(native_event());
return ch ? ch : ui::GetCharacterFromKeyCode(key_code_, flags());
#else
NOTIMPLEMENTED();
diff --git a/ui/aura/event_unittest.cc b/ui/aura/event_unittest.cc
index f1e65a1..1e05df6 100644
--- a/ui/aura/event_unittest.cc
+++ b/ui/aura/event_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -31,6 +31,41 @@ TEST(EventTest, NativeEvent) {
native_event.get());
KeyEvent keyev(native_event.get(), false);
EXPECT_TRUE(keyev.HasNativeEvent());
+}
+
+TEST(EventTest, GetCharacter) {
+ // Check if Control+Enter returns 10.
+ KeyEvent keyev1(ui::ET_KEY_PRESSED,
+ ui::VKEY_RETURN,
+ ui::EF_CONTROL_DOWN);
+ EXPECT_EQ(10, keyev1.GetCharacter());
+ EXPECT_EQ(13, keyev1.GetUnmodifiedCharacter());
+ // Check if Enter returns 13.
+ KeyEvent keyev2(ui::ET_KEY_PRESSED,
+ ui::VKEY_RETURN,
+ 0);
+ EXPECT_EQ(13, keyev2.GetCharacter());
+ EXPECT_EQ(13, keyev2.GetUnmodifiedCharacter());
+
+#if defined(USE_X11)
+ // For X11, test the functions with native_event() as well. crbug.com/107837
+ scoped_ptr<XEvent> native_event(new XEvent);
+
+ ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
+ ui::VKEY_RETURN,
+ ui::EF_CONTROL_DOWN,
+ native_event.get());
+ KeyEvent keyev3(native_event.get(), false);
+ EXPECT_EQ(10, keyev3.GetCharacter());
+ EXPECT_EQ(13, keyev3.GetUnmodifiedCharacter());
+
+ ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
+ ui::VKEY_RETURN,
+ 0,
+ native_event.get());
+ KeyEvent keyev4(native_event.get(), false);
+ EXPECT_EQ(13, keyev4.GetCharacter());
+ EXPECT_EQ(13, keyev4.GetUnmodifiedCharacter());
#endif
}
diff --git a/ui/views/events/event_x.cc b/ui/views/events/event_x.cc
index 4bbb27d..ab24ef4 100644
--- a/ui/views/events/event_x.cc
+++ b/ui/views/events/event_x.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -63,7 +63,9 @@ uint16 KeyEvent::GetCharacter() const {
DCHECK(native_event()->type == KeyPress ||
native_event()->type == KeyRelease);
- uint16 ch = ui::GetCharacterFromXEvent(native_event());
+ uint16 ch = 0;
+ if (!IsControlDown())
+ ch = ui::GetCharacterFromXEvent(native_event());
return ch ? ch : ui::GetCharacterFromKeyCode(key_code_, flags());
}