<!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>[198717] trunk/Source/WebCore</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/198717">198717</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2016-03-26 11:37:03 -0700 (Sat, 26 Mar 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>[OS X] Layout sometimes flakily assumes overlay scrollbars when clicky-scroll-wheel-mouse is attached and system preference detects scrollbar mode
https://bugs.webkit.org/show_bug.cgi?id=155912
Reviewed by Simon Fraser.
When the system preference is set to detect the scrollbar type (overlay or
always-on, and a clicky scroll wheel mouse is connected, AppKit
asynchronously tells all the NSScrollerImpPairs about the kind of scrollbar
it should be using. However, when this notification is delivered, it may
be in between FrameViews, which means we may not have any
NSScrollerImpPairs created to listen to the notification.
<a href="http://trac.webkit.org/projects/webkit/changeset/198444">r198444</a> solved this by asking if we missed any update whenever we create
an NSScrollerImpPair. This works partially; however, there is a significant
amount of layout which occurs before we create the first ScrollAnimatorMac.
This layout will ask the ScrollbarThemeMac if overlay scrollbars are
enabled, and the results will be stale (because we haven't created any the
NSScrollerImpPairs yet).
Luckly, AppKit fires a notification when it discovers what kind of
scrollbars should be used. We can rely on this notification in the event
that we don't have any NSScrollerImpPairs created.
Covered (as best as possible) by existing RTL scrollbar tests. However,
the system preference that governs this is not currently testable.
* platform/mac/ScrollbarThemeMac.mm:
(+[WebScrollbarPrefsObserver registerAsObserver]):
* platform/mac/ScrollAnimatorMac.mm:
(WebCore::ScrollAnimatorMac::ScrollAnimatorMac): Remove the old code.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformmacScrollAnimatorMacmm">trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformmacScrollbarThemeMacmm">trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (198716 => 198717)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-03-26 12:53:06 UTC (rev 198716)
+++ trunk/Source/WebCore/ChangeLog        2016-03-26 18:37:03 UTC (rev 198717)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2016-03-26 Myles C. Maxfield <mmaxfield@apple.com>
+
+ [OS X] Layout sometimes flakily assumes overlay scrollbars when clicky-scroll-wheel-mouse is attached and system preference detects scrollbar mode
+ https://bugs.webkit.org/show_bug.cgi?id=155912
+
+ Reviewed by Simon Fraser.
+
+ When the system preference is set to detect the scrollbar type (overlay or
+ always-on, and a clicky scroll wheel mouse is connected, AppKit
+ asynchronously tells all the NSScrollerImpPairs about the kind of scrollbar
+ it should be using. However, when this notification is delivered, it may
+ be in between FrameViews, which means we may not have any
+ NSScrollerImpPairs created to listen to the notification.
+
+ r198444 solved this by asking if we missed any update whenever we create
+ an NSScrollerImpPair. This works partially; however, there is a significant
+ amount of layout which occurs before we create the first ScrollAnimatorMac.
+ This layout will ask the ScrollbarThemeMac if overlay scrollbars are
+ enabled, and the results will be stale (because we haven't created any the
+ NSScrollerImpPairs yet).
+
+ Luckly, AppKit fires a notification when it discovers what kind of
+ scrollbars should be used. We can rely on this notification in the event
+ that we don't have any NSScrollerImpPairs created.
+
+ Covered (as best as possible) by existing RTL scrollbar tests. However,
+ the system preference that governs this is not currently testable.
+
+ * platform/mac/ScrollbarThemeMac.mm:
+ (+[WebScrollbarPrefsObserver registerAsObserver]):
+ * platform/mac/ScrollAnimatorMac.mm:
+ (WebCore::ScrollAnimatorMac::ScrollAnimatorMac): Remove the old code.
+
</ins><span class="cx"> 2016-03-25 Jer Noble <jer.noble@apple.com>
</span><span class="cx">
</span><span class="cx"> [Mac] Audio tracks in alternate groups are not represented correctly as AudioTracks
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacScrollAnimatorMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm (198716 => 198717)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm        2016-03-26 12:53:06 UTC (rev 198716)
+++ trunk/Source/WebCore/platform/mac/ScrollAnimatorMac.mm        2016-03-26 18:37:03 UTC (rev 198717)
</span><span class="lines">@@ -630,9 +630,6 @@
</span><span class="cx"> m_scrollbarPainterController = adoptNS([[NSScrollerImpPair alloc] init]);
</span><span class="cx"> [m_scrollbarPainterController setDelegate:m_scrollbarPainterControllerDelegate.get()];
</span><span class="cx"> [m_scrollbarPainterController setScrollerStyle:recommendedScrollerStyle()];
</span><del>-
- if (auto* theme = macScrollbarTheme())
- theme->usesOverlayScrollbarsChanged();
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ScrollAnimatorMac::~ScrollAnimatorMac()
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacScrollbarThemeMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm (198716 => 198717)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm        2016-03-26 12:53:06 UTC (rev 198716)
+++ trunk/Source/WebCore/platform/mac/ScrollbarThemeMac.mm        2016-03-26 18:37:03 UTC (rev 198717)
</span><span class="lines">@@ -108,6 +108,7 @@
</span><span class="cx"> {
</span><span class="cx"> [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(appearancePrefsChanged:) name:@"AppleAquaScrollBarVariantChanged" object:nil suspensionBehavior:NSNotificationSuspensionBehaviorDeliverImmediately];
</span><span class="cx"> [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(behaviorPrefsChanged:) name:@"AppleNoRedisplayAppearancePreferenceChanged" object:nil suspensionBehavior:NSNotificationSuspensionBehaviorCoalesce];
</span><ins>+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(behaviorPrefsChanged:) name:NSPreferredScrollerStyleDidChangeNotification object:nil];
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> @end
</span></span></pre>
</div>
</div>
</body>
</html>