PlatformKeyboardEvent::PlatformKeyboardEvent(QKeyEvent* event) { const int state = event->modifiers(); m_type = (event->type() == QEvent::KeyRelease) ? KeyUp : KeyDown; m_text = event->text(); m_unmodifiedText = event->text(); // FIXME: not correct m_keyIdentifier = keyIdentifierForQtKeyCode(event->key()); m_autoRepeat = event->isAutoRepeat(); m_ctrlKey = (state & Qt::ControlModifier) != 0; m_altKey = (state & Qt::AltModifier) != 0; m_metaKey = (state & Qt::MetaModifier) != 0; m_isKeypad = (state & Qt::KeypadModifier) != 0; m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event->key(), m_isKeypad); m_nativeVirtualKeyCode = event->nativeVirtualKey(); m_shiftKey = (state & Qt::ShiftModifier) != 0 || event->key() == Qt::Key_Backtab; // Simulate Shift+Tab with Key_Backtab m_qtEvent = event; }
WebKeyboardEvent WebEventFactory::createWebKeyboardEvent(const NIXKeyEvent& event) { WebEvent::Type type = convertToWebEventType(event.type); const WTF::String text = keyTextForNixKeyEvent(event); const WTF::String unmodifiedText = text; bool isAutoRepeat = false; bool isSystemKey = false; bool isKeypad = event.isKeypad; const WTF::String keyIdentifier = keyIdentifierForNixKeyCode(event.key); int windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event.key, isKeypad); int nativeVirtualKeyCode = 0; int macCharCode = 0; WebEvent::Modifiers modifiers = convertToWebEventModifiers(event.modifiers); double timestamp = event.timestamp; return WebKeyboardEvent(type, text, unmodifiedText, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, macCharCode, isAutoRepeat, isKeypad, isSystemKey, modifiers, timestamp); }
WebKeyboardEvent WebEventFactory::createWebKeyboardEvent(QKeyEvent* event) { const int state = event->modifiers(); WebEvent::Type type = webEventTypeForEvent(event); const String text = event->text(); const String unmodifiedText = event->text(); bool isAutoRepeat = event->isAutoRepeat(); bool isSystemKey = false; // FIXME: No idea what that is. bool isKeypad = (state & Qt::KeypadModifier); const String keyIdentifier = keyIdentifierForQtKeyCode(event->key()); int windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event->key(), isKeypad); int nativeVirtualKeyCode = event->nativeVirtualKey(); int macCharCode = 0; WebEvent::Modifiers modifiers = modifiersForEvent(event->modifiers()); double timestamp = currentTimeForEvent(event); return WebKeyboardEvent(type, text, unmodifiedText, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, macCharCode, isAutoRepeat, isKeypad, isSystemKey, modifiers, timestamp); }
PlatformKeyboardEvent::PlatformKeyboardEvent(wxKeyEvent& event) { if (event.GetEventType() == wxEVT_KEY_UP) m_type = PlatformEvent::KeyUp; else if (event.GetEventType() == wxEVT_KEY_DOWN) m_type = PlatformEvent::KeyDown; else if (event.GetEventType() == wxEVT_CHAR) m_type = PlatformEvent::Char; else ASSERT_NOT_REACHED(); if (m_type != PlatformEvent::Char) m_keyIdentifier = keyIdentifierForWxKeyCode(event.GetKeyCode()); else { //ENTER is an editing command processed as a char (only Enter and Tab are) //unfortunately the unicode key for numpad_enter (370) is NOT what we want here (13) //The unicode values for normal enter and tab are the same as the ASCII values, thus ok //Note that I think this a wx bug, as the Character Code is actually 13 when //numpad_enter is a CHAR event. if (event.GetKeyCode() == 13 && event.GetUnicodeKey() == wxChar(370)) m_text = "\r"; else m_text = wxString(event.GetUnicodeKey()); m_unmodifiedText = m_text; } m_autoRepeat = false; // FIXME: not correct. m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event.GetKeyCode()); m_nativeVirtualKeyCode = event.GetKeyCode(); m_isKeypad = (event.GetKeyCode() >= WXK_NUMPAD_SPACE) && (event.GetKeyCode() <= WXK_NUMPAD_DIVIDE); m_modifiers = 0; if (event.ShiftDown()) m_modifiers |= ShiftKey; if (event.CmdDown()) m_modifiers |= CtrlKey; if (event.AltDown()) m_modifiers |= AltKey; if (event.MetaDown()) m_modifiers |= MetaKey; m_timestamp = WTF::currentTime(); }
PlatformKeyboardEvent::PlatformKeyboardEvent(GdkEvent* event) { m_isKeyUp = event->type == GDK_KEY_RELEASE; m_shiftKey = event->key.state & GDK_SHIFT_MASK != 0; m_ctrlKey = event->key.state & GDK_CONTROL_MASK != 0; m_altKey = event->key.state & GDK_MOD1_MASK != 0; m_metaKey = event->key.state & GDK_MOD2_MASK != 0; m_text = event->key.string; m_unmodifiedText = event->key.string; m_keyIdentifier = keyIdentifierForGdkKeyCode(event->key.keyval); m_WindowsKeyCode = windowsKeyCodeForKeyEvent(event->key.keyval); m_autoRepeat = false; m_isKeypad = false; if (!m_shiftKey) { UChar character = tolower(m_text[0]); m_text = String(&character, 1); } }
// Keep this in sync with the other platform event constructors // TODO: m_gdkEventKey should be refcounted PlatformKeyboardEvent::PlatformKeyboardEvent(GdkEventKey* event) : m_type((event->type == GDK_KEY_RELEASE) ? KeyUp : KeyDown) , m_text(singleCharacterString(event->keyval)) , m_unmodifiedText(singleCharacterString(event->keyval)) , m_keyIdentifier(keyIdentifierForGdkKeyCode(event->keyval)) , m_autoRepeat(false) , m_windowsVirtualKeyCode(windowsKeyCodeForKeyEvent(event->keyval)) , m_isKeypad(event->keyval >= GDK_KP_Space && event->keyval <= GDK_KP_9) , m_shiftKey((event->state & GDK_SHIFT_MASK) || (event->keyval == GDK_3270_BackTab)) , m_ctrlKey(event->state & GDK_CONTROL_MASK) , m_altKey(event->state & GDK_MOD1_MASK) #if GTK_CHECK_VERSION(2,10,0) , m_metaKey(event->state & GDK_META_MASK) #else // GDK_MOD2_MASK doesn't always mean meta so we can't use it , m_metaKey(false) #endif , m_gdkEventKey(event) { }