From martins@hplhasm.hpl.hp.com Tue Nov  9 14:36:00 1993
Return-Path: <martins@hplhasm.hpl.hp.com>
Received: from eagle.is.lmsc.lockheed.com (eagle.lockheed.com) by rocket (4.1/SMI-4.1)
	id AA21902; Tue, 9 Nov 93 14:35:54 EST
Received: by eagle.is.lmsc.lockheed.com (5.57/Ultrix3.0-C)
	id AA18012; Tue, 9 Nov 93 11:36:48 -0800
Received: from hplhasm.hpl.hp.com by hplms26.hpl.hp.com with SMTP
	(16.6/15.5+ECS 3.3+HPL1.1S) id AA19550; Tue, 9 Nov 93 11:36:45 -0800
Received: from localhost by hplhasm.hpl.hp.com with SMTP
	(1.37.109.4/15.5+ECS 3.3+HPL1.1) id AA18246; Tue, 9 Nov 93 11:36:40 -0800
Message-Id: <9311091936.AA18246@hplhasm.hpl.hp.com>
To: Robert Nation <nation@rocket.sanders.lockheed.com>
Subject: Fvwm 1.03 / NoIconTitle
Date: Tue, 09 Nov 1993 11:36:40 -0800
From: Henrique Martins <martins@hplhasm.hpl.hp.com>
Status: RO


  Hi Rob,

  This morning I grabbed 1.03 from spcot and decided to add a configuration
  option, NoIconTitle, per request of a friend of mine. This used to be in
  your list of things to add, that somehow got nulled in one of the latest
  releases.  I'm sending you the diffs for you to integrate, if you think
  they're appropriate. (Warning: I've tested it with XPM and SHAPE on
  only!)

  I also noticed a little bug in DisplayPosition (caused by the addition of
  one to the length of the draw string call to the move window) where a
  NULL can be displayed (as nu) for very small strings, i.e. windows close
  to virtual 0,0.  I've replaced the 12 with strlen (str) and it seems to
  work. (I've tried with a 12x12 pager, on a 1280x1024 display ...)

  I also tried to change the code so when one de-iconifies the pager one is
  not warped into the 1st page, but I didn't have time to finish it (i.e.
  made some changes, but didn't succeed/guessed right). I did add a break
  out of the loop in DeIconify, to get out as soon as one window matches.

  I didn't change the man page to reflect the NoIconTile option ...

  -- Henrique

------------------------------------------------------------------------------

*** fvwm.1.03/add_window.c	Tue Nov  2 11:41:33 1993
--- fvwm.1.03a/add_window.c	Tue Nov  9 11:07:20 1993
***************
*** 205,210 ****
--- 205,213 ----
        tmp_win->icon_bitmap_file = Scr.DefaultIcon;
      }
  
+   if(tflag & NOICON_TITLE_FLAG)
+     tmp_win->flags |= NOICON_TITLE;
+ 
    if (tflag & STAYSONTOP_FLAG)
      tmp_win->flags |= ONTOP;
    
***************
*** 496,502 ****
    /* wait until the window is iconified and the icon window is mapped
     * before creating the icon window 
     */
!   tmp_win->icon_w = (int)NULL;
    GrabButtons(tmp_win);
    GrabKeys(tmp_win);
  
--- 499,505 ----
    /* wait until the window is iconified and the icon window is mapped
     * before creating the icon window 
     */
!   tmp_win->icon_w = None;
    GrabButtons(tmp_win);
    GrabKeys(tmp_win);
  
*** fvwm.1.03/configure.c	Tue Nov  9 05:52:28 1993
--- fvwm.1.03a/configure.c	Tue Nov  9 11:07:20 1993
***************
*** 106,111 ****
--- 106,113 ----
    {"StickyIcons",       SetFlag,        (char **)StickyIcons, (int *)0},
    {"IconFont",          assign_string,  &Scr.IconFont.name, (int *)0},
    {"Icon",              AddToList,      (char **)&Scr.TheList,(int *)ICON_FLAG},
+   {"NoIconTitle",       AddToList,      (char **)&Scr.TheList,
+                                         (int *)NOICON_TITLE_FLAG},
  #endif
    {"NoTitle",           AddToList,      (char **)&Scr.TheList, 
                                          (int *)NOTITLE_FLAG},
*** fvwm.1.03/events.c	Mon Nov  8 05:33:51 1993
--- fvwm.1.03a/events.c	Tue Nov  9 09:45:10 1993
***************
*** 372,383 ****
  	if(Tmp_win->icon_bitmap_file == Scr.DefaultIcon)
  	  Tmp_win->icon_bitmap_file = (char *)0;
  
!       if((Tmp_win->icon_w)&&((Tmp_win->wmhints->flags & IconPixmapHint)||
! 			     (Tmp_win->wmhints->flags & IconWindowHint)))
  	{
  	  if (!(Scr.flags & SuppressIcons))
  	    {
! 	      XDestroyWindow(dpy,Tmp_win->icon_w);
  	      if(Tmp_win->flags & ICON_OURS)
  		{
  		  if(Tmp_win->icon_pixmap_w != None)
--- 372,384 ----
  	if(Tmp_win->icon_bitmap_file == Scr.DefaultIcon)
  	  Tmp_win->icon_bitmap_file = (char *)0;
  
!       if((Tmp_win->wmhints->flags & IconPixmapHint)||
! 	 (Tmp_win->wmhints->flags & IconWindowHint))
  	{
  	  if (!(Scr.flags & SuppressIcons))
  	    {
! 	      if (Tmp_win->icon_w)
! 		XDestroyWindow(dpy,Tmp_win->icon_w);
  	      if(Tmp_win->flags & ICON_OURS)
  		{
  		  if(Tmp_win->icon_pixmap_w != None)
***************
*** 386,393 ****
  	      else 
  		XUnmapWindow(dpy,Tmp_win->icon_pixmap_w);
  	    }
! 	  Tmp_win->icon_w = (Window)NULL;
! 	  Tmp_win->icon_pixmap_w = (Window)NULL;
  	  Tmp_win->iconPixmap = (Window)NULL;
  	  if(Tmp_win->flags & ICON)
  	    {
--- 387,394 ----
  	      else 
  		XUnmapWindow(dpy,Tmp_win->icon_pixmap_w);
  	    }
! 	  Tmp_win->icon_w = None;
! 	  Tmp_win->icon_pixmap_w = None;
  	  Tmp_win->iconPixmap = (Window)NULL;
  	  if(Tmp_win->flags & ICON)
  	    {
***************
*** 397,403 ****
  		{
  		  LowerWindow(Tmp_win);
  		  AutoPlace(Tmp_win);
! 		  XMapWindow(dpy, Tmp_win->icon_w);
  		  if(Tmp_win->icon_pixmap_w != None)
  		    XMapWindow(dpy, Tmp_win->icon_pixmap_w);
  		}
--- 398,405 ----
  		{
  		  LowerWindow(Tmp_win);
  		  AutoPlace(Tmp_win);
! 		  if (Tmp_win->icon_w)
! 		    XMapWindow(dpy, Tmp_win->icon_w);
  		  if(Tmp_win->icon_pixmap_w != None)
  		    XMapWindow(dpy, Tmp_win->icon_pixmap_w);
  		}
***************
*** 503,512 ****
      }
    XDestroyWindow(dpy, Tmp_win->frame);
  
!   if ((Tmp_win->icon_w)&&(Tmp_win->flags & PIXMAP_OURS))
      XFreePixmap(dpy, Tmp_win->iconPixmap);
  
!   XDestroyWindow(dpy, Tmp_win->icon_w);
    if (Tmp_win->flags &ICON_OURS)
      {
        if(Tmp_win->icon_pixmap_w != None)
--- 505,515 ----
      }
    XDestroyWindow(dpy, Tmp_win->frame);
  
!   if ((Tmp_win->icon_pixmap_w)&&(Tmp_win->flags & PIXMAP_OURS))
      XFreePixmap(dpy, Tmp_win->iconPixmap);
  
!   if(Tmp_win->icon_w)
!     XDestroyWindow(dpy, Tmp_win->icon_w);
    if (Tmp_win->flags &ICON_OURS)
      {
        if(Tmp_win->icon_pixmap_w != None)
*** fvwm.1.03/functions.c	Fri Oct 29 11:28:42 1993
--- fvwm.1.03a/functions.c	Tue Nov  9 11:27:32 1993
***************
*** 609,614 ****
--- 609,615 ----
  	  if (t->icon_pixmap_w) 
  	    XUnmapWindow(dpy, t->icon_pixmap_w);
  	  t->flags &= ~ICON;
+ 	  break;
  	}
      }
    if (Scr.flags & ClickToFocus) FocusOn(tmp_win);
***************
*** 660,671 ****
      } 
  
    RaiseWindow(tmp_win);
!   if (tmp_win->icon_w == (int)NULL)
      CreateIconWindow(tmp_win, def_x, def_y);
    AutoPlace(tmp_win);
  
    LowerWindow(tmp_win);
!   XMapWindow(dpy, tmp_win->icon_w);
    if(tmp_win->icon_pixmap_w != None)
      XMapWindow(dpy, tmp_win->icon_pixmap_w);
  
--- 661,673 ----
      } 
  
    RaiseWindow(tmp_win);
!   if (tmp_win->icon_w == None)
      CreateIconWindow(tmp_win, def_x, def_y);
    AutoPlace(tmp_win);
  
    LowerWindow(tmp_win);
!   if (tmp_win->icon_w != None)
!     XMapWindow(dpy, tmp_win->icon_w);
    if(tmp_win->icon_pixmap_w != None)
      XMapWindow(dpy, tmp_win->icon_pixmap_w);
  
***************
*** 690,698 ****
    
    data[0] = (unsigned long) state;
    data[1] = (unsigned long) tmp_win->icon_w;
    
    XChangeProperty (dpy, tmp_win->w, _XA_WM_STATE, _XA_WM_STATE, 32, 
! 		   PropModeReplace, (unsigned char *) data, 2);
    return;
  }
  
--- 692,701 ----
    
    data[0] = (unsigned long) state;
    data[1] = (unsigned long) tmp_win->icon_w;
+   data[2] = (unsigned long) tmp_win->icon_pixmap_w;
    
    XChangeProperty (dpy, tmp_win->w, _XA_WM_STATE, _XA_WM_STATE, 32, 
! 		   PropModeReplace, (unsigned char *) data, 3);
    return;
  }
  
