diff options
author | yusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-05 11:54:07 +0000 |
---|---|---|
committer | yusukes@chromium.org <yusukes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-05 11:54:07 +0000 |
commit | 0a9d71074fd9e487593241ab82d75a87db23012c (patch) | |
tree | 5f7ebddfbd5c1cbd3354ebc6e6e66e7e6dede73a /ui | |
parent | e7e46736cc27f6499d89141eb9e546866ba24754 (diff) | |
download | chromium_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.cc | 11 | ||||
-rw-r--r-- | ui/views/events/event_x.cc | 11 |
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*>(©)); 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*>(©)); return ch ? ch : ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN); } |