Index: tool_arrow.c =================================================================== --- tool_arrow.c (revision 32904) +++ tool_arrow.c (revision 32905) @@ -53,6 +53,7 @@ void pcb_tool_arrow_uninit(void) { rnd_hid_notify_crosshair_change(&PCB->hidlib, rnd_false); + pcb_crosshair_attached_clean(&PCB->hidlib); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.AttachedBox.State = PCB_CH_STATE_FIRST; @@ -89,6 +90,7 @@ rnd_tool_save(hl); rnd_tool_is_saved = rnd_true; rnd_tool_select_by_name(hl, rnd_gui->control_is_pressed(rnd_gui)? "copy" : "move"); + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Ptr1 = pcb_crosshair_note.ptr1; pcb_crosshair.AttachedObject.Ptr2 = pcb_crosshair_note.ptr2; pcb_crosshair.AttachedObject.Ptr3 = pcb_crosshair_note.ptr3; Index: tool_copy.c =================================================================== --- tool_copy.c (revision 32904) +++ tool_copy.c (revision 32905) @@ -44,6 +44,7 @@ void pcb_tool_copy_uninit(void) { rnd_hid_notify_crosshair_change(&PCB->hidlib, rnd_false); + pcb_crosshair_attached_clean(&PCB->hidlib); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; rnd_hid_notify_crosshair_change(&PCB->hidlib, rnd_true); @@ -60,6 +61,7 @@ { int types = PCB_COPY_TYPES; + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = pcb_search_screen(hl->tool_x, hl->tool_y, types, &pcb_crosshair.AttachedObject.Ptr1, &pcb_crosshair.AttachedObject.Ptr2, &pcb_crosshair.AttachedObject.Ptr3); @@ -85,6 +87,7 @@ } /* reset identifiers */ + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.extobj_edit = NULL; Index: tool_insert.c =================================================================== --- tool_insert.c (revision 32904) +++ tool_insert.c (revision 32905) @@ -54,6 +54,7 @@ void pcb_tool_insert_uninit(void) { rnd_hid_notify_crosshair_change(&PCB->hidlib, rnd_false); + pcb_crosshair_attached_clean(&PCB->hidlib); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.extobj_edit = NULL; @@ -66,6 +67,7 @@ switch (pcb_crosshair.AttachedObject.State) { /* first notify, lookup object */ case PCB_CH_STATE_FIRST: + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = pcb_search_screen_maybe_selector(hl->tool_x, hl->tool_y, PCB_INSERT_TYPES, &pcb_crosshair.AttachedObject.Ptr1, &pcb_crosshair.AttachedObject.Ptr2, &pcb_crosshair.AttachedObject.Ptr3); @@ -74,6 +76,7 @@ pcb_any_obj_t *obj = (pcb_any_obj_t *)pcb_crosshair.AttachedObject.Ptr2; if (PCB_FLAG_TEST(PCB_FLAG_LOCK, obj)) { rnd_message(RND_MSG_WARNING, "Sorry, %s object is locked\n", pcb_obj_type_name(obj->type)); + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.extobj_edit = NULL; break; @@ -101,6 +104,7 @@ pcb_crosshair.AttachedObject.Ptr2, &polyIndex, InsertedPoint.X, InsertedPoint.Y, rnd_false, rnd_false); pcb_board_set_changed_flag(pcb, rnd_true); + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.extobj_edit = NULL; @@ -111,6 +115,7 @@ /* second notify, insert new point into object */ case PCB_CH_STATE_SECOND: + pcb_crosshair_attached_clean(hl); if (pcb_crosshair.AttachedObject.Type == PCB_OBJ_POLY) pcb_insert_point_in_object(PCB_OBJ_POLY, pcb_crosshair.AttachedObject.Ptr1, fake.poly, @@ -122,6 +127,7 @@ pcb_board_set_changed_flag(pcb, rnd_true); /* reset identifiers */ + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.extobj_edit = NULL; Index: tool_move.c =================================================================== --- tool_move.c (revision 32904) +++ tool_move.c (revision 32905) @@ -47,6 +47,7 @@ void pcb_tool_move_uninit(void) { rnd_hid_notify_crosshair_change(&PCB->hidlib, rnd_false); + pcb_crosshair_attached_clean(&PCB->hidlib); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; rnd_hid_notify_crosshair_change(&PCB->hidlib, rnd_true); @@ -64,6 +65,7 @@ { int types = PCB_MOVE_TYPES; + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = pcb_search_screen(hl->tool_x, hl->tool_y, types, &pcb_crosshair.AttachedObject.Ptr1, &pcb_crosshair.AttachedObject.Ptr2, &pcb_crosshair.AttachedObject.Ptr3); @@ -71,6 +73,7 @@ pcb_any_obj_t *obj = (pcb_any_obj_t *)pcb_crosshair.AttachedObject.Ptr2; if (PCB_FLAG_TEST(PCB_FLAG_LOCK, obj)) { rnd_message(RND_MSG_WARNING, "Sorry, %s object is locked\n", pcb_obj_type_name(obj->type)); + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.extobj_edit = NULL; } @@ -121,6 +124,7 @@ pcb_extobj_float_geo(pcb_crosshair.extobj_edit); /* reset identifiers */ + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.extobj_edit = NULL; Index: tool_polyhole.c =================================================================== --- tool_polyhole.c (revision 32904) +++ tool_polyhole.c (revision 32905) @@ -56,6 +56,7 @@ switch (pcb_crosshair.AttachedObject.State) { /* first notify, lookup object */ case PCB_CH_STATE_FIRST: + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedPolygon_pts = 0; pcb_crosshair.AttachedObject.Type = pcb_search_screen_maybe_selector(hl->tool_x, hl->tool_y, PCB_OBJ_POLY, @@ -68,6 +69,7 @@ if (PCB_FLAG_TEST(PCB_FLAG_LOCK, (pcb_poly_t *)pcb_crosshair.AttachedObject.Ptr2)) { rnd_message(RND_MSG_WARNING, "Sorry, poly object is locked\n"); + pcb_crosshair_attached_clean(hl); pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.extobj_edit = NULL; break;