***************
*** 761,767 ****
  	  if(!((t->flags & ICON)&&(Scr.flags & StickyIcons)) &&
  	     (!(t->flags & STICKY)))
  	    {
! 	      if((t->icon_w)&&(!(Scr.flags & StickyIcons)))
  		{
  		  t->icon_x_loc += deltax;
  		  t->icon_xl_loc += deltax;
--- 764,770 ----
  	  if(!((t->flags & ICON)&&(Scr.flags & StickyIcons)) &&
  	     (!(t->flags & STICKY)))
  	    {
! 	      if(!(Scr.flags & StickyIcons))
  		{
  		  t->icon_x_loc += deltax;
  		  t->icon_xl_loc += deltax;
***************
*** 769,776 ****
  		  if(t->icon_pixmap_w != None)
  		    XMoveWindow(dpy,t->icon_pixmap_w,t->icon_x_loc,
  				t->icon_y_loc);
! 		  XMoveWindow(dpy,t->icon_w,t->icon_x_loc,
! 			      t->icon_y_loc+t->icon_p_height);
  		}
  	      SetupFrame (t, t->frame_x+ deltax, t->frame_y + deltay,
  			  t->frame_width, t->frame_height,FALSE);
--- 772,780 ----
  		  if(t->icon_pixmap_w != None)
  		    XMoveWindow(dpy,t->icon_pixmap_w,t->icon_x_loc,
  				t->icon_y_loc);
! 		  if(t->icon_w != None)
! 		    XMoveWindow(dpy,t->icon_w,t->icon_x_loc,
! 				t->icon_y_loc+t->icon_p_height);
  		}
  	      SetupFrame (t, t->frame_x+ deltax, t->frame_y + deltay,
  			  t->frame_width, t->frame_height,FALSE);
*** fvwm.1.03/fvwm.h	Thu Oct 28 19:01:20 1993
--- fvwm.1.03a/fvwm.h	Tue Nov  9 11:07:20 1993
***************
*** 209,214 ****
--- 209,215 ----
  #define MAXIMIZED   8192 /* is the window maximized? */
  #define DoesWmTakeFocus		16384
  #define DoesWmDeleteWindow	32768
+ #define NOICON_TITLE            65536
  
  #include <stdlib.h>
  extern void Reborder(void);
*** fvwm.1.03/icons.c	Tue Nov  9 06:27:26 1993
--- fvwm.1.03a/icons.c	Tue Nov  9 11:07:20 1993
***************
*** 159,166 ****
      }
  
    /* figure out the icon window size */
!   tmp_win->icon_t_width = XTextWidth(IconFont->font,tmp_win->icon_name, 
! 				     strlen(tmp_win->icon_name));
    if((tmp_win->flags & ICON_OURS)&&(tmp_win->icon_p_height >0))
      {
        tmp_win->icon_p_width += 4;
--- 159,176 ----
      }
  
    /* figure out the icon window size */
!   if (!(tmp_win->flags & NOICON_TITLE)||(tmp_win->icon_p_height == 0))
!     {
!       tmp_win->icon_t_width = XTextWidth(IconFont->font,tmp_win->icon_name, 
! 					 strlen(tmp_win->icon_name));
!       tmp_win->icon_w_height = ICON_HEIGHT;
!     }
!   else
!     {
!       tmp_win->icon_t_width = 0;
!       tmp_win->icon_w_height = 0;
!     }
! 
    if((tmp_win->flags & ICON_OURS)&&(tmp_win->icon_p_height >0))
      {
        tmp_win->icon_p_width += 4;
***************
*** 171,178 ****
      tmp_win->icon_p_width = tmp_win->icon_t_width+6;
    tmp_win->icon_w_width = tmp_win->icon_p_width;
  
-   tmp_win->icon_w_height = ICON_HEIGHT;
- 
    /* need to figure out where to put the icon window now */
    if (tmp_win->wmhints &&
        tmp_win->wmhints->flags & IconPositionHint)
--- 181,186 ----
***************
*** 215,224 ****
    attributes.event_mask = (ButtonPressMask | ButtonReleaseMask |
  			   ExposureMask | KeyPressMask|EnterWindowMask |
  			   LeaveWindowMask);
!   tmp_win->icon_w = 
!     XCreateWindow(dpy, Scr.Root, final_x, final_y+tmp_win->icon_p_height,
! 		  tmp_win->icon_w_width, tmp_win->icon_w_height,0,Scr.d_depth, 
! 		  CopyFromParent,Scr.d_visual,valuemask,&attributes);
  
    if((tmp_win->flags & ICON_OURS)&&(tmp_win->icon_p_width>0)&&
       (tmp_win->icon_p_height>0))
--- 223,233 ----
    attributes.event_mask = (ButtonPressMask | ButtonReleaseMask |
  			   ExposureMask | KeyPressMask|EnterWindowMask |
  			   LeaveWindowMask);
!   if (!(tmp_win->flags & NOICON_TITLE)||(tmp_win->icon_p_height == 0))
!     tmp_win->icon_w =
!       XCreateWindow(dpy, Scr.Root, final_x, final_y+tmp_win->icon_p_height,
! 		    tmp_win->icon_w_width, tmp_win->icon_w_height,0,Scr.d_depth, 
! 		    CopyFromParent,Scr.d_visual,valuemask,&attributes);
  
    if((tmp_win->flags & ICON_OURS)&&(tmp_win->icon_p_width>0)&&
       (tmp_win->icon_p_height>0))
***************
*** 246,260 ****
  #endif
  #endif
  
!   XSaveContext(dpy, tmp_win->icon_w, FvwmContext, (caddr_t)tmp_win);
    if(tmp_win->icon_pixmap_w != None)
-     XSaveContext(dpy, tmp_win->icon_pixmap_w, FvwmContext, (caddr_t)tmp_win);
-   XDefineCursor(dpy, tmp_win->icon_w, Scr.FvwmCursors[DEFAULT]);
-   XDefineCursor(dpy, tmp_win->icon_pixmap_w, Scr.FvwmCursors[DEFAULT]);
-   GrabIconButtons(tmp_win,tmp_win->icon_w);
-   GrabIconKeys(tmp_win,tmp_win->icon_w);
-   if(tmp_win->icon_pixmap_w)
      {
        GrabIconButtons(tmp_win,tmp_win->icon_pixmap_w);
        GrabIconKeys(tmp_win,tmp_win->icon_pixmap_w);
      }
--- 255,271 ----
  #endif
  #endif
  
!   if(tmp_win->icon_w != None)
!     {
!       XSaveContext(dpy, tmp_win->icon_w, FvwmContext, (caddr_t)tmp_win);
!       XDefineCursor(dpy, tmp_win->icon_w, Scr.FvwmCursors[DEFAULT]);
!       GrabIconButtons(tmp_win,tmp_win->icon_w);
!       GrabIconKeys(tmp_win,tmp_win->icon_w);
!     }
    if(tmp_win->icon_pixmap_w != None)
      {
+       XSaveContext(dpy, tmp_win->icon_pixmap_w, FvwmContext, (caddr_t)tmp_win);
+       XDefineCursor(dpy, tmp_win->icon_pixmap_w, Scr.FvwmCursors[DEFAULT]);
        GrabIconButtons(tmp_win,tmp_win->icon_pixmap_w);
        GrabIconKeys(tmp_win,tmp_win->icon_pixmap_w);
      }
***************
*** 277,283 ****
    if(Scr.flags & SuppressIcons)
      return;
  
!   flush_expose (Tmp_win->icon_w);
    if(Tmp_win->icon_pixmap_w != None)
      flush_expose (Tmp_win->icon_pixmap_w);
  
--- 288,295 ----
    if(Scr.flags & SuppressIcons)
      return;
  
!   if(Tmp_win->icon_w != None)
!     flush_expose (Tmp_win->icon_w);
    if(Tmp_win->icon_pixmap_w != None)
      flush_expose (Tmp_win->icon_pixmap_w);
  
***************
*** 288,302 ****
        else
  	Relief = Scr.HiReliefGC;
        Shadow = Scr.HiShadowGC;
!       XSetWindowBackground(dpy,Tmp_win->icon_w,Scr.HiColors.back);
        if((Tmp_win->flags & ICON_OURS)&&(Tmp_win->icon_pixmap_w != None))
  	XSetWindowBackground(dpy,Tmp_win->icon_pixmap_w,Scr.HiColors.back);
-       /* resize the icon name window */
-       Tmp_win->icon_w_width = Tmp_win->icon_t_width+6;
-       if(Tmp_win->icon_w_width < Tmp_win->icon_p_width)
- 	Tmp_win->icon_w_width = Tmp_win->icon_p_width;
-       Tmp_win->icon_xl_loc = Tmp_win->icon_x_loc - 
- 	(Tmp_win->icon_w_width - Tmp_win->icon_p_width)/2;
        TextColor = Scr.HiColors.fore;
        BackColor = Scr.HiColors.back;
      }
--- 300,317 ----
        else
  	Relief = Scr.HiReliefGC;
        Shadow = Scr.HiShadowGC;
!       if(Tmp_win->icon_w != None)
! 	{
! 	  XSetWindowBackground(dpy,Tmp_win->icon_w,Scr.HiColors.back);
! 	  /* resize the icon name window */
! 	  Tmp_win->icon_w_width = Tmp_win->icon_t_width+6;
! 	  if(Tmp_win->icon_w_width < Tmp_win->icon_p_width)
! 	    Tmp_win->icon_w_width = Tmp_win->icon_p_width;
! 	  Tmp_win->icon_xl_loc = Tmp_win->icon_x_loc - 
! 	    (Tmp_win->icon_w_width - Tmp_win->icon_p_width)/2;
! 	}
        if((Tmp_win->flags & ICON_OURS)&&(Tmp_win->icon_pixmap_w != None))
  	XSetWindowBackground(dpy,Tmp_win->icon_pixmap_w,Scr.HiColors.back);
        TextColor = Scr.HiColors.fore;
        BackColor = Scr.HiColors.back;
      }
