<div dir="ltr"><div>Hi James,</div><div><br></div><div>Thank you! I'll try out your patch. From a quick review, I think your mostly fixes the symptoms rather rather root cause.</div><div><br></div><div>Here is what I posted to the abiword-devel list.</div><div><br></div><div>I've also attached the complete patch to this email.</div><div><br></div><div>Cheers</div><div><br></div><div>Martin</div><div><br></div><div><br></div><div>------------------------------------------------------------------------------------------</div><div><br></div><div><div><div>Hi everyone,</div><div><br></div><div>I've finally fixed the problem of the flicker. It was caused by the final call to gr_Caret.cpp::_blink( ) where we do <br></div><div>m_pG->flush();</div><div><br></div><div>This
 sends a signal to gtk3 to redraw the screen. In the process of 
redrawing we call gr_Caret.cpp::setCoords() which in turn calls 
gr_Caret.ccp::_erase() which in turn calls gr_Caret.cpp::_blink.cpp and we get stuck in an infinite loop of redraws. Each redraw removes the 
caret from the screen.</div><div><br></div><div>My solution was to</div><div>(a) <br></div><div> -   m_pG->flush();<br>+    if(bExplicit && !m_bCursorIsOn)<br>+        m_pG->flush();<br> </div><div>ie
 only call flush() if we really want to remove the caret from the 
screen. If we simply remove the call to flush() there are circumstances 
where we generate caret dirt. (After a focus event then moving the caret
 with the arrow keys).</div><div>Then we also need in blink:<br></div><div>(b)</div><div>+    struct timespec spec;<br> <br>+    clock_gettime(CLOCK_REALTIME, &spec);<br>+<br>+    UT_sint32 s  = spec.tv_sec;<br>+    long ms = round(spec.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds<br>+    long this_time = 1000*s + ms;<br>+    long time_between = this_time - m_iLastDrawTime;<br>+    m_iLastDrawTime = this_time;<br>+    if(time_between < 100)<br>+    {<br>+        m_iRetry++;<br>+        if(!m_bCursorIsOn)<br>+        {<br>+            return;<br>+        }<br>+    }<br>+    else<br>+    {<br>+        m_iRetry = 0;<br>+    }<br> </div><div>So
 if we have two rapid fire calls one to turn on the caret and the other 
to remove, we short-circuit it and don't get our infinite loop.</div></div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 28 June 2018 at 16:23, James Cameron <span dir="ltr"><<a href="mailto:quozl@laptop.org" target="_blank">quozl@laptop.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks Martin.<br>
<br>
Your fix looks a little bit like mine; but I'm not quite sure what it<br>
is doing; could you comment on what your patch does?  Mine was on the<br>
AbiSource bug 13791, was taken by Debian and Ubuntu, and can be found<br>
with detailed explanation at<br>
<br>
<a href="https://sources.debian.org/patches/abiword/3.0.2-6/fix-flickering.patch/" rel="noreferrer" target="_blank">https://sources.debian.org/<wbr>patches/abiword/3.0.2-6/fix-<wbr>flickering.patch/</a><br>
<br>
But it didn't work well with Wayland, according to Hubert.  I'm not<br>
targeting Wayland, so it was out of my scope.  When Wayland or a<br>
compositor are used, the redraws would often have no visible effect.<br>
<br>
I'd like to understand your fix as compared to mine.<br>
<br>
You might also ask for feedback from Abiword users on 13791.<br>
<br>
<a href="https://bugzilla.abisource.com/show_bug.cgi?id=13791" rel="noreferrer" target="_blank">https://bugzilla.abisource.<wbr>com/show_bug.cgi?id=13791</a><br>
<br>
The quickest way to reproduce Write flickering at the moment is to<br>
download Sugar on a Stick, for Fedora 28, which has the bug.<br>
<div><div class="h5"><br>
On Thu, Jun 28, 2018 at 01:01:46PM +1000, Martin Sevior wrote:<br>
> Hi everyone,<br>
> I recently committed a fix to abiword head that I believe fixes a number of<br>
> abiword flickering and caret issues.<br>
> <br>
> I believe that this should also improve the performance of the application. It<br>
> was previously burning a lot of CPU in endless redraws.<br>
> <br>
> I haven't checked on Sugar Write which is built from abiwidget. I also haven't<br>
> checked that the multiple carets work either. I'd very much appreciate someone<br>
> from the sugar community trying it and providing feedback. Unfortunately it<br>
> appears that the abiword-devel mailing list has been put into hibernation but<br>
> if you reply to me via this mailing list I'll get your feedback and will work<br>
> on fixing problems you report.<br>
> <br>
> Sorry it has taken me so long to get round to this.<br>
> <br>
> Cheers<br>
> <br>
> Martin Sevior<br>
> <br>
<br>
</div></div>> ______________________________<wbr>_________________<br>
> Sugar-devel mailing list<br>
> <a href="mailto:Sugar-devel@lists.sugarlabs.org">Sugar-devel@lists.sugarlabs.<wbr>org</a><br>
> <a href="http://lists.sugarlabs.org/listinfo/sugar-devel" rel="noreferrer" target="_blank">http://lists.sugarlabs.org/<wbr>listinfo/sugar-devel</a><br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
James Cameron<br>
<a href="http://quozl.netrek.org/" rel="noreferrer" target="_blank">http://quozl.netrek.org/</a><br>
</font></span></blockquote></div><br></div>