From 71b1b52384b1cafc97ed797898a1a31a2dd6245c Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Thu, 7 Mar 2024 17:48:41 +0100 Subject: [PATCH] fix some unwanted persistency of constrained move (now renamed to constr_mv and moved into xctx struct), not being reset at end of command --- doc/xschem_man/commands.html | 2 +- src/callback.c | 166 +++++++++++++++++++---------------- src/globals.c | 1 - src/keys.help | 2 +- src/scheduler.c | 8 +- src/xinit.c | 1 + src/xschem.h | 1 + src/xschem.tcl | 16 ++-- 8 files changed, 109 insertions(+), 88 deletions(-) diff --git a/doc/xschem_man/commands.html b/doc/xschem_man/commands.html index 04ac17a2..742fb29c 100644 --- a/doc/xschem_man/commands.html +++ b/doc/xschem_man/commands.html @@ -182,7 +182,7 @@ ctrl 'o' Load schematic ctrl 'm' Move selected objects, stretching wires attached to them Alt 'm' Move selected objects, insert wires when separating touching instance pins/wires shift 'M' Move selected objects, insert wires when separating touching instance pins/wires - Stretch wires that land on selected instance pins. +ctrl+shift 'M' Move selected objects, combine Shift-M and Ctrl-m shift 'N' Top level only netlist - 'n' Hierarchical Netlist ctrl 'n' Clear schematic diff --git a/src/callback.c b/src/callback.c index 06d08e97..ae9199dc 100644 --- a/src/callback.c +++ b/src/callback.c @@ -72,24 +72,24 @@ static int waves_selected(int event, KeySym key, int state, int button) void redraw_w_a_l_r_p_rubbers(void) { if(xctx->ui_state & STARTWIRE) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap); } if(xctx->ui_state & STARTARC) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_arc(RUBBER, 0, xctx->mousex_snap, xctx->mousey_snap); } if(xctx->ui_state & STARTLINE) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap); } if(xctx->ui_state & STARTRECT) new_rect(RUBBER,xctx->mousex_snap, xctx->mousey_snap); if(xctx->ui_state & STARTPOLYGON) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_polygon(RUBBER, xctx->mousex_snap, xctx->mousey_snap); } } @@ -98,9 +98,9 @@ void redraw_w_a_l_r_p_rubbers(void) void abort_operation(void) { xctx->no_draw = 0; - tcleval("set constrained_move 0" ); + tcleval("set constr_mv 0" ); dbg(1, "abort_operation(): Escape: ui_state=%d, last_command=%d\n", xctx->ui_state, xctx->last_command); - constrained_move=0; + xctx->constr_mv=0; if(xctx->last_command && xctx->ui_state & (STARTWIRE | STARTLINE)) { if(xctx->ui_state & STARTWIRE) new_wire(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap); if(xctx->ui_state & STARTLINE) new_line(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap); @@ -160,14 +160,14 @@ static void start_line(double mx, double my) { xctx->last_command = STARTLINE; if(xctx->ui_state & STARTLINE) { - if(constrained_move != 2) { + if(xctx->constr_mv != 2) { xctx->mx_double_save=mx; } - if(constrained_move != 1) { + if(xctx->constr_mv != 1) { xctx->my_double_save=my; } - if(constrained_move == 1) my = xctx->my_double_save; - if(constrained_move == 2) mx = xctx->mx_double_save; + if(xctx->constr_mv == 1) my = xctx->my_double_save; + if(xctx->constr_mv == 2) mx = xctx->mx_double_save; } else { xctx->mx_double_save=mx; xctx->my_double_save=my; @@ -179,14 +179,14 @@ static void start_wire(double mx, double my) { xctx->last_command = STARTWIRE; if(xctx->ui_state & STARTWIRE) { - if(constrained_move != 2) { + if(xctx->constr_mv != 2) { xctx->mx_double_save = mx; } - if(constrained_move != 1) { + if(xctx->constr_mv != 1) { xctx->my_double_save = my; } - if(constrained_move == 1) my = xctx->my_double_save; - if(constrained_move == 2) mx = xctx->mx_double_save; + if(xctx->constr_mv == 1) my = xctx->my_double_save; + if(xctx->constr_mv == 2) mx = xctx->mx_double_save; } else { xctx->mx_double_save=mx; xctx->my_double_save=my; @@ -1109,7 +1109,7 @@ void draw_crosshair(int del) } /* complete the STARTWIRE, STARTRECT, STARTZOOM, STARTCOPY ... operations */ -static int end_place_move_copy_zoom(int constrained_move) +static int end_place_move_copy_zoom() { if(xctx->ui_state & STARTZOOM) { zoom_rectangle(END); @@ -1117,21 +1117,21 @@ static int end_place_move_copy_zoom(int constrained_move) } else if(xctx->ui_state & STARTWIRE) { if(tclgetboolvar("persistent_command")) { - if(constrained_move != 2) { + if(xctx->constr_mv != 2) { xctx->mx_double_save=xctx->mousex_snap; } - if(constrained_move != 1) { + if(xctx->constr_mv != 1) { xctx->my_double_save=xctx->mousey_snap; } - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_wire(PLACE, xctx->mousex_snap, xctx->mousey_snap); } else { new_wire(PLACE|END, xctx->mousex_snap, xctx->mousey_snap); } - constrained_move=0; - tcleval("set constrained_move 0" ); + xctx->constr_mv=0; + tcleval("set constr_mv 0" ); return 1; } else if(xctx->ui_state & STARTARC) { @@ -1140,20 +1140,20 @@ static int end_place_move_copy_zoom(int constrained_move) } else if(xctx->ui_state & STARTLINE) { if(tclgetboolvar("persistent_command")) { - if(constrained_move != 2) { + if(xctx->constr_mv != 2) { xctx->mx_double_save=xctx->mousex_snap; } - if(constrained_move == 1) { + if(xctx->constr_mv == 1) { xctx->my_double_save=xctx->mousey_snap; } - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_line(PLACE, xctx->mousex_snap, xctx->mousey_snap); } else { new_line(PLACE|END, xctx->mousex_snap, xctx->mousey_snap); } - constrained_move=0; - tcleval("set constrained_move 0" ); + xctx->constr_mv=0; + tcleval("set constr_mv 0" ); return 1; } else if(xctx->ui_state & STARTRECT) { @@ -1161,26 +1161,26 @@ static int end_place_move_copy_zoom(int constrained_move) return 1; } else if(xctx->ui_state & STARTPOLYGON) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_polygon(ADD, xctx->mousex_snap, xctx->mousey_snap); xctx->mx_double_save=xctx->mousex_snap; xctx->my_double_save=xctx->mousey_snap; - constrained_move=0; - tcleval("set constrained_move 0" ); + xctx->constr_mv=0; + tcleval("set constr_mv 0" ); return 1; } else if(xctx->ui_state & STARTMOVE) { move_objects(END,0,0,0); xctx->ui_state &=~START_SYMPIN; - constrained_move=0; - tcleval("set constrained_move 0" ); + xctx->constr_mv=0; + tcleval("set constr_mv 0" ); return 1; } else if(xctx->ui_state & STARTCOPY) { copy_objects(END); - constrained_move=0; - tcleval("set constrained_move 0" ); + xctx->constr_mv=0; + tcleval("set constr_mv 0" ); return 1; } return 0; @@ -1526,16 +1526,16 @@ static void context_menu_action(double mx, double my) prev_state = xctx->ui_state; start_wire(mx, my); if(prev_state == STARTWIRE) { - tcleval("set constrained_move 0" ); - constrained_move=0; + tcleval("set constr_mv 0" ); + xctx->constr_mv=0; } break; case 3: prev_state = xctx->ui_state; start_line(mx, my); if(prev_state == STARTLINE) { - tcleval("set constrained_move 0" ); - constrained_move=0; + tcleval("set constr_mv 0" ); + xctx->constr_mv=0; } break; case 4: @@ -1950,13 +1950,13 @@ int rstate; /* (reduced state, without ShiftMask) */ } } if(xctx->ui_state & STARTMOVE) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; move_objects(RUBBER,0,0,0); } if(xctx->ui_state & STARTCOPY) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; copy_objects(RUBBER); } @@ -2123,21 +2123,21 @@ int rstate; /* (reduced state, without ShiftMask) */ } if(key == 'h' && rstate == 0) { /* horizontally constrained drag 20171023 */ - if ( constrained_move == 1 ) { - tcleval("set constrained_move 0" ); - constrained_move = 0; + if ( xctx->constr_mv == 1 ) { + tcleval("set constr_mv 0" ); + xctx->constr_mv = 0; } else { - tcleval("set constrained_move 1" ); - constrained_move = 1; + tcleval("set constr_mv 1" ); + xctx->constr_mv = 1; } if(xctx->ui_state & STARTWIRE) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap); } if(xctx->ui_state & STARTLINE) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap); } break; @@ -2152,21 +2152,21 @@ int rstate; /* (reduced state, without ShiftMask) */ } if(key == 'v' && rstate==0) { /* vertically constrained drag 20171023 */ - if ( constrained_move == 2 ) { - tcleval("set constrained_move 0" ); - constrained_move = 0; + if ( xctx->constr_mv == 2 ) { + tcleval("set constr_mv 0" ); + xctx->constr_mv = 0; } else { - tcleval("set constrained_move 2" ); - constrained_move = 2; + tcleval("set constr_mv 2" ); + xctx->constr_mv = 2; } if(xctx->ui_state & STARTWIRE) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap); } if(xctx->ui_state & STARTLINE) { - if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save; - if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save; + if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save; + if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save; new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap); } break; @@ -2262,8 +2262,8 @@ int rstate; /* (reduced state, without ShiftMask) */ find_closest_net_or_symbol_pin(xctx->mousex, xctx->mousey, &x, &y); new_wire(RUBBER, x, y); new_wire(PLACE|END, x, y); - constrained_move=0; - tcleval("set constrained_move 0" ); + xctx->constr_mv=0; + tcleval("set constr_mv 0" ); } break; } @@ -2273,8 +2273,8 @@ int rstate; /* (reduced state, without ShiftMask) */ if(xctx->semaphore >= 2) break; start_wire(xctx->mousex_snap, xctx->mousey_snap); if(prev_state == STARTWIRE) { - tcleval("set constrained_move 0" ); - constrained_move=0; + tcleval("set constr_mv 0" ); + xctx->constr_mv=0; } break; } @@ -2944,8 +2944,8 @@ int rstate; /* (reduced state, without ShiftMask) */ int prev_state = xctx->ui_state; start_line(xctx->mousex_snap, xctx->mousey_snap); if(prev_state == STARTLINE) { - tcleval("set constrained_move 0" ); - constrained_move=0; + tcleval("set constr_mv 0" ); + xctx->constr_mv=0; } break; } @@ -3109,6 +3109,18 @@ int rstate; /* (reduced state, without ShiftMask) */ move_objects(START,0,0,0); break; } + if(key=='M' && state == (ControlMask | ShiftMask) && + !(xctx->ui_state & (STARTMOVE | STARTCOPY))) /* move selection */ + { + xctx->mx_double_save=xctx->mousex_snap; + xctx->my_double_save=xctx->mousey_snap; + if(!tclgetboolvar("enable_stretch")) + select_attached_nets(); /* stretch nets that land on selected instance pins */ + xctx->connect_by_kissing = 2; /* 2 will be used to reset var to 0 at end of move */ + move_objects(START,0,0,0); + break; + } + if(key=='c' && EQUAL_MODMASK && /* duplicate selection */ !(xctx->ui_state & (STARTMOVE | STARTCOPY))) @@ -3439,7 +3451,7 @@ int rstate; /* (reduced state, without ShiftMask) */ /* handle all object insertions started from Tools menu */ if(check_menu_start_commands(c_snap)) break; /* complete the STARTWIRE, STARTRECT, STARTZOOM, STARTCOPY ... operations */ - if(end_place_move_copy_zoom(constrained_move)) break; + if(end_place_move_copy_zoom()) break; /* Button1Press to select objects */ if( !(xctx->ui_state & STARTSELECT) && !(xctx->ui_state & STARTWIRE) && !(xctx->ui_state & STARTLINE) ) { @@ -3478,7 +3490,6 @@ int rstate; /* (reduced state, without ShiftMask) */ if(add_wire_from_inst_pin(&sel, xctx->mousex_snap, xctx->mousey_snap)) break; } - if(xctx->intuitive_interface && !already_selected && no_shift_no_ctrl ) unselect_all(1); if(!already_selected) select_object(xctx->mousex, xctx->mousey, SELECTED, 0, &sel); @@ -3502,10 +3513,15 @@ int rstate; /* (reduced state, without ShiftMask) */ xctx->push_undo(); xctx->drag_elements = 1; - if( state == ControlMask && !tclgetboolvar("enable_stretch")) { + if( state & ControlMask && !tclgetboolvar("enable_stretch")) { select_attached_nets(); /* stretch nets that land on selected instance pins */ } - if(state == ShiftMask) copy_objects(START); + + if(state == (ShiftMask | ControlMask) ) { + xctx->connect_by_kissing = 2; /* 2 will be used to reset var to 0 at end of move */ + move_objects(START,0,0,0); + } + else if(state == ShiftMask) copy_objects(START); else move_objects(START,0,0,0); } diff --git a/src/globals.c b/src/globals.c index ac3c9829..0de06eb7 100644 --- a/src/globals.c +++ b/src/globals.c @@ -161,7 +161,6 @@ double nocairo_vert_correct=0.0; /* compared to the nocairo xschem version. */ /* allowed values should be in the range [-4, 4] */ double cairo_vert_correct=0.0; -int constrained_move = 0; double cairo_font_scale=1.0; /* default: 1.0, allows to adjust font size */ double cairo_font_line_spacing = 1.0; /* value taken from xschemrc / xschem.tcl */ int debug_var=-10; /* will be set to 0 in xinit.c */ diff --git a/src/keys.help b/src/keys.help index 3a3c5f26..01ec1c4a 100644 --- a/src/keys.help +++ b/src/keys.help @@ -142,7 +142,7 @@ ctrl 'o' Load schematic ctrl 'm' Move selected objects, stretching wires attached to them Alt 'm' Move selected objects, insert wires when separating touching instance pins/wires shift 'M' Move selected objects, insert wires when separating touching instance pins/wires - Stretch wires that land on selected instance pins. +ctrl+shift 'M' Move selected objects, combine Shift-M and Ctrl-m shift 'N' Top level only netlist - 'n' Hierarchical Netlist ctrl 'n' Clear schematic diff --git a/src/scheduler.c b/src/scheduler.c index e66295f1..d7ee49d1 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -1163,6 +1163,10 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg if(color_ps != 0 ) Tcl_SetResult(interp, "1",TCL_STATIC); else Tcl_SetResult(interp, "0",TCL_STATIC); } + else if(!strcmp(argv[2], "constr_mv")) { /* color postscript flag */ + if(xctx->constr_mv != 0 ) Tcl_SetResult(interp, "1",TCL_STATIC); + else Tcl_SetResult(interp, "0",TCL_STATIC); + } else if(!strcmp(argv[2], "current_dirname")) { /* directory name of current design */ if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;} Tcl_SetResult(interp, xctx->current_dirname, TCL_VOLATILE); @@ -4595,8 +4599,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg else if(!strcmp(argv[2], "color_ps")) { /* set color psoscript (1 or 0) */ color_ps=atoi(argv[3]); } - else if(!strcmp(argv[2], "constrained_move")) { /* set constrained move (1=horiz, 2=vert, 0=none) */ - constrained_move = atoi(argv[3]); + else if(!strcmp(argv[2], "constr_mv")) { /* set constrained move (1=horiz, 2=vert, 0=none) */ + xctx->constr_mv = atoi(argv[3]); } else if(!strcmp(argv[2], "cursor1_x")) { /* set graph cursor1 position */ xctx->graph_cursor1_x = atof_spice(argv[3]); diff --git a/src/xinit.c b/src/xinit.c index 97b86810..2b3facc9 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -505,6 +505,7 @@ static void alloc_xschem_data(const char *top_path, const char *win_path) xctx->header_text = NULL; xctx->rectcolor= 4; /* this is the current layer when xschem started. */ xctx->currsch = 0; + xctx->constr_mv = 0; /* constrained move (vertical (2) / horizontal (1) ) */ xctx->ui_state = 0; xctx->ui_state2 = 0; xctx->lw = 0.0; diff --git a/src/xschem.h b/src/xschem.h index acd100ba..94440c9a 100644 --- a/src/xschem.h +++ b/src/xschem.h @@ -929,6 +929,7 @@ typedef struct { unsigned int ui_state; /* this signals that we are doing a net place,panning etc. * used to prevent nesting of some commands */ unsigned int ui_state2; /* sub states of ui_state MENUSTART bit */ + int constr_mv; /* constrained move (vertical (2) / horizontal (1) ) */ double mousex,mousey; /* mouse coord. */ double mousex_snap,mousey_snap; /* mouse coord. snapped to grid */ double mx_double_save, my_double_save; diff --git a/src/xschem.tcl b/src/xschem.tcl index 49b315d8..9b0c0348 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -6866,7 +6866,7 @@ set tctx::global_list { INITIALINSTDIR INITIALLOADDIR INITIALPROPDIR INITIALTEXTDIR XSCHEM_LIBRARY_PATH add_all_windows_drives auto_hilight autofocus_mainwindow autotrim_wires bespice_listen_port big_grid_points bus_replacement_char cadgrid cadlayers - cadsnap cairo_font_name change_lw color_ps tctx::colors compare_sch constrained_move + cadsnap cairo_font_name change_lw color_ps tctx::colors compare_sch constr_mv copy_cell crosshair_layer custom_label_prefix custom_token dark_colors dark_colorscheme dark_gui_colorscheme delay_flag dim_bg dim_value disable_unique_names do_all_inst draw_crosshair @@ -7520,12 +7520,12 @@ proc build_widgets { {topwin {} } } { -command {xschem flip} -accelerator {Shift-F} $topwin.menubar.edit.menu add command -label "Rotate selected objects" -state normal \ -command {xschem rotate} -accelerator {Shift-R} - $topwin.menubar.edit.menu add radiobutton -label "Unconstrained move" -variable constrained_move \ - -selectcolor $selectcolor -background grey60 -value 0 -command {xschem set constrained_move 0} - $topwin.menubar.edit.menu add radiobutton -label "Constrained Horizontal move" -variable constrained_move \ - -selectcolor $selectcolor -background grey60 -value 1 -accelerator H -command {xschem set constrained_move 1} - $topwin.menubar.edit.menu add radiobutton -label "Constrained Vertical move" -variable constrained_move \ - -selectcolor $selectcolor -background grey60 -value 2 -accelerator V -command {xschem set constrained_move 2} + $topwin.menubar.edit.menu add radiobutton -label "Unconstrained move" -variable constr_mv \ + -selectcolor $selectcolor -background grey60 -value 0 -command {xschem set constr_mv 0} + $topwin.menubar.edit.menu add radiobutton -label "Constrained Horizontal move" -variable constr_mv \ + -selectcolor $selectcolor -background grey60 -value 1 -accelerator H -command {xschem set constr_mv 1} + $topwin.menubar.edit.menu add radiobutton -label "Constrained Vertical move" -variable constr_mv \ + -selectcolor $selectcolor -background grey60 -value 2 -accelerator V -command {xschem set constr_mv 2} $topwin.menubar.edit.menu add command -label "Push schematic" -command "xschem descend" -accelerator E toolbar_add EditPushSch "xschem descend" "Push schematic" $topwin $topwin.menubar.edit.menu add command -label "Push symbol" -command "xschem descend_symbol" -accelerator I @@ -8318,7 +8318,7 @@ set_ne draw_window 0 set_ne show_hidden_texts 0 set_ne incr_hilight 1 set_ne enable_stretch 0 -set_ne constrained_move 0 +set_ne constr_mv 0 set_ne unselect_partial_sel_wires 0 set_ne load_file_dialog_fullpath 1