UWAC_MOD_SHIFT_MASK = 0x01,
UWAC_MOD_ALT_MASK = 0x02,
UWAC_MOD_CONTROL_MASK = 0x04,
+ UWAC_MOD_CAPS_MASK = 0x08,
+ UWAC_MOD_NUM_MASK = 0x10,
};
/** @brief a position */
UWAC_EVENT_POINTER_BUTTONS,
UWAC_EVENT_POINTER_AXIS,
UWAC_EVENT_KEYBOARD_ENTER,
+ UWAC_EVENT_KEYBOARD_MODIFIERS,
UWAC_EVENT_KEY,
UWAC_EVENT_TOUCH_FRAME_BEGIN,
UWAC_EVENT_TOUCH_UP,
};
typedef struct uwac_keyboard_enter_event UwacKeyboardEnterLeaveEvent;
+struct uwac_keyboard_modifiers_event
+{
+ int type;
+ uint32_t modifiers;
+};
+typedef struct uwac_keyboard_modifiers_event UwacKeyboardModifiersEvent;
+
struct uwac_pointer_enter_event
{
int type;
UwacPointerButtonEvent mouse_button;
UwacPointerAxisEvent mouse_axis;
UwacKeyboardEnterLeaveEvent keyboard_enter_leave;
+ UwacKeyboardModifiersEvent keyboard_modifiers;
UwacClipboardEvent clipboard;
UwacKeyEvent key;
UwacTouchFrameBegin touchFrameBegin;
input->xkb.control_mask = 1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Control");
input->xkb.alt_mask = 1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Mod1");
input->xkb.shift_mask = 1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Shift");
+ input->xkb.caps_mask = 1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Lock");
+ input->xkb.num_mask = 1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Mod2");
}
static void keyboard_handle_key(void* data, struct wl_keyboard* keyboard, uint32_t serial,
uint32_t mods_locked, uint32_t group)
{
UwacSeat* input = data;
+ UwacKeyboardModifiersEvent *event;
xkb_mod_mask_t mask;
/* If we're not using a keymap, then we don't handle PC-style modifiers */
xkb_state_update_mask(input->xkb.state, mods_depressed, mods_latched, mods_locked, 0, 0, group);
mask = xkb_state_serialize_mods(input->xkb.state,
- XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED);
+ XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED | XKB_STATE_MODS_LOCKED);
input->modifiers = 0;
if (mask & input->xkb.control_mask)
input->modifiers |= UWAC_MOD_CONTROL_MASK;
input->modifiers |= UWAC_MOD_ALT_MASK;
if (mask & input->xkb.shift_mask)
input->modifiers |= UWAC_MOD_SHIFT_MASK;
+ if (mask & input->xkb.caps_mask)
+ input->modifiers |= UWAC_MOD_CAPS_MASK;
+ if (mask & input->xkb.num_mask)
+ input->modifiers |= UWAC_MOD_NUM_MASK;
+
+ event = (UwacKeyboardModifiersEvent*)UwacDisplayNewEvent(input->display,
+ UWAC_EVENT_KEYBOARD_MODIFIERS);
+ if (!event)
+ return;
+
+ event->modifiers = input->modifiers;
}
static void set_repeat_info(UwacSeat* input, int32_t rate, int32_t delay)