summaryrefslogtreecommitdiffstats
path: root/win/tkWinButton.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2014-10-11 19:59:37 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2014-10-11 19:59:37 (GMT)
commitcc6552218f2702e885b928f2c54d0c51fa1cf4a8 (patch)
treeaaff927695d96514f85843ccf052adeb2c3aac44 /win/tkWinButton.c
parent54a03eed3717acb4b28e6cede3932aad7a887a89 (diff)
parent18da711e8c6f7b1fd4730cac3360078b51ec8948 (diff)
downloadtk-cc6552218f2702e885b928f2c54d0c51fa1cf4a8.zip
tk-cc6552218f2702e885b928f2c54d0c51fa1cf4a8.tar.gz
tk-cc6552218f2702e885b928f2c54d0c51fa1cf4a8.tar.bz2
Fix [9e487e9f158b3aeda2b92ca75deb3abc04e21a61|9e487e9f15]: Fix for tkWinButton to avoid problems in plugin
Diffstat (limited to 'win/tkWinButton.c')
-rw-r--r--win/tkWinButton.c34
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: