Esempio n. 1
0
WL_EXPORT void
wlb_keyboard_key(struct wlb_keyboard *keyboard, uint32_t time,
		 uint32_t key, enum wl_keyboard_key_state state)
{
	struct wl_resource *resource;
	uint32_t serial, *k, *end;

	keyboard_ensure_focus(keyboard);

	end = keyboard->keys.data + keyboard->keys.size;
	for (k = keyboard->keys.data; k < end; k++) {
		if (*k == key) {
			/* Ignore server-generated repeats. */
			if (state == WL_KEYBOARD_KEY_STATE_PRESSED)
				return;
			*k = *--end;
		}
	}
	keyboard->keys.size = (void *) end - keyboard->keys.data;
	if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
		k = wl_array_add(&keyboard->keys, sizeof *k);
		*k = key;
	}

	if (!keyboard->focus || wl_list_empty(&keyboard->resource_list))
		return;
	
	serial = wl_display_next_serial(keyboard->seat->compositor->display);
	wl_resource_for_each(resource, &keyboard->resource_list)
		wl_keyboard_send_key(resource, serial, time, key, state);
}
Esempio n. 2
0
void KeyboardInterface::keyReleased(quint32 key, quint32 serial)
{
    Q_D();
    if (!d->resource) {
        return;
    }
    Q_ASSERT(d->focusedSurface);
    wl_keyboard_send_key(d->resource, serial, d->seat->timestamp(), key, WL_KEYBOARD_KEY_STATE_RELEASED);
}
Esempio n. 3
0
File: keyboard.c Progetto: hsoft/wlc
static void
send_release_for_keys(struct chck_iter_pool *resources, struct chck_iter_pool *keys)
{
   assert(keys);

   wlc_dlog(WLC_DBG_KEYBOARD, "release keys");

   uint32_t *k;
   uint32_t time = wlc_get_time(NULL);
   chck_iter_pool_for_each(keys, k) {
      wlc_resource *r;
      chck_iter_pool_for_each(resources, r) {
         struct wl_resource *wr;
         if (!(wr = wl_resource_from_wlc_resource(*r, "keyboard")))
            continue;

         uint32_t serial = wl_display_next_serial(wlc_display());
         wl_keyboard_send_key(wr, serial, time, *k, WL_KEYBOARD_KEY_STATE_RELEASED);
      }
   }