Subject: Fixed [fd3a4dc111] - <<Modified>> event is not always sent to peers

From: fvogel <[email-masked]>
Date: Tue, 5 Apr 2016 16:08:33 +0000

---
 generic/tkText.c |  5 ++++-
 tests/text.test  | 15 +++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/generic/tkText.c b/generic/tkText.c
index 506075d..e6cb96d 100644
--- a/generic/tkText.c
+++ b/generic/tkText.c
@@ -5215,7 +5215,10 @@ TextEditCmd(
 	 */
 
 	if ((!oldModified) != (!setModified)) {
-	    GenerateModifiedEvent(textPtr);
+            for (textPtr = textPtr->sharedTextPtr->peers; textPtr != NULL;
+                    textPtr = textPtr->next) {
+                GenerateModifiedEvent(textPtr);
+            }
 	}
 	break;
     case EDIT_REDO:
diff --git a/tests/text.test b/tests/text.test
index ff933a8..03b5ae3 100644
--- a/tests/text.test
+++ b/tests/text.test
@@ -6321,6 +6321,21 @@ test text-27.14 {<<Modified>> virtual event - delete before Modified} -body {
 } -cleanup {
     destroy .t
 } -result {thing special}
+test text-27.14a {<<Modified>> virtual event - propagation to peers} -body {
+# Bug [fd3a4dc111], <<Modified>> event is not always sent to peers
+    set ::retval 0
+    text .t -undo 1
+    .t peer create .tt
+    pack .t .tt
+    bind .t <<Modified>> {incr ::retval}
+    bind .tt <<Modified>> {incr ::retval}
+    .t insert end "This increments ::retval once for each peer, i.e. twice."
+    .t edit modified 0  ; # shall increment twice as well, not just once
+    update idletasks
+    set ::retval
+} -cleanup {
+    destroy .t .tt
+} -result {4}
 test text-27.15 {<<Selection>> virtual event} -body {
     set ::retval no_selection
     pack [text .t -undo 1]
-- 
cgit v0.12