diff options
| -rw-r--r-- | st.c | 14 | 
1 files changed, 13 insertions, 1 deletions
| @@ -107,6 +107,8 @@ typedef struct {  	Colormap cmap;  	Window win;  	Pixmap buf; +	XIM xim; +	XIC xic;  	int scr;  	int w;	/* window width	 */  	int h;	/* window height */ @@ -1228,6 +1230,13 @@ xinit(void) {  			| CWColormap,  			&attrs);  	xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr)); + + +	/* input methods */ +	xw.xim = XOpenIM(xw.dis, NULL, NULL, NULL); +	xw.xic = XCreateIC(xw.xim, XNInputStyle, XIMPreeditNothing  +					   | XIMStatusNothing, XNClientWindow, xw.win,  +					   XNFocusWindow, xw.win, NULL);  	/* gc */  	dc.gc = XCreateGC(xw.dis, xw.win, 0, NULL); @@ -1411,10 +1420,11 @@ kpress(XEvent *ev) {  	int len;  	int meta;  	int shift; +	Status status;  	meta = e->state & Mod1Mask;  	shift = e->state & ShiftMask; -	len = XLookupString(e, buf, sizeof(buf), &ksym, NULL); +	len = XmbLookupString(xw.xic, e, buf, sizeof(buf), &ksym, &status);  	if((customkey = kmap(ksym)))  		ttywrite(customkey, strlen(customkey)); @@ -1484,6 +1494,8 @@ run(void) {  		}  		while(XPending(xw.dis)) {  			XNextEvent(xw.dis, &ev); +			if (XFilterEvent(&ev, xw.win)) +				continue;  			if(handler[ev.type])  				(handler[ev.type])(&ev);  		} | 
