diff options
author | jan.nijtmans <jan.nijtmans@noemail.net> | 2014-10-11 19:59:37 (GMT) |
---|---|---|
committer | jan.nijtmans <jan.nijtmans@noemail.net> | 2014-10-11 19:59:37 (GMT) |
commit | 6dc9862fbbf16af0024257b602c83e40c6bd0c88 (patch) | |
tree | aaff927695d96514f85843ccf052adeb2c3aac44 /win | |
parent | 0f913d2282e3f63a2092068df97eb45943a6ef56 (diff) | |
parent | 0751f975f95a43bdc1cb9d057debae488f261717 (diff) | |
download | tk-6dc9862fbbf16af0024257b602c83e40c6bd0c88.zip tk-6dc9862fbbf16af0024257b602c83e40c6bd0c88.tar.gz tk-6dc9862fbbf16af0024257b602c83e40c6bd0c88.tar.bz2 |
Fix [9e487e9f158b3aeda2b92ca75deb3abc04e21a61|9e487e9f15]: Fix for tkWinButton to avoid problems in plugin
FossilOrigin-Name: 2a9f4ee0083acd172ceffc6dbafb01f3a0eda1ca
Diffstat (limited to 'win')
-rw-r--r-- | win/tkWinButton.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/win/tkWinButton.c b/win/tkWinButton.c index ca6d48e..e46bcb3 100644 --- a/win/tkWinButton.c +++ b/win/tkWinButton.c @@ -1265,21 +1265,29 @@ ButtonProc( return 0; } case BN_CLICKED: { - int code; - Tcl_Interp *interp = butPtr->info.interp; - - if (butPtr->info.state != STATE_DISABLED) { - Tcl_Preserve((ClientData)interp); - code = TkInvokeButton((TkButton*)butPtr); - if (code != TCL_OK && code != TCL_CONTINUE - && code != TCL_BREAK) { - Tcl_AddErrorInfo(interp, "\n (button invoke)"); - Tcl_BackgroundException(interp, code); + /* + * OOPS: chromium fires WM_NULL regularly to ping if plugin is still + * alive. When using an external window (i.e. via the tcl plugin), this + * causes all buttons to fire once a second, so we need to make sure + * that we are not dealing with the chromium life check. + */ + if (wParam != 0 || lParam != 0) { + int code; + Tcl_Interp *interp = butPtr->info.interp; + + if (butPtr->info.state != STATE_DISABLED) { + Tcl_Preserve((ClientData)interp); + code = TkInvokeButton((TkButton*)butPtr); + if (code != TCL_OK && code != TCL_CONTINUE + && code != TCL_BREAK) { + Tcl_AddErrorInfo(interp, "\n (button invoke)"); + Tcl_BackgroundException(interp, code); + } + Tcl_Release((ClientData)interp); } - Tcl_Release((ClientData)interp); + Tcl_ServiceAll(); + return 0; } - Tcl_ServiceAll(); - return 0; } default: |