static int
_ecore_evas_drm_init(Ecore_Evas *ee, Ecore_Evas_Engine_Drm_Data *edata, const char *device)
{
- // XXX: this is broken. we init once but in a per ecore evas struct so
- // we assume there will be only 1 of these drm ecore evas's ever...
- if (++_drm_init_count != 1) return _drm_init_count;
+ _drm_init_count++;
+ if (_drm_init_count > 1) return _drm_init_count;
if (!ecore_drm2_init())
{
_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)
+ _drm_init_count--;
+ if (_drm_init_count == 0)
{
- ecore_job_del(edata->focus_job);
- edata->focus_job = NULL;
- }
- if (edata->dev)
- {
- ecore_drm2_outputs_destroy(edata->dev);
- ecore_drm2_device_close(edata->dev);
- edata->dev = NULL;
+ if (edata->focus_job)
+ {
+ ecore_job_del(edata->focus_job);
+ edata->focus_job = NULL;
+ }
+
+ if (edata->dev)
+ {
+ ecore_drm2_outputs_destroy(edata->dev);
+ ecore_drm2_device_close(edata->dev);
+ edata->dev = NULL;
+ }
+
+ ecore_drm2_shutdown();
+ ecore_event_evas_shutdown();
+
+ EINA_LIST_FREE(handlers, h)
+ ecore_event_handler_del(h);
}
- ecore_drm2_shutdown();
- ecore_event_evas_shutdown();
- EINA_LIST_FREE(handlers, h)
- ecore_event_handler_del(h);
+ if (_drm_init_count < 0) _drm_init_count = 0;
return _drm_init_count;
}