Browse Source

* Fix non ASCII input in x11 driver

tags/v0.99.beta17
Pascal Terjan pterjan 15 years ago
parent
commit
32a2af5501
1 changed files with 23 additions and 0 deletions
  1. +23
    -0
      caca/driver/x11.c

+ 23
- 0
caca/driver/x11.c View File

@@ -64,6 +64,10 @@ struct driver_private
uint32_t max_char; uint32_t max_char;
int cursor_flags; int cursor_flags;
int dirty_cursor_x, dirty_cursor_y; int dirty_cursor_x, dirty_cursor_y;
#if defined(X_HAVE_UTF8_STRING)
XIM im;
XIC ic;
#endif
}; };


#define UNICODE_XLFD_SUFFIX "-iso10646-1" #define UNICODE_XLFD_SUFFIX "-iso10646-1"
@@ -253,6 +257,10 @@ static int x11_init_graphics(caca_display_t *dp)
dp->drv.p->dirty_cursor_x = -1; dp->drv.p->dirty_cursor_x = -1;
dp->drv.p->dirty_cursor_y = -1; dp->drv.p->dirty_cursor_y = -1;


dp->drv.p->im = XOpenIM(dp->drv.p->dpy, NULL, NULL, NULL);
dp->drv.p->ic = XCreateIC(dp->drv.p->im, XNInputStyle,
XIMPreeditNothing | XIMStatusNothing, NULL);

return 0; return 0;
} }


@@ -268,6 +276,8 @@ static int x11_end_graphics(caca_display_t *dp)
XFreeGC(dp->drv.p->dpy, dp->drv.p->gc); XFreeGC(dp->drv.p->dpy, dp->drv.p->gc);
XUnmapWindow(dp->drv.p->dpy, dp->drv.p->window); XUnmapWindow(dp->drv.p->dpy, dp->drv.p->window);
XDestroyWindow(dp->drv.p->dpy, dp->drv.p->window); XDestroyWindow(dp->drv.p->dpy, dp->drv.p->window);
XDestroyIC(dp->drv.p->ic);
XCloseIM(dp->drv.p->im);
XCloseDisplay(dp->drv.p->dpy); XCloseDisplay(dp->drv.p->dpy);


free(dp->drv.p); free(dp->drv.p);
@@ -500,6 +510,19 @@ static int x11_get_event(caca_display_t *dp, caca_privevent_t *ev)
else else
continue; continue;


#if defined(X_HAVE_UTF8_STRING)
if(Xutf8LookupString(dp->drv.p->ic, &xevent.xkey, ev->data.key.utf8, 8, NULL, NULL))
{
ev->data.key.utf32 = caca_utf8_to_utf32(ev->data.key.utf8, NULL);
if(ev->data.key.utf32 < 0x7f)
{
ev->data.key.ch = ev->data.key.utf32;
} else {
ev->data.key.ch = 0;
}
return 1;
}
#endif
if(XLookupString(&xevent.xkey, &key, 1, NULL, NULL)) if(XLookupString(&xevent.xkey, &key, 1, NULL, NULL))
{ {
ev->data.key.ch = key; ev->data.key.ch = key;


Loading…
Cancel
Save