factor/basis/x11/xim/xim.factor

46 lines
1.3 KiB
Factor
Raw Normal View History

2008-12-03 01:05:46 -05:00
! Copyright (C) 2007, 2008 Slava Pestov
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: alien.c-types alien.data byte-arrays continuations
io.encodings.string io.encodings.utf8 kernel literals math namespaces
sequences x11 x11.X x11.xlib ;
2007-09-20 18:09:08 -04:00
IN: x11.xim
SYMBOL: xim
2008-02-11 01:41:41 -05:00
: (init-xim) ( classname medifier -- im )
2008-12-18 19:09:22 -05:00
XSetLocaleModifiers [ "XSetLocaleModifiers() failed" throw ] unless
[ dpy get f ] dip dup XOpenIM ;
2008-02-11 01:41:41 -05:00
2007-09-20 18:09:08 -04:00
: init-xim ( classname -- )
2008-12-18 19:09:22 -05:00
dup "" (init-xim)
[ nip ]
[ "@im=none" (init-xim) [ "XOpenIM() failed" throw ] unless* ] if*
xim set-global ;
2007-09-20 18:09:08 -04:00
: close-xim ( -- )
xim get-global XCloseIM drop f xim set-global ;
: with-xim ( quot -- )
2009-04-15 20:03:44 -04:00
[ "Factor" init-xim ] dip [ close-xim ] [ ] cleanup ; inline
2007-09-20 18:09:08 -04:00
: create-xic ( window classname -- xic )
2008-12-03 01:05:46 -05:00
[
[ xim get-global XNClientWindow ] dip
XNFocusWindow over
XNInputStyle XIMPreeditNothing XIMStatusNothing bitor
XNResourceName
] dip
2007-09-20 18:09:08 -04:00
XNResourceClass over 0 XCreateIC
[ "XCreateIC() failed" throw ] unless* ;
<<
CONSTANT: buf-size 100
>>
CONSTANT: buf $[ buf-size <byte-array> ]
2007-09-20 18:09:08 -04:00
: lookup-string ( event xic -- string keysym )
swap buf buf-size { KeySym } [ 0 int <ref>
Xutf8LookupString buf swap head utf8 decode
] with-out-parameters ;