DS_LED_SCROLL_LOCK = 1 << 2,
};
-#define DS_MODIFIER_COUNT 8
-
-enum ds_keyboard_modifier {
- DS_MODIFIER_SHIFT = 1 << 0,
- DS_MODIFIER_CAPS = 1 << 1,
- DS_MODIFIER_CTRL = 1 << 2,
- DS_MODIFIER_ALT = 1 << 3,
- DS_MODIFIER_MOD2 = 1 << 4,
- DS_MODIFIER_MOD3 = 1 << 5,
- DS_MODIFIER_LOGO = 1 << 6,
- DS_MODIFIER_MOD5 = 1 << 7,
-};
-
#define DS_KEYBOARD_KEYS_CAP 32
struct ds_keyboard;
struct ds_keyboard;
+#define DS_MODIFIER_COUNT 8
+
+enum ds_keyboard_modifier {
+ DS_MODIFIER_SHIFT = 1 << 0,
+ DS_MODIFIER_CAPS = 1 << 1,
+ DS_MODIFIER_CTRL = 1 << 2,
+ DS_MODIFIER_ALT = 1 << 3,
+ DS_MODIFIER_MOD2 = 1 << 4,
+ DS_MODIFIER_MOD3 = 1 << 5,
+ DS_MODIFIER_LOGO = 1 << 6,
+ DS_MODIFIER_MOD5 = 1 << 7,
+};
+
struct ds_event_keyboard_key
{
uint32_t time_msec;
static void
keyboard_handle_modifiers(struct wl_listener *listener, void *data)
{
- struct keyboard_device *keyboard;
struct ds_keyboard *ds_keyboard = data;
-
- keyboard = wl_container_of(listener, keyboard, destroy);
-
- ds_inf("Keyboard(%p) event modifiers", ds_keyboard);
+ uint32_t modifiers;
+
+ modifiers = ds_keyboard_get_modifiers(ds_keyboard);
+ if (modifiers & DS_MODIFIER_CTRL)
+ ds_inf("Keyboard(%p) modifier: Ctrl", ds_keyboard);
+ if (modifiers & DS_MODIFIER_SHIFT)
+ ds_inf("Keyboard(%p) modifier: Shift", ds_keyboard);
+ if (modifiers & DS_MODIFIER_CAPS)
+ ds_inf("Keyboard(%p) modifier: Caps", ds_keyboard);
+ if (modifiers & DS_MODIFIER_ALT)
+ ds_inf("Keyboard(%p) modifier: Alt", ds_keyboard);
+ if (modifiers & DS_MODIFIER_MOD2)
+ ds_inf("Keyboard(%p) modifier: Mod2", ds_keyboard);
+ if (modifiers & DS_MODIFIER_MOD3)
+ ds_inf("Keyboard(%p) modifier: Mod3", ds_keyboard);
+ if (modifiers & DS_MODIFIER_LOGO)
+ ds_inf("Keyboard(%p) modifier: Logo", ds_keyboard);
+ if (modifiers & DS_MODIFIER_MOD5)
+ ds_inf("Keyboard(%p) modifier: Mod5", ds_keyboard);
}
static void
struct keyboard_device *keyboard;
struct xkb_state *xkb_state;
const xkb_keysym_t *syms;
+ uint32_t modifiers;
int nsyms = 0;
keyboard = wl_container_of(listener, keyboard, key);
nsyms = xkb_state_key_get_syms(xkb_state, event->keycode + 8, &syms);
- for (int i = 0; i < nsyms; i++) {
- if (syms[i] == XKB_KEY_Escape)
- wl_display_terminate(keyboard->server->display);
+ modifiers = ds_keyboard_get_modifiers(keyboard->ds_keyboard);
+ if ((modifiers & DS_MODIFIER_CTRL) &&
+ (modifiers & DS_MODIFIER_ALT) &&
+ event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
+ for (int i = 0; i < nsyms; i++) {
+ if (syms[i] == XKB_KEY_BackSpace)
+ wl_display_terminate(keyboard->server->display);
+ }
}
}