Services menu doesn't show up after you defocus/refocus the Safari window.
authorenrica@apple.com <enrica@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Aug 2014 00:45:58 +0000 (00:45 +0000)
committerenrica@apple.com <enrica@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Aug 2014 00:45:58 +0000 (00:45 +0000)
https://bugs.webkit.org/show_bug.cgi?id=135678
<rdar://problem/17929247>

Reviewed by Tim Horton.

In setSelection we create a SelectionRectGatherer::Notifier object that will notify
SelectionOverlayController about changes to the selection rects.
Upon creation, the list of selections rects is cleared, since it is populated by
the code that collects the selection rects. That code is never called
when setSelection won't change the selection, which the case when the window is
activated. The fix consists in postponing the SelectionRectGatherer::Notifier object
creation until we know for sure that the selection is indeed going to change.

* rendering/RenderView.cpp:
(WebCore::RenderView::setSelection):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@172195 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderView.cpp

index 6942609..7b283b3 100644 (file)
@@ -1,3 +1,22 @@
+2014-08-06  Enrica Casucci  <enrica@apple.com>
+
+        Services menu doesn't show up after you defocus/refocus the Safari window.
+        https://bugs.webkit.org/show_bug.cgi?id=135678
+        <rdar://problem/17929247>
+
+        Reviewed by Tim Horton.
+
+        In setSelection we create a SelectionRectGatherer::Notifier object that will notify
+        SelectionOverlayController about changes to the selection rects.
+        Upon creation, the list of selections rects is cleared, since it is populated by
+        the code that collects the selection rects. That code is never called
+        when setSelection won't change the selection, which the case when the window is
+        activated. The fix consists in postponing the SelectionRectGatherer::Notifier object
+        creation until we know for sure that the selection is indeed going to change.
+        
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::setSelection):
+
 2014-08-06  Dean Jackson  <dino@apple.com>
 
         ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED is not used anywhere. Remove it.
index 3131578..529f4c3 100644 (file)
@@ -831,12 +831,6 @@ void RenderView::setMaximalOutlineSize(int o)
 
 void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* end, int endPos, SelectionRepaintMode blockRepaintMode)
 {
-#if ENABLE(SERVICE_CONTROLS)
-    // Clear the current rects and create a notifier for the new rects we are about to gather.
-    // The Notifier updates the Editor when it goes out of scope and is destroyed.
-    std::unique_ptr<SelectionRectGatherer::Notifier> rectNotifier = m_selectionRectGatherer.clearAndCreateNotifier();
-#endif // ENABLE(SERVICE_CONTROLS)
-
     // Make sure both our start and end objects are defined.
     // Check www.msnbc.com and try clicking around to find the case where this happened.
     if ((start && !end) || (end && !start))
@@ -850,6 +844,11 @@ void RenderView::setSelection(RenderObject* start, int startPos, RenderObject* e
         return;
     }
 
+#if ENABLE(SERVICE_CONTROLS)
+    // Clear the current rects and create a notifier for the new rects we are about to gather.
+    // The Notifier updates the Editor when it goes out of scope and is destroyed.
+    std::unique_ptr<SelectionRectGatherer::Notifier> rectNotifier = m_selectionRectGatherer.clearAndCreateNotifier();
+#endif // ENABLE(SERVICE_CONTROLS)
     // Set global positions for new selection.
     m_selectionUnsplitStart = start;
     m_selectionUnsplitStartPos = startPos;