Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 5651) +++ trunk/src/buffer.c (revision 5652) @@ -84,12 +84,15 @@ /* --------------------------------------------------------------------------- * calculates the bounding box of the buffer */ -void pcb_set_buffer_bbox(pcb_buffer_t *Buffer) +int pcb_set_buffer_bbox(pcb_buffer_t *Buffer) { pcb_box_t tmp, *box = pcb_data_bbox(&tmp, Buffer->Data); - if (box) + if (box) { Buffer->BoundingBox = *box; + return 0; + } + return -1; } /* --------------------------------------------------------------------------- Index: trunk/src/buffer.h =================================================================== --- trunk/src/buffer.h (revision 5651) +++ trunk/src/buffer.h (revision 5652) @@ -42,7 +42,10 @@ * prototypes */ void pcb_buffer_flip_side(pcb_buffer_t *Buffer); -void pcb_set_buffer_bbox(pcb_buffer_t *); + +/* returns 0 on success */ +int pcb_set_buffer_bbox(pcb_buffer_t *); + void pcb_buffer_clear(pcb_buffer_t *); void pcb_buffer_add_selected(pcb_buffer_t *, pcb_coord_t, pcb_coord_t, pcb_bool); pcb_bool pcb_buffer_load_layout(pcb_buffer_t *Buffer, const char *Filename, const char *fmt); Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 5651) +++ trunk/src/crosshair.c (revision 5652) @@ -1240,12 +1240,15 @@ void pcb_crosshair_range_to_buffer(void) { if (conf_core.editor.mode == PCB_MODE_PASTE_BUFFER) { - pcb_set_buffer_bbox(PCB_PASTEBUFFER); - pcb_crosshair_set_range(PCB_PASTEBUFFER->X - PCB_PASTEBUFFER->BoundingBox.X1, + if (pcb_set_buffer_bbox(PCB_PASTEBUFFER) == 0) { + pcb_crosshair_set_range(PCB_PASTEBUFFER->X - PCB_PASTEBUFFER->BoundingBox.X1, PCB_PASTEBUFFER->Y - PCB_PASTEBUFFER->BoundingBox.Y1, PCB->MaxWidth - (PCB_PASTEBUFFER->BoundingBox.X2 - PCB_PASTEBUFFER->X), PCB->MaxHeight - (PCB_PASTEBUFFER->BoundingBox.Y2 - PCB_PASTEBUFFER->Y)); + } + else /* failed to calculate the bounding box of the buffer, it's probably a single-object move, allow the whole page */ + pcb_crosshair_set_range(0, 0, PCB->MaxWidth, PCB->MaxHeight); } }