Index: trunk/src/extobj.h =================================================================== --- trunk/src/extobj.h (revision 28739) +++ trunk/src/extobj.h (revision 28740) @@ -114,8 +114,10 @@ if (eo == NULL) return NULL; - if (eo->edit_pre != NULL) + if ((eo->edit_pre != NULL) && !edit_obj->extobj_editing) { + edit_obj->extobj_editing = 1; eo->edit_pre(sc, edit_obj); + } return edit_obj; } @@ -131,8 +133,10 @@ if (eo == NULL) return; - if (eo->edit_pre != NULL) + if ((eo->edit_pre != NULL) && edit_obj->extobj_editing) { eo->edit_geo(sc, edit_obj); + edit_obj->extobj_editing = 0; + } } PCB_INLINE void pcb_extobj_new_subc(pcb_any_obj_t *edit_obj, pcb_subc_t *subc_copy_from) Index: trunk/src/obj_common.h =================================================================== --- trunk/src/obj_common.h (revision 28739) +++ trunk/src/obj_common.h (revision 28740) @@ -197,6 +197,7 @@ unsigned char intconn, intnoconn; \ unsigned int noexport:1; \ unsigned int noexport_named:1; \ + unsigned int extobj_editing:1; \ const pcb_color_t *override_color /* Lines, pads, and rats all use this so they can be cross-cast. */