diff --git a/src/callback.c b/src/callback.c index c6e4f2ea..efacc74c 100644 --- a/src/callback.c +++ b/src/callback.c @@ -877,6 +877,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int /* main window callback */ /* mx and my are set to the mouse coord. relative to window */ +/* winpath: set to .drw or sub windows .x1.drw, .x2.drw, ... */ int callback(const char *winpath, int event, int mx, int my, KeySym key, int button, int aux, int state) { @@ -1011,6 +1012,7 @@ int callback(const char *winpath, int event, int mx, int my, KeySym key, dbg(1, "callback(): Expose\n"); break; case ConfigureNotify: + dbg(1,"callback(): ConfigureNotify event\n"); resetwin(1, 1, 0, 0, 0); draw(); break; diff --git a/src/xinit.c b/src/xinit.c index deb22c88..895d4c1e 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -141,7 +141,8 @@ static int window_state (Display *disp, Window win, char *arg) {/*{{{*/ tmp1[i] = '\0'; my_snprintf(tmp_prop1, S(tmp_prop1), "_NET_WM_STATE_%s", tmp1); prop1 = XInternAtom(disp, tmp_prop1, False); - + dbg(1, "window_state(): issuing client_msg((disp, win, \"_NET_WM_STATE\", %d, %d, %d\n", + action, prop1, prop2); return client_msg(disp, win, "_NET_WM_STATE", action, (unsigned long)prop1, (unsigned long)prop2, 0, 0); @@ -1010,6 +1011,7 @@ int pending_events(void) } #endif +/* topwin: .drw (always in tabbed interface) or .x1.drw, .x2.drw ... for multiple windows */ void toggle_fullscreen(const char *topwin) { char fullscr[]="add,fullscreen"; @@ -1020,10 +1022,12 @@ void toggle_fullscreen(const char *topwin) unsigned int framewindow_nchildren; int fs; + dbg(1, "toggle_fullscreen(): topwin=%s\n", topwin); if(!strcmp(topwin, ".drw")) { tcleval( "winfo id ."); sscanf(tclresult(), "0x%x", (unsigned int *) &topwin_id); } else { + /* xctx->top_path is empty string for main window or .x1, .x2, ... for additional windows */ tclvareval("winfo id ", xctx->top_path, NULL); sscanf(tclresult(), "0x%x", (unsigned int *) &topwin_id); } @@ -1062,6 +1066,10 @@ void toggle_fullscreen(const char *topwin) window_state(display , parent_id,fullscr); } else { window_state(display , parent_id,normal); + /* when switching back from fullscreen multiple ConfigureNotify events are generated. + * pending_fullzoom does not work on the last corect ConfigureNotify event, + * so wee zoom_full() again */ + zoom_full(1, 0, 1, 0.97); /* draw */ } xctx->pending_fullzoom=1; } @@ -1783,7 +1791,6 @@ void resetwin(int create_pixmap, int clear_pixmap, int force, int w, int h) #else XWindowAttributes wattr; #endif - if(has_x) { if(w && h) { width = w; @@ -1805,6 +1812,8 @@ void resetwin(int create_pixmap, int clear_pixmap, int force, int w, int h) #endif } if(status) { + dbg(1, "resetwin(): create_pixmap=%d, clear_pixmap=%d, force=%d, width=%d, height=%d, pending_fullzoom=%d\n", + create_pixmap, clear_pixmap, force, width, height, xctx->pending_fullzoom); /* if(wattr.map_state==IsUnmapped) return; */ xctx->areax2 = width + 2 * INT_WIDTH(xctx->lw); xctx->areay2 = height + 2 * INT_WIDTH(xctx->lw); @@ -2349,7 +2358,7 @@ int Tcl_AppInit(Tcl_Interp *inter) if(fs) { tclsetvar("fullscreen", "0"); tcleval("update"); - toggle_fullscreen("."); + toggle_fullscreen(".drw"); } if(tclgetboolvar("case_insensitive")) { diff --git a/src/xschem.h b/src/xschem.h index 57a1ed38..605a2e9d 100644 --- a/src/xschem.h +++ b/src/xschem.h @@ -936,9 +936,9 @@ typedef struct { * canvas top_path * ---------------------------- * ".drw" "" - * ".xx.drw" ".xx" + * ".x1.drw" ".x1" */ - char *current_win_path; + char *current_win_path; /* .drw or .x1.drw, .... ; always .drw in tabbed interface */ int *fill_type; /* for every layer: 0: no fill, 1, solid fill, 2: stipple fill */ int fill_pattern; int draw_window;