summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authoryusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-05 11:54:07 +0000
committeryusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-05 11:54:07 +0000
commit0a9d71074fd9e487593241ab82d75a87db23012c (patch)
tree5f7ebddfbd5c1cbd3354ebc6e6e66e7e6dede73a /ui
parente7e46736cc27f6499d89141eb9e546866ba24754 (diff)
downloadchromium_src-0a9d71074fd9e487593241ab82d75a87db23012c.zip
chromium_src-0a9d71074fd9e487593241ab82d75a87db23012c.tar.gz
chromium_src-0a9d71074fd9e487593241ab82d75a87db23012c.tar.bz2
Do not modify |native_event()->xkey.state| in GetUnmodifiedCharaceter.
This is a partial revert of r107141. Since the revision, bits in |native_event()->xkey.state| for Control, Caps Lock, Alt, and Num Lock are cleared when GetUnmodifiedCharaceter() is called, but the behavior would't be desirable. This CL reverts the part so that the function would only modify a copy of XKeyEvent object. BUG=none TEST=ran try Review URL: http://codereview.chromium.org/8965022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116483 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/aura/event.cc11
-rw-r--r--ui/views/events/event_x.cc11
2 files changed, 10 insertions, 12 deletions
diff --git a/ui/aura/event.cc b/ui/aura/event.cc
index 18687d1..e3ab7c0 100644
--- a/ui/aura/event.cc
+++ b/ui/aura/event.cc
@@ -254,15 +254,14 @@ uint16 KeyEvent::GetUnmodifiedCharacter() const {
DCHECK(native_event()->type == KeyPress ||
native_event()->type == KeyRelease);
- XKeyEvent *key = &native_event()->xkey;
-
static const unsigned int kIgnoredModifiers = ControlMask | LockMask |
Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask;
- // We can't use things like (key.state & ShiftMask), as it may mask out bits
- // used by X11 internally.
- key->state &= ~kIgnoredModifiers;
- uint16 ch = ui::GetCharacterFromXEvent(native_event());
+ XKeyEvent copy = native_event()->xkey; // bit-wise copy is safe.
+ // We can't use things like (native_event()->xkey.state & ShiftMask), as it
+ // may mask out bits used by X11 internally.
+ copy.state &= ~kIgnoredModifiers;
+ uint16 ch = ui::GetCharacterFromXEvent(reinterpret_cast<XEvent*>(&copy));
return ch ? ch :
ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN);
#else
diff --git a/ui/views/events/event_x.cc b/ui/views/events/event_x.cc
index ab24ef4..e546ad8 100644
--- a/ui/views/events/event_x.cc
+++ b/ui/views/events/event_x.cc
@@ -103,15 +103,14 @@ uint16 KeyEvent::GetUnmodifiedCharacter() const {
DCHECK(native_event()->type == KeyPress ||
native_event()->type == KeyRelease);
- XKeyEvent *key = &native_event()->xkey;
-
static const unsigned int kIgnoredModifiers = ControlMask | LockMask |
Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask;
- // We can't use things like (key.state & ShiftMask), as it may mask out bits
- // used by X11 internally.
- key->state &= ~kIgnoredModifiers;
- uint16 ch = ui::GetCharacterFromXEvent(native_event());
+ XKeyEvent copy = native_event()->xkey; // bit-wise copy is safe.
+ // We can't use things like (native_event()->xkey.state & ShiftMask), as it
+ // may mask out bits used by X11 internally.
+ copy.state &= ~kIgnoredModifiers;
+ uint16 ch = ui::GetCharacterFromXEvent(reinterpret_cast<XEvent*>(&copy));
return ch ? ch :
ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN);
}