Index: trunk/src/crosshair.h =================================================================== --- trunk/src/crosshair.h (revision 5284) +++ trunk/src/crosshair.h (revision 5285) @@ -50,6 +50,7 @@ void *Ptr1, /* three pointers to data, see */ *Ptr2, /* search.c */ *Ptr3; + pcb_angle_t start_angle, delta_angle; } pcb_attached_object_t; typedef struct { Index: trunk/src/move.c =================================================================== --- trunk/src/move.c (revision 5284) +++ trunk/src/move.c (revision 5285) @@ -107,13 +107,13 @@ if (Type == PCB_TYPE_ARC_POINT) { /* moving the endpoint of an arc is not really a move, but a change of arc properties */ - pcb_message(PCB_MSG_ERROR, "Unsupported: moving arc endpoint\n"); + pcb_arc_set_angles((pcb_layer_t *)Ptr1, (pcb_arc_t *)Ptr2, pcb_crosshair.AttachedObject.start_angle, pcb_crosshair.AttachedObject.delta_angle); } else { pcb_undo_add_obj_to_move(Type, Ptr1, Ptr2, Ptr3, DX, DY); ptr2 = pcb_object_operation(&MoveFunctions, &ctx, Type, Ptr1, Ptr2, Ptr3); - pcb_undo_inc_serial(); } + pcb_undo_inc_serial(); pcb_draw_inhibit_dec(); pcb_draw(); Index: trunk/src/obj_arc_ui.c =================================================================== --- trunk/src/obj_arc_ui.c (revision 5284) +++ trunk/src/obj_arc_ui.c (revision 5285) @@ -82,6 +82,10 @@ delta = new_delta; } + /* remember the result of the calculation so the actual move code can reuse them */ + ch->AttachedObject.start_angle = start; + ch->AttachedObject.delta_angle = delta; + pcb_gui->draw_arc(ch->GC, arc->X, arc->Y, arc->Width, arc->Height, start, delta); pcb_gui->draw_line(ch->GC, arc->X-mark, arc->Y, arc->X+mark, arc->Y); pcb_gui->draw_line(ch->GC, arc->X, arc->Y-mark, arc->X, arc->Y+mark);