***************
*** 307,318 ****
        else
  	Relief = Scr.StdReliefGC;
        Shadow = Scr.StdShadowGC;
!       XSetWindowBackground(dpy,Tmp_win->icon_w,Scr.StdColors.back);
        if((Tmp_win->flags & ICON_OURS)&&(Tmp_win->icon_pixmap_w != None))
  	XSetWindowBackground(dpy,Tmp_win->icon_pixmap_w,Scr.StdColors.back);
-       /* resize the icon name window */
-       Tmp_win->icon_w_width = Tmp_win->icon_p_width;
-       Tmp_win->icon_xl_loc = Tmp_win->icon_x_loc;
        TextColor = Scr.StdColors.fore;
        BackColor = Scr.StdColors.back;
      }
--- 322,336 ----
        else
  	Relief = Scr.StdReliefGC;
        Shadow = Scr.StdShadowGC;
!       if(Tmp_win->icon_w != None)
! 	{
! 	  XSetWindowBackground(dpy,Tmp_win->icon_w,Scr.StdColors.back);
! 	  /* resize the icon name window */
! 	  Tmp_win->icon_w_width = Tmp_win->icon_p_width;
! 	  Tmp_win->icon_xl_loc = Tmp_win->icon_x_loc;
! 	}
        if((Tmp_win->flags & ICON_OURS)&&(Tmp_win->icon_pixmap_w != None))
  	XSetWindowBackground(dpy,Tmp_win->icon_pixmap_w,Scr.StdColors.back);
        TextColor = Scr.StdColors.fore;
        BackColor = Scr.StdColors.back;
      }
