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 ); }