Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 13099) +++ trunk/src/obj_subc.c (revision 13100) @@ -932,7 +932,23 @@ pcb_subcop_move(&ctx, sc); } +pcb_bool pcb_selected_subc_change_side(void) +{ + pcb_bool change = pcb_false; + if (PCB->PinOn && pcb_silk_on(PCB)) { + PCB_SUBC_LOOP(PCB->Data); + { + if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, subc)) { + change |= pcb_subc_change_side(&subc, 0); + } + } + PCB_END_LOOP; + } + return change; +} + + static int subc_relocate_layer_objs(pcb_layer_t *dl, pcb_data_t *src_data, pcb_layer_t *sl, int src_has_real_layer, int dst_is_pcb) { pcb_line_t *line; Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 13099) +++ trunk/src/obj_subc.h (revision 13100) @@ -70,6 +70,8 @@ /* High level move (op wrapper; no undo) */ void pcb_subc_move(pcb_subc_t *sc, pcb_coord_t dx, pcb_coord_t dy, pcb_bool more_to_come); +/* changes the side of all selected and visible subcs; returns pcb_true if anything has changed */ +pcb_bool pcb_selected_subc_change_side(void); /* Draw a subcircuit for a preview (silk, copper and outline only) */ void pcb_subc_draw_preview(const pcb_subc_t *sc, pcb_box_t *drawn_area);