preserve cursor state in drm output during vt switch
#wew ref T5483
This commit is contained in:
parent
58226266fd
commit
79ed10927e
|
@ -58,6 +58,15 @@ _e_mod_drm_cb_activate(void *data EINA_UNUSED, int type EINA_UNUSED, void *event
|
||||||
ecore_evas_show(e_comp->ee);
|
ecore_evas_show(e_comp->ee);
|
||||||
evas_damage_rectangle_add(e_comp->evas, 0, 0, e_comp->w, e_comp->h);
|
evas_damage_rectangle_add(e_comp->evas, 0, 0, e_comp->w, e_comp->h);
|
||||||
ecore_event_add(E_EVENT_COMPOSITOR_ENABLE, NULL, NULL, NULL);
|
ecore_event_add(E_EVENT_COMPOSITOR_ENABLE, NULL, NULL, NULL);
|
||||||
|
ecore_evas_pointer_warp(e_comp->ee, e_comp_wl->ptr.x, e_comp_wl->ptr.y);
|
||||||
|
if (e_comp->pointer->client.ec)
|
||||||
|
{
|
||||||
|
ecore_evas_object_cursor_set(e_comp->ee, e_comp->pointer->client.ec->frame,
|
||||||
|
E_LAYER_MAX - 1, e_comp->pointer->client.x, e_comp->pointer->client.y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ecore_evas_object_cursor_set(e_comp->pointer->ee, e_comp->pointer->o_ptr,
|
||||||
|
E_LAYER_MAX - 1, e_comp->pointer->hot.x, e_comp->pointer->hot.y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -818,6 +827,23 @@ _pointer_motion(void *d EINA_UNUSED, int t EINA_UNUSED, Elput_Event_Pointer_Moti
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_drm_device_del(void *data EINA_UNUSED, const Efl_Event *event)
|
||||||
|
{
|
||||||
|
Eo *seat = event->info;
|
||||||
|
|
||||||
|
if (efl_input_device_type_get(event->info) == EFL_INPUT_DEVICE_CLASS_SEAT) return;
|
||||||
|
seat = efl_input_device_seat_get(event->info);
|
||||||
|
|
||||||
|
if (seat != evas_default_device_get(e_comp->evas, EFL_INPUT_DEVICE_CLASS_SEAT)) return;
|
||||||
|
if (!efl_input_device_has_pointer_caps(event->info)) return;
|
||||||
|
if (efl_input_device_has_pointer_caps(seat) == 1)
|
||||||
|
ecore_evas_cursor_device_unset(e_comp->ee, event->info);
|
||||||
|
}
|
||||||
|
|
||||||
|
EFL_CALLBACKS_ARRAY_DEFINE(_drm_device_del_cb,
|
||||||
|
{ EFL_CANVAS_EVENT_DEVICE_REMOVED, _drm_device_del });
|
||||||
|
|
||||||
E_API void *
|
E_API void *
|
||||||
e_modapi_init(E_Module *m)
|
e_modapi_init(E_Module *m)
|
||||||
{
|
{
|
||||||
|
@ -891,6 +917,9 @@ e_modapi_init(E_Module *m)
|
||||||
ecore_event_handler_add(ELPUT_EVENT_POINTER_MOTION,
|
ecore_event_handler_add(ELPUT_EVENT_POINTER_MOTION,
|
||||||
(Ecore_Event_Handler_Cb)_pointer_motion, NULL);
|
(Ecore_Event_Handler_Cb)_pointer_motion, NULL);
|
||||||
|
|
||||||
|
efl_event_callback_array_priority_add(e_comp->evas, _drm_device_del_cb(),
|
||||||
|
EFL_CALLBACK_PRIORITY_BEFORE, NULL);
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue