Index: trunk/src/board.c =================================================================== --- trunk/src/board.c (revision 15998) +++ trunk/src/board.c (revision 15999) @@ -263,12 +263,12 @@ } /* sets cursor grid with respect to grid offset values */ -void pcb_board_set_grid(pcb_coord_t Grid, pcb_bool align) +void pcb_board_set_grid(pcb_coord_t Grid, pcb_bool align, pcb_coord_t ox, pcb_coord_t oy) { if (Grid >= 1 && Grid <= PCB_MAX_GRID) { if (align) { - PCB->GridOffsetX = pcb_crosshair.X % Grid; - PCB->GridOffsetY = pcb_crosshair.Y % Grid; + PCB->GridOffsetX = ox % Grid; + PCB->GridOffsetY = oy % Grid; } PCB->Grid = Grid; conf_set_design("editor/grid", "%$mS", Grid); Index: trunk/src/board.h =================================================================== --- trunk/src/board.h (revision 15998) +++ trunk/src/board.h (revision 15999) @@ -150,7 +150,7 @@ void pcb_board_remove(pcb_board_t *Ptr); /* sets cursor grid with respect to grid offset values */ -void pcb_board_set_grid(pcb_coord_t Grid, pcb_bool align); +void pcb_board_set_grid(pcb_coord_t Grid, pcb_bool align, pcb_coord_t ox, pcb_coord_t oy); /* sets a new line thickness */ void pcb_board_set_line_width(pcb_coord_t Size); Index: trunk/src/change_act.c =================================================================== --- trunk/src/change_act.c (revision 15998) +++ trunk/src/change_act.c (revision 15999) @@ -900,16 +900,16 @@ case F_Grid: if (absolute) - pcb_board_set_grid(value, pcb_false); + pcb_board_set_grid(value, pcb_false, 0, 0); else { /* On the way down, short against the minimum * PCB drawing unit */ if ((value + PCB->Grid) < 1) - pcb_board_set_grid(1, pcb_false); + pcb_board_set_grid(1, pcb_false, 0, 0); else if (PCB->Grid == 1) - pcb_board_set_grid(value, pcb_false); + pcb_board_set_grid(value, pcb_false, 0, 0); else - pcb_board_set_grid(value + PCB->Grid, pcb_false); + pcb_board_set_grid(value + PCB->Grid, pcb_false, 0, 0); } break; Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 15998) +++ trunk/src/gui_act.c (revision 15999) @@ -398,7 +398,7 @@ PCB->Grid = 1; if (pcb_crosshair_move_absolute(pcb_crosshair.X, pcb_crosshair.Y)) pcb_notify_crosshair_change(pcb_true); /* first notify was in MoveCrosshairAbs */ - pcb_board_set_grid(oldGrid, pcb_true); + pcb_board_set_grid(oldGrid, pcb_true, pcb_crosshair.X, pcb_crosshair.Y); } break;