🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sources.bugs
Article #2

Tgif-2.12-patch11 (11th patch for tgif-2.12), Part 01/01

#2
From: William Cheng
Date: Wed, 04 Nov 1992 07:34
756 lines
27956 bytes
Below is tgif-2.12-patch11 (11th patch for tgif-2.12).

Tgif is an Xlib based 2-D drawing tool under X11.

Remove everything outside of the 'cut here' lines (inclusive), save
the file as tgif-2.12-patch11, and apply the patch with
'patch -p -N < tgif-2.12-patch11'.  Here's a short list of added
features/bug fixes.

1)  Fix a bug in erasing text from a grouped object.  This bug only appears if
    the Tgif*GroupedTextEditable X default is set to 'true'.
2)  Fix a bug in setting the clipping rectangles.  Sometimes, tgif would not
    redraw properly.  Thanks to Yoichiro Ueno <ueno@cs.titech.ac.jp> for the
    fix.
3)  Fix a bug in copying objects with attributes.  It used to be that every
    time such a object is copied, the ordering of the attributes are reversed.
4)  Fix a typo in box.c.  This bug only appears if -DNO_THIN_LINE is specified
    as a compile option.

Please send bug reports to william@cs.ucla.edu.
---------------------------------> cut here <---------------------------------
*** attr.c.orig	Fri Aug 14 07:33:51 1992
--- attr.c	Fri Aug 14 07:33:53 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/attr.c,v 2.59 1992/06/23 17:00:47 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/attr.c,v 2.60 1992/08/09 02:16:13 william Exp $";
  #endif
  
***************
*** 281,286 ****
  
     topAttr = botAttr = NULL;
!    from_attr_ptr = FromObjPtr->fattr;
!    for ( ; from_attr_ptr != NULL; from_attr_ptr = from_attr_ptr->next)
     {
        to_attr_ptr = (struct AttrRec *) calloc (1, sizeof(struct AttrRec));
--- 281,286 ----
  
     topAttr = botAttr = NULL;
!    from_attr_ptr = FromObjPtr->lattr;
!    for ( ; from_attr_ptr != NULL; from_attr_ptr = from_attr_ptr->prev)
     {
        to_attr_ptr = (struct AttrRec *) calloc (1, sizeof(struct AttrRec));
*** auxtext.c.orig	Fri Aug 14 07:33:58 1992
--- auxtext.c	Fri Aug 14 07:34:00 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/auxtext.c,v 2.28 1992/08/08 08:28:04 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/auxtext.c,v 2.32 1992/08/14 06:37:56 william Exp $";
  #endif
  
***************
*** 511,522 ****
  }
  
! struct ObjRec * FindTextObj (XOff, YOff)
!    int  XOff, YOff;
!    /* XOff and YOff are screen offsets */
  {
!    register struct ObjRec       * obj_ptr;
!    register struct AttrRec      * attr_ptr;
!    struct ObjRec      		* found_text_obj;
!    struct SelRec      		* sel_ptr, * next_sel;
  
     if (outerSel != NULL)
--- 511,518 ----
  }
  
! static
! void CleanOuterInnerSel ()
  {
!    register struct SelRec       * sel_ptr, * next_sel;
  
     if (outerSel != NULL)
***************
*** 529,533 ****
--- 525,541 ----
        outerSel = innerSel = NULL;
     }
+ }
+ 
+ struct ObjRec * FindTextObj (XOff, YOff)
+    int  XOff, YOff;
+    /* XOff and YOff are screen offsets */
+ {
+    register struct ObjRec       * obj_ptr;
+    register struct AttrRec      * attr_ptr;
+    struct ObjRec      		* found_text_obj;
+    struct SelRec      		* sel_ptr;
  
+    CleanOuterInnerSel ();
+ 
     for (obj_ptr = topObj; obj_ptr != NULL; obj_ptr = obj_ptr->next)
        if (obj_ptr->type == OBJ_TEXT &&
***************
*** 576,579 ****
--- 584,630 ----
        }
     return (NULL);
+ }
+ 
+ void UnlinkCurTextFromInnerSel ()
+ {
+    register struct GroupRec	* group_obj=innerSel->obj->detail.r;
+ 
+    if (group_obj->first == group_obj->last)
+    {
+       if (outerSel != innerSel || innerSel->obj->fattr != NULL)
+       {
+          Msg ("Error!   The text object within a composite object which you");
+          Msg ("    have just erased caused all ancestors to be deleted.");
+          Msg ("    You may see ghost images now!");
+          Msg ("    Please undo and try ungroup the ancestor object first");
+          Msg ("    before erasing the text.");
+          fprintf (stderr, "%s\n%s\n%s\n%s\n%s\n",
+                "Error!   The text object within a composite object which you",
+                "    have just erased caused all ancestors to be deleted.",
+                "    You may see ghost images now!",
+                "    Please undo and try ungroup the ancestor object first",
+                "    before erasing the text.");
+       }
+       DelObj (outerSel->obj);
+       CleanOuterInnerSel ();
+       curTextObj = NULL;
+       return;
+    }
+    else if (curTextObj == group_obj->first)
+    {
+       curTextObj->next->prev = NULL;
+       group_obj->first = curTextObj->next;
+    }
+    else if (curTextObj == group_obj->last)
+    {
+       curTextObj->prev->next = NULL;
+       group_obj->last = curTextObj->prev;
+    }
+    else
+    {
+       curTextObj->prev->next = curTextObj->next;
+       curTextObj->next->prev = curTextObj->prev;
+    }
+    curTextObj->prev = curTextObj->next = NULL;
  }
  
