Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 16777) +++ trunk/src/obj_subc.c (revision 16778) @@ -874,12 +874,11 @@ void *pcb_subc_op(pcb_data_t *Data, pcb_subc_t *sc, pcb_opfunc_t *opfunc, pcb_opctx_t *ctx, pcb_subc_op_undo_t batch_undo) { int n; - uundo_serial_t last; switch(batch_undo) { case PCB_SUBCOP_UNDO_SUBC: - pcb_undo_inc_serial(); - last = pcb_undo_serial(); + pcb_undo_freeze_serial(); + pcb_undo_freeze_add(); break; case PCB_SUBCOP_UNDO_BATCH: pcb_undo_inc_serial(); @@ -950,7 +949,7 @@ DrawSubc(sc); switch(batch_undo) { - case PCB_SUBCOP_UNDO_SUBC: pcb_undo_truncate_from(last); break; + case PCB_SUBCOP_UNDO_SUBC: pcb_undo_unfreeze_add(); pcb_undo_unfreeze_serial(); break; case PCB_SUBCOP_UNDO_BATCH: pcb_undo_unfreeze_serial(); break; } Index: trunk/src/undo.c =================================================================== --- trunk/src/undo.c (revision 16777) +++ trunk/src/undo.c (revision 16778) @@ -151,7 +151,9 @@ } pcb_undo_lock(); /* lock undo module to prevent from loops */ + uundo_freeze_add(&pcb_uundo); res = uundo_redo(&pcb_uundo); + uundo_unfreeze_add(&pcb_uundo); pcb_undo_unlock(); if (res != 0) @@ -278,3 +280,14 @@ uundo_unfreeze_serial(&pcb_uundo); } + +void pcb_undo_freeze_add(void) +{ + uundo_freeze_add(&pcb_uundo); +} + +void pcb_undo_unfreeze_add(void) +{ + uundo_unfreeze_add(&pcb_uundo); +} + Index: trunk/src/undo.h =================================================================== --- trunk/src/undo.h (revision 16777) +++ trunk/src/undo.h (revision 16778) @@ -52,6 +52,8 @@ void pcb_undo_freeze_serial(void); void pcb_undo_unfreeze_serial(void); +void pcb_undo_freeze_add(void); +void pcb_undo_unfreeze_add(void); /* Returns 0 if undo integrity is not broken */ int undo_check(void);