<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[181176] trunk/Source/WebKit2</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/181176">181176</a></dd>
<dt>Author</dt> <dd>bdakin@apple.com</dd>
<dt>Date</dt> <dd>2015-03-06 12:13:46 -0800 (Fri, 06 Mar 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/180782">r180782</a>): Data Detector popovers are not dismissed on scroll or zoom
https://bugs.webkit.org/show_bug.cgi?id=142371
-and corresponding-
rdar://problem/20059224

Reviewed by Tim Horton.

This patch has the WKImmediateActionController keep track of whether or not it has 
an active immediate action. Then we only call into Lookup and DD if the window is 
key OR if the WKView’s immediateActionController has an active action.
* UIProcess/API/mac/WKView.mm:
(-[WKView _dismissContentRelativeChildWindows]):
* UIProcess/mac/WKImmediateActionController.h:
* UIProcess/mac/WKImmediateActionController.mm:
(-[WKImmediateActionController initWithPage:view:recognizer:]):
(-[WKImmediateActionController willDestroyView:]):
(-[WKImmediateActionController _clearImmediateActionState]):
(-[WKImmediateActionController hasActiveImmediateAction]):
(-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPImacWKViewmm">trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWKImmediateActionControllerh">trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWKImmediateActionControllermm">trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (181175 => 181176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-03-06 19:56:17 UTC (rev 181175)
+++ trunk/Source/WebKit2/ChangeLog        2015-03-06 20:13:46 UTC (rev 181176)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2015-03-06  Beth Dakin  &lt;bdakin@apple.com&gt;
+
+        REGRESSION (r180782): Data Detector popovers are not dismissed on scroll or zoom
+        https://bugs.webkit.org/show_bug.cgi?id=142371
+        -and corresponding-
+        rdar://problem/20059224
+
+        Reviewed by Tim Horton.
+
+        This patch has the WKImmediateActionController keep track of whether or not it has 
+        an active immediate action. Then we only call into Lookup and DD if the window is 
+        key OR if the WKView’s immediateActionController has an active action.
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView _dismissContentRelativeChildWindows]):
+        * UIProcess/mac/WKImmediateActionController.h:
+        * UIProcess/mac/WKImmediateActionController.mm:
+        (-[WKImmediateActionController initWithPage:view:recognizer:]):
+        (-[WKImmediateActionController willDestroyView:]):
+        (-[WKImmediateActionController _clearImmediateActionState]):
+        (-[WKImmediateActionController hasActiveImmediateAction]):
+        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
+
</ins><span class="cx"> 2015-03-06  Jeremy Jones  &lt;jeremyj@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Scroll to make the video element visible when exiting fullscreen.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPImacWKViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (181175 => 181176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm        2015-03-06 19:56:17 UTC (rev 181175)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm        2015-03-06 20:13:46 UTC (rev 181176)
</span><span class="lines">@@ -4413,7 +4413,11 @@
</span><span class="cx"> - (void)_dismissContentRelativeChildWindows
</span><span class="cx"> {
</span><span class="cx">     // FIXME: We don't know which panel we are dismissing, it may not even be in the current page (see &lt;rdar://problem/13875766&gt;).
</span><del>-    if ([[self window] isKeyWindow]) {
</del><ins>+    if ([[self window] isKeyWindow]
+#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101000
+    || [_data-&gt;_immediateActionController hasActiveImmediateAction]
+#endif
+    ) {
</ins><span class="cx">         if (Class lookupDefinitionModuleClass = getLULookupDefinitionModuleClass())
</span><span class="cx">             [lookupDefinitionModuleClass hideDefinition];
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWKImmediateActionControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h (181175 => 181176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h        2015-03-06 19:56:17 UTC (rev 181175)
+++ trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.h        2015-03-06 20:13:46 UTC (rev 181176)
</span><span class="lines">@@ -62,6 +62,8 @@
</span><span class="cx">     BOOL _hasActivatedActionContext;
</span><span class="cx">     RetainPtr&lt;DDActionContext&gt; _currentActionContext;
</span><span class="cx">     RetainPtr&lt;QLPreviewMenuItem&gt; _currentQLPreviewMenuItem;
</span><ins>+
+    BOOL _hasActiveImmediateAction;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (instancetype)initWithPage:(WebKit::WebPageProxy&amp;)page view:(WKView *)wkView recognizer:(NSImmediateActionGestureRecognizer *)immediateActionRecognizer;
</span><span class="lines">@@ -69,6 +71,7 @@
</span><span class="cx"> - (void)didPerformActionMenuHitTest:(const WebKit::ActionMenuHitTestResult&amp;)hitTestResult userData:(API::Object*)userData;
</span><span class="cx"> - (void)wkView:(WKView *)wkView willHandleMouseDown:(NSEvent *)event;
</span><span class="cx"> - (void)dismissContentRelativeChildWindows;
</span><ins>+- (BOOL)hasActiveImmediateAction;
</ins><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWKImmediateActionControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm (181175 => 181176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm        2015-03-06 19:56:17 UTC (rev 181175)
+++ trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm        2015-03-06 20:13:46 UTC (rev 181176)
</span><span class="lines">@@ -66,6 +66,7 @@
</span><span class="cx">     _wkView = wkView;
</span><span class="cx">     _type = kWKImmediateActionNone;
</span><span class="cx">     _immediateActionRecognizer = immediateActionRecognizer;
</span><ins>+    _hasActiveImmediateAction = NO;
</ins><span class="cx"> 
</span><span class="cx">     return self;
</span><span class="cx"> }
</span><span class="lines">@@ -84,6 +85,7 @@
</span><span class="cx"> 
</span><span class="cx">     _immediateActionRecognizer = nil;
</span><span class="cx">     _currentActionContext = nil;
</span><ins>+    _hasActiveImmediateAction = NO;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)wkView:(WKView *)wkView willHandleMouseDown:(NSEvent *)event
</span><span class="lines">@@ -122,6 +124,7 @@
</span><span class="cx">     _currentActionContext = nil;
</span><span class="cx">     _userData = nil;
</span><span class="cx">     _currentQLPreviewMenuItem = nil;
</span><ins>+    _hasActiveImmediateAction = NO;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)didPerformActionMenuHitTest:(const ActionMenuHitTestResult&amp;)hitTestResult userData:(API::Object*)userData
</span><span class="lines">@@ -146,6 +149,11 @@
</span><span class="cx">     [_currentQLPreviewMenuItem close];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (BOOL)hasActiveImmediateAction
+{
+    return _hasActiveImmediateAction;
+}
+
</ins><span class="cx"> #pragma mark NSImmediateActionGestureRecognizerDelegate
</span><span class="cx"> 
</span><span class="cx"> - (void)immediateActionRecognizerWillPrepare:(NSImmediateActionGestureRecognizer *)immediateActionRecognizer
</span><span class="lines">@@ -173,6 +181,8 @@
</span><span class="cx">     if (_state == ImmediateActionState::None)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    _hasActiveImmediateAction = YES;
+
</ins><span class="cx">     // FIXME: We need to be able to cancel this if the gesture recognizer is cancelled.
</span><span class="cx">     // FIXME: Connection can be null if the process is closed; we should clean up better in that case.
</span><span class="cx">     if (_state == ImmediateActionState::Pending) {
</span></span></pre>
</div>
</div>

</body>
</html>