bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent& event) { // We don't generate other types of keyboard events via WebEventFactory. ASSERT(event.type() == WebEvent::KeyDown || event.type() == WebEvent::KeyUp); if (m_isWindowed || !m_impl) return false; return m_impl->handleKeyboardEvent(event); }
bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent& event) { // We don't generate other types of keyboard events via WebEventFactory. ASSERT(event.type() == WebEvent::KeyDown || event.type() == WebEvent::KeyUp); XEvent xEvent; initializeXEvent(xEvent); setXKeyEventFields(xEvent, event); return !NPP_HandleEvent(&xEvent); }
bool NetscapePluginX11::handleKeyboardEvent(const WebKeyboardEvent& event) { ASSERT(m_plugin.isWindowed()); // We don't generate other types of keyboard events via WebEventFactory. ASSERT(event.type() == WebEvent::KeyDown || event.type() == WebEvent::KeyUp); XEvent xEvent; initializeXEvent(xEvent); setXKeyEventFields(xEvent, event); return !m_plugin.NPP_HandleEvent(&xEvent); }
bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent& keyboardEvent) { if (keyboardEvent.type() != WebEvent::KeyDown && keyboardEvent.type() != WebEvent::RawKeyDown) return false; switch (keyboardEvent.windowsVirtualKeyCode()) { case VK_BACK: if (keyboardEvent.shiftKey()) m_page->goForward(); else m_page->goBack(); break; case VK_SPACE: scroll(m_page.get(), keyboardEvent.shiftKey() ? ScrollUp : ScrollDown, ScrollByPage); break; case VK_LEFT: scroll(m_page.get(), ScrollLeft, ScrollByLine); break; case VK_RIGHT: scroll(m_page.get(), ScrollRight, ScrollByLine); break; case VK_UP: scroll(m_page.get(), ScrollUp, ScrollByLine); break; case VK_DOWN: scroll(m_page.get(), ScrollDown, ScrollByLine); break; case VK_HOME: scroll(m_page.get(), ScrollUp, ScrollByDocument); break; case VK_END: scroll(m_page.get(), ScrollDown, ScrollByDocument); break; case VK_PRIOR: scroll(m_page.get(), ScrollUp, ScrollByPage); break; case VK_NEXT: scroll(m_page.get(), ScrollDown, ScrollByPage); break; default: return false; } return true; }
bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent& keyboardEvent) { if (keyboardEvent.type() != WebEvent::KeyDown && keyboardEvent.type() != WebEvent::RawKeyDown) return false; switch (keyboardEvent.windowsVirtualKeyCode()) { case VK_LEFT: scroll(m_page.get(), ScrollLeft, ScrollByLine); break; case VK_RIGHT: scroll(m_page.get(), ScrollRight, ScrollByLine); break; case VK_UP: scroll(m_page.get(), ScrollUp, ScrollByLine); break; case VK_DOWN: scroll(m_page.get(), ScrollDown, ScrollByLine); break; case VK_HOME: logicalScroll(m_page.get(), ScrollBlockDirectionBackward, ScrollByDocument); break; case VK_END: logicalScroll(m_page.get(), ScrollBlockDirectionForward, ScrollByDocument); break; case VK_PRIOR: logicalScroll(m_page.get(), ScrollBlockDirectionBackward, ScrollByPage); break; case VK_NEXT: logicalScroll(m_page.get(), ScrollBlockDirectionForward, ScrollByPage); break; default: return false; } return true; }
WebKit2PlatformKeyboardEvent(const WebKeyboardEvent& webEvent) { // PlatformEvent switch (webEvent.type()) { case WebEvent::KeyDown: m_type = WebCore::PlatformEvent::KeyDown; break; case WebEvent::KeyUp: m_type = WebCore::PlatformEvent::KeyUp; break; case WebEvent::RawKeyDown: m_type = WebCore::PlatformEvent::RawKeyDown; break; case WebEvent::Char: m_type = WebCore::PlatformEvent::Char; break; default: ASSERT_NOT_REACHED(); } m_modifiers = 0; if (webEvent.shiftKey()) m_modifiers |= ShiftKey; if (webEvent.controlKey()) m_modifiers |= CtrlKey; if (webEvent.altKey()) m_modifiers |= AltKey; if (webEvent.metaKey()) m_modifiers |= MetaKey; m_timestamp = webEvent.timestamp(); // PlatformKeyboardEvent m_text = webEvent.text(); m_unmodifiedText = webEvent.unmodifiedText(); m_keyIdentifier = webEvent.keyIdentifier(); m_windowsVirtualKeyCode = webEvent.windowsVirtualKeyCode(); m_nativeVirtualKeyCode = webEvent.nativeVirtualKeyCode(); m_macCharCode = webEvent.macCharCode(); #if USE(APPKIT) || PLATFORM(GTK) m_handledByInputMethod = webEvent.handledByInputMethod(); m_commands = webEvent.commands(); #endif m_autoRepeat = webEvent.isAutoRepeat(); m_isKeypad = webEvent.isKeypad(); m_isSystemKey = webEvent.isSystemKey(); }
static inline void setXKeyEventFields(XEvent& xEvent, const WebKeyboardEvent& webEvent) { xEvent.xany.type = (webEvent.type() == WebEvent::KeyDown) ? kKeyPressType : kKeyReleaseType; XKeyEvent& xKey = xEvent.xkey; xKey.root = rootWindowID(); xKey.subwindow = 0; xKey.time = xTimeStamp(webEvent.timestamp()); xKey.state = xKeyModifiers(webEvent); xKey.keycode = webEvent.nativeVirtualKeyCode(); xKey.same_screen = true; // Key events propagated to the plugin does not need to have position. // source: https://developer.mozilla.org/en/NPEvent xKey.x = 0; xKey.y = 0; xKey.x_root = 0; xKey.y_root = 0; }
WebKit2PlatformKeyboardEvent(const WebKeyboardEvent& webEvent) { switch (webEvent.type()) { case WebEvent::KeyDown: m_type = PlatformKeyboardEvent::KeyDown; break; case WebEvent::KeyUp: m_type = PlatformKeyboardEvent::KeyUp; break; case WebEvent::RawKeyDown: m_type = PlatformKeyboardEvent::RawKeyDown; break; case WebEvent::Char: m_type = PlatformKeyboardEvent::Char; break; default: ASSERT_NOT_REACHED(); } m_text = webEvent.text(); m_unmodifiedText = webEvent.unmodifiedText(); m_keyIdentifier = webEvent.keyIdentifier(); m_windowsVirtualKeyCode = webEvent.windowsVirtualKeyCode(); m_nativeVirtualKeyCode = webEvent.nativeVirtualKeyCode(); m_autoRepeat = webEvent.isAutoRepeat(); m_isKeypad = webEvent.isKeypad(); m_shiftKey = webEvent.shiftKey(); m_ctrlKey = webEvent.controlKey(); m_altKey = webEvent.altKey(); m_metaKey = webEvent.metaKey(); #if PLATFORM(WIN) // FIXME: We should make m_isSystemKey available (and false) on all platforms // to avoid this #define. m_isSystemKey = webEvent.isSystemKey(); #endif }
void WebPage::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder& arguments) { if (messageID.is<CoreIPC::MessageClassDrawingArea>()) { ASSERT(m_drawingArea); m_drawingArea->didReceiveMessage(connection, messageID, arguments); return; } switch (messageID.get<WebPageMessage::Kind>()) { case WebPageMessage::SetActive: { bool active; if (!arguments.decode(active)) return; setActive(active); break; } case WebPageMessage::SetFocused: { bool focused; if (!arguments.decode(focused)) return; setFocused(focused); break; } case WebPageMessage::MouseEvent: { WebMouseEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformMouseEvent platformEvent = platform(event); mouseEvent(platformEvent); break; } case WebPageMessage::WheelEvent: { WebWheelEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformWheelEvent platformEvent = platform(event); wheelEvent(platformEvent); break; } case WebPageMessage::KeyEvent: { WebKeyboardEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformKeyboardEvent platformEvent = platform(event); keyEvent(platformEvent); break; } case WebPageMessage::LoadURL: { String url; if (!arguments.decode(url)) return; loadURL(url); break; } case WebPageMessage::StopLoading: stopLoading(); break; case WebPageMessage::Reload: bool reloadFromOrigin; if (!arguments.decode(CoreIPC::Out(reloadFromOrigin))) return; reload(reloadFromOrigin); break; case WebPageMessage::GoForward: goForward(); break; case WebPageMessage::GoBack: goBack(); break; case WebPageMessage::DidReceivePolicyDecision: { uint64_t frameID; uint64_t listenerID; uint32_t policyAction; if (!arguments.decode(CoreIPC::Out(frameID, listenerID, policyAction))) return; didReceivePolicyDecision(webFrame(frameID), listenerID, (WebCore::PolicyAction)policyAction); break; } case WebPageMessage::RunJavaScriptInMainFrame: { String script; uint64_t callbackID; if (!arguments.decode(CoreIPC::Out(script, callbackID))) return; runJavaScriptInMainFrame(script, callbackID); break; } case WebPageMessage::GetRenderTreeExternalRepresentation: { uint64_t callbackID; if (!arguments.decode(callbackID)) return; getRenderTreeExternalRepresentation(callbackID); break; } case WebPageMessage::Close: { close(); break; } case WebPageMessage::TryClose: { tryClose(); break; } default: ASSERT_NOT_REACHED(); break; } }