diff options
Diffstat (limited to 'views/event_gtk.cc')
-rw-r--r-- | views/event_gtk.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/views/event_gtk.cc b/views/event_gtk.cc new file mode 100644 index 0000000..ac5a2ce --- /dev/null +++ b/views/event_gtk.cc @@ -0,0 +1,36 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "views/event.h" + +namespace views { + +KeyEvent::KeyEvent(GdkEventKey* event) + : Event(event->type == GDK_KEY_PRESS ? + Event::ET_KEY_PRESSED : Event::ET_KEY_RELEASED, + GetFlagsFromGdkState(event->state)), + // TODO(erg): All these values are iffy. + character_(event->keyval), + repeat_count_(0), + message_flags_(0) { +} + +int Event::GetFlagsFromGdkState(int state) { + int flags = 0; + if (state & GDK_CONTROL_MASK) + flags |= Event::EF_CONTROL_DOWN; + if (state & GDK_SHIFT_MASK) + flags |= Event::EF_SHIFT_DOWN; + if (state & GDK_MOD1_MASK) + flags |= Event::EF_ALT_DOWN; + if (state & GDK_BUTTON1_MASK) + flags |= Event::EF_LEFT_BUTTON_DOWN; + if (state & GDK_BUTTON2_MASK) + flags |= Event::EF_MIDDLE_BUTTON_DOWN; + if (state & GDK_BUTTON3_MASK) + flags |= Event::EF_RIGHT_BUTTON_DOWN; + return flags; +} + +} // namespace views |