+
+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);
+ }
+}