*** Frame.c.orig	Fri Feb  3 17:49:56 1995
--- Frame.c	Wed Mar 29 16:18:32 1995
***************
*** 455,461 ****
  LayoutStack *stack;
  int path, reverse;
      {
! 	int separation;
  	int frame_size[2], padding[2];
  	int b_left, b_right, b_leading, b_trailing;
  	XeFrameDimension dimension[2];
--- 455,461 ----
  LayoutStack *stack;
  int path, reverse;
      {
! 	int separation, room;
  	int frame_size[2], padding[2];
  	int b_left, b_right, b_leading, b_trailing;
  	XeFrameDimension dimension[2];
***************
*** 549,558 ****
  	padding[1-path] = stack->info->b_left	/* Frame left border */
  		+ stack->info->b_right	/* Frame right border */
  		+ child->left + child->right;	/* Child left/right offsets */
! 	if (frame_size[1-path] > 0 && (dimension[1-path].value == 0 ||
! 			  dimension[1-path].value >
! 			  (frame_size[1-path] - padding[1-path])))
! 		dimension[1-path].value = frame_size[1-path] - padding[1-path];
  	/*
  	** Allow one child to act like rubber in layout path direction. Mark
  	** this child for later re-evaluation.
--- 549,558 ----
  	padding[1-path] = stack->info->b_left	/* Frame left border */
  		+ stack->info->b_right	/* Frame right border */
  		+ child->left + child->right;	/* Child left/right offsets */
! 	room = frame_size[1-path] - padding[1-path];
! 	if (room > 0 &&
! 	    (dimension[1-path].value == 0 || dimension[1-path].value > room))
! 		dimension[1-path].value = room;
  	/*
  	** Allow one child to act like rubber in layout path direction. Mark
  	** this child for later re-evaluation.
***************
*** 570,582 ****
  	** alone can exceed the fixed dimension in layout path direction).
  	** --msa
  	*/
! 	if (frame_size[1-path] > 0 && dimension[1-path].value >
! 	    (frame_size[1-path] - padding[1-path]))
! 		dimension[1-path].value = frame_size[1-path] - padding[1-path];
  	padding[path] = child->trailing + child->leading;
! 	if (frame_size[path] > padding[path] && dimension[path].value >
! 	    (frame_size[path] - padding[path]))
! 		dimension[path].value = frame_size[path] - padding[path];
  	/*
  	** Further limit dimensions between (min,max) if dimension is not
  	** explicitly  specified, and if min,max have been specified.
--- 570,582 ----
  	** alone can exceed the fixed dimension in layout path direction).
  	** --msa
  	*/
! 	room = frame_size[1-path] - padding[1-path];
! 	if (room > 0 && dimension[1-path].value > room)
! 		dimension[1-path].value = room;
  	padding[path] = child->trailing + child->leading;
! 	room = frame_size[path] - padding[path];
! 	if (room > 0 && dimension[path].value > room)
! 		dimension[path].value = room;
  	/*
  	** Further limit dimensions between (min,max) if dimension is not
  	** explicitly  specified, and if min,max have been specified.
*** TextEd.c.orig	Tue Mar  7 15:32:12 1995
--- TextEd.c	Tue Apr  4 13:30:38 1995
***************
*** 3023,3028 ****
--- 3023,3031 ----
  	switch (mode)
  	    {
  	    case XeSelectionStart:
+ #ifdef USING_MOTIF_122
+ 		XmProcessTraversal((Widget)t, XmTRAVERSE_CURRENT);
+ #endif
  		XeTextUnsetSelection((Widget)t);
  		t->texted.regions[0].range[0] = t->texted.regions[0].range[1] =
  			position;
***************
*** 3920,3925 ****
--- 3923,3949 ----
  		_XeTextFeedContent(t->text.inserting, value, length);
  		_XeTextLock(t->text.inserting, TRUE);
  	    }
+ 	_XeTextChangeMode(t->text.inserting, amount);
+ 	EndEditing(t, 0);
+     }
+ 
+ void XeTextChangeModeAndTag(w, value, length, amount, tag)
+ Widget w;
+ char *value;
+ long length;
+ long amount;
+ XeTextTag tag;
+     {
+ 	XeTextEdWidget t = (XeTextEdWidget)w;
+ 	if (!IsTextEdWidget(w))
+ 		return;
+ 	if (!StartEditing(t, XeTextInsertMode_CURRENT, (XEvent *)NULL))
+ 		return;
+ 	_XeTextLock(t->text.inserting, FALSE);
+ 	_XeTextSetTag(t->text.inserting, tag);
+ 	if (length > 0 && value)
+ 		_XeTextFeedContent(t->text.inserting, value, length);
+ 	_XeTextLock(t->text.inserting, TRUE);
  	_XeTextChangeMode(t->text.inserting, amount);
  	EndEditing(t, 0);
      }
*** TextEd.h.orig	Tue Mar  7 12:33:33 1995
--- TextEd.h	Tue Mar 21 18:47:46 1995
***************
*** 209,214 ****
--- 209,225 ----
  #endif
  	 );
  
+ void XeTextChangeModeAndTag
+ 	(
+ #if NeedFunctionPrototypes
+ 	 Widget,	/* TextEd Widget pointer */
+ 	 char *,	/* Pointer to octets to be inserted (modes) */
+ 	 long,		/* Number of octets to insert */
+ 	 long,		/* Number of characters to modify after insert */
+ 	 XeTextTag	/* New tag to be changed */
+ #endif
+ 	 );
+ 
  void XeTextReplaceTagged
  	(
  #if NeedFunctionPrototypes
*** TextImport.c.orig	Tue Mar  7 16:55:30 1995
--- TextImport.c	Wed Mar 22 17:45:21 1995
***************
*** 2576,2582 ****
  	t->mode.bits &= ~cx->lock.bits;
  	t->mode.bits |= cx->lock.bits & cx->mode.bits;
  	if (cx->lock.tag)
! 		t->mode.tag = cx->lock.tag;
  	if (cx->lock.size_modification)
  		t->mode.size_modification = cx->mode.size_modification;
  	new_font = FontSelectInfo(t->mode);
--- 2576,2582 ----
  	t->mode.bits &= ~cx->lock.bits;
  	t->mode.bits |= cx->lock.bits & cx->mode.bits;
  	if (cx->lock.tag)
! 		t->mode.tag = cx->mode.tag;
  	if (cx->lock.size_modification)
  		t->mode.size_modification = cx->mode.size_modification;
  	new_font = FontSelectInfo(t->mode);
***************
*** 2782,2787 ****
--- 2782,2789 ----
      {
  	XeTextTag old = cx->mode.tag;
  	cx->mode.tag = tag;
+ 	if (!cx->locked)
+ 		cx->lock.tag = (XeTextTag)~0;
  	return old;
      }
  /*
