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?