static void _e_comp_wl_surface_state_serial_update(E_Client *ec, E_Comp_Wl_Surface_State *state);
/* local variables */
-typedef struct _E_Comp_Wl_Key_Data
-{
- uint32_t key;
- E_Device *dev;
-} E_Comp_Wl_Key_Data;
-
struct _E_Comp_Wl_Evas_Gl
{
Evas_GL *gl;
xkb_mod_mask_t mod_depressed, mod_latched, mod_locked;
xkb_layout_index_t mod_group;
E_Comp_Wl_Data *comp_wl;
+ E_Comp_Wl_Key_Data *k;
+ uint32_t *key;
+ struct wl_array keys;
+ int key_cnt = 0;
g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
if (!e_comp_input_key->kbd.focused)
mod_group = atomic_load(&e_comp_input_key->kbd.mod_group);
+ wl_array_init(&keys);
+ wl_array_for_each(k, &e_comp_input_key->kbd.keys)
+ {
+ if (!(key = wl_array_add(&keys, sizeof(uint32_t))))
+ {
+ DBG("wl_array_add: Out of memory\n");
+ }
+ key_cnt++;
+ *key = k->key;
+ }
+
g_rec_mutex_lock(&e_comp_input_key->kbd.focused_mutex);
EINA_LIST_FOREACH(e_comp_input_key->kbd.focused, l, res)
{
wl_keyboard_send_enter(res, serial, surface,
- &e_comp_input_key->kbd.keys);
+ &keys);
wl_keyboard_send_modifiers(res, serial,
mod_depressed,
mod_group);
}
g_rec_mutex_unlock(&e_comp_input_key->kbd.focused_mutex);
+
+ wl_array_release(&keys);
}
static enum wl_iterator_result
#include "e_policy_wl.h"
#include "e_device_intern.h"
+
+typedef struct _E_Comp_Wl_Key_Data E_Comp_Wl_Key_Data;
+struct _E_Comp_Wl_Key_Data
+{
+ uint32_t key;
+ E_Device *dev;
+};
+
EINTERN E_Comp_Wl_Data *e_comp_wl_init(void);
EINTERN void e_comp_wl_shutdown(void);
EINTERN E_Comp_Wl_Data *e_comp_wl_get(void);