void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags) { // If a tooltip must be displayed it will be, afterwards, when // setToolTip is called; this is just a work-around to make sure // it updates its location correctly; see // https://bugs.webkit.org/show_bug.cgi?id=15793. g_object_set(m_webView, "has-tooltip", FALSE, NULL); GdkDisplay* gdkDisplay; GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView)); if (GTK_WIDGET_TOPLEVEL(window)) gdkDisplay = gtk_widget_get_display(window); else gdkDisplay = gdk_display_get_default(); gtk_tooltip_trigger_tooltip_query(gdkDisplay); // check if the element is a link... bool isLink = hit.isLiveLink(); if (isLink) { KURL url = hit.absoluteLinkURL(); if (!url.isEmpty() && url != m_hoveredLinkURL) { TextDirection dir; CString titleString = hit.title(dir).utf8(); CString urlString = url.prettyURL().utf8(); g_signal_emit_by_name(m_webView, "hovering-over-link", titleString.data(), urlString.data()); m_hoveredLinkURL = url; } } else if (!isLink && !m_hoveredLinkURL.isEmpty()) { g_signal_emit_by_name(m_webView, "hovering-over-link", 0, 0); m_hoveredLinkURL = KURL(); } }
void ChromeClientImpl::mouseDidMoveOverElement( const HitTestResult& result, unsigned modifierFlags) { if (!m_webView->client()) return; WebURL url; // Find out if the mouse is over a link, and if so, let our UI know... if (result.isLiveLink() && !result.absoluteLinkURL().string().isEmpty()) { url = result.absoluteLinkURL(); } else if (result.innerNonSharedNode() && (isHTMLObjectElement(*result.innerNonSharedNode()) || isHTMLEmbedElement(*result.innerNonSharedNode()))) { RenderObject* object = result.innerNonSharedNode()->renderer(); if (object && object->isWidget()) { Widget* widget = toRenderWidget(object)->widget(); if (widget && widget->isPluginContainer()) { WebPluginContainerImpl* plugin = toWebPluginContainerImpl(widget); url = plugin->plugin()->linkAtPosition(result.roundedPointInInnerNodeFrame()); } } } m_webView->client()->setMouseOverURL(url); }
void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags) { // check if the element is a link... bool isLink = hit.isLiveLink(); if (isLink) { KURL url = hit.absoluteLinkURL(); if (!url.isEmpty() && url != m_hoveredLinkURL) { TextDirection dir; CString titleString = hit.title(dir).utf8(); CString urlString = url.string().utf8(); g_signal_emit_by_name(m_webView, "hovering-over-link", titleString.data(), urlString.data()); m_hoveredLinkURL = url; } } else if (!isLink && !m_hoveredLinkURL.isEmpty()) { g_signal_emit_by_name(m_webView, "hovering-over-link", 0, 0); m_hoveredLinkURL = KURL(); } if (Node* node = hit.innerNonSharedNode()) { Frame* frame = node->document()->frame(); FrameView* view = frame ? frame->view() : 0; m_webView->priv->tooltipArea = view ? view->contentsToWindow(node->getRect()) : IntRect(); } else m_webView->priv->tooltipArea = IntRect(); }
bool DragController::mayStartDragAtEventLocation(const Frame* frame, const IntPoint& framePos) { ASSERT(frame); ASSERT(frame->settings()); if (!frame->view() || !frame->contentRenderer()) return false; HitTestResult mouseDownTarget = HitTestResult(framePos); mouseDownTarget = frame->eventHandler()->hitTestResultAtPoint(framePos, true); if (mouseDownTarget.image() && !mouseDownTarget.absoluteImageURL().isEmpty() && frame->settings()->loadsImagesAutomatically() && m_dragSourceAction & DragSourceActionImage) return true; if (!mouseDownTarget.absoluteLinkURL().isEmpty() && m_dragSourceAction & DragSourceActionLink && mouseDownTarget.isLiveLink()) return true; if (mouseDownTarget.isSelected() && m_dragSourceAction & DragSourceActionSelection) return true; return false; }
void ChromeClientImpl::mouseDidMoveOverElement( const HitTestResult& result, unsigned modifierFlags) { if (!m_webView->client()) return; // Find out if the mouse is over a link, and if so, let our UI know... if (result.isLiveLink() && !result.absoluteLinkURL().string().isEmpty()) m_webView->client()->setMouseOverURL(result.absoluteLinkURL()); else m_webView->client()->setMouseOverURL(WebURL()); }
void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags) { // check if the element is a link... bool isLink = hit.isLiveLink(); if (isLink) { KURL url = hit.absoluteLinkURL(); if (!url.isEmpty() && url != m_hoveredLinkURL) { CString titleString = hit.title().utf8(); CString urlString = url.prettyURL().utf8(); g_signal_emit_by_name(m_webView, "hovering-over-link", titleString.data(), urlString.data()); m_hoveredLinkURL = url; } } else if (!isLink && !m_hoveredLinkURL.isEmpty()) { g_signal_emit_by_name(m_webView, "hovering-over-link", 0, 0); m_hoveredLinkURL = KURL(); } }
void ChromeClientEfl::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags) { // FIXME, compare with old link, look at Qt impl. bool isLink = hit.isLiveLink(); if (isLink) { KURL url = hit.absoluteLinkURL(); if (!url.isEmpty() && url != m_hoveredLinkURL) { const char* link[2]; TextDirection dir; CString urlStr = url.string().utf8(); CString titleStr = hit.title(dir).utf8(); link[0] = urlStr.data(); link[1] = titleStr.data(); ewk_view_mouse_link_hover_in(m_view, link); m_hoveredLinkURL = url; } } else if (!isLink && !m_hoveredLinkURL.isEmpty()) { ewk_view_mouse_link_hover_out(m_view); m_hoveredLinkURL = KURL(); } }
void ChromeClientImpl::showMouseOverURL(const HitTestResult& result) { if (!m_webView->client()) return; WebURL url; // Find out if the mouse is over a link, and if so, let our UI know... if (result.isLiveLink() && !result.absoluteLinkURL().getString().isEmpty()) { url = result.absoluteLinkURL(); } else if (result.innerNode() && (isHTMLObjectElement(*result.innerNode()) || isHTMLEmbedElement(*result.innerNode()))) { LayoutObject* object = result.innerNode()->layoutObject(); if (object && object->isLayoutPart()) { Widget* widget = toLayoutPart(object)->widget(); if (widget && widget->isPluginContainer()) { WebPluginContainerImpl* plugin = toWebPluginContainerImpl(widget); url = plugin->plugin()->linkAtPosition( result.roundedPointInInnerNodeFrame()); } } } m_webView->client()->setMouseOverURL(url); }
DragOperation DragController::tryDHTMLDrag(DragData* dragData) { ASSERT(dragData); ASSERT(m_document); DragOperation op = DragOperationNone; RefPtr<Frame> frame = m_page->mainFrame(); RefPtr<FrameView> viewProtector = frame->view(); if (!viewProtector) return DragOperationNone; ClipboardAccessPolicy policy = frame->loader()->baseURL().isLocalFile() ? ClipboardReadable : ClipboardTypesReadable; RefPtr<Clipboard> clipboard = dragData->createClipboard(policy); DragOperation srcOp = dragData->draggingSourceOperationMask(); clipboard->setSourceOperation(srcOp); #ifdef __OWB__ if (frame->eventHandler()->updateDragAndDrop(createMouseEvent(dragData), clipboard.get())) { #else PlatformMouseEvent event = createMouseEvent(dragData); if (frame->eventHandler()->updateDragAndDrop(event, clipboard.get())) { #endif // *op unchanged if no source op was set if (!clipboard->destinationOperation(op)) { // The element accepted but they didn't pick an operation, so we pick one for them // (as does WinIE). if (srcOp & DragOperationCopy) op = DragOperationCopy; else if (srcOp & DragOperationMove || srcOp & DragOperationGeneric) op = DragOperationMove; else if (srcOp & DragOperationLink) op = DragOperationLink; else op = DragOperationGeneric; } else if (!(op & srcOp)) { op = DragOperationNone; } clipboard->setAccessPolicy(ClipboardNumb); // invalidate clipboard here for security return op; } return op; } bool DragController::mayStartDragAtEventLocation(const Frame* frame, const IntPoint& framePos) { ASSERT(frame); if (!frame->view() || !frame->renderer()) return false; HitTestResult mouseDownTarget = HitTestResult(framePos); mouseDownTarget = frame->eventHandler()->hitTestResultAtPoint(framePos, true); if (mouseDownTarget.image() && !mouseDownTarget.absoluteImageURL().isEmpty() && frame->settings()->loadsImagesAutomatically() && m_dragSourceAction & DragSourceActionImage) return true; if (!mouseDownTarget.absoluteLinkURL().isEmpty() && m_dragSourceAction & DragSourceActionLink && mouseDownTarget.isLiveLink()) return true; if (mouseDownTarget.isSelected() && m_dragSourceAction & DragSourceActionSelection) return true; return false; }