NimfEvent * nimf_event_copy (NimfEvent *event) { g_debug (G_STRLOC ": %s", G_STRFUNC); g_return_val_if_fail (event != NULL, NULL); NimfEvent *new_event; new_event = nimf_event_new (NIMF_EVENT_NOTHING); *new_event = *event; return new_event; }
static NimfEvent * translate_gdk_event_key (GdkEventKey *event) { g_debug (G_STRLOC ": %s", G_STRFUNC); NimfEvent *nimf_event = nimf_event_new (NIMF_EVENT_NOTHING); if (event->type == GDK_KEY_PRESS) nimf_event->key.type = NIMF_EVENT_KEY_PRESS; else nimf_event->key.type = NIMF_EVENT_KEY_RELEASE; nimf_event->key.state = event->state; nimf_event->key.keyval = event->keyval; nimf_event->key.hardware_keycode = event->hardware_keycode; return nimf_event; }
static NimfEvent * translate_xkey_event (XEvent *xevent) { g_debug (G_STRLOC ": %s", G_STRFUNC); GdkKeymap *keymap = gdk_keymap_get_default (); GdkModifierType consumed, state; NimfEvent *nimf_event = nimf_event_new (NIMF_EVENT_NOTHING); if (xevent->type == KeyPress) nimf_event->key.type = NIMF_EVENT_KEY_PRESS; else nimf_event->key.type = NIMF_EVENT_KEY_RELEASE; nimf_event->key.state = (NimfModifierType) xevent->xkey.state; #if GTK_CHECK_VERSION (3, 6, 0) gint group = gdk_x11_keymap_get_group_for_state (keymap, xevent->xkey.state); #else gint group = XkbGroupForCoreState (xevent->xkey.state); #endif nimf_event->key.hardware_keycode = xevent->xkey.keycode; nimf_event->key.keyval = NIMF_KEY_VoidSymbol; gdk_keymap_translate_keyboard_state (keymap, nimf_event->key.hardware_keycode, nimf_event->key.state, group, &nimf_event->key.keyval, NULL, NULL, &consumed); state = nimf_event->key.state & ~consumed; gdk_keymap_add_virtual_modifiers (keymap, &state); nimf_event->key.state |= (NimfModifierType) state; return nimf_event; }