***************
*** 319,332 ****
    /* write the icon label */
    NewFontAndColor(IconFont->font->fid,TextColor,BackColor);
  
!   XMoveWindow(dpy,Tmp_win->icon_pixmap_w,Tmp_win->icon_x_loc,
! 	      Tmp_win->icon_y_loc);
!   XMoveResizeWindow(dpy, Tmp_win->icon_w, Tmp_win->icon_xl_loc,
! 		    Tmp_win->icon_y_loc+Tmp_win->icon_p_height,
! 		    Tmp_win->icon_w_width,ICON_HEIGHT);
!   
!   XClearWindow(dpy,Tmp_win->icon_w);
! 
    if((Tmp_win->iconPixmap != None)&&(!(Tmp_win->flags & SHAPED_ICON)))
      RelieveWindow(Tmp_win->icon_pixmap_w,0,0,Tmp_win->icon_p_width,
  #ifdef MOTIF
--- 337,352 ----
    /* write the icon label */
    NewFontAndColor(IconFont->font->fid,TextColor,BackColor);
  
!   if(Tmp_win->icon_pixmap_w != None)
!     XMoveWindow(dpy,Tmp_win->icon_pixmap_w,Tmp_win->icon_x_loc,
! 		Tmp_win->icon_y_loc);
!   if(Tmp_win->icon_w != None)
!     {
!       XMoveResizeWindow(dpy, Tmp_win->icon_w, Tmp_win->icon_xl_loc,
! 			Tmp_win->icon_y_loc+Tmp_win->icon_p_height,
! 			Tmp_win->icon_w_width,ICON_HEIGHT);
!         XClearWindow(dpy,Tmp_win->icon_w);
!     }
    if((Tmp_win->iconPixmap != None)&&(!(Tmp_win->flags & SHAPED_ICON)))
      RelieveWindow(Tmp_win->icon_pixmap_w,0,0,Tmp_win->icon_p_width,
  #ifdef MOTIF
***************
*** 346,367 ****
        else
  	XCopyPlane(dpy,Tmp_win->iconPixmap,Tmp_win->icon_pixmap_w,Scr.FontGC,0,
  		   0,Tmp_win->icon_p_width-4, Tmp_win->icon_p_height-4,2,2,1);
!     }      
  
!   /* text position */
!   x = (Tmp_win->icon_w_width - Tmp_win->icon_t_width)/2;
!   if(x<3)x=3;
    
!   XDrawString (dpy, Tmp_win->icon_w, Scr.FontGC, x,
! 	       Tmp_win->icon_w_height-IconFont->height+IconFont->y-3,
! 	       Tmp_win->icon_name, strlen(Tmp_win->icon_name));
!   RelieveWindow(Tmp_win->icon_w,0,0,Tmp_win->icon_w_width,	
  #ifdef MOTIF
!  		ICON_HEIGHT,Relief,Shadow, FULL_HILITE);
  #else
!   		ICON_HEIGHT,Relief,Shadow);
  #endif
  #endif  
  }
  
  /***********************************************************************
--- 366,390 ----
        else
  	XCopyPlane(dpy,Tmp_win->iconPixmap,Tmp_win->icon_pixmap_w,Scr.FontGC,0,
  		   0,Tmp_win->icon_p_width-4, Tmp_win->icon_p_height-4,2,2,1);
!     }
  
!   if (Tmp_win->icon_w != None)
!     {
!       /* text position */
!       x = (Tmp_win->icon_w_width - Tmp_win->icon_t_width)/2;
!       if(x<3)x=3;
    