*** box.c.orig	Fri Aug 14 07:34:09 1992
--- box.c	Fri Aug 14 07:34:10 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/box.c,v 2.33 1992/06/01 16:16:41 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/box.c,v 2.34 1992/08/14 03:56:31 william Exp $";
  #endif
  
***************
*** 274,278 ****
        values.line_width = ZOOMED_SIZE(width);
  #ifdef NO_THIN_LINE
!       if (vluae.line_width < 1) values.line_width = 1;
  #endif
        values.join_style = JoinMiter;
--- 274,278 ----
        values.line_width = ZOOMED_SIZE(width);
  #ifdef NO_THIN_LINE
!       if (value.line_width < 1) values.line_width = 1;
  #endif
        values.join_style = JoinMiter;
*** cmd.c.orig	Fri Aug 14 07:34:16 1992
--- cmd.c	Fri Aug 14 07:34:19 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/cmd.c,v 2.17 1992/03/31 07:51:35 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/cmd.c,v 2.18 1992/08/14 04:03:01 william Exp $";
  #endif
  
***************
*** 148,152 ****
              next_cmd = cmd_ptr->next;
              DeleteARedoRecord (cmd_ptr);
-             cfree (cmd_ptr);
           }
           break;
--- 148,151 ----
*** drawing.c.orig	Fri Aug 14 07:34:25 1992
--- drawing.c	Fri Aug 14 07:34:27 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.c,v 2.114 1992/07/24 05:20:38 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.c,v 2.115 1992/08/11 03:58:46 william Exp $";
  #endif
  
***************
*** 80,84 ****
  #define O_GRID (O_VIS+O_INVIS)
  
! int	numRedrawBBox=INVALID;
  
  static int		checkBBox=TRUE;
--- 80,87 ----
  #define O_GRID (O_VIS+O_INVIS)
  
! int		numRedrawBBox=INVALID;
! int		numClipRecs=0;
! int		clipOrdering=Unsorted;
! XRectangle	clipRecs[4];
  
  static int		checkBBox=TRUE;
***************
*** 87,94 ****
  void SetDefaultDrawWinClipRecs ()
  {
!    XRectangle	recs[1];
! 
!    SetRecVals (recs[0], 0, 0, ZOOMED_SIZE(drawWinW), ZOOMED_SIZE(drawWinH));
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, recs, 1, YXBanded);
  }
  
--- 90,98 ----
  void SetDefaultDrawWinClipRecs ()
  {
!    SetRecVals (clipRecs[0], 0, 0, ZOOMED_SIZE(drawWinW), ZOOMED_SIZE(drawWinH));
!    numClipRecs = 1;
!    clipOrdering = YXBanded;
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, clipRecs, numClipRecs,
!          clipOrdering);
  }
  
***************
*** 95,102 ****
  void SetDefaultIconWinClipRecs ()
  {
!    XRectangle	recs[1];
! 
!    SetRecVals (recs[0], 0, 0, iconWindowW, iconWindowH);
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, recs, 1, YXBanded);
  }
  
--- 99,107 ----
  void SetDefaultIconWinClipRecs ()
  {
!    SetRecVals (clipRecs[0], 0, 0, iconWindowW, iconWindowH);
!    numClipRecs = 1;
!    clipOrdering = YXBanded;
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, clipRecs, numClipRecs,
!          clipOrdering);
  }
  
