diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2018-02-26 00:28:47 +0900 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2018-02-26 00:36:17 +0900 |
commit | cc1e1a5b5601a40d49f95922deee58a12b230afd (patch) | |
tree | effb510c934d302b9fe6e5c4534bc6e4a32281d6 | |
parent | d2d63a8c239cf40b7b828303cca34a0d0dde97ec (diff) | |
download | efl-cc1e1a5b5601a40d49f95922deee58a12b230afd.tar.gz |
ecore evas - drm engine - fix focus set on show to work correctly
-rw-r--r-- | src/modules/ecore_evas/engines/drm/ecore_evas_drm.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index 3059d74a09..15851c0d56 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -63,6 +63,7 @@ typedef struct _Ecore_Evas_Engine_Drm_Data Eina_Bool ticking : 1; Eina_Bool once : 1; Ecore_Job *tick_job; + Ecore_Job *focus_job; } Ecore_Evas_Engine_Drm_Data; static int _drm_init_count = 0; @@ -198,6 +199,11 @@ _ecore_evas_drm_shutdown(Ecore_Evas_Engine_Drm_Data *edata) Ecore_Event_Handler *h; if (--_drm_init_count != 0) return _drm_init_count; + if (edata->focus_job) + { + ecore_job_del(edata->focus_job); + edata->focus_job = NULL; + } ecore_drm2_outputs_destroy(edata->dev); ecore_drm2_device_close(edata->dev); ecore_drm2_shutdown(); @@ -383,6 +389,17 @@ _drm_pointer_warp(const Ecore_Evas *ee, Evas_Coord x, Evas_Coord y) } static void +_drm_show_focus_job(void *data) +{ + Ecore_Evas *ee = data; + Ecore_Evas_Engine_Drm_Data *edata; + + _ecore_evas_focus_device_set(ee, NULL, EINA_TRUE); + edata = ee->engine.data; + edata->focus_job = NULL; +} + +static void _drm_show(Ecore_Evas *ee) { Ecore_Evas_Engine_Drm_Data *edata; @@ -406,14 +423,10 @@ _drm_show(Ecore_Evas *ee) if (ee->visible) return; ee->visible = 1; - if (ee->prop.fullscreen) - { - evas_focus_in(ee->evas); - if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee); - } if (ee->func.fn_show) ee->func.fn_show(ee); edata = ee->engine.data; + edata->focus_job = ecore_job_add(_drm_show_focus_job, ee); /* HACK: sometimes we still have an animator ticking when we vc switch * so for now we just fire off a flip here to kick it when we come back. * This is just papering over a bug for now until I have time to track |