From 4f8120cd2d34aa40aab8d8cf0a103e848f85041d Mon Sep 17 00:00:00 2001 From: Stefan Frederik Date: Sat, 9 Oct 2021 10:25:24 +0200 Subject: [PATCH] add "update" after binding creation in xinit.c, to avoid incomplete initialization of event binding if xschem called with non-existent file --- src/callback.c | 4 ++++ src/scheduler.c | 1 + src/xinit.c | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/callback.c b/src/callback.c index 59bc9b3f..eceb18c3 100644 --- a/src/callback.c +++ b/src/callback.c @@ -1227,21 +1227,25 @@ int callback(int event, int mx, int my, KeySym key, { if(xctx->semaphore >= 2) break; tcleval("xschem new_window"); + break; } if(key=='N' && state==(ShiftMask|Mod1Mask) ) /* Empty symbol in new window */ { if(xctx->semaphore >= 2) break; tcleval("xschem new_symbol_window"); + break; } if(key=='n' && state==ControlMask) /* New schematic */ { if(xctx->semaphore >= 2) break; tcleval("xschem clear SCHEMATIC"); + break; } if(key=='N' && state==(ShiftMask|ControlMask) ) /* New symbol */ { if(xctx->semaphore >= 2) break; tcleval("xschem clear SYMBOL"); + break; } if(key=='n' && state==0) /* hierarchical netlist */ { diff --git a/src/scheduler.c b/src/scheduler.c index 2b2a8854..fb091d94 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -163,6 +163,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg cmd_found = 1; callback( atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), (KeySym)atol(argv[5]), atoi(argv[6]), atoi(argv[7]), atoi(argv[8]) ); + dbg(2, "callback %s %s %s %s %s %s %s\n", argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]); Tcl_ResetResult(interp); } diff --git a/src/xinit.c b/src/xinit.c index 13b77f52..471daa26 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -1549,7 +1549,7 @@ int Tcl_AppInit(Tcl_Interp *inter) /* Completing tk windows creation (see xschem.tcl, build_windows) and event binding */ /* *AFTER* X initialization done */ /* */ - if(has_x) tcleval("build_windows"); + if(has_x) tcleval("build_windows; update"); fullscreen=atoi(tclgetvar("fullscreen")); if(fullscreen) {