From 6d528c56e090cc6728b0016c0a6091d2c66e751e Mon Sep 17 00:00:00 2001 From: "timothy_horton@apple.com" Date: Fri, 8 Aug 2014 16:19:37 +0000 Subject: [PATCH 1/1] Services overlay dropdown is often in the wrong place with zoomed pages or horizontal scrolling https://bugs.webkit.org/show_bug.cgi?id=135755 Reviewed by Brady Eidson. * WebProcess/WebPage/mac/ServicesOverlayController.mm: (WebKit::ServicesOverlayController::establishHoveredTelephoneHighlight): (WebKit::ServicesOverlayController::maybeCreateSelectionHighlight): DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection adjusts the location of the button based on the visible rect, trying to keep the button visible. We're handing it the wrong visible rect, though, not taking scrolling into account. This leads to pages that scroll horizontally showing the button on the left even if there's space for it on the right, or sometimes not showing it at all. Instead, provide the actual main FrameView visible rect; the same coordinate space that the highlight rects are provided in. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@172344 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit2/ChangeLog | 22 +++++++++++++++++++ .../WebPage/mac/ServicesOverlayController.mm | 6 ++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index 92f00cb5c38b..465bbd573ba8 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,25 @@ +2014-08-08 Timothy Horton + + Services overlay dropdown is often in the wrong place with zoomed pages or horizontal scrolling + https://bugs.webkit.org/show_bug.cgi?id=135755 + + + Reviewed by Brady Eidson. + + * WebProcess/WebPage/mac/ServicesOverlayController.mm: + (WebKit::ServicesOverlayController::establishHoveredTelephoneHighlight): + (WebKit::ServicesOverlayController::maybeCreateSelectionHighlight): + DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection adjusts the + location of the button based on the visible rect, trying to keep the button visible. + + We're handing it the wrong visible rect, though, not taking scrolling into account. + + This leads to pages that scroll horizontally showing the button on the left + even if there's space for it on the right, or sometimes not showing it at all. + + Instead, provide the actual main FrameView visible rect; the same coordinate + space that the highlight rects are provided in. + 2014-08-08 Timothy Horton Additional items added to selection services menus are misaligned diff --git a/Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm b/Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm index 79b2372e44d0..1abcc383f733 100644 --- a/Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm +++ b/Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm @@ -431,7 +431,7 @@ void ServicesOverlayController::establishHoveredTelephoneHighlight(bool& mouseIs rect.setLocation(mainFrameView.windowToContents(viewForRange->contentsToWindow(rect.location()))); CGRect cgRect = rect; - m_telephoneNumberHighlights[i] = adoptCF(DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection(nullptr, &cgRect, 1, viewForRange->boundsRect(), DDHighlightOutlineWithArrow, YES, NSWritingDirectionNatural, NO, YES)); + m_telephoneNumberHighlights[i] = adoptCF(DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection(nullptr, &cgRect, 1, mainFrameView.visibleContentRect(), DDHighlightOutlineWithArrow, YES, NSWritingDirectionNatural, NO, YES)); } if (!mouseIsOverHighlight(m_telephoneNumberHighlights[i].get(), mouseIsOverButton)) @@ -460,8 +460,8 @@ void ServicesOverlayController::maybeCreateSelectionHighlight() cgRects.append((CGRect)pixelSnappedIntRect(rect)); if (!cgRects.isEmpty()) { - CGRect bounds = m_webPage->corePage()->mainFrame().view()->boundsRect(); - m_selectionHighlight = adoptCF(DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection(nullptr, cgRects.begin(), cgRects.size(), bounds, DDHighlightNoOutlineWithArrow, YES, NSWritingDirectionNatural, NO, YES)); + CGRect visibleRect = m_webPage->corePage()->mainFrame().view()->visibleContentRect(); + m_selectionHighlight = adoptCF(DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection(nullptr, cgRects.begin(), cgRects.size(), visibleRect, DDHighlightNoOutlineWithArrow, YES, NSWritingDirectionNatural, NO, YES)); m_servicesOverlay->setNeedsDisplay(); } -- 2.36.0