X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=obt%2Fkeyboard.c;h=4e84f4819e24a8b872cbbbcf52a4b72a477461aa;hb=7d32190a4cce0a579e187998ec5f834a3b8932e5;hp=5b80fd8af52dab485564b4021451908c8cc4a4a9;hpb=59c831642a9b5c589c4027d79f566d55e78d95ec;p=chaz%2Fopenbox diff --git a/obt/keyboard.c b/obt/keyboard.c index 5b80fd8a..4e84f481 100644 --- a/obt/keyboard.c +++ b/obt/keyboard.c @@ -49,7 +49,7 @@ void obt_keyboard_context_renew(ObtIC *ic); static XModifierKeymap *modmap; static KeySym *keymap; static gint min_keycode, max_keycode, keysyms_per_keycode; -/* This is a bitmask of the different masks for each modifier key */ +/*! This is a bitmask of the different masks for each modifier key */ static guchar modkeys_keys[OBT_KEYBOARD_NUM_MODKEYS]; static gboolean alt_l = FALSE; @@ -147,7 +147,6 @@ void xim_init(void) if (g_ascii_islower(aclass[0])) aclass[0] = g_ascii_toupper(aclass[0]); - g_print("Opening Input Method for %s %s\n", aname, aclass); xim = XOpenIM(obt_display, NULL, aname, aclass); if (!xim) @@ -191,40 +190,20 @@ void xim_init(void) g_free(aname); } -ObtModkeysKey obt_keyboard_keyevent_to_modkey(XEvent *e) +guint obt_keyboard_keyevent_to_modmask(XEvent *e) { - KeySym sym; + gint i, masknum; g_return_val_if_fail(e->type == KeyPress || e->type == KeyRelease, OBT_KEYBOARD_MODKEY_NONE); - XLookupString(&e->xkey, NULL, 0, &sym, NULL); - - switch (sym) { - case XK_Num_Lock: return OBT_KEYBOARD_MODKEY_NUMLOCK; - case XK_Scroll_Lock: return OBT_KEYBOARD_MODKEY_SCROLLLOCK; - case XK_Caps_Lock: return OBT_KEYBOARD_MODKEY_SHIFT; - case XK_Alt_L: - case XK_Alt_R: return OBT_KEYBOARD_MODKEY_ALT; - case XK_Super_L: - case XK_Super_R: return OBT_KEYBOARD_MODKEY_SUPER; - case XK_Hyper_L: - case XK_Hyper_R: return OBT_KEYBOARD_MODKEY_SUPER; - case XK_Meta_L: - case XK_Meta_R: return OBT_KEYBOARD_MODKEY_SUPER; - case XK_Control_L: - case XK_Control_R: return OBT_KEYBOARD_MODKEY_CONTROL; - case XK_Shift_L: - case XK_Shift_R: return OBT_KEYBOARD_MODKEY_SHIFT; - default: return OBT_KEYBOARD_MODKEY_NONE; - } -} - -guint obt_keyboard_keyevent_to_modmask(XEvent *e) -{ - g_return_val_if_fail(e->type == KeyPress || e->type == KeyRelease, 0); - - return obt_keyboard_modkey_to_modmask(obt_keyboard_keyevent_to_modkey(e)); + for (masknum = 0; masknum < NUM_MASKS; ++masknum) + for (i = 0; i < modmap->max_keypermod; ++i) { + KeyCode c = modmap->modifiermap[masknum*modmap->max_keypermod + i]; + if (c == e->xkey.keycode) + return 1<type == KeyPress, None); sym = None; - r = XLookupString(&ev->xkey, NULL, 0, &sym, NULL); + XLookupString(&ev->xkey, NULL, 0, &sym, NULL); return sym; } @@ -440,7 +418,8 @@ void obt_keyboard_context_unref(ObtIC *ic) { if (--ic->ref < 1) { xic_all = g_slist_remove(xic_all, ic); - XDestroyIC(ic->xic); + if (ic->xic) + XDestroyIC(ic->xic); g_slice_free(ObtIC, ic); } }