aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/views/unix
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-08 16:50:52 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-08 16:50:52 +0000
commite378d833489476f68485a64dc437da325e75ee71 (patch)
treeac8c1d51711908935c542802a9b3a29124f24076 /src/views/unix
parent6f47663000b68849cd9df11c30985a2e6382e785 (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.cpp19
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() {