Subject: NotebookAddCommand: fix off-by-one error counting objc/objv when readding an already-managed window with arguments.

From: jenglish <[email-masked]>
Date: Mon, 25 Jan 2016 20:48:08 +0000

Bug reported on tcl-core by Sam Bromley (22 Jan 2016)
---
 generic/ttk/ttkNotebook.c |  2 +-
 tests/ttk/notebook.test   | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/generic/ttk/ttkNotebook.c b/generic/ttk/ttkNotebook.c
index 16a8bfe..81a8b64 100644
--- a/generic/ttk/ttkNotebook.c
+++ b/generic/ttk/ttkNotebook.c
@@ -901,7 +901,7 @@ static int NotebookAddCommand(
     if (tab->state == TAB_STATE_HIDDEN) {
 	tab->state = TAB_STATE_NORMAL;
     }
-    if (ConfigureTab(interp, nb, tab, slaveWindow, objc-4,objv+4) != TCL_OK) {
+    if (ConfigureTab(interp, nb, tab, slaveWindow, objc-3,objv+3) != TCL_OK) {
 	return TCL_ERROR;
     }
 
diff --git a/tests/ttk/notebook.test b/tests/ttk/notebook.test
index cdce020..3a2a6ff 100644
--- a/tests/ttk/notebook.test
+++ b/tests/ttk/notebook.test
@@ -468,6 +468,27 @@ test notebook-1817596-3 "insert/configure" -body {
 
 } -result [list [list .nb.l2 .nb.l0 .nb.l1] L2 L0 L1] -cleanup { destroy .nb }
 
+test notebook-readd-1 "add same widget twice" -body {
+    pack [ttk::notebook .nb]
+    .nb add [ttk::button .nb.b1] -text "Button"
+    .nb add .nb.b1
+    .nb tabs
+} -result [list .nb.b1] -cleanup { destroy .nb }
+
+test notebook-readd-2 "add same widget twice, with options" -body {
+    pack [ttk::notebook .nb]
+    .nb add [ttk::button .nb.b1] -text "Tab label"
+    .nb add .nb.b1 -text "Changed tab label"
+    .nb tabs
+} -result [list .nb.b1] -cleanup { destroy .nb }
+
+test notebook-readd-3 "insert same widget twice, with options" -body {
+    pack [ttk::notebook .nb]
+    .nb insert end [ttk::button .nb.b1] -text "Tab label"
+    .nb insert end .nb.b1 -text "Changed tab label"
+    .nb tabs
+} -result [list .nb.b1] -cleanup { destroy .nb }
+
 
 # See #1343984
 test notebook-1343984-1 "don't autoselect on destroy - setup" -body {
-- 
cgit v0.12