| Index: Source/web/WebViewImpl.cpp
|
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
|
| index bfa58740ba092e1c5f066fa3e5c83eb3814519c0..4245cb43b0380017598a0c5d87e5dcdf7dc0d1c3 100644
|
| --- a/Source/web/WebViewImpl.cpp
|
| +++ b/Source/web/WebViewImpl.cpp
|
| @@ -2144,6 +2144,33 @@ bool WebViewImpl::selectionBounds(WebRect& anchor, WebRect& focus) const
|
| return true;
|
| }
|
|
|
| +bool WebViewImpl::selectionRootBounds(WebRect& bounds) const
|
| +{
|
| + const LocalFrame* frame = focusedWebCoreFrame();
|
| + if (!frame)
|
| + return false;
|
| +
|
| + Element* root = frame->selection().rootEditableElementOrDocumentElement();
|
| + if (!root)
|
| + return false;
|
| +
|
| + // If the selection is inside a form control, the root will be a <div> that
|
| + // behaves as the editor but we want to return the actual element's bounds.
|
| + if (root->shadowHost()
|
| + && (root->shadowHost()->hasTagName(HTMLNames::textareaTag)
|
| + || (root->shadowHost()->hasTagName(HTMLNames::inputTag)
|
| + && toHTMLInputElement(root->shadowHost())->isText()))) {
|
| + root = root->shadowHost();
|
| + }
|
| +
|
| + IntRect boundingBox = root->pixelSnappedBoundingBox();
|
| + boundingBox = root->document().frame()->view()->contentsToWindow(boundingBox);
|
| + boundingBox.scale(pageScaleFactor());
|
| + bounds = boundingBox;
|
| +
|
| + return true;
|
| +}
|
| +
|
| InputMethodContext* WebViewImpl::inputMethodContext()
|
| {
|
| if (!m_imeAcceptEvents)
|
|
|