aboutsummaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
authorAurélien Aptel <aurelien.aptel@gmail.com>2010-09-21 16:04:13 +0200
committerAurélien Aptel <aurelien.aptel@gmail.com>2010-09-21 16:04:13 +0200
commit3470e3af23f4b98ce4293f6090c8df59a08329d9 (patch)
treef5ace8ab349acb74cdda933bdf330d28f9e21551 /st.c
parent6faedce53a8de8a81da1ba045ffbc2b7603128cd (diff)
downloadst-3470e3af23f4b98ce4293f6090c8df59a08329d9.tar.gz
st-3470e3af23f4b98ce4293f6090c8df59a08329d9.zip
compose key patch. thx federico luna.
Diffstat (limited to 'st.c')
-rw-r--r--st.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/st.c b/st.c
index 99ab085..d1b90ef 100644
--- a/st.c
+++ b/st.c
@@ -107,6 +107,8 @@ typedef struct {
107 Colormap cmap; 107 Colormap cmap;
108 Window win; 108 Window win;
109 Pixmap buf; 109 Pixmap buf;
110 XIM xim;
111 XIC xic;
110 int scr; 112 int scr;
111 int w; /* window width */ 113 int w; /* window width */
112 int h; /* window height */ 114 int h; /* window height */
@@ -1228,6 +1230,13 @@ xinit(void) {
1228 | CWColormap, 1230 | CWColormap,
1229 &attrs); 1231 &attrs);
1230 xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr)); 1232 xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr));
1233
1234
1235 /* input methods */
1236 xw.xim = XOpenIM(xw.dis, NULL, NULL, NULL);
1237 xw.xic = XCreateIC(xw.xim, XNInputStyle, XIMPreeditNothing
1238 | XIMStatusNothing, XNClientWindow, xw.win,
1239 XNFocusWindow, xw.win, NULL);
1231 /* gc */ 1240 /* gc */
1232 dc.gc = XCreateGC(xw.dis, xw.win, 0, NULL); 1241 dc.gc = XCreateGC(xw.dis, xw.win, 0, NULL);
1233 1242
@@ -1411,10 +1420,11 @@ kpress(XEvent *ev) {
1411 int len; 1420 int len;
1412 int meta; 1421 int meta;
1413 int shift; 1422 int shift;
1423 Status status;
1414 1424
1415 meta = e->state & Mod1Mask; 1425 meta = e->state & Mod1Mask;
1416 shift = e->state & ShiftMask; 1426 shift = e->state & ShiftMask;
1417 len = XLookupString(e, buf, sizeof(buf), &ksym, NULL); 1427 len = XmbLookupString(xw.xic, e, buf, sizeof(buf), &ksym, &status);
1418 1428
1419 if((customkey = kmap(ksym))) 1429 if((customkey = kmap(ksym)))
1420 ttywrite(customkey, strlen(customkey)); 1430 ttywrite(customkey, strlen(customkey));
@@ -1484,6 +1494,8 @@ run(void) {
1484 } 1494 }
1485 while(XPending(xw.dis)) { 1495 while(XPending(xw.dis)) {
1486 XNextEvent(xw.dis, &ev); 1496 XNextEvent(xw.dis, &ev);
1497 if (XFilterEvent(&ev, xw.win))
1498 continue;
1487 if(handler[ev.type]) 1499 if(handler[ev.type])
1488 (handler[ev.type])(&ev); 1500 (handler[ev.type])(&ev);
1489 } 1501 }