_e_comp_wl_evas_cb_focus_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
E_Client *ec, *focused;
- E_Comp_Data *cdata;
- struct wl_resource *res;
- struct wl_client *wc;
- uint32_t serial, *k;
- Eina_List *l;
if (!(ec = data)) return;
if (e_object_is_del(E_OBJECT(ec))) return;
/* raise client priority */
_e_comp_wl_client_priority_raise(ec);
-
- cdata = ec->comp->wl_comp_data;
-
- /* update keyboard modifier state */
- wl_array_for_each(k, &cdata->kbd.keys)
- e_comp_wl_input_keyboard_state_update(cdata, *k, EINA_TRUE);
-
- if (!ec->comp_data->surface) return;
-
- /* send keyboard_enter to all keyboard resources */
- wc = wl_resource_get_client(ec->comp_data->surface);
- serial = wl_display_next_serial(cdata->wl.disp);
- EINA_LIST_FOREACH(cdata->kbd.resources, l, res)
- {
- if (wl_resource_get_client(res) != wc) continue;
- wl_keyboard_send_enter(res, serial, ec->comp_data->surface,
- &cdata->kbd.keys);
- }
+ ec->comp_data->focus_update = 1;
}
static void
if (wl_resource_get_client(res) != wc) continue;
wl_keyboard_send_leave(res, serial, ec->comp_data->surface);
}
+ ec->comp_data->focus_update = 0;
}
static void
if (!(ep = ec->pixmap)) return EINA_FALSE;
_e_comp_wl_client_evas_init(ec);
+ if (ec->focused && ec->comp_data->focus_update)
+ {
+ struct wl_resource *res;
+ struct wl_client *wc;
+ uint32_t serial, *k;
+ Eina_List *l;
+
+ /* update keyboard modifier state */
+ wl_array_for_each(k, &e_comp->wl_comp_data->kbd.keys)
+ e_comp_wl_input_keyboard_state_update(e_comp->wl_comp_data, *k, EINA_TRUE);
+
+ /* send keyboard_enter to all keyboard resources */
+ wc = wl_resource_get_client(ec->comp_data->surface);
+ serial = wl_display_next_serial(e_comp->wl_comp_data->wl.disp);
+ EINA_LIST_FOREACH(e_comp->wl_comp_data->kbd.resources, l, res)
+ {
+ if (wl_resource_get_client(res) != wc) continue;
+ wl_keyboard_send_enter(res, serial, ec->comp_data->surface,
+ &e_comp->wl_comp_data->kbd.keys);
+ }
+ ec->comp_data->focus_update = 0;
+ }
/* mark the pixmap as usable or not */
e_pixmap_usable_set(ep, (ec->comp_data->pending.buffer != NULL));