bool WebView::handleKeyPress(WPARAM charCode, LPARAM keyData, bool systemKeyDown) { Frame* frame = m_page->focusController()->focusedOrMainFrame(); PlatformKeyboardEvent keyEvent(m_windowHandle, charCode, keyData, PlatformEvent::Char, systemKeyDown); // IE does not dispatch keypress event for WM_SYSCHAR. if (systemKeyDown) return frame->eventHandler()->handleAccessKey(keyEvent); if (frame->eventHandler()->keyEvent(keyEvent)) return true; return false; }
void CachedFrameBase::restore() { ASSERT(m_document->view() == m_view); Frame* frame = m_view->frame(); m_cachedFrameScriptData->restore(frame); #if ENABLE(SVG) if (m_document->svgExtensions()) m_document->accessSVGExtensions()->unpauseAnimations(); #endif frame->animation()->resumeAnimations(m_document.get()); frame->eventHandler()->setMousePressNode(m_mousePressNode.get()); m_document->resumeActiveDOMObjects(); // It is necessary to update any platform script objects after restoring the // cached page. frame->script()->updatePlatformScriptObjects(); // Reconstruct the FrameTree for (unsigned i = 0; i < m_childFrames.size(); ++i) frame->tree()->appendChild(m_childFrames[i]->view()->frame()); // Open the child CachedFrames in their respective FrameLoaders. for (unsigned i = 0; i < m_childFrames.size(); ++i) m_childFrames[i]->open(); m_document->dispatchWindowEvent(PageTransitionEvent::create(eventNames().pageshowEvent, true), m_document); #if ENABLE(TOUCH_EVENTS) if (m_document->hasListenerType(Document::TOUCH_LISTENER)) m_document->page()->chrome()->client()->needTouchEvents(true); #endif }
void PageWidgetEventHandler::handleMouseMove(Frame& mainFrame, const WebMouseEvent& event) { // We call mouseMoved here instead of handleMouseMovedEvent because we need // our ChromeClientImpl to receive changes to the mouse position and tooltip // text, and mouseMoved handles all of that. mainFrame.eventHandler()->mouseMoved(PlatformMouseEventBuilder(mainFrame.view(), event)); }
static gboolean webkit_web_view_motion_event(GtkWidget* widget, GdkEventMotion* event) { //WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); Frame* frame = core(webView_s->mainFrame()); return frame->eventHandler()->mouseMoved(PlatformMouseEvent(event)); }
void WebViewPrivate::onMouseMotion(BalEventMotion event) { Frame* frame = core(m_webView->mainFrame()); if (!frame) return; frame->eventHandler()->mouseMoved(PlatformMouseEvent(&event)); }
bool WebView::handleKeyUp(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown) { PlatformKeyboardEvent keyEvent(m_windowHandle, virtualKeyCode, keyData, PlatformEvent::KeyUp, systemKeyDown); Frame* frame = m_page->focusController()->focusedOrMainFrame(); return frame->eventHandler()->keyEvent(keyEvent); }
void WebViewPrivate::onScroll(BalEventScroll eventScroll) { Frame* frame = core(m_webView->mainFrame()); if (!frame) return; PlatformWheelEvent wheelEvent(&eventScroll); frame->eventHandler()->handleWheelEvent(wheelEvent); }
static gboolean webkit_web_view_scroll_event(GtkWidget* widget, GdkEventScroll* event) { //WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); Frame* frame = core(webView_s->mainFrame()); PlatformWheelEvent wheelEvent(event); return frame->eventHandler()->handleWheelEvent(wheelEvent); }
void WebDragClient::startDrag(DragImageRef image, const IntPoint& imageOrigin, const IntPoint& dragPoint, DataTransfer& dataTransfer, Frame& frame, bool isLink) { //FIXME: Allow UIDelegate to override behaviour <rdar://problem/5015953> //We liberally protect everything, to protect against a load occurring mid-drag RefPtr<Frame> frameProtector = &frame; COMPtr<IDragSourceHelper> helper; COMPtr<IDataObject> dataObject; COMPtr<WebView> viewProtector = m_webView; COMPtr<IDropSource> source; if (FAILED(WebDropSource::createInstance(m_webView, &source))) return; dataObject = dataTransfer.pasteboard().dataObject(); if (source && (image || dataObject)) { if (image) { if(SUCCEEDED(CoCreateInstance(CLSID_DragDropHelper, 0, CLSCTX_INPROC_SERVER, IID_IDragSourceHelper,(LPVOID*)&helper))) { BITMAP b; GetObject(image, sizeof(BITMAP), &b); SHDRAGIMAGE sdi; sdi.sizeDragImage.cx = b.bmWidth; sdi.sizeDragImage.cy = b.bmHeight; sdi.crColorKey = 0xffffffff; sdi.hbmpDragImage = image; sdi.ptOffset.x = dragPoint.x() - imageOrigin.x(); sdi.ptOffset.y = dragPoint.y() - imageOrigin.y(); if (isLink) sdi.ptOffset.y = b.bmHeight - sdi.ptOffset.y; helper->InitializeFromBitmap(&sdi, dataObject.get()); } } DWORD okEffect = draggingSourceOperationMaskToDragCursors(m_webView->page()->dragController().sourceDragOperation()); DWORD effect = DROPEFFECT_NONE; COMPtr<IWebUIDelegate> ui; HRESULT hr = E_NOTIMPL; if (SUCCEEDED(m_webView->uiDelegate(&ui))) { COMPtr<IWebUIDelegatePrivate> uiPrivate; if (SUCCEEDED(ui->QueryInterface(IID_IWebUIDelegatePrivate, (void**)&uiPrivate))) hr = uiPrivate->doDragDrop(m_webView, dataObject.get(), source.get(), okEffect, &effect); } if (hr == E_NOTIMPL) hr = DoDragDrop(dataObject.get(), source.get(), okEffect, &effect); DragOperation operation = DragOperationNone; if (hr == DRAGDROP_S_DROP) { if (effect & DROPEFFECT_COPY) operation = DragOperationCopy; else if (effect & DROPEFFECT_LINK) operation = DragOperationLink; else if (effect & DROPEFFECT_MOVE) operation = DragOperationMove; } frame.eventHandler().dragSourceEndedAt(generateMouseEvent(m_webView, false), operation); } }
void WebViewPrivate::onKeyDown(BalEventKey eventKey) { using namespace EA::WebKit; // 7/20/09 CSidhall -Added for crash fix if(!m_webView || !m_webView->page() || !m_webView->page()->focusController() ) return; Frame* frame = m_webView->page()->focusController()->focusedOrMainFrame(); if (!frame) return; PlatformKeyboardEvent keyboardEvent(&eventKey); if (frame->eventHandler()->keyEvent(keyboardEvent)) return; FrameView* view = frame->view(); SelectionController::EAlteration alteration; if (eventKey.mId == kShift) alteration = SelectionController::EXTEND; else alteration = SelectionController::MOVE; switch (eventKey.mId) { case kArrowDown: view->scrollBy(0, LINE_STEP); break; case kArrowUp: view->scrollBy(0, -LINE_STEP); break; case kArrowRight: view->scrollBy(LINE_STEP, 0); break; case kArrowLeft: view->scrollBy(-LINE_STEP, 0); break; case kHome: frame->selection()->modify(alteration, SelectionController::BACKWARD, DocumentBoundary, true); break; case kEnd: frame->selection()->modify(alteration, SelectionController::FORWARD, DocumentBoundary, true); break; case kEscape: // On FireFox, esc causes animations to stop. break; case kF1: m_webView->goBack(); view->update(); break; case kF2: m_webView->goForward(); view->update(); break; default: break; } }
void CachedFrameBase::restore() { ASSERT(m_document->view() == m_view); if (m_isMainFrame) m_view->setParentVisible(true); Frame* frame = m_view->frame(); m_cachedFrameScriptData->restore(frame); #if ENABLE(SVG) if (m_document->svgExtensions()) m_document->accessSVGExtensions()->unpauseAnimations(); #endif frame->animation()->resumeAnimationsForDocument(m_document.get()); frame->eventHandler()->setMousePressNode(m_mousePressNode.get()); m_document->resumeActiveDOMObjects(); m_document->resumeScriptedAnimationControllerCallbacks(); // It is necessary to update any platform script objects after restoring the // cached page. frame->script()->updatePlatformScriptObjects(); #if USE(ACCELERATED_COMPOSITING) if (m_isComposited) frame->view()->restoreBackingStores(); #endif frame->loader()->client()->didRestoreFromPageCache(); // Reconstruct the FrameTree for (unsigned i = 0; i < m_childFrames.size(); ++i) frame->tree()->appendChild(m_childFrames[i]->view()->frame()); // Open the child CachedFrames in their respective FrameLoaders. for (unsigned i = 0; i < m_childFrames.size(); ++i) m_childFrames[i]->open(); if (m_isMainFrame) { frame->loader()->client()->didRestoreFrameHierarchyForCachedFrame(); if (DOMWindow* domWindow = m_document->domWindow()) { // FIXME: add SCROLL_LISTENER to the list of event types on Document, and use m_document->hasListenerType() <rdar://problem/9615482> if (domWindow->scrollEventListenerCount() > 0 && frame->page()) frame->page()->chrome()->client()->setNeedsScrollNotifications(frame, true); } } m_document->enqueuePageshowEvent(PageshowEventPersisted); HistoryItem* historyItem = frame->loader()->history()->currentItem(); m_document->enqueuePopstateEvent(historyItem && historyItem->stateObject() ? historyItem->stateObject() : SerializedScriptValue::nullValue()); m_document->documentDidBecomeActive(); }
void WebViewPrivate::onKeyUp(BalEventKey event) { Frame* frame = m_webView->page()->focusController()->focusedOrMainFrame(); if (!frame) return; PlatformKeyboardEvent keyboardEvent(&event); if (frame->eventHandler()->keyEvent(keyboardEvent)) return ; }
CachedFrameBase::CachedFrameBase(Frame& frame) : m_document(frame.document()) , m_documentLoader(frame.loader().documentLoader()) , m_view(frame.view()) , m_mousePressNode(frame.eventHandler().mousePressNode()) , m_url(frame.document()->url()) , m_isMainFrame(!frame.tree().parent()) , m_isComposited(frame.view()->hasCompositedContent()) { }
void WebViewPrivate::onMouseButtonDown(BalEventButton event) { Frame* frame = core(m_webView->mainFrame()); if (!frame) return; if (event.button == SDL_BUTTON_MIDDLE) return ;//webkit_web_view_forward_context_menu_event(webView, PlatformMouseEvent(event)); frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(&event)); }
void WebViewPrivate::onMouseButtonUp(BalEventButton event) { Frame* focusedFrame = m_webView->page()->focusController()->focusedFrame(); if (!focusedFrame) return; // if (focusedFrame && focusedFrame->editor()->canEdit()) { // ; // } focusedFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(&event)); }
CachedFrameBase::CachedFrameBase(Frame& frame) : m_document(frame.document()) , m_documentLoader(frame.loader().documentLoader()) , m_view(frame.view()) , m_mousePressNode(frame.eventHandler().mousePressNode()) , m_url(frame.document()->url()) , m_isMainFrame(!frame.tree().parent()) #if USE(ACCELERATED_COMPOSITING) , m_isComposited(frame.view()->hasCompositedContent()) #endif { }
static gboolean webkit_web_view_key_release_event(GtkWidget* widget, GdkEventKey* event) { //WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); Frame* frame = core(webView_s)->focusController()->focusedOrMainFrame(); PlatformKeyboardEvent keyboardEvent(event); if (frame->eventHandler()->keyEvent(keyboardEvent)) return TRUE; /* Chain up to our parent class for binding activation */ return GTK_WIDGET_CLASS(webkit_web_view_parent_class)->key_release_event(widget, event); }
void MediaControlEmbeddedPanelElement::endDrag() { if (!m_isBeingDragged) return; m_isBeingDragged = false; Frame* frame = document()->frame(); if (!frame) return; frame->eventHandler().setCapturingMouseEventsNode(0); }
void MediaControlPanelElement::endDrag() { if (!m_isBeingDragged) return; m_isBeingDragged = false; Frame* frame = document().frame(); if (!frame) return; frame->eventHandler().setCapturingMouseEventsElement(nullptr); }
void CachedFrameBase::restore() { ASSERT(m_document->view() == m_view); if (m_isMainFrame) m_view->setParentVisible(true); Frame* frame = m_view->frame(); m_cachedFrameScriptData->restore(frame); #if ENABLE(SVG) if (m_document->svgExtensions()) m_document->accessSVGExtensions()->unpauseAnimations(); #endif frame->animation()->resumeAnimationsForDocument(m_document.get()); frame->eventHandler()->setMousePressNode(m_mousePressNode.get()); m_document->resumeActiveDOMObjects(); m_document->resumeScriptedAnimationControllerCallbacks(); // It is necessary to update any platform script objects after restoring the // cached page. frame->script()->updatePlatformScriptObjects(); #if USE(ACCELERATED_COMPOSITING) if (m_isComposited) frame->view()->restoreBackingStores(); #endif frame->loader()->client()->didRestoreFromPageCache(); // Reconstruct the FrameTree for (unsigned i = 0; i < m_childFrames.size(); ++i) frame->tree()->appendChild(m_childFrames[i]->view()->frame()); // Open the child CachedFrames in their respective FrameLoaders. for (unsigned i = 0; i < m_childFrames.size(); ++i) m_childFrames[i]->open(); m_document->enqueuePageshowEvent(PageshowEventPersisted); HistoryItem* historyItem = frame->loader()->history()->currentItem(); m_document->enqueuePopstateEvent(historyItem && historyItem->stateObject() ? historyItem->stateObject() : SerializedScriptValue::nullValue()); #if ENABLE(TOUCH_EVENTS) if (m_document->touchEventHandlerCount()) m_document->page()->chrome()->client()->needTouchEvents(true); #endif m_document->documentDidResumeFromPageCache(); }
void DragController::dragExited(DragData* dragData) { ASSERT(dragData); Frame* mainFrame = m_page->mainFrame(); if (RefPtr<FrameView> v = mainFrame->view()) { ClipboardAccessPolicy policy = (!m_documentUnderMouse || m_documentUnderMouse->securityOrigin()->isLocal()) ? ClipboardReadable : ClipboardTypesReadable; RefPtr<Clipboard> clipboard = dragData->createClipboard(policy); clipboard->setSourceOperation(dragData->draggingSourceOperationMask()); mainFrame->eventHandler()->cancelDragAndDrop(createMouseEvent(dragData), clipboard.get()); clipboard->setAccessPolicy(ClipboardNumb); // invalidate clipboard here for security } mouseMovedIntoDocument(0); }
static gboolean webkit_web_view_button_press_event(GtkWidget* widget, GdkEventButton* event) { //WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); Frame* frame = core(webView_s->mainFrame()); // FIXME: need to keep track of subframe focus for key events gtk_widget_grab_focus(widget); if (event->button == 3) return false;//webkit_web_view_forward_context_menu_event(webView, PlatformMouseEvent(event)); return frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(event)); }
void WebViewPrivate::onMouseButtonDown(BalEventButton eventButton) { using namespace EA::WebKit; Frame* frame = core(m_webView->mainFrame()); if (!frame) return; if (eventButton.mId == kMouseMiddle) return; //webkit_web_view_forward_context_menu_event(webView, PlatformMouseEvent(event)); frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(&eventButton)); }
void WebViewPrivate::onMouseButtonUp(BalEventButton eventButton) { // 12/3/10 CSidhall - Have the release event use the same frame as the press event so the scroll can be notified. using namespace EA::WebKit; Frame* frame = core(m_webView->mainFrame()); if (!frame) return; if (eventButton.mId == kMouseMiddle) return; frame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(&eventButton)); }
static gboolean webkit_web_view_button_release_event(GtkWidget* widget, GdkEventButton* event) { //WebKitWebView* webView = WEBKIT_WEB_VIEW(widget); ////WebKitWebViewPrivate* priv = webView->priv; Frame* focusedFrame = core(webView_s)->focusController()->focusedFrame(); if (focusedFrame && focusedFrame->editor()->canEdit()) { GdkWindow* window = gtk_widget_get_parent_window(widget); gtk_im_context_set_client_window(imContext, window); #ifdef MAEMO_CHANGES hildon_gtk_im_context_filter_event(imContext, (GdkEvent*)event); hildon_gtk_im_context_show(imContext); #endif } return focusedFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(event)); }
void CachedFrame::restore() { ASSERT(m_document->view() == m_view); Frame* frame = m_view->frame(); m_cachedFrameScriptData->restore(frame); #if ENABLE(SVG) if (m_document->svgExtensions()) m_document->accessSVGExtensions()->unpauseAnimations(); #endif frame->animation()->resumeAnimations(m_document.get()); frame->eventHandler()->setMousePressNode(mousePressNode()); m_document->resumeActiveDOMObjects(); // It is necessary to update any platform script objects after restoring the // cached page. frame->script()->updatePlatformScriptObjects(); }
bool WebView::handleKeyDown(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown) { Frame* frame = m_page->focusController()->focusedOrMainFrame(); PlatformKeyboardEvent keyEvent(m_windowHandle, virtualKeyCode, keyData, PlatformEvent::RawKeyDown, systemKeyDown); bool handled = frame->eventHandler()->keyEvent(keyEvent); // These events cannot be canceled, and we have no default handling for them. // FIXME: match IE list more closely, see <http://msdn2.microsoft.com/en-us/library/ms536938.aspx>. if (systemKeyDown && virtualKeyCode != VK_RETURN) return false; if (handled) { MSG msg; if (!systemKeyDown) ::PeekMessage(&msg, m_windowHandle, WM_CHAR, WM_CHAR, PM_REMOVE); return true; } return handled; }
void MediaControlEmbeddedPanelElement::startDrag(const LayoutPoint& eventLocation) { if (!m_canBeDragged) return; if (m_isBeingDragged) return; RenderObject* renderer = this->renderer(); if (!renderer || !renderer->isBox()) return; Frame* frame = document()->frame(); if (!frame) return; m_lastDragEventLocation = eventLocation; frame->eventHandler().setCapturingMouseEventsNode(this); m_isBeingDragged = true; }
void CachedPage::restore(Page* page) { ASSERT(m_document->view() == m_view); Frame* mainFrame = page->mainFrame(); JSLock lock(false); ScriptController* proxy = mainFrame->script(); if (proxy->haveWindowShell()) { JSDOMWindowShell* windowShell = proxy->windowShell(); if (m_window) { windowShell->setWindow(m_window.get()); windowShell->window()->resumeTimeouts(m_pausedTimeouts); } else { windowShell->setWindow(mainFrame->domWindow()); proxy->attachDebugger(page->debugger()); windowShell->window()->setProfileGroup(page->group().identifier()); } } #if ENABLE(SVG) if (m_document && m_document->svgExtensions()) m_document->accessSVGExtensions()->unpauseAnimations(); #endif mainFrame->animation()->resumeAnimations(m_document.get()); mainFrame->eventHandler()->setMousePressNode(mousePressNode()); // Restore the focus appearance for the focused element. // FIXME: Right now we don't support pages w/ frames in the b/f cache. This may need to be tweaked when we add support for that. Document* focusedDocument = page->focusController()->focusedOrMainFrame()->document(); if (Node* node = focusedDocument->focusedNode()) { if (node->isElementNode()) static_cast<Element*>(node)->updateFocusAppearance(true); } }
void WebPage::findZoomableAreaForPoint(const IntPoint& point, const IntSize& area) { UNUSED_PARAM(area); Frame* mainframe = m_mainFrame->coreFrame(); HitTestResult result = mainframe->eventHandler().hitTestResultAtPoint(mainframe->view()->windowToContents(point), HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::IgnoreClipping | HitTestRequest::DisallowShadowContent); Node* node = result.innerNode(); if (!node) return; IntRect zoomableArea = node->pixelSnappedBoundingBox(); while (true) { bool found = !node->isTextNode() && !node->isShadowRoot(); // No candidate found, bail out. if (!found && !node->parentNode()) return; // Candidate found, and it is a better candidate than its parent. // NB: A parent is considered a better candidate iff the node is // contained by it and it is the only child. if (found && (!node->parentNode() || node->parentNode()->childNodeCount() != 1)) break; node = node->parentNode(); zoomableArea.unite(node->pixelSnappedBoundingBox()); } if (node->document().frame() && node->document().frame()->view()) { const ScrollView* view = node->document().frame()->view(); zoomableArea = view->contentsToWindow(zoomableArea); } send(Messages::WebPageProxy::DidFindZoomableArea(point, zoomableArea)); }