!       XDrawString (dpy, Tmp_win->icon_w, Scr.FontGC, x,
! 		   Tmp_win->icon_w_height-IconFont->height+IconFont->y-3,
! 		   Tmp_win->icon_name, strlen(Tmp_win->icon_name));
!       RelieveWindow(Tmp_win->icon_w,0,0,Tmp_win->icon_w_width,	
  #ifdef MOTIF
! 		    ICON_HEIGHT,Relief,Shadow, FULL_HILITE);
  #else
!                     ICON_HEIGHT,Relief,Shadow);
  #endif
+     }
  #endif  
  }
  
  /***********************************************************************
***************
*** 449,456 ****
  	      test_window = Scr.FvwmRoot.next;
  	      while((test_window != (FvwmWindow *)0)&&(loc_ok == True))
  		{
! 		  if((test_window->flags & ICON)&&(test_window->icon_w)&&
! 		     (test_window != t))
  		    {
  		      tw=test_window->icon_p_width;
  		      th=test_window->icon_p_height+test_window->icon_w_height;
--- 472,479 ----
  	      test_window = Scr.FvwmRoot.next;
  	      while((test_window != (FvwmWindow *)0)&&(loc_ok == True))
  		{
! 		  if((test_window->flags & ICON)&&(test_window != t)&&
! 		     (test_window->icon_w||test_window->icon_pixmap_w))
  		    {
  		      tw=test_window->icon_p_width;
  		      th=test_window->icon_p_height+test_window->icon_w_height;
***************
*** 507,515 ****
    t->icon_w_width = t->icon_p_width;
    t->icon_xl_loc = t->icon_x_loc;
  
!   XMoveResizeWindow(dpy, t->icon_w, t->icon_xl_loc,
! 		    t->icon_y_loc+t->icon_p_height, 
! 		    t->icon_w_width,ICON_HEIGHT);
  #endif
  }
  
--- 530,539 ----
    t->icon_w_width = t->icon_p_width;
    t->icon_xl_loc = t->icon_x_loc;
  
!   if(t->icon_w != None)
!     XMoveResizeWindow(dpy, t->icon_w, t->icon_xl_loc,
! 		      t->icon_y_loc+t->icon_p_height, 
! 		      t->icon_w_width,ICON_HEIGHT);
  #endif
  }
  
*** fvwm.1.03/misc.h	Tue Nov  9 06:19:12 1993
--- fvwm.1.03a/misc.h	Tue Nov  9 11:07:20 1993
***************
*** 51,56 ****
--- 51,57 ----
  #define ICON_FLAG          32
  #define CIRCULATESKIP_FLAG 64
  #define LISTSKIP_FLAG     128
+ #define NOICON_TITLE_FLAG 512
  
  /* some fancy font handling stuff */
  #define NewFontAndColor(newfont,color,backcolor) {\
