blob: 4d0a5c90cc78e4cc4a7c03b69ce014dc4ff738d7 [file] [log] [blame]
// Copyright (c) 2011 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 "chrome/common/native_web_keyboard_event_views.h"
#if defined(TOOLKIT_USES_GTK)
#include <gdk/gdk.h>
#endif
#include "base/logging.h"
#include "views/events/event.h"
namespace {
int ViewsFlagsToWebInputEventModifiers(int flags) {
return
(flags & ui::EF_SHIFT_DOWN ? WebKit::WebInputEvent::ShiftKey : 0) |
(flags & ui::EF_CONTROL_DOWN ? WebKit::WebInputEvent::ControlKey : 0) |
(flags & ui::EF_CAPS_LOCK_DOWN ? WebKit::WebInputEvent::CapsLockOn : 0) |
(flags & ui::EF_ALT_DOWN ? WebKit::WebInputEvent::AltKey : 0);
}
} // namespace
NativeWebKeyboardEventViews::NativeWebKeyboardEventViews(
const views::KeyEvent& event) {
skip_in_browser = false;
DCHECK(event.type() == ui::ET_KEY_PRESSED ||
event.type() == ui::ET_KEY_RELEASED);
if (event.type() == ui::ET_KEY_PRESSED)
type = WebKit::WebInputEvent::RawKeyDown;
else
type = WebKit::WebInputEvent::KeyUp;
modifiers = ViewsFlagsToWebInputEventModifiers(event.flags());
timeStampSeconds = event.time_stamp().ToDoubleT();
windowsKeyCode = event.key_code();
nativeKeyCode = windowsKeyCode;
text[0] = event.GetCharacter();
unmodifiedText[0] = event.GetUnmodifiedCharacter();
setKeyIdentifierFromWindowsKeyCode();
#if defined(USE_AURA)
// TODO(beng):
NOTIMPLEMENTED();
#elif defined(OS_WIN)
// |os_event| is a MSG struct, so we can copy it directly.
os_event = event.native_event();
#elif defined(TOOLKIT_USES_GTK)
if (event.native_event()) {
os_event =
reinterpret_cast<GdkEventKey*>(gdk_event_copy(event.native_event()));
nativeKeyCode = os_event->keyval;
} else {
os_event = NULL;
}
#endif
#if defined(TOOLKIT_USES_GTK)
match_edit_command = false;
#endif
}
NativeWebKeyboardEventViews::NativeWebKeyboardEventViews(
uint16 character,
int flags,
double time_stamp_seconds,
FromViewsEvent) {
skip_in_browser = true;
type = WebKit::WebInputEvent::Char;
modifiers = ViewsFlagsToWebInputEventModifiers(flags);
timeStampSeconds = time_stamp_seconds;
windowsKeyCode = character;
nativeKeyCode = character;
text[0] = character;
unmodifiedText[0] = character;
isSystemKey = (flags & ui::EF_ALT_DOWN) != 0;
#if defined(OS_WIN)
memset(&os_event, 0, sizeof(os_event));
#elif defined(TOOLKIT_USES_GTK)
os_event = NULL;
#endif
#if defined(TOOLKIT_USES_GTK)
match_edit_command = false;
#endif
}
NativeWebKeyboardEventViews::~NativeWebKeyboardEventViews() {
}