summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2015-11-08 20:50:24 (GMT)
committerfvogel <fvogelnew1@free.fr>2015-11-08 20:50:24 (GMT)
commit2028daf50bcb641a8be43c4989a37074d5a00f72 (patch)
tree48d4dad3ca5c0e6207d8dd378de1409ca4d1942f
parent509e52d9d0542fdf3883f95edf264045eba9ba5a (diff)
parent2fb7c126ab1a68f237aee91ecd26b5f2eb6e074d (diff)
downloadtk-2028daf50bcb641a8be43c4989a37074d5a00f72.zip
tk-2028daf50bcb641a8be43c4989a37074d5a00f72.tar.gz
tk-2028daf50bcb641a8be43c4989a37074d5a00f72.tar.bz2
Fixed [2160206fff] - Panic when posting a menu of type menubar
-rw-r--r--generic/tkMenu.c7
-rw-r--r--tests/menu.test9
2 files changed, 15 insertions, 1 deletions
diff --git a/generic/tkMenu.c b/generic/tkMenu.c
index 49b5935..b35be24 100644
--- a/generic/tkMenu.c
+++ b/generic/tkMenu.c
@@ -934,9 +934,14 @@ MenuWidgetObjCmd(
* Tearoff menus are posted differently on Mac and Windows than
* non-tearoffs. TkpPostMenu does not actually map the menu's window
* on those platforms, and popup menus have to be handled specially.
+ * Also, menubar menues are not intended to be posted (bug 1567681,
+ * 2160206).
*/
- if (menuPtr->menuType != TEAROFF_MENU) {
+ if (menuPtr->menuType == MENUBAR) {
+ Tcl_AppendResult(interp, "a menubar menu cannot be posted", NULL);
+ return TCL_ERROR;
+ } else if (menuPtr->menuType != TEAROFF_MENU) {
result = TkpPostMenu(interp, menuPtr, x, y);
} else {
result = TkPostTearoffMenu(interp, menuPtr, x, y);
diff --git a/tests/menu.test b/tests/menu.test
index cfe00b9..c797281 100644
--- a/tests/menu.test
+++ b/tests/menu.test
@@ -2566,6 +2566,15 @@ test menu-36.1 {menu -underline string overruns Bug 1599877} {} {
tk::TraverseToMenu . "e"
} {}
+test menu-37.1 {menubar menues cannot be posted - bug 2160206} {} {
+ # On Linux the following used to panic
+ # It now returns an error (on all platforms)
+ catch {destroy .m}
+ menu .m -type menubar
+ list [catch ".m post 1 1" msg] $msg
+} {1 {a menubar menu cannot be posted}}
+
+
# cleanup
deleteWindows
cleanupTests