*** fvwm.1.03/move.c	Tue Nov  9 06:25:54 1993
--- fvwm.1.03a/move.c	Tue Nov  9 09:45:10 1993
***************
*** 71,79 ****
    pagerOn = False;
  #endif
  
!   if(tmp_win->flags & ICON)
!     w = tmp_win->icon_w;
!   else if (w != tmp_win->icon_w)
      w = tmp_win->frame;
    
    XGetGeometry(dpy, w, &JunkRoot, &origDragX, &origDragY,
--- 71,83 ----
    pagerOn = False;
  #endif
  
!   if(tmp_win->flags & ICON) 
!     {
!       w = tmp_win->icon_w;
!       if (w == None)
! 	w = tmp_win->icon_pixmap_w;
!     }
!   else if (w != tmp_win->icon_w && w != tmp_win->icon_pixmap_w)
      w = tmp_win->frame;
    
    XGetGeometry(dpy, w, &JunkRoot, &origDragX, &origDragY,
***************
*** 277,284 ****
  		  tmp_win->icon_xl_loc = xl -
  		    (tmp_win->icon_w_width - tmp_win->icon_p_width)/2;
  		  tmp_win->icon_y_loc = yt; 
! 		  XMoveWindow(dpy, tmp_win->icon_w,tmp_win->icon_xl_loc,
! 			      yt+tmp_win->icon_p_height);
  		  if(tmp_win->icon_pixmap_w != None)
  		    XMoveWindow (dpy, tmp_win->icon_pixmap_w,
  				 tmp_win->icon_x_loc,yt);
--- 281,289 ----
  		  tmp_win->icon_xl_loc = xl -
  		    (tmp_win->icon_w_width - tmp_win->icon_p_width)/2;
  		  tmp_win->icon_y_loc = yt; 
! 		  if(tmp_win->icon_w != None)
! 		    XMoveWindow(dpy, tmp_win->icon_w,tmp_win->icon_xl_loc,
! 				yt+tmp_win->icon_p_height);
  		  if(tmp_win->icon_pixmap_w != None)
  		    XMoveWindow (dpy, tmp_win->icon_pixmap_w,
  				 tmp_win->icon_x_loc,yt);
***************
*** 336,342 ****
    XDrawString (dpy, Scr.SizeWindow, Scr.NormalGC,
  	       offset,
  	       Scr.StdFont.font->ascent + SIZE_VINDENT,
! 	       str, 12);
  }
  
  
--- 341,347 ----
    XDrawString (dpy, Scr.SizeWindow, Scr.NormalGC,
  	       offset,
  	       Scr.StdFont.font->ascent + SIZE_VINDENT,
! 	       str, strlen(str));
  }
  
  
