Received: by mail.netbsd.org (Postfix, from userid 605) id 4392184D88; Fri, 28 Dec 2018 22:24:56 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by mail.netbsd.org (Postfix) with ESMTP id C32B584D35 for ; Fri, 28 Dec 2018 22:24:55 +0000 (UTC) X-Virus-Scanned: amavisd-new at netbsd.org Received: from mail.netbsd.org ([127.0.0.1]) by localhost (mail.netbsd.org [127.0.0.1]) (amavisd-new, port 10025) with ESMTP id mklL6gn5WJvX for ; Fri, 28 Dec 2018 22:24:53 +0000 (UTC) Received: from cvs.NetBSD.org (ivanova.NetBSD.org [IPv6:2001:470:a085:999:28c:faff:fe03:5984]) by mail.netbsd.org (Postfix) with ESMTP id 95D7D84CD8 for ; Fri, 28 Dec 2018 22:24:53 +0000 (UTC) Received: by cvs.NetBSD.org (Postfix, from userid 500) id 8BE27FB16; Fri, 28 Dec 2018 22:24:53 +0000 (UTC) Content-Transfer-Encoding: 7bit Content-Type: multipart/mixed; boundary="_----------=_15460358937830" MIME-Version: 1.0 Date: Fri, 28 Dec 2018 22:24:53 +0000 From: "David H. Gutteridge" Subject: CVS commit: pkgsrc/editors/abiword To: pkgsrc-changes@NetBSD.org Reply-To: gutteridge@netbsd.org X-Mailer: log_accum Message-Id: <20181228222453.8BE27FB16@cvs.NetBSD.org> Sender: pkgsrc-changes-owner@NetBSD.org List-Id: pkgsrc-changes.NetBSD.org Precedence: bulk List-Unsubscribe: This is a multi-part message in MIME format. --_----------=_15460358937830 Content-Disposition: inline Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" Module Name: pkgsrc Committed By: gutteridge Date: Fri Dec 28 22:24:53 UTC 2018 Modified Files: pkgsrc/editors/abiword: Makefile distinfo Added Files: pkgsrc/editors/abiword/patches: patch-src_af_gr_gtk_gr__UnixCairoGraphics.cpp patch-src_af_gr_gtk_gr__UnixImage.cpp patch-src_af_gr_xp_gr__Caret.cpp patch-src_af_gr_xp_gr__Caret.h patch-src_af_gr_xp_gr__Graphics.cpp patch-src_af_gr_xp_gr__Graphics.h patch-src_af_util_unix_ut__unixTimer.cpp patch-src_af_util_xp_ut__png.cpp patch-src_af_xap_gtk_xap__UnixFrameImpl.cpp patch-src_af_xap_gtk_xap__UnixFrameImpl.h patch-src_af_xap_xp_xap__Frame.cpp patch-src_text_fmt_xp_fl__SectionLayout.cpp patch-src_text_fmt_xp_fv__View.cpp patch-src_text_fmt_xp_fv__ViewDoubleBuffering.cpp patch-src_text_fmt_xp_fv__View__protected.cpp patch-src_wp_ap_gtk_ap__UnixFrameImpl.cpp patch-src_wp_impexp_xp_ie__exp__DocRangeListener.cpp patch-src_wp_impexp_xp_ie__imp__RTF.cpp Log Message: abiword: add upstream patches to fix various bugs Add upstream patches to address overflow bugs, fundamental rendering problems, and miscellaneous crashers. (All of these commits have been branched upstream, but no updated source release has been made in over two years. Relevant upstream SVN commit IDs and bug IDs are noted in each patch comment.) Bump PKGREVISION. OK wiz@ To generate a diff of this commit: cvs rdiff -u -r1.183 -r1.184 pkgsrc/editors/abiword/Makefile cvs rdiff -u -r1.76 -r1.77 pkgsrc/editors/abiword/distinfo cvs rdiff -u -r0 -r1.1 \ pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixCairoGraphics.cpp \ pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixImage.cpp \ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.cpp \ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.h \ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.cpp \ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.h \ pkgsrc/editors/abiword/patches/patch-src_af_util_unix_ut__unixTimer.cpp \ pkgsrc/editors/abiword/patches/patch-src_af_util_xp_ut__png.cpp \ pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.cpp \ pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.h \ pkgsrc/editors/abiword/patches/patch-src_af_xap_xp_xap__Frame.cpp \ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fl__SectionLayout.cpp \ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View.cpp \ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__ViewDoubleBuffering.cpp \ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View__protected.cpp \ pkgsrc/editors/abiword/patches/patch-src_wp_ap_gtk_ap__UnixFrameImpl.cpp \ pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__exp__DocRangeListener.cpp \ pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__imp__RTF.cpp Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. --_----------=_15460358937830 Content-Disposition: inline Content-Length: 36817 Content-Transfer-Encoding: binary Content-Type: text/x-diff; charset=us-ascii Modified files: Index: pkgsrc/editors/abiword/Makefile diff -u pkgsrc/editors/abiword/Makefile:1.183 pkgsrc/editors/abiword/Makefile:1.184 --- pkgsrc/editors/abiword/Makefile:1.183 Thu Dec 13 19:51:34 2018 +++ pkgsrc/editors/abiword/Makefile Fri Dec 28 22:24:52 2018 @@ -1,8 +1,8 @@ -# $NetBSD: Makefile,v 1.183 2018/12/13 19:51:34 adam Exp $ +# $NetBSD: Makefile,v 1.184 2018/12/28 22:24:52 gutteridge Exp $ .include "Makefile.common" DISTNAME= abiword-${ABIVERSION} -PKGREVISION= 3 +PKGREVISION= 4 CATEGORIES= editors MASTER_SITES= http://www.abiword.com/downloads/abiword/${PKGVERSION_NOREV}/source/ Index: pkgsrc/editors/abiword/distinfo diff -u pkgsrc/editors/abiword/distinfo:1.76 pkgsrc/editors/abiword/distinfo:1.77 --- pkgsrc/editors/abiword/distinfo:1.76 Sun Dec 2 21:51:06 2018 +++ pkgsrc/editors/abiword/distinfo Fri Dec 28 22:24:52 2018 @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.76 2018/12/02 21:51:06 bsiegert Exp $ +$NetBSD: distinfo,v 1.77 2018/12/28 22:24:52 gutteridge Exp $ SHA1 (abiword-3.0.2.tar.gz) = 8226e0962e6667e0a461955a0ac680a629e0b55a RMD160 (abiword-3.0.2.tar.gz) = fde551492b0cffa7d522082906f374490bd47f5c @@ -20,11 +20,29 @@ SHA1 (patch-plugins_wordperfect_xp_ie__i SHA1 (patch-plugins_wordperfect_xp_ie__impexp__WordPerfect.cpp) = c87bc227eebcfcc2ab11ee6b5237ef8fcc47c0bc SHA1 (patch-plugins_wordperfect_xp_ie__impexp__WordPerfect.h) = 0a75276dc0d1d99b97155f61d9f98de7126fb0a3 SHA1 (patch-plugins_wpg_xp_ie__impGraphic__WPG.cpp) = 36d7ca7855ddc504701e392c28e3d8530f78b81e +SHA1 (patch-src_af_gr_gtk_gr__UnixCairoGraphics.cpp) = 2fb170202d13c9ddf077cea545d8d8f79fdbf5c2 +SHA1 (patch-src_af_gr_gtk_gr__UnixImage.cpp) = 2546621961ce959a8d5078ff52efa4650362be54 +SHA1 (patch-src_af_gr_xp_gr__Caret.cpp) = 96b186c4fc762f6734226b4505e2d4c64fb2b03a +SHA1 (patch-src_af_gr_xp_gr__Caret.h) = f7ee697a720205cd9026a85d7683092fc147a237 +SHA1 (patch-src_af_gr_xp_gr__Graphics.cpp) = 9cf398ea8e787e5820d41182c005fe2906c7ec06 +SHA1 (patch-src_af_gr_xp_gr__Graphics.h) = a3539f0e2e3a8f661a01428f7550f8a4bebb1ee5 +SHA1 (patch-src_af_util_unix_ut__unixTimer.cpp) = 543d8977c8da5c1db4e26581d82f72a4f936f190 SHA1 (patch-src_af_util_xp_ut__endian.h) = e1dd4cc0df3b0eb66dbd673fb5c0d2e3b24b30a4 SHA1 (patch-src_af_util_xp_ut__iconv.cpp) = 613f162d4db0ba9520e0481a98564e59ccd862d4 SHA1 (patch-src_af_util_xp_ut__iconv.h) = bbcfa2098ea77d393feb50d69de9ae29fcce302f SHA1 (patch-src_af_util_xp_ut__mbtowc.cpp) = 01f6793651533e7e39f665e5c15e6c12e1c7b96d SHA1 (patch-src_af_util_xp_ut__misc.cpp) = f552ecbb87490355d8e74218dd59fd3961f1af5d +SHA1 (patch-src_af_util_xp_ut__png.cpp) = 9f4ae043873fc6d66e063419d0736bb6104483b0 +SHA1 (patch-src_af_xap_gtk_xap__UnixFrameImpl.cpp) = 5b67bd234209beddc751e7c98b17cf1844b73b1a +SHA1 (patch-src_af_xap_gtk_xap__UnixFrameImpl.h) = af256fec37a7b9cd4239802985ad1a46f8272ad8 SHA1 (patch-src_af_xap_xp_enchant__checker.cpp) = 5ad3b8bb4e186e998d7e8930247534c9f058c534 +SHA1 (patch-src_af_xap_xp_xap__Frame.cpp) = d7f29f199b7109c8a09fa40f969be0db3a6b79ba +SHA1 (patch-src_text_fmt_xp_fl__SectionLayout.cpp) = 3f1f9255bb979812c8062f542ed4b9faa488a368 SHA1 (patch-src_text_fmt_xp_fv__FrameEdit.h) = 684310bf9aece4ce72d004dfae9a4b4b6ca69570 +SHA1 (patch-src_text_fmt_xp_fv__View.cpp) = 872f4d94a3797b0ae1c32500267e46afa5ebd3ac +SHA1 (patch-src_text_fmt_xp_fv__ViewDoubleBuffering.cpp) = ef11cce5d6d07c33416666e30c1aed33abfa8e1c +SHA1 (patch-src_text_fmt_xp_fv__View__protected.cpp) = c567a8962280aa6f5b20151b74616b14ff0c2aa7 SHA1 (patch-src_text_ptbl_xp_pd__DocumentRDF.cpp) = 5673e9341372913156f2f722229569199d97af4c +SHA1 (patch-src_wp_ap_gtk_ap__UnixFrameImpl.cpp) = 709abd20ccaffc96cf8b9e77ea506fe6732e6d62 +SHA1 (patch-src_wp_impexp_xp_ie__exp__DocRangeListener.cpp) = cab84cf239874409d8e349c58c3605d91712b3c4 +SHA1 (patch-src_wp_impexp_xp_ie__imp__RTF.cpp) = 89cddf0213c1aeb1c915f4722e5db3a68f553ae6 Added files: Index: pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixCairoGraphics.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixCairoGraphics.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixCairoGraphics.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,51 @@ +$NetBSD: patch-src_af_gr_gtk_gr__UnixCairoGraphics.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +Abiword bug 13791, SVN revision 35482: Disable double buffering on GTK3. + +--- src/af/gr/gtk/gr_UnixCairoGraphics.cpp.orig 2016-10-21 00:39:16.000000000 +0000 ++++ src/af/gr/gtk/gr_UnixCairoGraphics.cpp +@@ -126,8 +126,12 @@ GR_Graphics * GR_UnixCairoGraphics::gr + + // UT_return_val_if_fail(!info.isPrinterGraphics(), NULL); + GR_UnixCairoAllocInfo &AI = (GR_UnixCairoAllocInfo&)info; +- ++#if GTK_CHECK_VERSION(3,0,0) ++ // We disable double buffering on Gtk3 because it doesn't work. ++ return new GR_UnixCairoGraphics(AI.m_win, false); ++#else + return new GR_UnixCairoGraphics(AI.m_win, AI.m_double_buffered); ++#endif + } + + inline UT_RGBColor _convertGdkColor(const GdkColor &c) +@@ -566,7 +570,10 @@ void GR_UnixCairoGraphics::_beginPaint() + void GR_UnixCairoGraphics::_endPaint() + { + if (m_CairoCreated) ++ { ++ cairo_surface_flush(cairo_get_target(m_cr)); + cairo_destroy (m_cr); ++ } + m_cr = NULL; + + m_Painting = false; +@@ -577,9 +584,17 @@ void GR_UnixCairoGraphics::_endPaint() + + void GR_UnixCairoGraphics::flush(void) + { ++ + if (m_Widget) { + gtk_widget_queue_draw(m_Widget); + } ++ ++/* ++ if(m_cr) ++ { ++ cairo_surface_flush(cairo_get_target(m_cr)); ++ } ++*/ + } + + bool GR_UnixCairoGraphics::queryProperties(GR_Graphics::Properties gp) const Index: pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixImage.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixImage.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_gr_gtk_gr__UnixImage.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,24 @@ +$NetBSD: patch-src_af_gr_gtk_gr__UnixImage.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13834, SVN revision 35393: Crash fixes. + +--- src/af/gr/gtk/gr_UnixImage.cpp.orig 2015-10-16 02:42:45.000000000 +0000 ++++ src/af/gr/gtk/gr_UnixImage.cpp +@@ -244,12 +244,13 @@ bool GR_UnixImage::saveToPNG(const char + UT_return_val_if_fail(m_image,false); + + GError * error = NULL; +- gboolean res = gdk_pixbuf_save (m_image, szFile, "png", &error,NULL); +- if(res != FALSE) +- { ++ gboolean res = gdk_pixbuf_save (m_image, szFile, "png", &error, NULL); ++ if (res != FALSE) { ++ if (error) { ++ g_error_free (error); ++ } + return true; + } +- delete error; + return false; + + } Index: pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,305 @@ +$NetBSD: patch-src_af_gr_xp_gr__Caret.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/af/gr/xp/gr_Caret.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/af/gr/xp/gr_Caret.cpp +@@ -30,6 +30,11 @@ + #include "gr_Graphics.h" + #include "gr_Painter.h" + #include "ut_debugmsg.h" ++#include ++#include ++#include ++#include ++ + static const UT_uint32 CURSOR_DELAY_TIME = 10; // milliseconds + + #ifdef TOOLKIT_GTK_ALL +@@ -56,6 +61,11 @@ GR_Caret::GR_Caret(GR_Graphics * pG) + m_yPoint2(0), + m_pClr(NULL), + m_pG(pG), ++ m_iWindowWidth(0), ++ m_iWindowHeight(0), ++ m_worker(NULL), ++ m_enabler(NULL), ++ m_blinkTimeout(NULL), + m_nDisableCount(1), + m_bCursorBlink(true), + m_bCursorIsOn(false), +@@ -70,7 +80,10 @@ GR_Caret::GR_Caret(GR_Graphics * pG) + m_bRemote(false), + m_clrRemote(0,0,0), + m_sID(""), +- m_iCaretNumber(0) ++ m_iCaretNumber(0), ++ m_iLastDrawTime(0), ++ m_iRetry(0), ++ m_bPendingBlink(false) + { + UT_WorkerFactory::ConstructMode outMode = UT_WorkerFactory::NONE; + m_worker = static_cast(UT_WorkerFactory::static_constructor +@@ -97,6 +110,11 @@ GR_Caret::GR_Caret(GR_Graphics * pG, con + m_yPoint2(0), + m_pClr(NULL), + m_pG(pG), ++ m_iWindowWidth(0), ++ m_iWindowHeight(0), ++ m_worker(NULL), ++ m_enabler(NULL), ++ m_blinkTimeout(NULL), + m_nDisableCount(1), + m_bCursorBlink(true), + m_bCursorIsOn(false), +@@ -111,7 +129,10 @@ GR_Caret::GR_Caret(GR_Graphics * pG, con + m_bRemote(true), + m_clrRemote(0,0,0), + m_sID(sId), +- m_iCaretNumber(0) ++ m_iCaretNumber(0), ++ m_iLastDrawTime(0), ++ m_iRetry(0), ++ m_bPendingBlink(false) + { + UT_WorkerFactory::ConstructMode outMode = UT_WorkerFactory::NONE; + m_worker = static_cast(UT_WorkerFactory::static_constructor +@@ -145,9 +166,16 @@ GR_Caret::~GR_Caret() + void GR_Caret::s_work(UT_Worker * _w) + { + GR_Caret * c = static_cast(_w->getInstanceData()); +- ++ xxx_UT_DEBUGMSG((" Caret timer called Disable Count = %d \n",c->m_nDisableCount)); + if (c->m_nDisableCount == 0) ++ { ++#ifdef TOOLKIT_GTK_ALL ++ c->setPendingBlink(); ++ c->m_pG->flush(); // set redraw for wayland ++#else + c->_blink(false); ++#endif ++ } + } + + /** One-time enabler. */ +@@ -170,9 +198,12 @@ void GR_Caret::s_enable(UT_Worker * _w) + + void GR_Caret::s_blink_timeout(UT_Worker * _w) + { ++ return; ++ /* + GR_Caret * c = static_cast(_w->getInstanceData()); + if (c->isEnabled()) + c->disable(); ++ */ + } + + UT_uint32 GR_Caret::_getCursorBlinkTime() const +@@ -241,8 +272,6 @@ void GR_Caret::setCoords(UT_sint32 x, UT + UT_sint32 x2, UT_sint32 y2, UT_uint32 h2, + bool bPointDirection, const UT_RGBColor * pClr) + { +- // if visible, then hide while we change positions. +- _erase(); + + m_xPoint = x; m_yPoint = y; m_iPointHeight = h; + m_xPoint2 = x2; m_yPoint2 = y2; m_iPointHeight2 = h2; +@@ -270,13 +299,17 @@ void GR_Caret::enable() + + // If the caret is already enabled, just return + if (m_nDisableCount == 0) ++ { ++ xxx_UT_DEBUGMSG(("Don't emable disable Count is already zero \n")); + return; +- ++ } + // Check to see if we still have pending disables. + --m_nDisableCount; +- if (m_nDisableCount) ++ if (m_nDisableCount != 0) ++ { ++ xxx_UT_DEBUGMSG(("Don't emable, disable Count has not reached zero \n")); + return; +- ++ } + // stop pending enables; in 10 ms, really enable blinking. + m_enabler->stop(); + m_enabler->start(); +@@ -326,19 +359,20 @@ void GR_Caret::JustErase(UT_sint32 xPoin + { + if(m_bRecursiveDraw) + { +- xxx_UT_DEBUGMSG(("Doing recursive Erase! - abort \n")); ++ xxx_UT_DEBUGMSG(("Doing recursive Just Erase! - abort \n")); + return; + } + if (m_bCursorIsOn && (((xPoint -m_pG->tlu(2)-1) <= m_xPoint) && (xPoint >= (m_xPoint-m_pG->tlu(2))-1)) && ((yPoint - m_pG->tlu(1)) <= m_yPoint) && (yPoint >= (m_yPoint - m_pG->tlu(1)))) + { ++ xxx_UT_DEBUGMSG(("Doing Just Erase! now \n")); + m_pG->restoreRectangle(m_iCaretNumber*3+0); + if(m_bSplitCaret) + { + m_pG->restoreRectangle(m_iCaretNumber*3+1); +- m_pG->restoreRectangle(m_iCaretNumber*3+2); +- m_bSplitCaret = false; ++ m_pG->restoreRectangle(m_iCaretNumber*3+2); ++ m_bSplitCaret = false; + } +- m_bCursorIsOn = !m_bCursorIsOn; ++ m_bCursorIsOn = false; + m_nDisableCount = 1; + } + } +@@ -358,18 +392,42 @@ void GR_Caret::_blink(bool bExplicit) + } + if (!m_bPositionSet) + return; ++ if(!m_bPendingBlink) ++ return; ++ struct timespec spec; ++ ++ clock_gettime(CLOCK_REALTIME, &spec); + ++ UT_sint32 s = spec.tv_sec; ++ long ms = round(spec.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds ++ long this_time = 1000*s + ms; ++ long time_between = this_time - m_iLastDrawTime; ++ m_iLastDrawTime = this_time; ++ // ++ // If this number is high enough the caret will not blink at all ++ // This places the caret on the screen during rapid moves. ++ // ++ if(time_between < _getCursorBlinkTime()/2) ++ { ++ m_iRetry++; ++ xxx_UT_DEBUGMSG(("Caret redraw after %d ms \n",time_between)); ++ } ++ else ++ { ++ m_iRetry = 0; ++ } + m_bRecursiveDraw = true; + GR_Painter painter (m_pG, false); + m_bRecursiveDraw = false; + + // After any autoblink, we want there to be BLINK_TIME + // until next autoblink. ++ /* + if (!bExplicit) + { + m_worker->stop(); m_worker->start(); + } +- ++ */ + // Blink if: (a) _blink explicitly called (not autoblink); or + // (b) autoblink and caret blink enabled; or + // (c) autoblink, caret blink disabled, caret is off +@@ -380,6 +438,7 @@ void GR_Caret::_blink(bool bExplicit) + + if (m_bCursorIsOn) + { ++ xxx_UT_DEBUGMSG(("Clear Caret reTry %d \n",m_iRetry)); + m_pG->restoreRectangle(m_iCaretNumber*3+0); + + if(m_bSplitCaret) +@@ -388,6 +447,7 @@ void GR_Caret::_blink(bool bExplicit) + m_pG->restoreRectangle(m_iCaretNumber*3+2); + m_bSplitCaret = false; + } ++ m_bCursorIsOn = false; + } + else + { +@@ -413,7 +473,9 @@ void GR_Caret::_blink(bool bExplicit) + m_yPoint+m_pG->tlu(1), + m_pG->tlu(5), + m_iPointHeight+m_pG->tlu(2)); ++ m_bRecursiveDraw = false; + m_pG->allCarets()->JustErase(m_xPoint,m_yPoint); ++ m_bRecursiveDraw = true; + m_pG->saveRectangle(r0,m_iCaretNumber*3+0); + + if((m_xPoint != m_xPoint2) || (m_yPoint != m_yPoint2)) +@@ -446,7 +508,7 @@ void GR_Caret::_blink(bool bExplicit) + if(m_bCaret1OnScreen) + { + // draw the primary caret +- xxx_UT_DEBUGMSG(("blink cursor turned on \n")); ++ xxx_UT_DEBUGMSG(("Draw Caret reTry %d \n",m_iRetry)); + + UT_sint32 x1 = m_xPoint + iDelta * m_pG->tlu(1); + UT_sint32 x2 = m_xPoint; +@@ -463,6 +525,7 @@ void GR_Caret::_blink(bool bExplicit) + m_yPoint + m_pG->tlu(1), + x2, + m_yPoint + m_iPointHeight + m_pG->tlu(1)); ++ m_bCursorIsOn = true; + } + + if(m_bSplitCaret) +@@ -499,6 +562,7 @@ void GR_Caret::_blink(bool bExplicit) + m_xPoint + m_pG->tlu(2), + m_yPoint + m_pG->tlu(2)); + } ++ m_bCursorIsOn = true; + } + + // Now we deal with the secondary caret needed on ltr-rtl boundary +@@ -557,25 +621,54 @@ void GR_Caret::_blink(bool bExplicit) + m_xPoint2 /*- m_pG->tlu(1)*/, + m_yPoint2 + m_pG->tlu(2)); + } ++ m_bCursorIsOn = true; + } + + } + + } + +- m_bCursorIsOn = !m_bCursorIsOn; + m_pG->setColor(oldColor); + m_bRecursiveDraw = false; + } +- m_pG->flush(); ++ // ++ // Places the caret on the screen during rapid moves like pressing the arrow keys ++ // ++ if(m_iRetry == 0) ++ m_bPendingBlink = false; + } + ++// ++// Tell the widget redraw know we only need to blink on this cycle ++// ++void GR_Caret::setPendingBlink() ++{ ++ xxx_UT_DEBUGMSG(("Pending blink set in GR_CARET \n")); ++ m_bPendingBlink = true; ++} ++ ++// ++// Returns true if we did a blink ++// ++bool GR_Caret::doBlinkIfNeeded() ++{ ++ if(!m_bPendingBlink) ++ { ++ return false; ++ } ++ _blink(true); ++ m_bPendingBlink = false; ++ return true; ++} + /*! + * Only call this is you are absolutely certain you need it! + */ + void GR_Caret::forceDraw(void) + { +- _blink(true); ++ if(m_nDisableCount < 2) ++ { ++ _blink(true); ++ } + } + + void GR_Caret::resetBlinkTimeout(void) Index: pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.h diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.h:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Caret.h Fri Dec 28 22:24:53 2018 @@ -0,0 +1,26 @@ +$NetBSD: patch-src_af_gr_xp_gr__Caret.h,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/af/gr/xp/gr_Caret.h.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/af/gr/xp/gr_Caret.h +@@ -67,7 +67,8 @@ public: + void setRemoteColor(UT_RGBColor clrRemote); + + void resetBlinkTimeout(void); +- ++ void setPendingBlink(void); ++ bool doBlinkIfNeeded(void); + private: + GR_Caret(); // no impl + GR_Caret(const GR_Caret& rhs); // no impl. +@@ -121,6 +122,9 @@ private: + UT_RGBColor m_clrRemote; + std::string m_sID; + UT_sint32 m_iCaretNumber; ++ long m_iLastDrawTime; ++ UT_sint32 m_iRetry; ++ bool m_bPendingBlink; + }; + + class ABI_EXPORT GR_CaretDisabler Index: pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,40 @@ +$NetBSD: patch-src_af_gr_xp_gr__Graphics.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/af/gr/xp/gr_Graphics.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/af/gr/xp/gr_Graphics.cpp +@@ -185,6 +185,20 @@ void AllCarets::setBlink(bool bBlink) + } + } + ++bool AllCarets::doBlinkIfNeeded(void) ++{ ++ bool bBlinked = false; ++ if((*m_pLocalCaret)) ++ { ++ bBlinked = (*m_pLocalCaret)->doBlinkIfNeeded(); ++ for(UT_sint32 i =0; i< m_vecCarets->getItemCount();i++) ++ { ++ m_vecCarets->getNthItem(i)->forceDraw(); ++ } ++ } ++ return bBlinked; ++} ++ + void AllCarets::setWindowSize(UT_uint32 width, UT_uint32 height) + { + if((*m_pLocalCaret)) +@@ -195,6 +209,12 @@ void AllCarets::setWindowSize(UT_ + } + } + ++void AllCarets::setPendingBlink(void) ++{ ++ if((*m_pLocalCaret)) ++ (*m_pLocalCaret)->setPendingBlink(); ++} ++ + void AllCarets::setCoords(UT_sint32 x, UT_sint32 y, UT_uint32 h, + UT_sint32 x2, UT_sint32 y2, UT_uint32 h2, + bool bPointDirection, Index: pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.h diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.h:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_gr_xp_gr__Graphics.h Fri Dec 28 22:24:53 2018 @@ -0,0 +1,17 @@ +$NetBSD: patch-src_af_gr_xp_gr__Graphics.h,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/af/gr/xp/gr_Graphics.h.orig 2015-04-02 03:09:13.000000000 +0000 ++++ src/af/gr/xp/gr_Graphics.h +@@ -364,7 +364,9 @@ class ABI_EXPORT AllCarets + const UT_RGBColor * pClr = NULL); + void setInsertMode (bool mode); + void forceDraw(void); +- ++ bool doBlinkIfNeeded(void); ++ void setPendingBlink(void); ++ + private: + GR_Graphics * m_pG; + GR_Caret ** m_pLocalCaret; Index: pkgsrc/editors/abiword/patches/patch-src_af_util_unix_ut__unixTimer.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_util_unix_ut__unixTimer.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_util_unix_ut__unixTimer.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,22 @@ +$NetBSD: patch-src_af_util_unix_ut__unixTimer.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/af/util/unix/ut_unixTimer.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/af/util/unix/ut_unixTimer.cpp +@@ -66,10 +66,11 @@ static int _Timer_Proc(void *p) + UT_ASSERT(pTimer); + + xxx_UT_DEBUGMSG(("ut_unixTimer.cpp: timer fired\n")); +- +- pTimer->fire(); +- +- return true; ++ if (pTimer) { ++ pTimer->fire(); ++ return TRUE; ++ } ++ return 0; + } + + UT_sint32 UT_UNIXTimer::set(UT_uint32 iMilliseconds) Index: pkgsrc/editors/abiword/patches/patch-src_af_util_xp_ut__png.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_util_xp_ut__png.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_util_xp_ut__png.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,34 @@ +$NetBSD: patch-src_af_util_xp_ut__png.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13827, SVN revision 35369: Fix overflow read in PNG. + +--- src/af/util/xp/ut_png.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/af/util/xp/ut_png.cpp +@@ -28,6 +28,7 @@ + + #include "ut_assert.h" + #include "ut_bytebuf.h" ++#include "ut_debugmsg.h" + + struct _bb + { +@@ -40,6 +41,19 @@ static void _png_read(png_structp png_pt + struct _bb* p = static_cast(png_get_io_ptr(png_ptr)); + const UT_Byte* pBytes = p->pBB->getPointer(0); + ++ // make sure that we don't read outside of pBytes ++ if (p->iCurPos >= p->pBB->getLength() - length) { ++ UT_WARNINGMSG(("PNG: Reading past buffer bounds. cur = %u, buflen = %u, length = %lu\n", ++ p->iCurPos, p->pBB->getLength(), length)); ++ length = p->pBB->getLength() - p->iCurPos; ++ if (length == 0) { ++ UT_WARNINGMSG(("PNG: Truncating to ZERO length.\n")); ++ png_error(png_ptr, "Premature end of buffer"); ++ return; ++ } else { ++ UT_WARNINGMSG(("PNG: Truncating to %lu.\n", length)); ++ } ++ } + memcpy(data, pBytes + p->iCurPos, length); + p->iCurPos += length; + } Index: pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,62 @@ +$NetBSD: patch-src_af_xap_gtk_xap__UnixFrameImpl.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13815, SVN revision 35394: Draw event should return TRUE. + +Abiword bug 13791, SVN revision 35480: Fix flicker and caret problems. + +--- src/af/xap/gtk/xap_UnixFrameImpl.cpp.orig 2014-12-14 14:56:47.000000000 +0000 ++++ src/af/xap/gtk/xap_UnixFrameImpl.cpp +@@ -1208,15 +1208,23 @@ gint XAP_UnixFrameImpl::_fe::delete_even + } + + #if GTK_CHECK_VERSION(3,0,0) +-gint XAP_UnixFrameImpl::_fe::draw(GtkWidget * w, cairo_t * cr) ++gboolean XAP_UnixFrameImpl::_fe::draw(GtkWidget * w, cairo_t * cr) + #else +-gint XAP_UnixFrameImpl::_fe::expose(GtkWidget * w, GdkEventExpose* pExposeEvent) ++gboolean XAP_UnixFrameImpl::_fe::expose(GtkWidget * w, GdkEventExpose* pExposeEvent) + #endif + { + XAP_UnixFrameImpl * pUnixFrameImpl = static_cast(g_object_get_data(G_OBJECT(w), "user_data")); + FV_View * pView = static_cast(pUnixFrameImpl->getFrame()->getCurrentView()); ++ double x, y, width, height; + #if GTK_CHECK_VERSION(3,0,0) +- GdkEventExpose *pExposeEvent = reinterpret_cast(gtk_get_current_event()); ++ cairo_clip_extents (cr, &x, &y, &width, &height); ++ width -= x; ++ height -= y; ++#else ++ x = pExposeEvent->area.x; ++ y = pExposeEvent->area.y; ++ width = pExposeEvent->area.width; ++ height = pExposeEvent->area.height; + #endif + /* Jean: commenting out next lines since the zoom update code does draw only + * part of what needs to be updated. */ +@@ -1231,19 +1239,21 @@ gint XAP_UnixFrameImpl::_fe::expose(GtkW + if (pGr->getPaintCount () > 0) + return TRUE; + xxx_UT_DEBUGMSG(("Expose area: x %d y %d width %d height %d \n",pExposeEvent->area.x,pExposeEvent->area.y,pExposeEvent->area.width,pExposeEvent->area.height)); +- rClip.left = pGr->tlu(pExposeEvent->area.x); +- rClip.top = pGr->tlu(pExposeEvent->area.y); +- rClip.width = pGr->tlu(pExposeEvent->area.width)+1; +- rClip.height = pGr->tlu(pExposeEvent->area.height)+1; ++ rClip.left = pGr->tlu(x); ++ rClip.top = pGr->tlu(y); + #if GTK_CHECK_VERSION(3,0,0) ++ rClip.width = pGr->tlu(width); ++ rClip.height = pGr->tlu(height); + static_cast(pGr)->setCairo(cr); + pView->draw(&rClip); + static_cast(pGr)->setCairo(NULL); + #else ++ rClip.width = pGr->tlu(width)+1; ++ rClip.height = pGr->tlu(height)+1; + pView->draw(&rClip); + #endif + } +- return FALSE; ++ return TRUE; + } + + static bool bScrollWait = false; Index: pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.h diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.h:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_xap_gtk_xap__UnixFrameImpl.h Fri Dec 28 22:24:53 2018 @@ -0,0 +1,18 @@ +$NetBSD: patch-src_af_xap_gtk_xap__UnixFrameImpl.h,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13815, SVN revision 35394: Draw event should return TRUE. + +--- src/af/xap/gtk/xap_UnixFrameImpl.h.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/af/xap/gtk/xap_UnixFrameImpl.h +@@ -152,9 +152,9 @@ protected: + static gint key_release_event(GtkWidget* w, GdkEventKey* e); + static gint delete_event(GtkWidget * w, GdkEvent * /*event*/, gpointer /*data*/); + #if GTK_CHECK_VERSION(3,0,0) +- static gint draw(GtkWidget * w, cairo_t * cr); ++ static gboolean draw(GtkWidget * w, cairo_t * cr); + #else +- static gint expose(GtkWidget * w, GdkEventExpose* pExposeEvent); ++ static gboolean expose(GtkWidget * w, GdkEventExpose* pExposeEvent); + #endif + static gint do_ZoomUpdate( gpointer /* xap_UnixFrame * */ p); + static void vScrollChanged(GtkAdjustment * w, gpointer /*data*/); Index: pkgsrc/editors/abiword/patches/patch-src_af_xap_xp_xap__Frame.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_af_xap_xp_xap__Frame.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_af_xap_xp_xap__Frame.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,31 @@ +$NetBSD: patch-src_af_xap_xp_xap__Frame.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/af/xap/xp/xap_Frame.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/af/xap/xp/xap_Frame.cpp +@@ -505,7 +505,7 @@ void /* static*/ XAP_FrameImpl::viewAuto + pFrameImpl->m_ViewAutoUpdaterID = 0; + DELETEP(pFrameImpl->m_ViewAutoUpdater); + pView->draw(); +- ++ pG->flush(); + return; + } + if(!pView->isLayoutFilling() && !pFrameImpl->m_pFrame->m_bFirstDraw) +@@ -514,6 +514,7 @@ void /* static*/ XAP_FrameImpl::viewAuto + pG->setCursor(GR_Graphics::GR_CURSOR_WAIT); + pFrameImpl->_setCursor(GR_Graphics::GR_CURSOR_WAIT); + pFrameImpl->m_pFrame->setStatusMessage ( static_cast(msg.c_str()) ); ++ pG->flush(); + return; + } + GR_Graphics * pG = pView->getGraphics(); +@@ -534,6 +535,7 @@ void /* static*/ XAP_FrameImpl::viewAuto + pView->updateScreen(); + } + } ++ pG->flush(); + } + + UT_RGBColor XAP_Frame::getColorSelBackground () const Index: pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fl__SectionLayout.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fl__SectionLayout.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fl__SectionLayout.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,16 @@ +$NetBSD: patch-src_text_fmt_xp_fl__SectionLayout.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/text/fmt/xp/fl_SectionLayout.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/text/fmt/xp/fl_SectionLayout.cpp +@@ -1921,6 +1921,9 @@ void fl_DocSectionLayout::updateLayout(b + checkAndRemovePages(); + addValidPages(); + } ++ xxx_UT_DEBUGMSG(("Doing fl_DocSectionLayout::updateLayout here %p view %p \n",this, m_pLayout->getView())); ++ m_pLayout->getView()->getGraphics()->allCarets()->setPendingBlink(); // place caret after entry ++ m_pLayout->getView()->getGraphics()->flush(); // schedule redraw for Wayland + } + + void fl_DocSectionLayout::setNeedsSectionBreak(bool bSet, fp_Page * pPage) Index: pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,43 @@ +$NetBSD: patch-src_text_fmt_xp_fv__View.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/text/fmt/xp/fv_View.cpp.orig 2016-01-23 21:00:21.000000000 +0000 ++++ src/text/fmt/xp/fv_View.cpp +@@ -3105,11 +3105,15 @@ bool FV_View::isSelectionEmpty(void) con + { + if(m_FrameEdit.isActive() && m_FrameEdit.isImageWrapper() ) + { +- return false; ++ if (m_pG) ++ m_pG->allCarets()->disable(true); ++ return false; + } + if(m_FrameEdit.isActive() && (m_FrameEdit. getFrameEditMode() >= FV_FrameEdit_RESIZE_INSERT)) + { +- return false; ++ if (m_pG) ++ m_pG->allCarets()->disable(true); ++ return false; + } + if (!m_Selection.isSelected()) + { +@@ -3124,6 +3128,8 @@ bool FV_View::isSelectionEmpty(void) con + { + return true; + } ++ if (m_pG) ++ m_pG->allCarets()->disable(true); + return false; + } + PT_DocPosition curPos = getPoint(); +@@ -3131,7 +3137,8 @@ bool FV_View::isSelectionEmpty(void) con + { + return true; + } +- ++ if (m_pG) ++ m_pG->allCarets()->disable(true); + return false; + } + Index: pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__ViewDoubleBuffering.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__ViewDoubleBuffering.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__ViewDoubleBuffering.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,15 @@ +$NetBSD: patch-src_text_fmt_xp_fv__ViewDoubleBuffering.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/text/fmt/xp/fv_ViewDoubleBuffering.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/text/fmt/xp/fv_ViewDoubleBuffering.cpp +@@ -27,7 +27,7 @@ + #include "ut_misc.h" + #include "ut_debugmsg.h" + +-//#define DEACTIVATE_FV_VIEW_DOUBLE_BUFFERING ++//#define DEACTIVATE_FV_VIEW_DOUBLE_BUFFERING 1 + + FV_ViewDoubleBuffering::FV_ViewDoubleBuffering(FV_View *pView, bool suspendDirectDrawing, bool callDrawOnlyAtTheEnd) + : m_pView(pView), Index: pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View__protected.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View__protected.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_text_fmt_xp_fv__View__protected.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,51 @@ +$NetBSD: patch-src_text_fmt_xp_fv__View__protected.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35476: Fix flicker and caret problems. + +--- src/text/fmt/xp/fv_View_protected.cpp.orig 2016-10-21 00:39:16.000000000 +0000 ++++ src/text/fmt/xp/fv_View_protected.cpp +@@ -4478,7 +4478,6 @@ void FV_View::_draw(UT_sint32 x, UT_sint + "\t\twith [yScrollOffset %d][windowHeight %d][bDirtyRunsOnly %d]\n", + x,y,width,height,bClip, + m_yScrollOffset,getWindowHeight(),bDirtyRunsOnly)); +- + if(m_pViewDoubleBufferingObject != NULL && m_pViewDoubleBufferingObject->getCallDrawOnlyAtTheEnd()) + { + // record this call's arguments and return +@@ -4727,12 +4726,19 @@ void FV_View::_draw(UT_sint32 x, UT_sint + // advance to the next page + pPage = pPage -> getNext(); + } +- + if (bClip) + { + m_pG->setClipRect(NULL); + } +- ++ // ++ // Look if we have to blink the caret ++ // ++ xxx_UT_DEBUGMSG(("Doing _draw bDirtyRunsOnly %d \n",bDirtyRunsOnly)); ++ ++ if(m_pG->allCarets()->doBlinkIfNeeded()) ++ { ++ xxx_UT_DEBUGMSG(("Pending blink drawn has bDirtyRunsOnly %d \n",bDirtyRunsOnly)); ++ } + xxx_UT_DEBUGMSG(("End _draw\n")); + } + +@@ -4816,6 +4822,14 @@ void FV_View::_setPoint(PT_DocPosition p + m_countDisable++; + } + } ++ ++ if(m_pG) ++ { ++ xxx_UT_DEBUGMSG(("Schedule redraw in _setPoint \n")); ++ m_pG->allCarets()->setPendingBlink(); ++ m_pG->flush(); // scedule a redraw for Wayland ++ } ++ + } + + Index: pkgsrc/editors/abiword/patches/patch-src_wp_ap_gtk_ap__UnixFrameImpl.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_wp_ap_gtk_ap__UnixFrameImpl.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_wp_ap_gtk_ap__UnixFrameImpl.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,20 @@ +$NetBSD: patch-src_wp_ap_gtk_ap__UnixFrameImpl.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13791, SVN revision 35482: Disable double buffering on GTK3. + +--- src/wp/ap/gtk/ap_UnixFrameImpl.cpp.orig 2016-06-25 22:26:31.000000000 +0000 ++++ src/wp/ap/gtk/ap_UnixFrameImpl.cpp +@@ -219,11 +219,12 @@ GtkWidget * AP_UnixFrameImpl::_createDoc + GDK_FOCUS_CHANGE_MASK | + GDK_LEAVE_NOTIFY_MASK | + GDK_SCROLL_MASK)); +- gtk_widget_set_double_buffered(GTK_WIDGET(m_dArea), FALSE); + #if GTK_CHECK_VERSION(3,0,0) + g_signal_connect(G_OBJECT(m_dArea), "draw", + G_CALLBACK(XAP_UnixFrameImpl::_fe::draw), NULL); + #else ++ // We disable double buffering on Gtk3 because it doesn't work. ++ gtk_widget_set_double_buffered(GTK_WIDGET(m_dArea), FALSE); + g_signal_connect(G_OBJECT(m_dArea), "expose_event", + G_CALLBACK(XAP_UnixFrameImpl::_fe::expose), NULL); + #endif Index: pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__exp__DocRangeListener.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__exp__DocRangeListener.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__exp__DocRangeListener.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,15 @@ +$NetBSD: patch-src_wp_impexp_xp_ie__exp__DocRangeListener.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13834, SVN revision 35392: Crash fixes. + +--- src/wp/impexp/xp/ie_exp_DocRangeListener.cpp.orig 2013-04-07 13:53:03.000000000 +0000 ++++ src/wp/impexp/xp/ie_exp_DocRangeListener.cpp +@@ -166,7 +166,7 @@ void IE_Exp_DocRangeListener::freeAtts( + UT_sint32 i=0; + while(sAtts[i]) + { +- delete [] (sAtts[i]); ++ g_free(const_cast(sAtts[i])); + i++; + } + delete [] sAtts; Index: pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__imp__RTF.cpp diff -u /dev/null pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__imp__RTF.cpp:1.1 --- /dev/null Fri Dec 28 22:24:53 2018 +++ pkgsrc/editors/abiword/patches/patch-src_wp_impexp_xp_ie__imp__RTF.cpp Fri Dec 28 22:24:53 2018 @@ -0,0 +1,36 @@ +$NetBSD: patch-src_wp_impexp_xp_ie__imp__RTF.cpp,v 1.1 2018/12/28 22:24:53 gutteridge Exp $ + +Abiword bug 13826, SVN revisions 35377 & 35378: Fix RTF out-of-bounds accesses. + +--- src/wp/impexp/xp/ie_imp_RTF.cpp.orig 2014-07-14 04:07:47.000000000 +0000 ++++ src/wp/impexp/xp/ie_imp_RTF.cpp +@@ -12068,7 +12068,13 @@ bool IE_Imp_RTF::HandleStyleDefinition(v + // must not mix static and dynamically allocated strings in the same + // array, otherwise there is no way we can g_free it !!! + //attribs[attribsCount++] = g_strdup(static_cast(m_styleTable[istyle])); +- attribs[attribsCount++] = m_styleTable[istyle].c_str(); ++ if (istyle >= 0 && static_cast(istyle) < m_styleTable.size()) { ++ attribs[attribsCount++] = m_styleTable[istyle].c_str(); ++ } else { ++ UT_WARNINGMSG(("RTF: basedon by style index out of bounds: %d. max %lu.\n", ++ istyle, m_styleTable.size())); ++ attribs[attribsCount++] = NULL; ++ } + UT_return_val_if_fail( attribsCount < PT_MAX_ATTRIBUTES * 2,false ); + } + else +@@ -12086,7 +12092,13 @@ bool IE_Imp_RTF::HandleStyleDefinition(v + // must not mix static and dynamically allocated strings in the same + // array, otherwise there is no way we can g_free it !!! + // attribs[attribsCount++] = g_strdup(static_cast(m_styleTable[istyle])); +- attribs[attribsCount++] = m_styleTable[istyle].c_str(); ++ if (istyle >= 0 && static_cast(istyle) < m_styleTable.size()) { ++ attribs[attribsCount++] = m_styleTable[istyle].c_str(); ++ } else { ++ UT_WARNINGMSG(("RTF: followed by style index out of bounds: %d. max %lu.\n", ++ istyle, m_styleTable.size())); ++ attribs[attribsCount++] = NULL; ++ } + UT_return_val_if_fail( attribsCount < PT_MAX_ATTRIBUTES * 2,false ); + } + else --_----------=_15460358937830--