aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/views/unix/SkOSWindow_Unix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/unix/SkOSWindow_Unix.cpp')
-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() {