From fa13be08796ae048ff45e49d761703a0d4d4ac31 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Thu, 28 Jun 2018 09:07:26 +0200 Subject: extra/abiword: apply anti-flicker patch --- extra/abiword/PKGBUILD | 10 +++++ extra/abiword/flicker.patch | 89 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 extra/abiword/PKGBUILD create mode 100644 extra/abiword/flicker.patch (limited to 'extra/abiword') diff --git a/extra/abiword/PKGBUILD b/extra/abiword/PKGBUILD new file mode 100644 index 00000000..987e6e09 --- /dev/null +++ b/extra/abiword/PKGBUILD @@ -0,0 +1,10 @@ +# see: https://bugzilla.abisource.com/attachment.cgi?id=5860 + +source+=('flicker.patch') +sha256sums+=('05fd3739fe7a4e3763688a81d52b7711526c6fc7a4aa531fef663826a0813b7b') +eval "$( + declare -f prepare | \ + sed ' + 3 a patch -p1 -i "$srcdir/flicker.patch" + ' +)" diff --git a/extra/abiword/flicker.patch b/extra/abiword/flicker.patch new file mode 100644 index 00000000..aca28398 --- /dev/null +++ b/extra/abiword/flicker.patch @@ -0,0 +1,89 @@ +From 46388f407c893123d9b3824a7570b050fc3b049b Mon Sep 17 00:00:00 2001 +From: James Cameron +Date: Thu, 17 Aug 2017 15:05:39 +1000 +Subject: [PATCH] Fix flickering +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- in GR_Caret::s_blink_timeout, avoid repeated calls by stopping the + timer, it will be restarted when needed, + +- in GR_Caret::s_enable, avoid extra unnecessary _blink calls when blink + is enabled, as they serve no purpose, + +- in XAP_UnixFrameImpl::_fe::expose, use the Cairo clip rectangle + instead of the expose event area, thanks to Hubert Figuière in + 865c1dda7e13deff04573ffc42028b71fee07f9c, + +- in XAP_UnixFrameImpl::_fe::expose, do not return FALSE, as other + handlers will need to handle the draw event, + +- in GR_UnixCairoGraphics::flush, fix excessive draw events; + gtk_widget_queue_draw only marks the widget as needing redrawing, + which causes a draw event for each call to flush, therefore every + caret blink, so use gdk_flush instead, + +Fixes AbiSource #13791. +Fixes Debian #851052. +Fixes Fedora #1287835. +Fixes Ubuntu LP: #1574278. +Fixes Sugar Labs #4915. + +Signed-off-by: James Cameron +--- + src/af/gr/gtk/gr_UnixCairoGraphics.cpp | 4 +--- + src/af/gr/xp/gr_Caret.cpp | 13 ++++--------- + src/af/xap/gtk/xap_UnixFrameImpl.cpp | 27 ++++++++++++++++++--------- + src/af/xap/gtk/xap_UnixFrameImpl.h | 2 +- + 4 files changed, 24 insertions(+), 22 deletions(-) + +diff --git a/src/af/gr/gtk/gr_UnixCairoGraphics.cpp b/src/af/gr/gtk/gr_UnixCairoGraphics.cpp +index 509bd37..7c3c06f 100644 +--- a/src/af/gr/gtk/gr_UnixCairoGraphics.cpp ++++ b/src/af/gr/gtk/gr_UnixCairoGraphics.cpp +@@ -577,9 +577,7 @@ void GR_UnixCairoGraphics::_endPaint() + + void GR_UnixCairoGraphics::flush(void) + { +- if (m_Widget) { +- gtk_widget_queue_draw(m_Widget); +- } ++ gdk_flush(); + } + + bool GR_UnixCairoGraphics::queryProperties(GR_Graphics::Properties gp) const +diff --git a/src/af/gr/xp/gr_Caret.cpp b/src/af/gr/xp/gr_Caret.cpp +index 5d5d116..a8aa451 100644 +--- a/src/af/gr/xp/gr_Caret.cpp ++++ b/src/af/gr/xp/gr_Caret.cpp +@@ -155,22 +155,17 @@ void GR_Caret::s_enable(UT_Worker * _w) + { + GR_Caret * c = static_cast(_w->getInstanceData()); + ++ c->m_enabler->stop(); + c->m_worker->stop(); +- c->_blink(true); +- if (!c->m_bCursorIsOn) +- c->_blink(true); // blink again +- else +- { +- c->_blink(true); // ?? - MARCM +- c->_blink(true); +- } + c->m_worker->start(); +- c->m_enabler->stop(); ++ c->_blink(true); + } + + void GR_Caret::s_blink_timeout(UT_Worker * _w) + { + GR_Caret * c = static_cast(_w->getInstanceData()); ++ ++ c->m_blinkTimeout->stop(); + if (c->isEnabled()) + c->disable(); + } +-- +2.11.0 + -- cgit v1.2.3-70-g09d2