From 2b40854e2f5f7a92c7d872c9f7adcecd2e2b8b34 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Wed, 6 Jul 2016 23:11:49 +0200 Subject: [PATCH] Stop terminal updates during processCloseWidget() is working --- ChangeLog | 3 +++ src/fapp.cpp | 2 ++ src/fterm.cpp | 29 ++++++++++++++++++++--------- src/fterm.h | 2 ++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index ad3cb22a..9f0ed22f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2016-07-06 Markus Gans + * Stop terminal updates during processCloseWidget() is working + 2016-07-03 Markus Gans * Add the new class FDialogListMenu to switch between dialog menus * More consistent method names: diff --git a/src/fapp.cpp b/src/fapp.cpp index cf25bd77..7e687974 100644 --- a/src/fapp.cpp +++ b/src/fapp.cpp @@ -1244,6 +1244,7 @@ void FApplication::processTerminalUpdate() //---------------------------------------------------------------------- void FApplication::processCloseWidget() { + updateTerminal(false); if ( close_widget && ! close_widget->empty() ) { widgetList::iterator iter; @@ -1256,6 +1257,7 @@ void FApplication::processCloseWidget() } close_widget->clear(); } + updateTerminal(true); } //---------------------------------------------------------------------- diff --git a/src/fterm.cpp b/src/fterm.cpp index 04849405..f810c67b 100644 --- a/src/fterm.cpp +++ b/src/fterm.cpp @@ -64,6 +64,7 @@ bool FTerm::linux_terminal; bool FTerm::screen_terminal; bool FTerm::tmux_terminal; bool FTerm::terminal_updates; +bool FTerm::stop_terminal_updates; bool FTerm::vterm_updates; bool FTerm::pc_charset_console; bool FTerm::utf8_input; @@ -129,14 +130,14 @@ FTerm::FTerm() { term_initialized = true; term_object = this; - fd_tty = -1; - vterm = 0; - vdesktop = 0; - vmenubar = 0; - vstatusbar = 0; - last_area = 0; - x_term_pos = -1; - y_term_pos = -1; + fd_tty = -1; + vterm = 0; + vdesktop = 0; + vmenubar = 0; + vstatusbar = 0; + last_area = 0; + x_term_pos = -1; + y_term_pos = -1; opti_move = new FOptiMove(); opti_attr = new FOptiAttr(); @@ -1598,6 +1599,7 @@ void FTerm::init() mintty_terminal = \ screen_terminal = \ tmux_terminal = \ + stop_terminal_updates = \ background_color_erase = false; // term_attribute stores the current state of the terminal @@ -2996,7 +2998,8 @@ void FTerm::updateTerminal() FApplication* fapp; int term_width, term_height; - if ( static_cast(term_object)->isQuit() ) + if ( stop_terminal_updates + || static_cast(term_object)->isQuit() ) return; if ( ! force_terminal_update ) @@ -3078,6 +3081,14 @@ void FTerm::updateTerminal() } } +//---------------------------------------------------------------------- +void FTerm::updateTerminal (bool on) +{ + stop_terminal_updates = bool(! on); + if ( on ) + updateTerminal(); +} + //---------------------------------------------------------------------- void FTerm::setKDECursor (fc::kde_konsole_CursorShape style) { diff --git a/src/fterm.h b/src/fterm.h index fd4438f5..1ae7ddbf 100644 --- a/src/fterm.h +++ b/src/fterm.h @@ -137,6 +137,7 @@ class FTerm static bool screen_terminal; static bool tmux_terminal; static bool terminal_updates; + static bool stop_terminal_updates; static bool vterm_updates; static bool background_color_erase; static bool automatic_left_margin; @@ -312,6 +313,7 @@ class FTerm static void resizeVTerm(); static void putVTerm(); static void updateTerminal(); + static void updateTerminal (bool); static void setKDECursor (fc::kde_konsole_CursorShape); static FString getXTermFont(); static FString getXTermTitle();