all repos — openbox @ 8f1ea42bb147e2a65cf43dfe7aea864d01faedcd

openbox fork - make it a bit more like ryudo

add interface in obt to create an Input Context for a window
Dana Jansens danakj@orodu.net
commit

8f1ea42bb147e2a65cf43dfe7aea864d01faedcd

parent

6e280e9f532d5c2424bb4165f1e9a886740c1bc3

2 files changed, 45 insertions(+), 0 deletions(-)

jump to
M obt/keyboard.cobt/keyboard.c

@@ -22,6 +22,12 @@

#include <X11/Xlib.h> #include <X11/keysym.h> +struct _ObtIC +{ + guint ref; + XIC xic; +}; + /* These masks are constants and the modifier keys are bound to them as anyone sees fit: ShiftMask (1<<0), LockMask (1<<1), ControlMask (1<<2), Mod1Mask (1<<3),

@@ -291,3 +297,35 @@ }

g_free(key); return unikey; } + +ObtIC* obt_keyboard_context_new(Window w) +{ + ObtIC *ic = NULL; + + if (w != None) { + ic = g_new(ObtIC, 1); + ic->ref = 1; + ic->xic = NULL; + + if (xim) + ic->xic = XCreateIC(xim, + XNInputStyle, xim_style, + XNClientWindow, w, + XNFocusWindow, w, + NULL); + } + return ic; +} + +void obt_keyboard_context_ref(ObtIC *ic) +{ + ++ic->ref; +} + +void obt_keyboard_context_unref(ObtIC *ic) +{ + if (--ic->ref < 1) { + XDestroyIC(ic->xic); + g_free(ic); + } +}
M obt/keyboard.hobt/keyboard.h

@@ -40,6 +40,8 @@

OBT_KEYBOARD_NUM_MODKEYS } ObtModkeysKey; +typedef struct _ObtIC ObtIC; + void obt_keyboard_reload(void); /*! Get the modifier mask(s) for a KeyCode. (eg. a keycode bound to Alt_L could

@@ -63,6 +65,11 @@

/*! Translate a KeyCode to the unicode character it represents */ gunichar obt_keyboard_keycode_to_unichar(guint keycode); +/*! Create an input context for a window */ +ObtIC* obt_keyboard_context_new(Window w); + +void obt_keyboard_context_ref(ObtIC *ic); +void obt_keyboard_context_unref(ObtIC *ic); G_END_DECLS