diff options
author | 2013-01-08 16:50:52 +0000 | |
---|---|---|
committer | 2013-01-08 16:50:52 +0000 | |
commit | e378d833489476f68485a64dc437da325e75ee71 (patch) | |
tree | ac8c1d51711908935c542802a9b3a29124f24076 /src/views/unix | |
parent | 6f47663000b68849cd9df11c30985a2e6382e785 (diff) |
translate modifier keys for xevents
git-svn-id: http://skia.googlecode.com/svn/trunk@7087 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/views/unix')
-rw-r--r-- | src/views/unix/SkOSWindow_Unix.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/views/unix/SkOSWindow_Unix.cpp b/src/views/unix/SkOSWindow_Unix.cpp index dbb8ceaeaa..8f3aa85443 100644 --- a/src/views/unix/SkOSWindow_Unix.cpp +++ b/src/views/unix/SkOSWindow_Unix.cpp @@ -151,8 +151,23 @@ void SkOSWindow::post_linuxevent() { } static unsigned getModi(const XEvent& evt) { -// unsigned xmod = evt.xkey.state; - return 0; // TODO + static const struct { + unsigned fXMask; + unsigned fSkMask; + } gModi[] = { + // X values found by experiment. Is there a better way? + { 1, kShift_SkModifierKey }, + { 4, kControl_SkModifierKey }, + { 8, kOption_SkModifierKey }, + }; + + unsigned modi = 0; + for (size_t i = 0; i < SK_ARRAY_COUNT(gModi); ++i) { + if (evt.xkey.state & gModi[i].fXMask) { + modi |= gModi[i].fSkMask; + } + } + return modi; } void SkOSWindow::loop() { |