<!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>[173071] trunk/Source</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/173071">173071</a></dd>
<dt>Author</dt> <dd>enrica@apple.com</dd>
<dt>Date</dt> <dd>2014-08-28 12:21:24 -0700 (Thu, 28 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>textStylingAtPosition returns incorrect values after executing toggleBold, toggleItalic and toggleUnderline.
https://bugs.webkit.org/show_bug.cgi?id=136323
rdar://problem/18141964

Reviewed by Antti Koivisto.

For underline style we need to check typingStyle first and use that information to populate
the dictionary. If there is no typing style we can use the render style.
Source/WebCore:


* WebCore.exp.in:
* editing/ios/EditorIOS.mm:
(WebCore::Editor::fontAttributesForSelectionStart):

Source/WebKit2:

We also need to update the editor state for the toggle commands to reflect the state in the UIProcess
even for commands that don't change the selection.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::editorState):
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::executeEditCommandWithCallback):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCoreeditingiosEditorIOSmm">trunk/Source/WebCore/editing/ios/EditorIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm">trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (173070 => 173071)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-08-28 19:19:33 UTC (rev 173070)
+++ trunk/Source/WebCore/ChangeLog        2014-08-28 19:21:24 UTC (rev 173071)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2014-08-27  Enrica Casucci  &lt;enrica@apple.com&gt;
+
+        textStylingAtPosition returns incorrect values after executing toggleBold, toggleItalic and toggleUnderline.
+        https://bugs.webkit.org/show_bug.cgi?id=136323
+        rdar://problem/18141964
+
+        Reviewed by Antti Koivisto.
+
+        For underline style we need to check typingStyle first and use that information to populate
+        the dictionary. If there is no typing style we can use the render style.
+
+        * WebCore.exp.in:
+        * editing/ios/EditorIOS.mm:
+        (WebCore::Editor::fontAttributesForSelectionStart):
+
</ins><span class="cx"> 2014-08-28  Iago Toral  &lt;itoral@igalia.com&gt; and Zan Dobersek  &lt;zdobersek@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Add WaylandEventSource
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (173070 => 173071)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-08-28 19:19:33 UTC (rev 173070)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-08-28 19:21:24 UTC (rev 173071)
</span><span class="lines">@@ -1752,6 +1752,7 @@
</span><span class="cx"> __ZNK7WebCore15ResourceRequest12cfURLRequestENS_20HTTPBodyUpdatePolicyE
</span><span class="cx"> __ZNK7WebCore15ResourceRequest12nsURLRequestENS_20HTTPBodyUpdatePolicyE
</span><span class="cx"> __ZNK7WebCore15StyleProperties11mutableCopyEv
</span><ins>+__ZNK7WebCore15StyleProperties16getPropertyValueENS_13CSSPropertyIDE
</ins><span class="cx"> __ZNK7WebCore15VisiblePosition14characterAfterEv
</span><span class="cx"> __ZNK7WebCore15VisiblePosition14localCaretRectERPNS_12RenderObjectE
</span><span class="cx"> __ZNK7WebCore15VisiblePosition19absoluteCaretBoundsEv
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingiosEditorIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/ios/EditorIOS.mm (173070 => 173071)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/ios/EditorIOS.mm        2014-08-28 19:19:33 UTC (rev 173070)
+++ trunk/Source/WebCore/editing/ios/EditorIOS.mm        2014-08-28 19:21:24 UTC (rev 173071)
</span><span class="lines">@@ -263,10 +263,16 @@
</span><span class="cx">     CTFontRef font = style-&gt;font().primaryFont()-&gt;getCTFont();
</span><span class="cx">     if (font)
</span><span class="cx">         [result setObject:(id)font forKey:NSFontAttributeName];
</span><del>-    
-    if (style-&gt;textDecorationsInEffect() &amp; TextDecorationUnderline)
-        [result setObject:[NSNumber numberWithInt:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName];
-    
</del><ins>+
+    RefPtr&lt;EditingStyle&gt; typingStyle = m_frame.selection().typingStyle();
+    if (typingStyle &amp;&amp; typingStyle-&gt;style()) {
+        String value = typingStyle-&gt;style()-&gt;getPropertyValue(CSSPropertyWebkitTextDecorationsInEffect);
+        if (value.contains(&quot;underline&quot;))
+            [result setObject:[NSNumber numberWithInt:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName];
+    } else {
+        if (style-&gt;textDecorationsInEffect() &amp; TextDecorationUnderline)
+            [result setObject:[NSNumber numberWithInt:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName];
+    }
</ins><span class="cx">     if (nodeToRemove)
</span><span class="cx">         nodeToRemove-&gt;remove(ASSERT_NO_EXCEPTION);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (173070 => 173071)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-08-28 19:19:33 UTC (rev 173070)
+++ trunk/Source/WebKit2/ChangeLog        2014-08-28 19:21:24 UTC (rev 173071)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2014-08-27  Enrica Casucci  &lt;enrica@apple.com&gt;
+
+        textStylingAtPosition returns incorrect values after executing toggleBold, toggleItalic and toggleUnderline.
+        https://bugs.webkit.org/show_bug.cgi?id=136323
+        rdar://problem/18141964
+
+        Reviewed by Antti Koivisto.
+
+        For underline style we need to check typingStyle first and use that information to populate
+        the dictionary. If there is no typing style we can use the render style.
+        We also need to update the editor state for the toggle commands to reflect the state in the UIProcess
+        even for commands that don't change the selection.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::editorState):
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::executeEditCommandWithCallback):
+
</ins><span class="cx"> 2014-08-28  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Add webkit_uri_response_get_http_headers to WebKit2 GTK+ API
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (173070 => 173071)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-08-28 19:19:33 UTC (rev 173070)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-08-28 19:21:24 UTC (rev 173071)
</span><span class="lines">@@ -145,6 +145,7 @@
</span><span class="cx"> #include &lt;WebCore/Settings.h&gt;
</span><span class="cx"> #include &lt;WebCore/ShadowRoot.h&gt;
</span><span class="cx"> #include &lt;WebCore/SharedBuffer.h&gt;
</span><ins>+#include &lt;WebCore/StyleProperties.h&gt;
</ins><span class="cx"> #include &lt;WebCore/SubframeLoader.h&gt;
</span><span class="cx"> #include &lt;WebCore/SubstituteData.h&gt;
</span><span class="cx"> #include &lt;WebCore/TextIterator.h&gt;
</span><span class="lines">@@ -762,10 +763,17 @@
</span><span class="cx">                 result.typingAttributes |= AttributeBold;
</span><span class="cx">             if (traits &amp; kCTFontTraitItalic)
</span><span class="cx">                 result.typingAttributes |= AttributeItalics;
</span><del>-            
-            if (style-&gt;textDecorationsInEffect() &amp; TextDecorationUnderline)
-                result.typingAttributes |= AttributeUnderline;
-            
</del><ins>+
+            RefPtr&lt;EditingStyle&gt; typingStyle = frame.selection().typingStyle();
+            if (typingStyle &amp;&amp; typingStyle-&gt;style()) {
+                String value = typingStyle-&gt;style()-&gt;getPropertyValue(CSSPropertyWebkitTextDecorationsInEffect);
+                if (value.contains(&quot;underline&quot;))
+                    result.typingAttributes |= AttributeUnderline;
+            } else {
+                if (style-&gt;textDecorationsInEffect() &amp; TextDecorationUnderline)
+                    result.typingAttributes |= AttributeUnderline;
+            }
+
</ins><span class="cx">             if (nodeToRemove)
</span><span class="cx">                 nodeToRemove-&gt;remove(ASSERT_NO_EXCEPTION);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (173070 => 173071)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2014-08-28 19:19:33 UTC (rev 173070)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2014-08-28 19:21:24 UTC (rev 173071)
</span><span class="lines">@@ -1704,6 +1704,8 @@
</span><span class="cx"> void WebPage::executeEditCommandWithCallback(const String&amp; commandName, uint64_t callbackID)
</span><span class="cx"> {
</span><span class="cx">     executeEditCommand(commandName);
</span><ins>+    if (commandName == &quot;toggleBold&quot; || commandName == &quot;toggleItalic&quot; || commandName == &quot;toggleUnderline&quot;)
+        send(Messages::WebPageProxy::EditorStateChanged(editorState()));
</ins><span class="cx">     send(Messages::WebPageProxy::VoidCallback(callbackID));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>