From 07f6bda1ba69da85b6fb87677dfb5ae5cde5a33f Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Tue, 4 May 2021 20:36:41 +0200 Subject: [PATCH] Prevent flickering when resizing terminals or redrawing the screen via ctrl-l --- ChangeLog | 4 ++++ src/fvterm.cpp | 3 ++- src/fwidget.cpp | 2 ++ test/ftermdata-test.cpp | 8 +++++++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87bc6d67..cf3770a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-05-04 Markus Gans + * Prevent flickering when resizing terminals or redrawing + the screen via ctrl-l + 2021-05-02 Markus Gans * Bugfix for sending multiple SIGWINCH signals from gnome-terminal under Wayland diff --git a/src/fvterm.cpp b/src/fvterm.cpp index 348784fb..c75038a3 100644 --- a/src/fvterm.cpp +++ b/src/fvterm.cpp @@ -2058,7 +2058,8 @@ bool FVTerm::clearTerm (wchar_t fillchar) const appendAttributes (next_attribute); if ( ! ( (cl || cd || cb) && (normal || ut) ) - || fillchar != L' ' ) + || fillchar != L' ' + || ! draw_completed ) { return false; } diff --git a/src/fwidget.cpp b/src/fwidget.cpp index c49dbcf1..057128f1 100644 --- a/src/fwidget.cpp +++ b/src/fwidget.cpp @@ -949,7 +949,9 @@ void FWidget::resize() resizeVTerm (term_geometry.getSize()); resizeArea (term_geometry, getShadow(), getVirtualDesktop()); + startDrawing(); // Avoid flickering - no update during adjustment adjustSizeGlobal(); + finishDrawing(); } else adjustSize(); diff --git a/test/ftermdata-test.cpp b/test/ftermdata-test.cpp index 0d07d827..2ffaa704 100644 --- a/test/ftermdata-test.cpp +++ b/test/ftermdata-test.cpp @@ -258,8 +258,14 @@ void FTermDataTest::dataTest() CPPUNIT_ASSERT ( data.isMonochron() == true ); CPPUNIT_ASSERT ( data.hasTermResized() == false ); - data.setTermResized (true); + data.setTermResized (true); // one signal CPPUNIT_ASSERT ( data.hasTermResized() == true ); + data.setTermResized (true); // two signals + CPPUNIT_ASSERT ( data.hasTermResized() == true ); + data.setTermResized (false); // one signal + CPPUNIT_ASSERT ( data.hasTermResized() == true ); + data.setTermResized (false); // no signal + CPPUNIT_ASSERT ( data.hasTermResized() == false ); }