|
|
@ -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); |
|
|
|
} |
|
|
|