[brlcad-commits] SF.net SVN: brlcad:[37238] brlcad/trunk/src/libfb/if_tk.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <sta...@us...> - 2010-01-13 01:14:08
|
Revision: 37238 http://brlcad.svn.sourceforge.net/brlcad/?rev=37238&view=rev Author: starseeker Date: 2010-01-13 00:37:45 +0000 (Wed, 13 Jan 2010) Log Message: ----------- Still nothing like clean or correct, but at least window persists and closes with a close window event. Modified Paths: -------------- brlcad/trunk/src/libfb/if_tk.c Modified: brlcad/trunk/src/libfb/if_tk.c =================================================================== --- brlcad/trunk/src/libfb/if_tk.c 2010-01-12 23:55:13 UTC (rev 37237) +++ brlcad/trunk/src/libfb/if_tk.c 2010-01-13 00:37:45 UTC (rev 37238) @@ -206,6 +206,21 @@ Tcl_GetStringResult(fbinterp)); } + /* Set our Tcl variable pertaining to whether a + * window closing event has been seen from the + * Window manager. WM_DELETE_WINDOW will be + * bound to a command setting this variable to + * the string "close", in order to let tk_fb_close + * detect the Tk event and handle the closure + * itself. + */ + Tcl_SetVar(fbinterp, "CloseWindow", "open", 0); + const char *wmcmd = "wm protocol . WM_DELETE_WINDOW {set CloseWindow \"close\"}"; + if (Tcl_Eval(fbinterp, wmcmd) != TCL_OK) { + fb_log( "Error binding WM_DELETE_WINDOW." ); + } + + while (Tcl_DoOneEvent(TCL_ALL_EVENTS|TCL_DONT_WAIT)); return 0; @@ -217,14 +232,13 @@ FB_CK_FBIO(ifp); fb_log( "fb_close( 0x%lx )\n", (unsigned long)ifp ); fclose(stdin); - // have GOT to figure out how to persist cleanly. Obvious - // approach is to get some sort of binding set up on - // WM_DELETE_WINDOW - look at other framebuffer codes - // for how to idle properly in the meantime without - // burning CPU and needing Ctrl-c to exit. + // How can we idle properly without burning CPU?? while (1) { + while (Tcl_DoOneEvent(TCL_ALL_EVENTS|TCL_DONT_WAIT)) { + } + if (!strcmp(Tcl_GetVar(fbinterp, "CloseWindow", 0),"close")) + return 0; } - return 0; } HIDDEN int This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |