Ignore:
Timestamp:
Nov 18, 2009, 9:42:42 PM (14 years ago)
Author:
Pascal Terjan
Message:
  • Fix non ASCII input in x11 driver
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver/x11.c

    r3913 r3949  
    6565    int cursor_flags;
    6666    int dirty_cursor_x, dirty_cursor_y;
     67#if defined(X_HAVE_UTF8_STRING)
     68    XIM im;
     69    XIC ic;
     70#endif
    6771};
    6872
     
    254258    dp->drv.p->dirty_cursor_y = -1;
    255259
     260    dp->drv.p->im = XOpenIM(dp->drv.p->dpy, NULL, NULL, NULL);
     261    dp->drv.p->ic = XCreateIC(dp->drv.p->im, XNInputStyle,
     262                              XIMPreeditNothing | XIMStatusNothing, NULL);
     263
    256264    return 0;
    257265}
     
    269277    XUnmapWindow(dp->drv.p->dpy, dp->drv.p->window);
    270278    XDestroyWindow(dp->drv.p->dpy, dp->drv.p->window);
     279    XDestroyIC(dp->drv.p->ic);
     280    XCloseIM(dp->drv.p->im);
    271281    XCloseDisplay(dp->drv.p->dpy);
    272282
     
    501511            continue;
    502512
     513#if defined(X_HAVE_UTF8_STRING)
     514        if(Xutf8LookupString(dp->drv.p->ic, &xevent.xkey, ev->data.key.utf8, 8, NULL, NULL))
     515        {
     516            ev->data.key.utf32 = caca_utf8_to_utf32(ev->data.key.utf8, NULL);
     517            if(ev->data.key.utf32 < 0x7f)
     518            {
     519                ev->data.key.ch = ev->data.key.utf32;
     520            } else {
     521                ev->data.key.ch = 0;
     522            }
     523            return 1;
     524        }
     525#endif
    503526        if(XLookupString(&xevent.xkey, &key, 1, NULL, NULL))
    504527        {
Note: See TracChangeset for help on using the changeset viewer.