@ -139,6 +139,9 @@ static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  xdrawglyph ( Glyph ,  int ,  int ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  xclear ( int ,  int ,  int ,  int ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  int  xgeommasktogravity ( int ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  ximopen ( Display  * ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  ximinstantiate ( Display  * ,  XPointer ,  XPointer ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  ximdestroy ( XIM ,  XPointer ,  XPointer ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  xinit ( int ,  int ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  cresize ( int ,  int ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					static  void  xresize ( int ,  int ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -996,6 +999,43 @@ xunloadfonts(void)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xunloadfont ( & dc . ibfont ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					ximopen ( Display  * dpy )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						XIMCallback  destroy  =  {  . client_data  =  NULL ,  . callback  =  ximdestroy  } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( ( xw . xim  =  XOpenIM ( xw . dpy ,  NULL ,  NULL ,  NULL ) )  = =  NULL )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							XSetLocaleModifiers ( " @im=local " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( ( xw . xim  =  XOpenIM ( xw . dpy ,  NULL ,  NULL ,  NULL ) )  = =  NULL )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								XSetLocaleModifiers ( " @im= " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								if  ( ( xw . xim  =  XOpenIM ( xw . dpy ,  NULL ,  NULL ,  NULL ) )  = =  NULL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									die ( " XOpenIM failed. Could not open input device. \n " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( XSetIMValues ( xw . xim ,  XNDestroyCallback ,  & destroy ,  NULL )  ! =  NULL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							die ( " XSetIMValues failed. Could not set input method value. \n " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . xic  =  XCreateIC ( xw . xim ,  XNInputStyle ,  XIMPreeditNothing  |  XIMStatusNothing ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									XNClientWindow ,  xw . win ,  XNFocusWindow ,  xw . win ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( xw . xic  = =  NULL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							die ( " XCreateIC failed. Could not obtain input method. \n " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					ximinstantiate ( Display  * dpy ,  XPointer  client ,  XPointer  call )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						ximopen ( dpy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						XUnregisterIMInstantiateCallback ( xw . dpy ,  NULL ,  NULL ,  NULL ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										ximinstantiate ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					ximdestroy ( XIM  xim ,  XPointer  client ,  XPointer  call )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . xim  =  NULL ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						XRegisterIMInstantiateCallback ( xw . dpy ,  NULL ,  NULL ,  NULL ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										ximinstantiate ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					xinit ( int  cols ,  int  rows )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -1033,7 +1073,7 @@ xinit(int cols, int rows)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . attrs . background_pixel  =  dc . col [ defaultbg ] . pixel ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . attrs . border_pixel  =  dc . col [ defaultbg ] . pixel ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . attrs . bit_gravity  =  NorthWestGravity ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . attrs . event_mask  =  FocusChangeMask  |  KeyPressMask   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . attrs . event_mask  =  FocusChangeMask  |  KeyPressMask  |  KeyReleaseMask    
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							|  ExposureMask  |  VisibilityChangeMask  |  StructureNotifyMask   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							|  ButtonMotionMask  |  ButtonPressMask  |  ButtonReleaseMask ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . attrs . colormap  =  xw . cmap ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -1061,22 +1101,7 @@ xinit(int cols, int rows)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . draw  =  XftDrawCreate ( xw . dpy ,  xw . buf ,  xw . vis ,  xw . cmap ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* input methods */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( ( xw . xim  =  XOpenIM ( xw . dpy ,  NULL ,  NULL ,  NULL ) )  = =  NULL )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							XSetLocaleModifiers ( " @im=local " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( ( xw . xim  =   XOpenIM ( xw . dpy ,  NULL ,  NULL ,  NULL ) )  = =  NULL )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								XSetLocaleModifiers ( " @im= " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								if  ( ( xw . xim  =  XOpenIM ( xw . dpy ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										NULL ,  NULL ,  NULL ) )  = =  NULL )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									die ( " XOpenIM failed. Could not open input "   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										"  device. \n " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						xw . xic  =  XCreateIC ( xw . xim ,  XNInputStyle ,  XIMPreeditNothing   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										   |  XIMStatusNothing ,  XNClientWindow ,  xw . win ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										   XNFocusWindow ,  xw . win ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( xw . xic  = =  NULL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							die ( " XCreateIC failed. Could not obtain input method. \n " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						ximopen ( xw . dpy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* white cursor, black outline */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						cursor  =  XCreateFontCursor ( xw . dpy ,  mouseshape ) ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -1554,6 +1579,16 @@ xfinishdraw(void)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									defaultfg  :  defaultbg ] . pixel ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					xximspot ( int  x ,  int  y )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						XPoint  spot  =  {  borderpx  +  x  *  win . cw ,  borderpx  +  ( y  +  1 )  *  win . ch  } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						XVaNestedList  attr  =  XVaCreateNestedList ( 0 ,  XNSpotLocation ,  & spot ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						XSetICValues ( xw . xic ,  XNPreeditAttributes ,  attr ,  NULL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						XFree ( attr ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					expose ( XEvent  * ev )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{