diff --git a/src/actions.c b/src/actions.c index 3dfa03da..df78cd46 100644 --- a/src/actions.c +++ b/src/actions.c @@ -1655,7 +1655,18 @@ int schematic_in_new_window(int new_process, int dr, int force) rebuild_selected_array(); if(xctx->lastsel == 0) { if(new_process) new_xschem_process(xctx->sch[xctx->currsch], 0); - else new_schematic("create", force ? "noalert" : "", xctx->sch[xctx->currsch], dr); + else { + int gf = xctx->graph_flags; + double c1 = xctx->graph_cursor1_x; + double c2 = xctx->graph_cursor2_x; + new_schematic("create", force ? "noalert" : "", xctx->sch[xctx->currsch], dr); + + /* propagte raw cursor info to new window */ + xctx->graph_flags = gf; + xctx->graph_cursor1_x = c1; + xctx->graph_cursor2_x = c2; + dbg(1, "path=%s\n", xctx->current_win_path); + } return 1; } else if(xctx->lastsel > 1) { @@ -2148,6 +2159,15 @@ int descend_schematic(int instnumber) propagate_hilights(1, 0, XINSERT_NOREPLACE); } dbg(1, "descend_schematic(): before zoom(): prep_hash_inst=%d\n", xctx->prep_hash_inst); + + if(xctx->rects[GRIDLAYER] > 0 && tcleval("info exists ngspice::ngspice_data")[0] == '0') { + Graph_ctx *gr = &xctx->graph_struct; + xRect *r = &xctx->rect[GRIDLAYER][0]; + if(r->flags & 1) { + backannotate_at_cursor_b_pos(r, gr); + } + } + zoom_full(1, 0, 1 + 2 * tclgetboolvar("zoom_full_center"), 0.97); } return 1; diff --git a/src/callback.c b/src/callback.c index 03a306e4..20b6fdf8 100644 --- a/src/callback.c +++ b/src/callback.c @@ -214,9 +214,8 @@ static double interpolate_yval(int idx, int point_not_last) return val; } -static void backannotate_at_cursor_b_pos(xRect *r, Graph_ctx *gr) +void backannotate_at_cursor_b_pos(xRect *r, Graph_ctx *gr) { - if(sch_waves_loaded() >= 0) { int dset, first = -1, last, dataset = gr->dataset, i, p, ofs = 0, ofs_end; double start, end; diff --git a/src/scheduler.c b/src/scheduler.c index 651d08b1..3066df7e 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -4768,7 +4768,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg /* test * Testmode ... */ - else if(1 && !strcmp(argv[1], "test") ) + else if(0 && !strcmp(argv[1], "test") ) { Iterator_ctx ctx; Objectentry *objectptr; @@ -4815,10 +4815,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg Tcl_ResetResult(interp); } /* test 2 inst text_n */ - else if(argc > 5 && atoi(argv[2]) == 2) { - double sx, sy; - get_sym_text_size(atoi(argv[3]), atoi(argv[4]), &sx, &sy); - dbg(0, "size=%g, %g\n", sx, sy); + else if(argc > 2 && atoi(argv[2]) == 2) { + dbg(0, "graph_flags=%d\n", xctx->graph_flags); Tcl_ResetResult(interp); } } diff --git a/src/xinit.c b/src/xinit.c index 58f8dc8d..06bf55c3 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -1575,10 +1575,11 @@ static void create_new_window(int *window_count, const char *noconfirm, const ch tclvareval("save_ctx ", window_path[n], NULL); /* restore previous context, * because the Expose event after new window creation does a context switch prev win -> new win + * + * tclvareval("restore_ctx ", prev_window, NULL); + * new_schematic("switch", prev_window, "", 1); + * tclvareval("housekeeping_ctx", NULL); */ - tclvareval("restore_ctx ", prev_window, NULL); - new_schematic("switch", prev_window, "", 1); - tclvareval("housekeeping_ctx", NULL); if(has_x) windowid(toppath); } diff --git a/src/xschem.h b/src/xschem.h index f08b1673..ee4bbf78 100644 --- a/src/xschem.h +++ b/src/xschem.h @@ -1347,6 +1347,7 @@ extern int select_dangling_nets(void); extern int Tcl_AppInit(Tcl_Interp *interp); extern void abort_operation(void); extern void draw_crosshair(int del); +extern void backannotate_at_cursor_b_pos(xRect *r, Graph_ctx *gr); extern int callback(const char *winpath, int event, int mx, int my, KeySym key, int button, int aux, int state); extern void resetwin(int create_pixmap, int clear_pixmap, int force, int w, int h);