From 2f91da168d99cdc91e43cd1f9cb651fe795c32cc Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Wed, 5 Mar 2008 11:03:17 -0600 Subject: [PATCH] Make block undo and single undo work again. --- Loggable.C | 19 ++++++++++++++++--- Loggable.H | 8 ++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Loggable.C b/Loggable.C index 6f3b44a..6bd680e 100644 --- a/Loggable.C +++ b/Loggable.C @@ -242,15 +242,26 @@ Loggable::undo ( void ) int ui = _undo_index; + block_start(); + + if ( strcmp( b, "{" ) ) + { + /* It's a single undo, get rid of trailing messages in this block */ + + n = 1; + + s = b + 2; + s += strlen( s ) - 1; + } + while ( n-- ) { while ( s >= b && *(--s) ); s++; - if ( ( ! strcmp( s, "{" ) ) - || ( ! strcmp( s, "}" ) ) ) - continue; + if ( ! strcmp( s, "{" ) ) + break; if ( *s == '\t' ) s++; @@ -313,6 +324,8 @@ Loggable::undo ( void ) s -= 2; } + block_end(); + // FIXME: bogus... needs to account for multiple events. _undo_index = ui + 1; diff --git a/Loggable.H b/Loggable.H index 92b5fcc..1bd43e0 100644 --- a/Loggable.H +++ b/Loggable.H @@ -84,17 +84,17 @@ public: void block_start ( void ) { -// indent(); -// log( "{\n" ); ++Loggable::_level; } + static void block_end ( void ) { assert( --Loggable::_level >= 0 ); -// indent(); -// log( "}\n" ); + + if ( Loggable::_level == 0 ) + flush(); } static