Index: trunk/src/tool.c =================================================================== --- trunk/src/tool.c (revision 16505) +++ trunk/src/tool.c (revision 16506) @@ -119,13 +119,9 @@ pcb_crosshair.AttachedObject.Type = PCB_OBJ_VOID; pcb_crosshair.AttachedObject.State = PCB_CH_STATE_FIRST; pcb_crosshair.AttachedPolygon.PointN = 0; - if (PCB->RatDraw) { - if (id == PCB_MODE_ARC || id == PCB_MODE_RECTANGLE || - id == PCB_MODE_VIA || id == PCB_MODE_POLYGON || - id == PCB_MODE_POLYGON_HOLE || id == PCB_MODE_TEXT || id == PCB_MODE_THERMAL) { - pcb_message(PCB_MSG_WARNING, _("That mode is NOT allowed when drawing ratlines!\n")); - id = PCB_MODE_NO; - } + if (PCB->RatDraw && !pcb_tool_get(id)->allow_when_drawing_ratlines) { + pcb_message(PCB_MSG_WARNING, _("That mode is NOT allowed when drawing ratlines!\n")); + id = PCB_MODE_NO; } if (conf_core.editor.mode == PCB_MODE_LINE && id == PCB_MODE_ARC && pcb_crosshair.AttachedLine.State != PCB_CH_STATE_FIRST) { pcb_crosshair.AttachedLine.State = PCB_CH_STATE_FIRST; Index: trunk/src/tool.h =================================================================== --- trunk/src/tool.h (revision 16505) +++ trunk/src/tool.h (revision 16506) @@ -68,6 +68,8 @@ void (*draw_attached)(void); pcb_bool (*undo_act)(void); pcb_bool (*redo_act)(void); + + pcb_bool allow_when_drawing_ratlines; } pcb_tool_t; vtp0_t pcb_tools; Index: trunk/src/tool_arc.c =================================================================== --- trunk/src/tool_arc.c (revision 16505) +++ trunk/src/tool_arc.c (revision 16506) @@ -169,5 +169,7 @@ pcb_tool_arc_adjust_attached_objects, pcb_tool_arc_draw_attached, pcb_tool_arc_undo_act, - NULL + NULL, + + pcb_false }; Index: trunk/src/tool_arrow.c =================================================================== --- trunk/src/tool_arrow.c (revision 16505) +++ trunk/src/tool_arrow.c (revision 16506) @@ -207,5 +207,7 @@ pcb_tool_arrow_adjust_attached_objects, NULL, NULL, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_buffer.c =================================================================== --- trunk/src/tool_buffer.c (revision 16505) +++ trunk/src/tool_buffer.c (revision 16506) @@ -97,5 +97,7 @@ NULL, pcb_tool_buffer_draw_attached, NULL, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_copy.c =================================================================== --- trunk/src/tool_copy.c (revision 16505) +++ trunk/src/tool_copy.c (revision 16506) @@ -108,5 +108,7 @@ NULL, pcb_tool_copy_draw_attached, pcb_tool_copy_undo_act, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_insert.c =================================================================== --- trunk/src/tool_insert.c (revision 16505) +++ trunk/src/tool_insert.c (revision 16506) @@ -132,5 +132,7 @@ pcb_tool_insert_adjust_attached_objects, pcb_tool_insert_draw_attached, pcb_tool_insert_undo_act, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_line.c =================================================================== --- trunk/src/tool_line.c (revision 16505) +++ trunk/src/tool_line.c (revision 16506) @@ -428,5 +428,7 @@ pcb_tool_line_adjust_attached_objects, pcb_tool_line_draw_attached, pcb_tool_line_undo_act, - pcb_tool_line_redo_act + pcb_tool_line_redo_act, + + pcb_true }; Index: trunk/src/tool_lock.c =================================================================== --- trunk/src/tool_lock.c (revision 16505) +++ trunk/src/tool_lock.c (revision 16506) @@ -82,5 +82,7 @@ NULL, NULL, NULL, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_move.c =================================================================== --- trunk/src/tool_move.c (revision 16505) +++ trunk/src/tool_move.c (revision 16506) @@ -112,5 +112,7 @@ NULL, pcb_tool_move_draw_attached, pcb_tool_move_undo_act, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_poly.c =================================================================== --- trunk/src/tool_poly.c (revision 16505) +++ trunk/src/tool_poly.c (revision 16506) @@ -146,4 +146,6 @@ pcb_tool_poly_draw_attached, pcb_tool_poly_undo_act, pcb_tool_poly_redo_act, + + pcb_false }; Index: trunk/src/tool_polyhole.c =================================================================== --- trunk/src/tool_polyhole.c (revision 16505) +++ trunk/src/tool_polyhole.c (revision 16506) @@ -176,5 +176,7 @@ pcb_tool_polyhole_adjust_attached_objects, pcb_tool_polyhole_draw_attached, pcb_tool_polyhole_undo_act, - pcb_tool_polyhole_redo_act + pcb_tool_polyhole_redo_act, + + pcb_false }; Index: trunk/src/tool_rectangle.c =================================================================== --- trunk/src/tool_rectangle.c (revision 16505) +++ trunk/src/tool_rectangle.c (revision 16506) @@ -112,5 +112,7 @@ pcb_tool_rectangle_adjust_attached_objects, NULL, pcb_tool_rectangle_anydo_act, - pcb_tool_rectangle_anydo_act + pcb_tool_rectangle_anydo_act, + + pcb_false }; Index: trunk/src/tool_remove.c =================================================================== --- trunk/src/tool_remove.c (revision 16505) +++ trunk/src/tool_remove.c (revision 16506) @@ -87,5 +87,7 @@ NULL, NULL, NULL, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_rotate.c =================================================================== --- trunk/src/tool_rotate.c (revision 16505) +++ trunk/src/tool_rotate.c (revision 16506) @@ -54,5 +54,7 @@ NULL, NULL, NULL, - NULL + NULL, + + pcb_true }; Index: trunk/src/tool_text.c =================================================================== --- trunk/src/tool_text.c (revision 16505) +++ trunk/src/tool_text.c (revision 16506) @@ -98,6 +98,8 @@ NULL, pcb_tool_text_draw_attached, NULL, - NULL + NULL, + + pcb_false }; Index: trunk/src/tool_thermal.c =================================================================== --- trunk/src/tool_thermal.c (revision 16505) +++ trunk/src/tool_thermal.c (revision 16506) @@ -108,5 +108,7 @@ NULL, NULL, NULL, - NULL + NULL, + + pcb_false }; Index: trunk/src/tool_via.c =================================================================== --- trunk/src/tool_via.c (revision 16505) +++ trunk/src/tool_via.c (revision 16506) @@ -111,5 +111,7 @@ NULL, pcb_tool_via_draw_attached, NULL, - NULL + NULL, + + pcb_false };