Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 21811) +++ trunk/src/data.c (revision 21812) @@ -799,7 +799,7 @@ #include "obj_arc_draw.h" #include "obj_line_draw.h" #include "conf_core.h" -unsigned long pcb_data_clear_obj_flag(pcb_data_t *data, pcb_objtype_t tmask, unsigned long flag, int redraw) +unsigned long pcb_data_clear_obj_flag(pcb_data_t *data, pcb_objtype_t tmask, unsigned long flag, int redraw, int undoable) { pcb_rtree_it_t it; pcb_box_t *n; @@ -815,6 +815,8 @@ PCB_FLAG_CLEAR(flag, (pcb_any_obj_t *)n); if (redraw) pcb_pstk_invalidate_draw((pcb_pstk_t *)n); + if (undoable) + pcb_undo_add_obj_to_flag((pcb_any_obj_t *)n); cnt++; } } @@ -833,6 +835,8 @@ PCB_FLAG_CLEAR(flag, (pcb_any_obj_t *)n); if (redraw) pcb_line_invalidate_draw(l, (pcb_line_t *)n); + if (undoable) + pcb_undo_add_obj_to_flag((pcb_any_obj_t *)n); cnt++; } } @@ -845,6 +849,8 @@ PCB_FLAG_CLEAR(flag, (pcb_any_obj_t *)n); if (redraw) pcb_arc_invalidate_draw(l, (pcb_arc_t *)n); + if (undoable) + pcb_undo_add_obj_to_flag((pcb_any_obj_t *)n); cnt++; } } @@ -857,6 +863,8 @@ PCB_FLAG_CLEAR(flag, (pcb_any_obj_t *)n); if (redraw) pcb_poly_invalidate_draw(l, (pcb_poly_t *)n); + if (undoable) + pcb_undo_add_obj_to_flag((pcb_any_obj_t *)n); cnt++; } } @@ -869,6 +877,8 @@ PCB_FLAG_CLEAR(flag, (pcb_any_obj_t *)n); if (redraw) pcb_text_invalidate_draw(l, (pcb_text_t *)n); + if (undoable) + pcb_undo_add_obj_to_flag((pcb_any_obj_t *)n); cnt++; } } @@ -878,9 +888,9 @@ return cnt; } -unsigned long pcb_data_clear_flag(pcb_data_t *data, unsigned long flag, int redraw) +unsigned long pcb_data_clear_flag(pcb_data_t *data, unsigned long flag, int redraw, int undoable) { - return pcb_data_clear_obj_flag(data, PCB_OBJ_CLASS_REAL, flag, redraw); + return pcb_data_clear_obj_flag(data, PCB_OBJ_CLASS_REAL, flag, redraw, undoable); } Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 21811) +++ trunk/src/data.h (revision 21812) @@ -217,9 +217,11 @@ void pcb_data_flag_change(pcb_data_t *data, pcb_objtype_t mask, int how, unsigned long flags); /* Clear specific static flag from all objects, optionally with matching - object types only. Returns number of object changed. */ -unsigned long pcb_data_clear_obj_flag(pcb_data_t *data, pcb_objtype_t tmask, unsigned long flag, int redraw); -unsigned long pcb_data_clear_flag(pcb_data_t *data, unsigned long flag, int redraw); + object types only. If redraw is not 0, issue an object redraw on change. + If undoable is not 0, add flag changes to the undo list. Returns number + of object changed. */ +unsigned long pcb_data_clear_obj_flag(pcb_data_t *data, pcb_objtype_t tmask, unsigned long flag, int redraw, int undoable); +unsigned long pcb_data_clear_flag(pcb_data_t *data, unsigned long flag, int redraw, int undoable); /* Clear the given dyflag bit from all objects under data */ void pcb_data_dynflag_clear(pcb_data_t *data, pcb_dynf_t dynf); Index: trunk/src/rats_act.c =================================================================== --- trunk/src/rats_act.c (revision 21811) +++ trunk/src/rats_act.c (revision 21812) @@ -65,7 +65,7 @@ PCB_ACT_CONVARG(1, FGW_KEYWORD, AddRats, op = fgw_keyword(&argv[1])); if (conf_core.temp.rat_warn) { - pcb_data_clear_flag(PCB->Data, PCB_FLAG_WARN, 1); + pcb_data_clear_flag(PCB->Data, PCB_FLAG_WARN, 1, 0); pcb_draw(); } switch (op) { @@ -178,7 +178,7 @@ PCB_ACT_CONVARG(1, FGW_KEYWORD, DeleteRats, op = fgw_keyword(&argv[1])); if (conf_core.temp.rat_warn) { - pcb_data_clear_flag(PCB->Data, PCB_FLAG_WARN, 1); + pcb_data_clear_flag(PCB->Data, PCB_FLAG_WARN, 1, 0); pcb_draw(); } switch(op) { Index: trunk/src/tool.c =================================================================== --- trunk/src/tool.c (revision 21811) +++ trunk/src/tool.c (revision 21812) @@ -414,7 +414,7 @@ return; if (conf_core.temp.rat_warn) - pcb_data_clear_flag(PCB->Data, PCB_FLAG_WARN, 1); + pcb_data_clear_flag(PCB->Data, PCB_FLAG_WARN, 1, 0); pcb_tool_notify_mode(); pcb_draw(); }