***************
*** 273,281 ****
  {
     register struct ObjRec	* obj_ptr;
-    XRectangle			recs[1];
  
!    SetRecVals (recs[0], OFFSET_X(LtX), OFFSET_Y(LtY), ZOOMED_SIZE(RbX-LtX)+1,
!          ZOOMED_SIZE(RbY-LtY)+1);
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, recs, 1, YXBanded);
  
     XClearArea (mainDisplay, drawWindow, OFFSET_X(LtX), OFFSET_Y(LtY),
--- 278,288 ----
  {
     register struct ObjRec	* obj_ptr;
  
!    SetRecVals (clipRecs[0], OFFSET_X(LtX), OFFSET_Y(LtY),
!          ZOOMED_SIZE(RbX-LtX)+1, ZOOMED_SIZE(RbY-LtY)+1);
!    numClipRecs = 1;
!    clipOrdering = YXBanded;
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, clipRecs, numClipRecs,
!          clipOrdering);
  
     XClearArea (mainDisplay, drawWindow, OFFSET_X(LtX), OFFSET_Y(LtY),
***************
*** 314,320 ****
  {
     register struct ObjRec	* obj_ptr;
!    int				ltx, lty, rbx, rby, rec1_slot, num;
     struct BBRec			bbox1, bbox2;
-    XRectangle			recs[4];
  
     bbox1.ltx = LtX1; bbox1.lty = LtY1;
--- 321,326 ----
  {
     register struct ObjRec	* obj_ptr;
!    int				ltx, lty, rbx, rby, rec1_slot;
     struct BBRec			bbox1, bbox2;
  
     bbox1.ltx = LtX1; bbox1.lty = LtY1;
***************
*** 348,356 ****
     {
        rec1_slot = (LtX1 <= LtX2) ? 0 : 1;
!       SetRecVals (recs[rec1_slot], OFFSET_X(LtX1), OFFSET_Y(LtY1),
              ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!       SetRecVals (recs[!rec1_slot], OFFSET_X(LtX2), OFFSET_Y(LtY2),
              ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!       num = 2;
     }
     else
--- 354,362 ----
     {
        rec1_slot = (LtX1 <= LtX2) ? 0 : 1;
!       SetRecVals (clipRecs[rec1_slot], OFFSET_X(LtX1), OFFSET_Y(LtY1),
              ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!       SetRecVals (clipRecs[!rec1_slot], OFFSET_X(LtX2), OFFSET_Y(LtY2),
              ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!       numClipRecs = 2;
     }
     else
***************
*** 360,368 ****
           if (RbY1 <= LtY2)
           {  /* y-extents do not intersect */
!             SetRecVals (recs[0], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             SetRecVals (recs[1], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             num = 2;
           }
           else if (RbY1 >= RbY2)
--- 366,374 ----
           if (RbY1 <= LtY2)
           {  /* y-extents do not intersect */
!             SetRecVals (clipRecs[0], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             SetRecVals (clipRecs[1], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             numClipRecs = 2;
           }
           else if (RbY1 >= RbY2)
***************
*** 369,387 ****
           {  /* box 2's y-extents is inside box 1's y-extents */
              rec1_slot = (LtX1 < LtX2) ? 0 : 1;  
!             SetRecVals (recs[rec1_slot], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             SetRecVals (recs[!rec1_slot], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             num = 2;
           }
           else
           {  
!             SetRecVals (recs[0], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(LtY2-LtY1)+1);
              if (LtX1 < LtX2)
              {
!                SetRecVals (recs[1], OFFSET_X(LtX1), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
!                SetRecVals (recs[2], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
              }
--- 375,393 ----
           {  /* box 2's y-extents is inside box 1's y-extents */
              rec1_slot = (LtX1 < LtX2) ? 0 : 1;  
!             SetRecVals (clipRecs[rec1_slot], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             SetRecVals (clipRecs[!rec1_slot], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             numClipRecs = 2;
           }
           else
           {  
!             SetRecVals (clipRecs[0], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(LtY2-LtY1)+1);
              if (LtX1 < LtX2)
              {
!                SetRecVals (clipRecs[1], OFFSET_X(LtX1), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
!                SetRecVals (clipRecs[2], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
              }
***************
*** 388,399 ****
              else
              {
!                SetRecVals (recs[1], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
!                SetRecVals (recs[2], OFFSET_X(LtX1), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
              }
!             SetRecVals (recs[3], OFFSET_X(LtX2), OFFSET_Y(RbY1),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-RbY1)+1);
!             num = 4;
           }
        }
--- 394,405 ----
              else
              {
!                SetRecVals (clipRecs[1], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
!                SetRecVals (clipRecs[2], OFFSET_X(LtX1), OFFSET_Y(LtY2),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY2)+1);
              }
!             SetRecVals (clipRecs[3], OFFSET_X(LtX2), OFFSET_Y(RbY1),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-RbY1)+1);
!             numClipRecs = 4;
           }
        }
***************
*** 402,410 ****
           if (RbY2 <= LtY1)
           {  /* y-extents do not intersect */
!             SetRecVals (recs[0], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             SetRecVals (recs[1], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             num = 2;
           }
           else if (RbY2 >= RbY1)
--- 408,416 ----
           if (RbY2 <= LtY1)
           {  /* y-extents do not intersect */
!             SetRecVals (clipRecs[0], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             SetRecVals (clipRecs[1], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             numClipRecs = 2;
           }
           else if (RbY2 >= RbY1)
***************
*** 411,429 ****
           {  /* box 1's y-extents is inside box 2's y-extents */
              rec1_slot = (LtX1 < LtX2) ? 0 : 1;  
!             SetRecVals (recs[rec1_slot], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             SetRecVals (recs[!rec1_slot], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             num = 2;
           }
           else
           {  
!             SetRecVals (recs[0], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(LtY1-LtY2)+1);
              if (LtX1 < LtX2)
              {
!                SetRecVals (recs[1], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
!                SetRecVals (recs[2], OFFSET_X(LtX2), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
              }
--- 417,435 ----
           {  /* box 1's y-extents is inside box 2's y-extents */
              rec1_slot = (LtX1 < LtX2) ? 0 : 1;  
!             SetRecVals (clipRecs[rec1_slot], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-LtY1)+1);
!             SetRecVals (clipRecs[!rec1_slot], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY2)+1);
!             numClipRecs = 2;
           }
           else
           {  
!             SetRecVals (clipRecs[0], OFFSET_X(LtX2), OFFSET_Y(LtY2),
                    ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(LtY1-LtY2)+1);
              if (LtX1 < LtX2)
              {
!                SetRecVals (clipRecs[1], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
!                SetRecVals (clipRecs[2], OFFSET_X(LtX2), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
              }
***************
*** 430,445 ****
              else
              {
!                SetRecVals (recs[1], OFFSET_X(LtX2), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
!                SetRecVals (recs[2], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
              }
!             SetRecVals (recs[3], OFFSET_X(LtX1), OFFSET_Y(RbY2),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-RbY2)+1);
!             num = 4;
           }
        }
     }
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, recs, num, YXSorted);
  
     if (paperWidth >= LtX1 && paperWidth <= RbX1 ||
--- 436,453 ----
              else
              {
!                SetRecVals (clipRecs[1], OFFSET_X(LtX2), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX2-LtX2)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
!                SetRecVals (clipRecs[2], OFFSET_X(LtX1), OFFSET_Y(LtY1),
                       ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY2-LtY1)+1);
              }
!             SetRecVals (clipRecs[3], OFFSET_X(LtX1), OFFSET_Y(RbY2),
                    ZOOMED_SIZE(RbX1-LtX1)+1, ZOOMED_SIZE(RbY1-RbY2)+1);
!             numClipRecs = 4;
           }
        }
     }
!    clipOrdering = YXSorted;
!    XSetClipRectangles (mainDisplay, drawGC, 0, 0, clipRecs, numClipRecs,
!          clipOrdering);
  
     if (paperWidth >= LtX1 && paperWidth <= RbX1 ||
*** file.c.orig	Fri Aug 14 07:34:41 1992
--- file.c	Fri Aug 14 07:34:46 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.c,v 2.191 1992/08/08 19:53:29 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/file.c,v 2.192 1992/08/14 06:14:50 william Exp $";
  #endif
  
***************
*** 621,625 ****
     {
        len = strlen (curFileName);
!       for (c_ptr=&curFileName[len-1]; c_ptr!=curFileName; c_ptr--)
           if (*c_ptr == '/')
              break;
--- 621,625 ----
     {
        len = strlen (curFileName);
!       for (c_ptr = &curFileName[len-1]; c_ptr != curFileName; c_ptr--)
           if (*c_ptr == '/')
              break;
*** text.c.orig	Fri Aug 14 07:34:56 1992
--- text.c	Fri Aug 14 07:34:58 1992
***************
*** 25,29 ****
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/text.c,v 2.104 1992/08/08 08:26:55 william Exp $";
  #endif
  
--- 25,29 ----
  #ifndef lint
  static char RCSid[] =
!       "@(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/text.c,v 2.108 1992/08/14 05:46:05 william Exp $";
  #endif
  
***************
*** 441,450 ****
        else
        {
!          if (outerSel != NULL) AdjAncestorsBBox ();
           if (!curTextIsNew)
!             ChangeReplaceOneCmdToDeleteCmd ();
           else
              AbortPrepareCmd (CMD_REPLACE);
!          DelObj (curTextObj);
        }
  
--- 441,467 ----
        else
        {
!          if (outerSel != NULL)
!          {
!             UnlinkCurTextFromInnerSel ();
!             AdjAncestorsBBox ();
!          }
           if (!curTextIsNew)
!          {
!             if (outerSel != NULL)
!                RecordReplaceAnObj (outerSel->obj);
!             else
!                ChangeReplaceOneCmdToDeleteCmd ();
!          }
           else
              AbortPrepareCmd (CMD_REPLACE);
!          if (curTextObj != NULL)
!          {
!             if (outerSel != NULL)
!                /* curTextObj already broken off from the main */
!                /*	stream of objects, so just free it. */
!                FreeObj (curTextObj);
!             else
!                DelObj (curTextObj);
!          }
        }
  
***************
*** 2172,2177 ****
                 GCClipMask | GCClipXOrigin | GCClipYOrigin, &values);
           XFillRectangle (mainDisplay, Win, drawGC, ltx, lty, w, h);
-          SetDefaultDrawWinClipRecs ();
           XSetClipOrigin (mainDisplay, drawGC, 0, 0);
        }
     }
--- 2189,2196 ----
                 GCClipMask | GCClipXOrigin | GCClipYOrigin, &values);
           XFillRectangle (mainDisplay, Win, drawGC, ltx, lty, w, h);
           XSetClipOrigin (mainDisplay, drawGC, 0, 0);
+          if (numClipRecs > 0)
+             XSetClipRectangles (mainDisplay, drawGC, 0, 0, clipRecs,
+                numClipRecs, clipOrdering);
        }
     }
*** auxtext.e.orig	Fri Aug 14 07:35:01 1992
--- auxtext.e	Fri Aug 14 07:35:02 1992
***************
*** 23,27 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/auxtext.e,v 2.11 1992/06/26 05:21:19 william Exp $
   */
  
--- 23,27 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/auxtext.e,v 2.12 1992/08/12 05:43:55 william Exp $
   */
  
***************
*** 41,44 ****
--- 41,45 ----
  extern void	MakeCachedTextBitmap ();
  extern struct ObjRec	* FindTextObj ();
+ extern void	UnlinkCurTextFromInnerSel ();
  extern void	AdjAncestorsBBox ();
  extern void	DumpTextObj ();
*** drawing.e.orig	Fri Aug 14 07:35:05 1992
--- drawing.e	Fri Aug 14 07:35:05 1992
***************
*** 23,30 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.e,v 2.8 1992/05/11 23:41:21 william Exp $
   */
  
  extern int	numRedrawBBox;
  
  extern void	SetDefaultDrawWinClipRecs ();
--- 23,33 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/drawing.e,v 2.9 1992/08/11 03:58:27 william Exp $
   */
  
  extern int	numRedrawBBox;
+ extern int	numClipRecs;
+ extern int	clipOrdering;
+ extern XRectangle	clipRecs[];
  
  extern void	SetDefaultDrawWinClipRecs ();
*** patchlevel.h.orig	Fri Aug 14 07:35:08 1992
--- patchlevel.h	Fri Aug 14 07:35:09 1992
***************
*** 23,28 ****
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/patchlevel.h,v 2.28 1992/08/08 08:26:49 william Exp $
   */
  
! #define TGIF_PATCHLEVEL 10
--- 23,28 ----
   * PERFORMANCE OF THIS SOFTWARE.
   *
!  * @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/patchlevel.h,v 2.29 1992/08/11 06:53:25 william Exp $
   */
  
! #define TGIF_PATCHLEVEL 11
*** Imakefile.orig	Fri Aug 14 07:35:12 1992
--- Imakefile	Fri Aug 14 07:35:16 1992
***************
*** 23,30 ****
  /**/# PERFORMANCE OF THIS SOFTWARE.
  /**/#
! /**/# @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Imakefile,v 2.83 1992/08/08 08:25:01 william Exp $
  /**/#
  
! TGIFVERSION	= 2.12-p10
  PROGRAMS	= tgif prtgif /**/#frontend11.o testdrive
  /**/#CDEBUGFLAGS= -g
--- 23,30 ----
  /**/# PERFORMANCE OF THIS SOFTWARE.
  /**/#
! /**/# @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/Imakefile,v 2.84 1992/08/14 06:19:54 william Exp $
  /**/#
  
! TGIFVERSION	= 2.12-p11
  PROGRAMS	= tgif prtgif /**/#frontend11.o testdrive
  /**/#CDEBUGFLAGS= -g
*** HISTORY.orig	Fri Aug 14 07:35:22 1992
--- HISTORY	Fri Aug 14 07:35:26 1992
***************
*** 1,5 ****
  /*
!  *  @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/HISTORY,v 2.34 1992/08/08 19:55:45 william Exp $
   */
  -----------------------> tgif-2.12-p9 => tgif-2.12-p10 <-----------------------
  I've just put tgif-2.12-patch10 (10th patch for tgif-2.12) in the
--- 1,27 ----
  /*
!  *  @(#)$Header: /amnt/kona/tangram/u/william/X11/TGIF2/RCS/HISTORY,v 2.35 1992/08/14 06:18:25 william Exp $
   */
+ -----------------------> tgif-2.12-p10 => tgif-2.12-p11 <-----------------------
+ I've just put tgif-2.12-patch11 (11th patch for tgif-2.12) in the
+ following places for anonymous ftp:
+ 
+ 	export.lcs.mit.edu	/contrib/tgif-2.12-patch11.Z
+ 	cs.ucla.edu		/pub/tgif/tgif-2.12-patch11.Z
+ 
+ The patch is also posted to comp.sources.bugs.
+ 
+ Please uncompress and then apply the patch with
+ 'patch -p -N < tgif-2.12-patch11'.
+ Here's a short list of added features/bug fixes.
+ 
+ 1)  Fix a bug in erasing text from a grouped object.  This bug only appears if
+     the Tgif*GroupedTextEditable X default is set to 'true'.
+ 2)  Fix a bug in setting the clipping rectangles.  Sometimes, tgif would not
+     redraw properly.  Thanks to Yoichiro Ueno <ueno@cs.titech.ac.jp> for the
+     fix.
+ 3)  Fix a bug in copying objects with attributes.  It used to be that every
+     time such a object is copied, the ordering of the attributes are reversed.
+ 4)  Fix a typo in box.c.  This bug only appears if -DNO_THIN_LINE is specified
+     as a compile option.
  -----------------------> tgif-2.12-p9 => tgif-2.12-p10 <-----------------------
  I've just put tgif-2.12-patch10 (10th patch for tgif-2.12) in the
---------------------------------> cut here <---------------------------------
-- 
Bill Cheng // UCLA Computer Science Department // (310) 645-8328
3564-C Boelter Hall // Los Angeles, California 90024 // USA
william@CS.UCLA.EDU      ...!{uunet|ucbvax}!cs.ucla.edu!william
Technical Details
Message-ID: <1992Nov4.073438.4861@cs.ucla.edu>
Path: arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!pacific.mps.ohio-state.edu!linac!uwm.edu!spool.mu.edu!sol.ctr.columbia.edu!usc!ucla-cs!lanai.cs.ucla.edu!william

Show Full Headers
Complete Article Headers
Newsgroups: comp.sources.bugs
Path: arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!pacific.mps.ohio-state.edu!linac!uwm.edu!spool.mu.edu!sol.ctr.columbia.edu!usc!ucla-cs!lanai.cs.ucla.edu!william
From: william@lanai.cs.ucla.edu (William Cheng)
Subject: Tgif-2.12-patch11 (11th patch for tgif-2.12), Part 01/01
Message-ID: <1992Nov4.073438.4861@cs.ucla.edu>
Followup-To: william@cs.ucla.edu
Keywords: draw, postscript, latex, hierarchical, x11, xlib, wysiwyg, bitmap
Sender: usenet@cs.ucla.edu (Mr Usenet)
Nntp-Posting-Host: lanai.cs.ucla.edu
Organization: UCLA, Computer Science Department
Date: Wed, 4 Nov 92 07:34:38 GMT
Lines: 756