add interface in obt to create an Input Context for a window
This commit is contained in:
parent
6e280e9f53
commit
8f1ea42bb1
2 changed files with 45 additions and 0 deletions
|
@ -22,6 +22,12 @@
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/keysym.h>
|
#include <X11/keysym.h>
|
||||||
|
|
||||||
|
struct _ObtIC
|
||||||
|
{
|
||||||
|
guint ref;
|
||||||
|
XIC xic;
|
||||||
|
};
|
||||||
|
|
||||||
/* These masks are constants and the modifier keys are bound to them as
|
/* These masks are constants and the modifier keys are bound to them as
|
||||||
anyone sees fit:
|
anyone sees fit:
|
||||||
ShiftMask (1<<0), LockMask (1<<1), ControlMask (1<<2), Mod1Mask (1<<3),
|
ShiftMask (1<<0), LockMask (1<<1), ControlMask (1<<2), Mod1Mask (1<<3),
|
||||||
|
@ -291,3 +297,35 @@ gunichar obt_keyboard_keycode_to_unichar(guint keycode)
|
||||||
g_free(key);
|
g_free(key);
|
||||||
return unikey;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,8 @@ typedef enum {
|
||||||
OBT_KEYBOARD_NUM_MODKEYS
|
OBT_KEYBOARD_NUM_MODKEYS
|
||||||
} ObtModkeysKey;
|
} ObtModkeysKey;
|
||||||
|
|
||||||
|
typedef struct _ObtIC ObtIC;
|
||||||
|
|
||||||
void obt_keyboard_reload(void);
|
void obt_keyboard_reload(void);
|
||||||
|
|
||||||
/*! Get the modifier mask(s) for a KeyCode. (eg. a keycode bound to Alt_L could
|
/*! Get the modifier mask(s) for a KeyCode. (eg. a keycode bound to Alt_L could
|
||||||
|
@ -63,6 +65,11 @@ gchar *obt_keyboard_keycode_to_string(guint keycode);
|
||||||
/*! Translate a KeyCode to the unicode character it represents */
|
/*! Translate a KeyCode to the unicode character it represents */
|
||||||
gunichar obt_keyboard_keycode_to_unichar(guint keycode);
|
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
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue