Index: gnopernicus/srcore/default.xml.in
===================================================================
RCS file: /cvs/gnome/gnopernicus/srcore/default.xml.in,v
retrieving revision 1.23.2.1
diff -u -r1.23.2.1 default.xml.in
--- gnopernicus/srcore/default.xml.in	1 Oct 2004 08:09:44 -0000	1.23.2.1
+++ gnopernicus/srcore/default.xml.in	26 Nov 2004 13:35:52 -0000
@@ -1069,6 +1069,9 @@
           <attribute type="string" voice="role">role</attribute>
           <attribute type="string" voice="text">text:line</attribute>
         </event>
+	<event name="object:text-changed:insert">
+          <attribute type="string" voice="text">text:difference</attribute>
+        </event>
       </role>
       <role name="multi-line-text">
         <event name="focus:">
Index: gnopernicus/srcore/srmain.c
===================================================================
RCS file: /cvs/gnome/gnopernicus/srcore/srmain.c,v
retrieving revision 1.142.2.6
diff -u -r1.142.2.6 srmain.c
--- gnopernicus/srcore/srmain.c	22 Nov 2004 12:19:33 -0000	1.142.2.6
+++ gnopernicus/srcore/srmain.c	26 Nov 2004 13:35:57 -0000
@@ -213,8 +213,9 @@
 
     src_enable_format_string = TRUE; 
     sro_get_role (obj, &role, SR_INDEX_CONTAINER);
-    if (strcmp (reason, "object:text-changed:insert") == 0
-	    && (role == SR_ROLE_TEXT_SL || role == SR_ROLE_TEXT_ML || role == SR_ROLE_TERMINAL))
+
+    if (strcmp (reason, "object:text-changed:insert") == 0 && role != SR_ROLE_TERMINAL
+	    && (role == SR_ROLE_TEXT_SL || role == SR_ROLE_TEXT_ML))
     {
 	gchar *diff;
 	if (sro_text_get_difference (obj, &diff, SR_INDEX_CONTAINER))
@@ -265,7 +266,12 @@
 			strcmp (reason , "focus:") == 0)
 		    src_speech_send_chunk (txt, SRC_SPEECH_PRIORITY_IDLE, FALSE);
 		else
-		    src_speech_send_chunk (txt, SRC_SPEECH_PRIORITY_IDLE, TRUE);
+		{
+		    gboolean interrupt = TRUE;
+		    if (strcmp (reason, "object:text-changed:insert") == 0 && role == SR_ROLE_TERMINAL)
+			interrupt = FALSE;
+		    src_speech_send_chunk (txt, SRC_SPEECH_PRIORITY_IDLE, interrupt);
+		}
 	    }
 	    else if (srl_is_object_watched (obj))
 	    {
Index: gnopernicus/srcore/verbose.xml.in
===================================================================
RCS file: /cvs/gnome/gnopernicus/srcore/verbose.xml.in,v
retrieving revision 1.23.2.1
diff -u -r1.23.2.1 verbose.xml.in
--- gnopernicus/srcore/verbose.xml.in	1 Oct 2004 08:09:44 -0000	1.23.2.1
+++ gnopernicus/srcore/verbose.xml.in	26 Nov 2004 13:36:01 -0000
@@ -1084,6 +1084,9 @@
           <attribute type="string" voice="role">role</attribute>
           <attribute type="string" voice="text">text:line</attribute>
         </event>
+	<event name="object:text-changed:insert">
+          <attribute type="string" voice="text">text:difference</attribute>
+        </event>
       </role>
       <role name="multi-line-text">
         <event name="focus:">
Index: gnopernicus/srlow/libsrlow/SRLow.c
===================================================================
RCS file: /cvs/gnome/gnopernicus/srlow/libsrlow/SRLow.c,v
retrieving revision 1.104.2.4
diff -u -r1.104.2.4 SRLow.c
--- gnopernicus/srlow/libsrlow/SRLow.c	10 Nov 2004 13:30:55 -0000	1.104.2.4
+++ gnopernicus/srlow/libsrlow/SRLow.c	26 Nov 2004 13:36:06 -0000
@@ -1133,7 +1133,11 @@
 	ev = srl_last_events[i];
 	srl_last_events[i] = NULL;
 	if (ev)
+	{
+	    if (ev->type == SRL_EVENT_TEXT_CHANGED_INSERT && Accessible_getRole (ev->acc_ev->source) == SPI_ROLE_TERMINAL)
+		srl_notify_clients_obj (ev, SR_EVENT_SRO);
 	    srle_free (ev);
+	}
     }
 	    
     srl_last_events[priority] = srle_dup (event);
