Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 13101) +++ trunk/src/obj_pstk.c (revision 13102) @@ -700,6 +700,8 @@ b = tmp; \ } while(0) +pcb_data_t *pcb_pstk_data_hack = NULL; + static int undo_change_instance_swap(void *udata) { padstack_change_instance_t *u = udata; @@ -709,6 +711,8 @@ if (u->parent_ID != -1) { pcb_subc_t *subc = pcb_subc_by_id(PCB->Data, u->parent_ID); int n; + if ((subc == NULL) && (pcb_pstk_data_hack != NULL)) + subc = pcb_subc_by_id(pcb_pstk_data_hack, u->parent_ID); for(n = 0; (subc == NULL) && (n < PCB_MAX_BUFFER); n++) subc = pcb_subc_by_id(pcb_buffers[n].Data, u->parent_ID); if (subc == NULL) { Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 13101) +++ trunk/src/obj_pstk.h (revision 13102) @@ -170,6 +170,8 @@ /* Low level move - updates only the coordinates and the bbox */ void pcb_pstk_move_(pcb_pstk_t *ps, pcb_coord_t dx, pcb_coord_t dy); +/* Temporary hack until we have a refcounted objects and ID->pcb_any_obj_t hash */ +extern pcb_data_t *pcb_pstk_data_hack; /*** hash ***/ Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 13101) +++ trunk/src/obj_subc.c (revision 13102) @@ -1348,7 +1348,7 @@ pcb_subc_t *newsc, *newsc2; int n; pcb_board_t *pcb; - pcb_data_t *data; + pcb_data_t *data, *oldhack; if (PCB_FLAG_TEST(PCB_FLAG_LOCK, *subc)) return (pcb_false); @@ -1362,6 +1362,9 @@ ctx.buffer.pcb = pcb_data_get_top((*subc)->data); ctx.buffer.dst = pcb_data_new(NULL); ctx.buffer.src = data; + + oldhack = pcb_pstk_data_hack; + pcb_pstk_data_hack = ctx.buffer.dst; newsc = pcb_subcop_move_to_buffer(&ctx, *subc); @@ -1384,6 +1387,7 @@ *subc = newsc2; pcb_subc_free(newsc); pcb_data_free(ctx.buffer.dst); + pcb_pstk_data_hack = oldhack; return pcb_true; }