Dear Duncan, I hope that some follow-up questions are in order:
In the Rcdmr package, there is a pair of functions for initializing and completing dialogs: initializeDialog <- defmacro(window=top, title="", offset=10, expr={ window <- tktoplevel(borderwidth=10) tkwm.title(window, title) position <- if (is.SciViews()) -1 else commanderPosition() # +PhG position <- if (any(position < 0)) "-50+50" else paste("+", paste(offset + position, collapse="+"), sep="") tkwm.geometry(window, position) } ) dialogSuffix <- defmacro(window=top, onOK=onOK, rows=1, columns=1, focus=top, bindReturn=TRUE, preventGrabFocus=FALSE, preventDoubleClick=FALSE, expr={ for (row in 0:(rows-1)) tkgrid.rowconfigure(window, row, weight=0) for (col in 0:(columns-1)) tkgrid.columnconfigure(window, col, weight=0) .Tcl("update idletasks") tkwm.resizable(window, 0, 0) if (bindReturn) tkbind(window, "<Return>", onOK) if (getRcmdr("double.click") && (!preventDoubleClick)) tkbind(window, "<Double-ButtonPress-1>", onOK) tkwm.deiconify(window) # focus grabs appear to cause problems for some dialogs if (GrabFocus() && (!preventGrabFocus)) tkgrab.set(window) tkfocus(focus) tkwait.window(window) } ) (Both of these are "macro-like" in the sense of Thomas Lumley's R-news article.) If I understand you correctly, I could improve the R Commander's stability under windows by putting tclServiceMode(on = FALSE) at the beginning of initializeDialog(), and tclServiceMode(on = TRUE) at the end of dialogSuffix(). Is that correct? If so, is there any harm in doing this on other platforms, or should I test for Windows? Finally, do you mind if I put tclServiceMode() in the Rcmdr package for the time-being, or would it just be better to wait for R 2.1.1? Thanks, John -------------------------------- John Fox Department of Sociology McMaster University Hamilton, Ontario Canada L8S 4M4 905-525-9140x23604 http://socserv.mcmaster.ca/jfox -------------------------------- > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Duncan Murdoch > Sent: Saturday, April 23, 2005 10:21 AM > To: r-devel@stat.math.ethz.ch > Subject: [Rd] tclServiceMode: stop Tcl/Tk from updating > > In Windows, Tcl/Tk programs running under the tcltk package > can update too frequently: for exmaple, we might go through > a long sequence of operations to construct a complex display, > and in Windows each addition will be shown separately. > > To work around this, I've added a function "tclServiceMode" > which serves as an R interface to the "Tcl_SetServiceMode" > function in the TCL API. > Calling "tclServiceMode(on = FALSE)" will stop Tcl/Tk from > responding to any events (redraws in particular) until > "tclServiceMode(on = TRUE)" is called. As far as I know, > events are queued, not lost, when handling is turned off. > > So far this function is only in R-devel, but I'll commit it > to R-patched the next chance I get. > > Duncan Murdoch > > ______________________________________________ > R-devel@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-devel