diff --git a/src/frontend/stmclient.cc b/src/frontend/stmclient.cc index f1139ca..f814477 100644 --- a/src/frontend/stmclient.cc +++ b/src/frontend/stmclient.cc @@ -419,6 +419,8 @@ void STMClient::main( void ) const Network::NetworkException *exn = network->get_send_exception(); if ( exn ) { overlays.get_notification_engine().set_network_exception( *exn ); + } else { + overlays.get_notification_engine().clear_network_exception(); } } catch ( Network::NetworkException e ) { if ( !network->shutdown_in_progress() ) { diff --git a/src/frontend/terminaloverlay.cc b/src/frontend/terminaloverlay.cc index b6de10e..982ad8c 100644 --- a/src/frontend/terminaloverlay.cc +++ b/src/frontend/terminaloverlay.cc @@ -153,6 +153,7 @@ NotificationEngine::NotificationEngine() : last_word_from_server( timestamp() ), last_acked_state( timestamp() ), message(), + message_is_network_exception( false ), message_expiration( -1 ) {} diff --git a/src/frontend/terminaloverlay.h b/src/frontend/terminaloverlay.h index 68d42e3..2bbff53 100644 --- a/src/frontend/terminaloverlay.h +++ b/src/frontend/terminaloverlay.h @@ -21,6 +21,7 @@ #include "terminalframebuffer.h" #include "network.h" +#include "transportsender.h" #include "parser.h" #include @@ -129,6 +130,7 @@ namespace Overlay { uint64_t last_word_from_server; uint64_t last_acked_state; wstring message; + bool message_is_network_exception; uint64_t message_expiration; public: @@ -150,13 +152,24 @@ namespace Overlay { } else { message_expiration = timestamp() + 1000; } + message_is_network_exception = false; } void set_network_exception( const NetworkException &e ) { wchar_t tmp[ 128 ]; swprintf( tmp, 128, L"%s: %s", e.function.c_str(), strerror( e.the_errno ) ); - set_notification_string( wstring( tmp ) ); + + message = tmp; + message_is_network_exception = true; + message_expiration = timestamp() + Network::ACK_INTERVAL + 100; + } + + void clear_network_exception() + { + if ( message_is_network_exception ) { + set_notification_string( wstring( L"" ) ); + } } NotificationEngine();