Index: trunk/src/actions.c =================================================================== --- trunk/src/actions.c (revision 18558) +++ trunk/src/actions.c (revision 18559) @@ -333,7 +333,7 @@ return res.val.nat_int; } -void pcb_hid_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y) +void pcb_hid_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force) { if (pcb_gui == NULL) { fprintf(stderr, "pcb_hid_get_coords: can not get coordinates (no gui) for '%s'\n", msg); @@ -341,7 +341,7 @@ *y = 0; } else - pcb_gui->get_coords(msg, x, y); + pcb_gui->get_coords(msg, x, y, force); } static int hid_parse_actionstring(const char *rstr, char require_parens) Index: trunk/src/actions.h =================================================================== --- trunk/src/actions.h (revision 18558) +++ trunk/src/actions.h (revision 18559) @@ -90,8 +90,11 @@ void pcb_cli_uninit(void); /* If the mouse cursor is in the drawin area, set x;y silently and return; - else show msg and let the user click in the drawing area */ -void pcb_hid_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y); + else show msg and let the user click in the drawing area. If force is + non-zero and msg is non-NULL, discard the cache and force querying a + new coord. This mode must NOT be used unless action arguments explictly + requested it. */ +void pcb_hid_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force); #define PCB_ACTION_MAX_ARGS 16 Index: trunk/src/change_act.c =================================================================== --- trunk/src/change_act.c (revision 18558) +++ trunk/src/change_act.c (revision 18559) @@ -97,7 +97,7 @@ int funcid = pcb_funchash_get(function, NULL); if (funcid == F_Object) { - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); got_coords = 1; type = pcb_search_screen(x, y, PCB_CHANGECLEARSIZE_TYPES, &ptr1, &ptr2, &ptr3); } @@ -104,7 +104,7 @@ if (strcmp(delta, "style") == 0) { if (!got_coords) { - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); got_coords = 1; } @@ -214,7 +214,7 @@ void *ptr1, *ptr2, *ptr3; pcb_coord_t x, y; - pcb_hid_get_coords("Click on object to change", &x, &y); + pcb_hid_get_coords("Click on object to change", &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_CHANGESIZE_TYPES, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) if (PCB_FLAG_TEST(PCB_FLAG_LOCK, (pcb_any_obj_t *) ptr2)) @@ -324,7 +324,7 @@ if (funcid == F_Object) { pcb_coord_t x, y; - pcb_hid_get_coords("Click on object to change size of", &x, &y); + pcb_hid_get_coords("Click on object to change size of", &x, &y, 0); type = pcb_search_screen(x, y, PCB_CHANGESIZE_TYPES, &ptr1, &ptr2, &ptr3); } @@ -421,7 +421,7 @@ if (funcid == F_Object) { pcb_coord_t x, y; - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); type = pcb_search_screen(x, y, PCB_CHANGE2NDSIZE_TYPES, &ptr1, &ptr2, &ptr3); } @@ -560,7 +560,7 @@ case F_Subc: { pcb_coord_t x, y; - pcb_hid_get_coords("Select a subcircuit", &x, &y); + pcb_hid_get_coords("Select a subcircuit", &x, &y, 0); type = PCB_OBJ_SUBC; goto do_chg_name; } @@ -569,7 +569,7 @@ { pcb_coord_t x, y; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); type = PCB_CHANGENAME_TYPES; do_chg_name:; if ((type = pcb_search_screen(x, y, type, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) { @@ -640,7 +640,7 @@ int type; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_CHANGEJOIN_TYPES, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) if (pcb_chg_obj_join(type, ptr1, ptr2, ptr3)) pcb_board_set_changed_flag(pcb_true); @@ -698,7 +698,7 @@ pcb_coord_t x, y; int type; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords(_("Select an Element"), &x, &y); + pcb_hid_get_coords(_("Select an Element"), &x, &y, 0); ptr3 = NULL; type = pcb_search_screen(x, y, PCB_CHANGENONETLIST_TYPES, &ptr1, &ptr2, &ptr3); @@ -769,7 +769,7 @@ if (absolute && (kind <= 5)) switch (pcb_funchash_get(function, NULL)) { case F_Object: - pcb_hid_get_coords("Click on object for SetThermal", &gx, &gy); + pcb_hid_get_coords("Click on object for SetThermal", &gx, &gy, 0); if ((type = pcb_search_screen(gx, gy, PCB_CHANGETHERMAL_TYPES, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) { pcb_chg_obj_thermal(type, ptr1, ptr2, ptr3, kind, INDEXOFCURRENT); pcb_undo_inc_serial(); @@ -998,7 +998,7 @@ if (funcid == F_Object) { pcb_coord_t x, y; - pcb_hid_get_coords("Click on object to change angle of", &x, &y); + pcb_hid_get_coords("Click on object to change angle of", &x, &y, 0); type = pcb_search_screen(x, y, PCB_CHANGESIZE_TYPES, &ptr1, &ptr2, &ptr3); } @@ -1075,7 +1075,7 @@ if (funcid == F_Object) { pcb_coord_t x, y; - pcb_hid_get_coords("Click on object to change radius of", &x, &y); + pcb_hid_get_coords("Click on object to change radius of", &x, &y, 0); type = pcb_search_screen(x, y, PCB_CHANGESIZE_TYPES, &ptr1, &ptr2, &ptr3); } Index: trunk/src/file_act.c =================================================================== --- trunk/src/file_act.c (revision 18558) +++ trunk/src/file_act.c (revision 18559) @@ -305,7 +305,7 @@ pcb_bool result; pcb_coord_t x, y; - pcb_hid_get_coords("Click on an element", &x, &y); + pcb_hid_get_coords("Click on an element", &x, &y, 0); if ((pcb_search_screen(x, y, PCB_OBJ_SUBC, &ptrtmp, &ptrtmp, &ptrtmp)) != PCB_OBJ_VOID) { pcb_subc_t *subc = (pcb_subc_t *) ptrtmp; if ((fp = pcb_check_and_open_file(name, pcb_true, pcb_false, &result, NULL)) != NULL) { Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 18558) +++ trunk/src/gui_act.c (revision 18559) @@ -418,7 +418,7 @@ void *ptrtmp; pcb_coord_t x, y; - pcb_hid_get_coords(_("Click on a subcircuit"), &x, &y); + pcb_hid_get_coords(_("Click on a subcircuit"), &x, &y, 0); if ((pcb_search_screen(x, y, PCB_OBJ_SUBC, &ptrtmp, &ptrtmp, &ptrtmp)) != PCB_OBJ_VOID) { subc = (pcb_subc_t *) ptrtmp; pcb_gui->show_item(subc); @@ -432,7 +432,7 @@ int type; void *ptr1, *ptr2, *ptr3; pcb_coord_t x, y; - pcb_hid_get_coords(_("Click on a subcircuit"), &x, &y); + pcb_hid_get_coords(_("Click on a subcircuit"), &x, &y, 0); /* toggle terminal ID print for subcircuit parts */ type = pcb_search_screen(x, y, PCB_OBJ_SUBC | PCB_OBJ_SUBC_PART | PCB_OBJ_PSTK | PCB_OBJ_LINE | PCB_OBJ_ARC | PCB_OBJ_POLY | PCB_OBJ_TEXT, (void **)&ptr1, (void **)&ptr2, (void **)&ptr3); @@ -903,7 +903,7 @@ pcb_marked.Y = pcb_crosshair.Y; } else - pcb_hid_get_coords(_("Click on new mark"), &pcb_marked.X, &pcb_marked.Y); + pcb_hid_get_coords(_("Click on new mark"), &pcb_marked.X, &pcb_marked.Y, 0); pcb_notify_mark_change(pcb_true); } } @@ -915,7 +915,7 @@ pcb_marked.Y = pcb_crosshair.Y; } else - pcb_hid_get_coords(_("Click on new mark"), &pcb_marked.X, &pcb_marked.Y); + pcb_hid_get_coords(_("Click on new mark"), &pcb_marked.X, &pcb_marked.Y, 0); pcb_notify_mark_change(pcb_true); } return 0; @@ -1075,7 +1075,7 @@ int type; pcb_layer_t *layer = CURRENT; - pcb_hid_get_coords("Select item to use properties from", &x, &y); + pcb_hid_get_coords("Select item to use properties from", &x, &y, 0); type = pcb_search_screen(x, y, CLONE_TYPES, &ptr1, &ptr2, &ptr3); /* set layer current and size from line or arc */ @@ -1906,7 +1906,7 @@ const char *msg = "Click to enter a coordinate."; PCB_ACT_MAY_CONVARG(1, FGW_STR, GetXY, msg = argv[1].val.str); PCB_ACT_IRES(0); - pcb_hid_get_coords(msg, &x, &y); + pcb_hid_get_coords(msg, &x, &y, 0); return 0; } Index: trunk/src/hid.h =================================================================== --- trunk/src/hid.h (revision 18558) +++ trunk/src/hid.h (revision 18559) @@ -299,7 +299,7 @@ int (*control_is_pressed)(void); int (*mod1_is_pressed)(void); - void (*get_coords)(const char *msg, pcb_coord_t *x, pcb_coord_t *y); + void (*get_coords)(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force); /* Fill in width and height with the sizes of the current view in pcb coordinates. used by action "Cursor" to determine max cursor pos. Index: trunk/src/hid_nogui.c =================================================================== --- trunk/src/hid_nogui.c (revision 18558) +++ trunk/src/hid_nogui.c (revision 18559) @@ -188,7 +188,7 @@ return 0; } -static void nogui_get_coords(const char *msg, pcb_coord_t * x, pcb_coord_t * y) +static void nogui_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force) { CRASH("get_coords"); } Index: trunk/src/obj_pstk_act.c =================================================================== --- trunk/src/obj_pstk_act.c (revision 18558) +++ trunk/src/obj_pstk_act.c (revision 18559) @@ -55,7 +55,7 @@ PCB_ACT_CONVARG(3, FGW_COORD, padstackconvert, y = fgw_coord(&argv[3])); } else { - pcb_hid_get_coords("Click at padstack origin", &x, &y); + pcb_hid_get_coords("Click at padstack origin", &x, &y, 0); /* rather use the snapped corsshair coords */ x = pcb_crosshair.X; y = pcb_crosshair.Y; @@ -117,7 +117,7 @@ pcb_objtype_t type; pcb_coord_t x, y; - pcb_hid_get_coords("Select a padstack to break up", &x, &y); + pcb_hid_get_coords("Select a padstack to break up", &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_OBJ_PSTK, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_PSTK) { pcb_message(PCB_MSG_ERROR, "Need a padstack under the cursor\n"); break; @@ -176,7 +176,7 @@ PCB_ACT_CONVARG(3, FGW_COORD, padstackconvert, y = fgw_coord(&argv[3])); } else { - pcb_hid_get_coords("Click at padstack origin", &x, &y); + pcb_hid_get_coords("Click at padstack origin", &x, &y, 0); /* rather use the snapped corsshair coords */ x = pcb_crosshair.X; y = pcb_crosshair.Y; Index: trunk/src/object_act.c =================================================================== --- trunk/src/object_act.c (revision 18558) +++ trunk/src/object_act.c (revision 18559) @@ -130,7 +130,7 @@ if (n_found == 0) { pcb_coord_t x, y; void *ptrtmp; - pcb_hid_get_coords("Click on a subcircuit", &x, &y); + pcb_hid_get_coords("Click on a subcircuit", &x, &y, 0); if ((pcb_search_screen(x, y, PCB_OBJ_SUBC, &ptrtmp, &ptrtmp, &ptrtmp)) != PCB_OBJ_VOID) s = (pcb_subc_t *)ptrtmp; else { @@ -285,7 +285,7 @@ PCB_ACT_CONVARG(1, FGW_KEYWORD, Flip, id = fgw_keyword(&argv[1])); PCB_ACT_IRES(0); - pcb_hid_get_coords("Click on Object or Flip Point", &x, &y); + pcb_hid_get_coords("Click on Object or Flip Point", &x, &y, 0); switch(id) { case F_Object: @@ -338,7 +338,7 @@ fgw_str2coord_unit_restore(saved); - pcb_hid_get_coords("Select an Object", &x, &y); + pcb_hid_get_coords("Select an Object", &x, &y, 0); type = pcb_search_screen(pcb_crosshair.X, pcb_crosshair.Y, PCB_MOVE_TYPES, &ptr1, &ptr2, &ptr3); if (type == PCB_OBJ_VOID) { @@ -388,7 +388,7 @@ int type; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords("Select an Object", &x, &y); + pcb_hid_get_coords("Select an Object", &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_MOVETOLAYER_TYPES | PCB_LOOSE_SUBC, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) { pcb_layer_t *target = CURRENT; pcb_any_obj_t *o = ptr2; @@ -1162,7 +1162,7 @@ PCB_ACT_CONVARG(1, FGW_INT, Rotate90, steps = argv[1].val.nat_int); PCB_ACT_IRES(0); - pcb_hid_get_coords("Select an Object", &x, &y); + pcb_hid_get_coords("Select an Object", &x, &y, 0); if (conf_core.editor.show_solder_side) steps = -steps; Index: trunk/src/polygon_act.c =================================================================== --- trunk/src/polygon_act.c (revision 18558) +++ trunk/src/polygon_act.c (revision 18559) @@ -75,7 +75,7 @@ int type; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_OBJ_POLY, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) { pcb_poly_morph((pcb_layer_t *) ptr1, (pcb_poly_t *) ptr3); pcb_draw(); Index: trunk/src/rats_act.c =================================================================== --- trunk/src/rats_act.c (revision 18558) +++ trunk/src/rats_act.c (revision 18559) @@ -166,7 +166,7 @@ case F_Find: { pcb_coord_t x, y; - pcb_hid_get_coords(_("Click on a connection"), &x, &y); + pcb_hid_get_coords(_("Click on a connection"), &x, &y, 0); pcb_lookup_conn(x, y, pcb_true, 1, PCB_FLAG_FOUND); break; } Index: trunk/src/remove_act.c =================================================================== --- trunk/src/remove_act.c (revision 18558) +++ trunk/src/remove_act.c (revision 18559) @@ -59,7 +59,7 @@ switch(id) { case F_Object: - pcb_hid_get_coords("Click on object to delete", &pcb_tool_note.X, &pcb_tool_note.Y); + pcb_hid_get_coords("Click on object to delete", &pcb_tool_note.X, &pcb_tool_note.Y, 0); pcb_tool_save(); pcb_tool_select_by_id(PCB_MODE_REMOVE); pcb_notify_mode(); Index: trunk/src/select_act.c =================================================================== --- trunk/src/select_act.c (revision 18558) +++ trunk/src/select_act.c (revision 18559) @@ -146,7 +146,7 @@ pcb_tool_note.Buffer = conf_core.editor.buffer_number; pcb_buffer_set_number(PCB_MAX_BUFFER - 1); pcb_buffer_clear(PCB, PCB_PASTEBUFFER); - pcb_hid_get_coords(_("Select the Subcircuit's Origin (mark) Location"), &x, &y); + pcb_hid_get_coords(_("Select the Subcircuit's Origin (mark) Location"), &x, &y, 0); x = pcb_grid_fit(x, PCB->Grid, PCB->GridOffsetX); y = pcb_grid_fit(y, PCB->Grid, PCB->GridOffsetY); pcb_buffer_add_selected(PCB, PCB_PASTEBUFFER, x, y, pcb_true); Index: trunk/src_plugins/diag/diag.c =================================================================== --- trunk/src_plugins/diag/diag.c (revision 18558) +++ trunk/src_plugins/diag/diag.c (revision 18559) @@ -425,7 +425,7 @@ PCB_ACT_CONVARG(1, FGW_STR, forcecolor, new_color = argv[1].val.str); - pcb_hid_get_coords("Click on object to change", &x, &y); + pcb_hid_get_coords("Click on object to change", &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_FORCECOLOR_TYPES, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID){ strncpy(((pcb_any_obj_t *)ptr2)->override_color, new_color, sizeof(((pcb_any_obj_t *)ptr2)->override_color)-1); Index: trunk/src_plugins/dialogs/dlg_flag_edit.c =================================================================== --- trunk/src_plugins/dialogs/dlg_flag_edit.c (revision 18558) +++ trunk/src_plugins/dialogs/dlg_flag_edit.c (revision 18559) @@ -89,7 +89,7 @@ if (op == F_Object) { pcb_coord_t x, y; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords("Click on object to change flags of", &x, &y); + pcb_hid_get_coords("Click on object to change flags of", &x, &y, 0); type = pcb_search_screen(x, y, PCB_FLAGEDIT_TYPES | PCB_LOOSE_SUBC, &ptr1, &ptr2, &ptr3); ctx.ptr1 = ptr1; ctx.obj = (pcb_any_obj_t *)ptr2; Index: trunk/src_plugins/dialogs/dlg_layer_binding.c =================================================================== --- trunk/src_plugins/dialogs/dlg_layer_binding.c (revision 18558) +++ trunk/src_plugins/dialogs/dlg_layer_binding.c (revision 18559) @@ -202,7 +202,7 @@ pcb_coord_t x, y; int type; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords("Click on subc to change the layer binding of", &x, &y); + pcb_hid_get_coords("Click on subc to change the layer binding of", &x, &y, 0); type = pcb_search_screen(x, y, PCB_OBJ_SUBC, &ptr1, &ptr2, &ptr3); if (type != PCB_OBJ_SUBC) { pcb_message(PCB_MSG_ERROR, "No subc under the cursor\n"); Index: trunk/src_plugins/dialogs/dlg_padstack.c =================================================================== --- trunk/src_plugins/dialogs/dlg_padstack.c (revision 18558) +++ trunk/src_plugins/dialogs/dlg_padstack.c (revision 18559) @@ -596,7 +596,7 @@ pcb_coord_t x, y; void *ptr1, *ptr2 = NULL, *ptr3; long type; - pcb_hid_get_coords("Click on a padstack to edit", &x, &y); + pcb_hid_get_coords("Click on a padstack to edit", &x, &y, 0); type = pcb_search_screen(x, y, PCB_OBJ_PSTK | PCB_OBJ_SUBC_PART | PCB_LOOSE_SUBC, &ptr1, &ptr2, &ptr3); if (type != PCB_OBJ_PSTK) { pcb_message(PCB_MSG_ERROR, "Need a padstack.\n"); Index: trunk/src_plugins/extedit/extedit.c =================================================================== --- trunk/src_plugins/extedit/extedit.c (revision 18558) +++ trunk/src_plugins/extedit/extedit.c (revision 18559) @@ -183,7 +183,7 @@ /* pick up the object to edit */ if ((cmd == NULL) || (pcb_strcasecmp(cmd, "object") == 0)) { pcb_coord_t x, y; - pcb_hid_get_coords("Click on object to edit", &x, &y); + pcb_hid_get_coords("Click on object to edit", &x, &y, 0); type = pcb_search_screen(x, y, EXTEDIT_TYPES, &ptr1, &ptr2, &ptr3); } else if ((argc > 1) && (pcb_strcasecmp(cmd, "selected") == 0)) { Index: trunk/src_plugins/hid_batch/batch.c =================================================================== --- trunk/src_plugins/hid_batch/batch.c (revision 18558) +++ trunk/src_plugins/hid_batch/batch.c (revision 18559) @@ -247,7 +247,7 @@ return 0; } -static void batch_get_coords(const char *msg, pcb_coord_t * x, pcb_coord_t * y) +static void batch_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force) { } Index: trunk/src_plugins/hid_lesstif/dialogs.c =================================================================== --- trunk/src_plugins/hid_lesstif/dialogs.c (revision 18558) +++ trunk/src_plugins/hid_lesstif/dialogs.c (revision 18559) @@ -1528,7 +1528,7 @@ pcb_coord_t x, y; int type; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_CHANGENAME_TYPES, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) { /* pcb_undo_save_serial();*/ lesstif_show_fontsel_edit(ptr1, ptr2, type); Index: trunk/src_plugins/hid_lesstif/main.c =================================================================== --- trunk/src_plugins/hid_lesstif/main.c (revision 18558) +++ trunk/src_plugins/hid_lesstif/main.c (revision 18559) @@ -440,7 +440,7 @@ const char *vp, *ovp; double v; - pcb_hid_get_coords("Click on a place to zoom in", &x, &y); + pcb_hid_get_coords("Click on a place to zoom in", &x, &y, 0); if (x == 0 && y == 0) { x = view_width / 2; @@ -552,7 +552,7 @@ pcb_coord_t x, y; int mode; - pcb_hid_get_coords("Click on a place to pan", &x, &y); + pcb_hid_get_coords("Click on a place to pan", &x, &y, 0); PCB_ACT_MAY_CONVARG(1, FGW_STR, Pan, a0 = argv[1].val.str); PCB_ACT_MAY_CONVARG(2, FGW_STR, Pan, a1 = argv[2].val.str); @@ -857,7 +857,7 @@ { pcb_coord_t x, y; - pcb_hid_get_coords("Click on a location to center", &x, &y); + pcb_hid_get_coords("Click on a location to center", &x, &y, 0); x = pcb_grid_fit(x, PCB->Grid, PCB->GridOffsetX); y = pcb_grid_fit(y, PCB->Grid, PCB->GridOffsetY); @@ -3357,7 +3357,7 @@ return alt_pressed; } -extern void lesstif_get_coords(const char *msg, pcb_coord_t * x, pcb_coord_t * y); +extern void lesstif_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force); static void lesstif_set_crosshair(pcb_coord_t x, pcb_coord_t y, int action) { Index: trunk/src_plugins/hid_lesstif/menu.c =================================================================== --- trunk/src_plugins/hid_lesstif/menu.c (revision 18558) +++ trunk/src_plugins/hid_lesstif/menu.c (revision 18559) @@ -161,9 +161,9 @@ XtUnmanageChild(m_click); } -void lesstif_get_coords(const char *msg, pcb_coord_t * px, pcb_coord_t * py) +void lesstif_get_coords(const char *msg, pcb_coord_t *px, pcb_coord_t *py, int force) { - if (!have_xy && msg) + if ((force || !have_xy) && msg) lesstif_get_xy(msg); if (have_xy) lesstif_coords_to_pcb(action_x, action_y, px, py); Index: trunk/src_plugins/hid_remote/remote.c =================================================================== --- trunk/src_plugins/hid_remote/remote.c (revision 18558) +++ trunk/src_plugins/hid_remote/remote.c (revision 18559) @@ -317,7 +317,7 @@ return 0; } -static void remote_get_coords(const char *msg, pcb_coord_t * x, pcb_coord_t * y) +static void remote_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force) { } Index: trunk/src_plugins/import_sch/import_sch.c =================================================================== --- trunk/src_plugins/import_sch/import_sch.c (revision 18558) +++ trunk/src_plugins/import_sch/import_sch.c (revision 18559) @@ -225,7 +225,7 @@ PCB_ACT_MAY_CONVARG(4, FGW_STR, Import, units = argv[4].val.str); if (!xs) { - pcb_hid_get_coords(_("Click on a location"), &x, &y); + pcb_hid_get_coords(_("Click on a location"), &x, &y, 0); } else if (pcb_strcasecmp(xs, "center") == 0) { pcb_attrib_remove(PCB, "import::newX"); Index: trunk/src_plugins/lib_gtk_common/ui_zoompan.c =================================================================== --- trunk/src_plugins/lib_gtk_common/ui_zoompan.c (revision 18558) +++ trunk/src_plugins/lib_gtk_common/ui_zoompan.c (revision 18559) @@ -346,7 +346,7 @@ if (v <= 0) return 1; - pcb_hid_get_coords("Select zoom center", &x, &y); + pcb_hid_get_coords("Select zoom center", &x, &y, 0); switch (ovp[0]) { case '-': pcb_gtk_zoom_view_rel(vw, x, y, 1 / v); @@ -586,9 +586,9 @@ } -void pcb_gtk_get_coords(pcb_gtk_mouse_t *mouse, pcb_gtk_view_t *vw, const char *msg, pcb_coord_t * x, pcb_coord_t * y) +void pcb_gtk_get_coords(pcb_gtk_mouse_t *mouse, pcb_gtk_view_t *vw, const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force) { - if (!vw->has_entered && msg) + if ((force || !vw->has_entered) && msg) ghid_get_user_xy(mouse, msg); if (vw->has_entered) { *x = vw->pcb_x; Index: trunk/src_plugins/lib_gtk_common/ui_zoompan.h =================================================================== --- trunk/src_plugins/lib_gtk_common/ui_zoompan.h (revision 18558) +++ trunk/src_plugins/lib_gtk_common/ui_zoompan.h (revision 18559) @@ -111,7 +111,7 @@ extern const char pcb_acth_pan[]; fgw_error_t pcb_gtk_act_pan(pcb_gtk_view_t *vw, fgw_arg_t *res, int argc, fgw_arg_t *argv); -void pcb_gtk_get_coords(pcb_gtk_mouse_t *mouse, pcb_gtk_view_t *vw, const char *msg, pcb_coord_t * x, pcb_coord_t * y); +void pcb_gtk_get_coords(pcb_gtk_mouse_t *mouse, pcb_gtk_view_t *vw, const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force); /* Update adj limits to match the current zoom level */ static inline void pcb_gtk_zoom_adjustment(GtkAdjustment *adj, pcb_coord_t view_size, pcb_coord_t board_size) Index: trunk/src_plugins/lib_gtk_hid/actions.c =================================================================== --- trunk/src_plugins/lib_gtk_hid/actions.c (revision 18558) +++ trunk/src_plugins/lib_gtk_hid/actions.c (revision 18559) @@ -94,7 +94,7 @@ pcb_coord_t x, y; int type; void *ptr1, *ptr2, *ptr3; - pcb_hid_get_coords(_("Select an Object"), &x, &y); + pcb_hid_get_coords(_("Select an Object"), &x, &y, 0); if ((type = pcb_search_screen(x, y, PCB_CHANGENAME_TYPES, &ptr1, &ptr2, &ptr3)) != PCB_OBJ_VOID) { /* pcb_undo_save_serial();*/ pcb_gtk_dlg_fontsel(&ghidgui->common, ptr1, ptr2, type, 1); @@ -287,7 +287,7 @@ pcb_coord_t x, y;; pcb_objtype_t type; void *o1, *o2, *o3; - pcb_hid_get_coords("context sensitive popup: select object", &x, &y); + pcb_hid_get_coords("context sensitive popup: select object", &x, &y, 0); type = pcb_search_screen(x, y, PCB_OBJ_PSTK | PCB_OBJ_SUBC_PART, &o1, &o2, &o3); if (type == 0) type = pcb_search_screen(x, y, PCB_OBJ_CLASS_REAL, &o1, &o2, &o3); @@ -358,7 +358,7 @@ GdkDisplay *display = gdk_display_get_default(); GdkScreen *screen = gdk_display_get_default_screen(display); - pcb_hid_get_coords("Click to center", &x, &y); + pcb_hid_get_coords("Click to center", &x, &y, 0); gdk_window_get_origin(gtk_widget_get_window(gport->drawing_area), &offset_x, &offset_y); e = pcb_gtk_act_center(&gport->view, res, argc, argv, x, y, offset_x, offset_y, &pointer_x, &pointer_y); Index: trunk/src_plugins/lib_gtk_hid/glue_hid.c =================================================================== --- trunk/src_plugins/lib_gtk_hid/glue_hid.c (revision 18558) +++ trunk/src_plugins/lib_gtk_hid/glue_hid.c (revision 18559) @@ -307,9 +307,9 @@ pcb_gtk_crosshair_set(x, y, action, offset_x, offset_y, &ghidgui->topwin.cps, &gport->view); } -static void ghid_get_coords(const char *msg, pcb_coord_t * x, pcb_coord_t * y) +static void ghid_get_coords(const char *msg, pcb_coord_t *x, pcb_coord_t *y, int force) { - pcb_gtk_get_coords(&gport->mouse, &gport->view, msg, x, y); + pcb_gtk_get_coords(&gport->mouse, &gport->view, msg, x, y, force); } static void ghid_get_view_size(pcb_coord_t * width, pcb_coord_t * height) Index: trunk/src_plugins/lib_polyhelp/topoly.c =================================================================== --- trunk/src_plugins/lib_polyhelp/topoly.c (revision 18558) +++ trunk/src_plugins/lib_polyhelp/topoly.c (revision 18559) @@ -325,7 +325,7 @@ if (op == NULL) { pcb_coord_t x, y; - pcb_hid_get_coords("Click on a line or arc of the contour loop", &x, &y); + pcb_hid_get_coords("Click on a line or arc of the contour loop", &x, &y, 0); if (pcb_search_screen(x, y, CONT_TYPE, &r1, &r2, &r3) == 0) { pcb_message(PCB_MSG_ERROR, "ToPoly(): failed to find a line or arc there\n"); PCB_ACT_IRES(1); Index: trunk/src_plugins/oldactions/oldactions.c =================================================================== --- trunk/src_plugins/oldactions/oldactions.c (revision 18558) +++ trunk/src_plugins/oldactions/oldactions.c (revision 18559) @@ -175,7 +175,7 @@ PCB_ACT_CONVARG(i, FGW_STR, debugxy, s = argv[i].val.str); printf(" [%d] `%s'", i, s); } - pcb_hid_get_coords("Click X,Y for Debug", &x, &y); + pcb_hid_get_coords("Click X,Y for Debug", &x, &y, 0); pcb_printf(" x,y %$mD\n", x, y); PCB_ACT_IRES(0); return 0; Index: trunk/src_plugins/polystitch/polystitch.c =================================================================== --- trunk/src_plugins/polystitch/polystitch.c (revision 18558) +++ trunk/src_plugins/polystitch/polystitch.c (revision 18559) @@ -94,7 +94,7 @@ pcb_coord_t x, y; pcb_poly_t *inner_poly, *outer_poly; - pcb_hid_get_coords("Select a corner on the inner polygon", &x, &y); + pcb_hid_get_coords("Select a corner on the inner polygon", &x, &y, 0); inner_poly = find_crosshair_poly(x, y); if (inner_poly) { Index: trunk/src_plugins/puller/puller.c =================================================================== --- trunk/src_plugins/puller/puller.c (revision 18558) +++ trunk/src_plugins/puller/puller.c (revision 18559) @@ -366,7 +366,7 @@ double tangent; int new_delta_angle; - pcb_hid_get_coords("Click on a line-arc intersection or line segment", &Ux, &Uy); + pcb_hid_get_coords("Click on a line-arc intersection or line segment", &Ux, &Uy, 0); if (!find_pair(pcb_crosshair.X, pcb_crosshair.Y)) { if (!find_pair(Ux, Uy)) { Index: trunk/src_plugins/report/report.c =================================================================== --- trunk/src_plugins/report/report.c (revision 18558) +++ trunk/src_plugins/report/report.c (revision 18559) @@ -153,7 +153,7 @@ char *op = NULL, *report = NULL; pcb_subc_t *subc; pcb_coord_t x, y; - pcb_hid_get_coords("Click on object to report on", &x, &y); + pcb_hid_get_coords("Click on object to report on", &x, &y, 0); PCB_ACT_MAY_CONVARG(1, FGW_STR, reportdialog, op = argv[1].val.str); @@ -615,7 +615,7 @@ int type; pcb_coord_t ox, oy, x, y; - pcb_hid_get_coords("Click on a copper line", &x, &y); + pcb_hid_get_coords("Click on a copper line", &x, &y, 0); type = pcb_search_screen(x, y, PCB_OBJ_LINE, &r1, &r2, &r3); if (type != PCB_OBJ_LINE) { @@ -660,7 +660,7 @@ } else { pcb_coord_t x, y; - pcb_hid_get_coords("Click on a network", &x, &y); + pcb_hid_get_coords("Click on a network", &x, &y, 0); return report_net_length_(res, argc, argv, x, y); } } @@ -810,15 +810,15 @@ PCB_ACT_CONVARG(1, FGW_STR, Report, cmd = argv[1].val.str); if (pcb_strcasecmp(cmd, "Object") == 0) { - pcb_hid_get_coords("Click on an object", &x, &y); + pcb_hid_get_coords("Click on an object", &x, &y, 0); return pcb_act_report_dialog(res, argc, argv); } else if (pcb_strncasecmp(cmd, "Subc", 4) == 0) { - pcb_hid_get_coords("Click on a subcircuit", &x, &y); + pcb_hid_get_coords("Click on a subcircuit", &x, &y, 0); return pcb_act_report_dialog(res, argc, argv); } - pcb_hid_get_coords("Click on object to report on", &x, &y); + pcb_hid_get_coords("Click on object to report on", &x, &y, 0); if (pcb_strcasecmp(cmd, "DrillReport") == 0) return report_drills(res, argc, argv); Index: trunk/src_plugins/shape/shape.c =================================================================== --- trunk/src_plugins/shape/shape.c (revision 18558) +++ trunk/src_plugins/shape/shape.c (revision 18559) @@ -372,7 +372,7 @@ } if ((data == PCB->Data) && (!have_coords)) - pcb_hid_get_coords("Click on the center of the polygon", &x, &y); + pcb_hid_get_coords("Click on the center of the polygon", &x, &y, 0); if (regpoly_place(data, CURRENT, corners, rx, ry, rot, x, y) == NULL) pcb_message(PCB_MSG_ERROR, "regpoly(): failed to create the polygon\n"); @@ -447,7 +447,7 @@ } if ((data == PCB->Data) && (!have_coords)) - pcb_hid_get_coords("Click on the center of the polygon", &x, &y); + pcb_hid_get_coords("Click on the center of the polygon", &x, &y, 0); if (roundrect_place(data, CURRENT, w, h, rx, ry, rot, x, y) == NULL) pcb_message(PCB_MSG_ERROR, "roundrect(): failed to create the polygon\n"); @@ -501,7 +501,7 @@ } if ((data == PCB->Data) && (!have_coords)) - pcb_hid_get_coords("Click on the center of the circle", &x, &y); + pcb_hid_get_coords("Click on the center of the circle", &x, &y, 0); if (circle_place(PCB->Data, CURRENT, dia, x, y) == NULL) pcb_message(PCB_MSG_ERROR, "circle(): failed to create the polygon\n");