*** InterViews/event.h.orig	Fri Oct 13 02:58:07 1989
--- InterViews/event.h	Tue Dec 25 14:01:08 1990
***************
*** 39,45 ****
      ChannelEvent,	/* input pending on channel */
      TimerEvent,		/* time out on read */
      FocusInEvent,	/* focus for keyboard events */
!     FocusOutEvent 	/* lose keyboard focus */
  };
  
  /* obsolete */
--- 39,49 ----
      ChannelEvent,	/* input pending on channel */
      TimerEvent,		/* time out on read */
      FocusInEvent,	/* focus for keyboard events */
! // patch by eto@ai.cs.fujitsu.co.jp
! //    FocusOutEvent 	/* lose keyboard focus */
!     FocusOutEvent, 	/* lose keyboard focus */
!     PropertyEvent 	/* get property change */
! // patch end
  };
  
  /* obsolete */
***************
*** 92,99 ****
--- 96,106 ----
      EventRep* rep;
  
      void GetMotionInfo();
+     // patch by eto@ai.cs.fujitsu.co.jp
      void GetButtonInfo(EventType);
+     // patch end
      void GetKeyInfo();
+     boolean GetClientMessageInfo();
      void GetKeyState(unsigned);
      boolean GetCrossingInfo(EventType);
      void FindWorld(unsigned long);
*** InterViews/interactor.h.orig	Tue Oct 10 08:44:11 1989
--- InterViews/interactor.h	Tue Dec 25 14:02:08 1990
***************
*** 96,101 ****
--- 96,104 ----
      void QuitRunning(Event&);
      void Sync();
      void UnRead(Event&);
+     // patch start eto@ai.cs.fujitsu.co.jp
+     boolean ClientMessageAcceptable();
+     // patch end
  
      /* subject-view communication */
      virtual void Adjust(Perspective&);
***************
*** 151,156 ****
--- 154,162 ----
      Coord ymax;				/* canvas->Height() - 1 */
      Sensor* input;			/* normal input event interest */
      Painter* output;			/* normal output parameters */
+     // patch start eto@ai.cs.fujitsu.co.jp
+     boolean acceptClientMessage;
+     // patch end
  
      Interactor(Sensor*, Painter*);	/* old-fashioned constructor */
  
*** libInterViews/X11-event.c.orig	Fri Jan 19 07:23:31 1990
--- libInterViews/X11-event.c	Fri Dec 21 10:36:45 1990
***************
*** 120,125 ****
--- 120,132 ----
      return false;
  }
  
+ // patch by eto@ai.cs.fujitsu.co.jp
+ boolean Event::GetClientMessageInfo() {
+     eventType = rep->event().xclient.type;
+     return true;
+ }
+ // patch end
+ 
  void Event::FindWorld(unsigned long root) {
      Interactor* i;
  
*** libInterViews/X11-inter.c.orig	Fri Oct 13 02:58:55 1989
--- libInterViews/X11-inter.c	Mon Dec 17 10:46:51 1990
***************
*** 141,146 ****
--- 141,157 ----
  		);
  	    }
  	    return false;
+ 	// patch by eto@ai.cs.fujitsu.co.jp
+         case ClientMessage:
+ 	case PropertyNotify:
+ 	    w = xe.xclient.window;
+ 	    if (!(_world->itable()->Find(i, (void*)w)) ||
+ 		!(i->ClientMessageAcceptable())) {
+ 		// if interacter does not recieve ClientMessage
+ 		return false;
+ 	    }
+ 	    break;
+ 	// patch end
  	default:
  	    /* ignore */
  	    return false;
*** libInterViews/X11-sensor.c.orig	Fri Oct 13 02:58:57 1989
--- libInterViews/X11-sensor.c	Fri Dec 21 10:37:07 1990
***************
*** 39,45 ****
  Mask upmask = ButtonPressMask|ButtonReleaseMask|OwnerGrabButtonMask;
  Mask downmask = ButtonPressMask|ButtonReleaseMask|OwnerGrabButtonMask;
  Mask initmask = PointerMotionHintMask;
! 
  static Sensor* grabber;
  
  boolean Sensor::Interesting(Event& e) {
--- 39,47 ----
  Mask upmask = ButtonPressMask|ButtonReleaseMask|OwnerGrabButtonMask;
  Mask downmask = ButtonPressMask|ButtonReleaseMask|OwnerGrabButtonMask;
  Mask initmask = PointerMotionHintMask;
! // patch by eto@ai.cs.fujitsu.co.jp
! Mask propmask = PropertyChangeMask;
! // patch end
  static Sensor* grabber;
  
  boolean Sensor::Interesting(Event& e) {
***************
*** 73,78 ****
--- 75,89 ----
  	    return e.GetCrossingInfo(EnterEvent);
  	case LeaveNotify:
  	    return e.GetCrossingInfo(LeaveEvent);
+ 	// patch by eto@ai.cs.fujitsu.co.jp
+         case ClientMessage:
+ 	case PropertyNotify:
+ 	    if (mask & propmask) {
+ 		return e.GetClientMessageInfo();
+ 	    } else {
+ 		return false;
+ 	    }
+ 	// patch end
  	default:
  	    /* ignore */;
      }
*** libInterViews/interactor.c.orig	Fri Oct 13 08:40:19 1989
--- libInterViews/interactor.c	Sun Dec 16 14:10:01 1990
***************
*** 127,132 ****
--- 127,135 ----
      left = 0;
      bottom = 0;
      cursensor = nil;
+     // patch start eto@ai.cs.fujitsu.co.jp
+     acceptClientMessage = false;
+     // patch end
  }
  
  Interactor::~Interactor () {
***************
*** 905,907 ****
--- 908,916 ----
  	GetWorld()->InsertIcon(icon);
      }
  }
+ 
+ // patch start eto@ai.cs.fujitsu.co.jp
+ boolean Interactor::ClientMessageAcceptable() {
+     return acceptClientMessage;
+ }
+ // patch end
*** libInterViews/sensor.c.orig	Wed Dec 20 09:28:43 1989
--- libInterViews/sensor.c	Fri Dec 21 10:27:53 1990
***************
*** 37,42 ****
--- 37,45 ----
  
  extern int
      motionmask, keymask, entermask, leavemask, focusmask, substructmask,
+ // patch by eto@ai.cs.fujitsu.co.jp
+     propmask,
+ // patch end
      upmask, downmask, initmask;
  
  Sensor::Sensor () {
***************
*** 77,82 ****
--- 80,88 ----
      allEvents->Catch(KeyEvent);
      allEvents->Catch(EnterEvent);
      allEvents->Catch(LeaveEvent);
+ // patch by eto@ai.cs.fujitsu.co.jp
+     allEvents->Catch(PropertyEvent);
+ // patch end
      onoffEvents = new Sensor;
      onoffEvents->Catch(EnterEvent);
      onoffEvents->Catch(LeaveEvent);
***************
*** 127,132 ****
--- 133,143 ----
  	    sec = 0;
  	    usec = 0;
  	    break;
+ // patch by eto@ai.cs.fujitsu.co.jp
+ 	case PropertyEvent:
+ 	    mask |= propmask;
+ 	    break;
+ // patch end
      }
  }
  