*** fvwm.1.03/pager.c	Tue Nov  9 09:00:19 1993
--- fvwm.1.03a/pager.c	Tue Nov  9 09:45:09 1993
***************
*** 190,197 ****
  
    if ((t->flags & ICON)&&(!(Scr.flags & SuppressIcons)))
      {
!       XRaiseWindow(dpy, t->icon_w);
!       XRaiseWindow(dpy, t->icon_pixmap_w);
      }
    Scr.LastWindowRaised = t;
    RedrawPager();
--- 190,199 ----
  
    if ((t->flags & ICON)&&(!(Scr.flags & SuppressIcons)))
      {
!       if(t->icon_w != None)
! 	XRaiseWindow(dpy, t->icon_w);
!       if(t->icon_pixmap_w != None)
! 	XRaiseWindow(dpy, t->icon_pixmap_w);
      }
    Scr.LastWindowRaised = t;
    RedrawPager();
***************
*** 211,218 ****
  
    if((t->flags & ICON)&&(!(Scr.flags & SuppressIcons)))
      {
!       XLowerWindow(dpy, t->icon_w);
!       XLowerWindow(dpy, t->icon_pixmap_w);
      }
    Scr.LastWindowRaised = (FvwmWindow *)0;
  #ifndef NO_PAGER
--- 213,222 ----
  
    if((t->flags & ICON)&&(!(Scr.flags & SuppressIcons)))
      {
!       if(t->icon_w != None)
! 	XLowerWindow(dpy, t->icon_w);
!       if(t->icon_pixmap_w != None)
! 	XLowerWindow(dpy, t->icon_pixmap_w);
      }
    Scr.LastWindowRaised = (FvwmWindow *)0;
  #ifndef NO_PAGER
***************
*** 359,367 ****
  	      tmp_win->icon_xl_loc = x - 
  		(tmp_win->icon_w_width - tmp_win->icon_p_width)/2;
  	      tmp_win->icon_y_loc = y;
! 	      XMoveWindow (dpy, tmp_win->icon_w, tmp_win->icon_xl_loc,
! 			   y+tmp_win->icon_p_height);
! 	      
  	      if(tmp_win->icon_pixmap_w != None)
  		XMoveWindow (dpy, tmp_win->icon_pixmap_w, x,y);
  	    }
--- 363,371 ----
  	      tmp_win->icon_xl_loc = x - 
  		(tmp_win->icon_w_width - tmp_win->icon_p_width)/2;
  	      tmp_win->icon_y_loc = y;
! 	      if(tmp_win->icon_w != None)
! 		XMoveWindow (dpy, tmp_win->icon_w, tmp_win->icon_xl_loc,
! 			     y+tmp_win->icon_p_height);
  	      if(tmp_win->icon_pixmap_w != None)
  		XMoveWindow (dpy, tmp_win->icon_pixmap_w, x,y);
  	    }
***************
*** 387,394 ****
  	  tmp_win->icon_xl_loc = x - 
  	    (tmp_win->icon_w_width - tmp_win->icon_p_width)/2;
  	  tmp_win->icon_y_loc = y;
! 	  XMoveWindow (dpy, tmp_win->icon_w, tmp_win->icon_xl_loc, y+tmp_win->icon_p_height);
! 
  	  if(tmp_win->icon_pixmap_w != None)
  	    XMoveWindow (dpy, tmp_win->icon_pixmap_w, x,y);
  	}
--- 391,399 ----
  	  tmp_win->icon_xl_loc = x - 
  	    (tmp_win->icon_w_width - tmp_win->icon_p_width)/2;
  	  tmp_win->icon_y_loc = y;
! 	  if(tmp_win->icon_w != None)
! 	    XMoveWindow (dpy, tmp_win->icon_w,
! 			 tmp_win->icon_xl_loc, y+tmp_win->icon_p_height);
  	  if(tmp_win->icon_pixmap_w != None)
  	    XMoveWindow (dpy, tmp_win->icon_pixmap_w, x,y);
  	}

  

