forked from enlightenment/efl
elm: move ecore-x and ecore-wl2 connection init to selection manager
this seems to be the only place where the related components are explicitly used neither of these components have fork-safe connections, so there is no benefit to calling them during quicklaunch init
This commit is contained in:
parent
c4e5bbe441
commit
9cf61c2f6d
|
@ -28,6 +28,8 @@ void efl_selection_manager_drop_target_del(Eo *obj, Efl_Object *target_obj, Efl_
|
||||||
void efl_selection_manager_selection_clear(Eo *obj, Efl_Object *owner, Efl_Selection_Type type, unsigned int seat);
|
void efl_selection_manager_selection_clear(Eo *obj, Efl_Object *owner, Efl_Selection_Type type, unsigned int seat);
|
||||||
void efl_selection_manager_drag_start(Eo *obj, Efl_Object *drag_obj, Efl_Selection_Format format, Eina_Slice data, Efl_Selection_Action action, void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb, unsigned int seat);
|
void efl_selection_manager_drag_start(Eo *obj, Efl_Object *drag_obj, Efl_Selection_Format format, Eina_Slice data, Efl_Selection_Action action, void *icon_func_data, Efl_Dnd_Drag_Icon_Create icon_func, Eina_Free_Cb icon_func_free_cb, unsigned int seat);
|
||||||
|
|
||||||
|
static unsigned int managers;
|
||||||
|
|
||||||
#ifdef HAVE_ELEMENTARY_X
|
#ifdef HAVE_ELEMENTARY_X
|
||||||
static void _set_selection_list(Sel_Manager_Selection *sel_list, Sel_Manager_Seat_Selection *seat_sel);
|
static void _set_selection_list(Sel_Manager_Selection *sel_list, Sel_Manager_Seat_Selection *seat_sel);
|
||||||
static Ecore_X_Atom _x11_dnd_action_rev_map(Efl_Selection_Action action);
|
static Ecore_X_Atom _x11_dnd_action_rev_map(Efl_Selection_Action action);
|
||||||
|
@ -4968,6 +4970,80 @@ _efl_selection_manager_container_drag_item_del(Eo *obj EINA_UNUSED, Efl_Selectio
|
||||||
static Eo *
|
static Eo *
|
||||||
_efl_selection_manager_efl_object_constructor(Eo *obj, Efl_Selection_Manager_Data *pd)
|
_efl_selection_manager_efl_object_constructor(Eo *obj, Efl_Selection_Manager_Data *pd)
|
||||||
{
|
{
|
||||||
|
#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_WL2)
|
||||||
|
const char *ev = getenv("ELM_DISPLAY");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_ELEMENTARY_X
|
||||||
|
Eina_Bool init_x = EINA_FALSE;
|
||||||
|
Eina_Bool have_display = !!getenv("DISPLAY");
|
||||||
|
|
||||||
|
if (ev) /* If ELM_DISPLAY is specified */
|
||||||
|
{
|
||||||
|
if (!strcmp(ev, "x11")) /* and it is X11 */
|
||||||
|
{
|
||||||
|
if (!have_display) /* if there is no $DISPLAY */
|
||||||
|
{
|
||||||
|
ERR("$ELM_DISPLAY is set to x11 but $DISPLAY is not set");
|
||||||
|
init_x = EINA_FALSE;
|
||||||
|
}
|
||||||
|
else /* if there is */
|
||||||
|
init_x = EINA_TRUE;
|
||||||
|
}
|
||||||
|
else /* not X11 */
|
||||||
|
init_x = EINA_FALSE;
|
||||||
|
}
|
||||||
|
else /* ELM_DISPLAY not specified */
|
||||||
|
{
|
||||||
|
if (have_display) /* If there is a $DISPLAY */
|
||||||
|
init_x = EINA_TRUE;
|
||||||
|
else /* No $DISPLAY */
|
||||||
|
init_x = EINA_FALSE;
|
||||||
|
}
|
||||||
|
if (init_x)
|
||||||
|
{
|
||||||
|
ecore_x_init(NULL);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ELEMENTARY_WL2
|
||||||
|
Eina_Bool init_wl = EINA_FALSE;
|
||||||
|
Eina_Bool have_wl_display = !!getenv("WAYLAND_DISPLAY");
|
||||||
|
|
||||||
|
if (ev) /* If ELM_DISPLAY is specified */
|
||||||
|
{
|
||||||
|
if (!strcmp(ev, "wl")) /* and it is WL */
|
||||||
|
{
|
||||||
|
/* always try to connect to wl when it is enforced */
|
||||||
|
init_wl = EINA_TRUE;
|
||||||
|
}
|
||||||
|
else /* not wl */
|
||||||
|
init_wl = EINA_FALSE;
|
||||||
|
}
|
||||||
|
else /* ELM_DISPLAY not specified */
|
||||||
|
{
|
||||||
|
/* If there is a $WAYLAND_DISPLAY */
|
||||||
|
if ((have_wl_display) && (!getenv("DISPLAY")))
|
||||||
|
init_wl = EINA_TRUE;
|
||||||
|
else /* No $WAYLAND_DISPLAY */
|
||||||
|
init_wl = EINA_FALSE;
|
||||||
|
}
|
||||||
|
if (init_wl)
|
||||||
|
{
|
||||||
|
if (!ecore_wl2_init())
|
||||||
|
{
|
||||||
|
ERR("Could not initialize Ecore_Wl2");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
_elm_wl_display = ecore_wl2_display_connect(NULL);
|
||||||
|
if (!_elm_wl_display)
|
||||||
|
{
|
||||||
|
ERR("Could not connect to Wayland Display");
|
||||||
|
ecore_wl2_shutdown();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
||||||
|
|
||||||
pd->sel_man = obj;
|
pd->sel_man = obj;
|
||||||
|
@ -5214,6 +5290,7 @@ _efl_selection_manager_efl_object_constructor(Eo *obj, Efl_Selection_Manager_Dat
|
||||||
pd->end_handler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_END,
|
pd->end_handler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_END,
|
||||||
_wl_dnd_end, pd);
|
_wl_dnd_end, pd);
|
||||||
#endif
|
#endif
|
||||||
|
managers++;
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5264,6 +5341,70 @@ _efl_selection_manager_efl_object_destructor(Eo *obj, Efl_Selection_Manager_Data
|
||||||
eina_stringshare_del(pd->text_uri);
|
eina_stringshare_del(pd->text_uri);
|
||||||
|
|
||||||
efl_destructor(efl_super(obj, MY_CLASS));
|
efl_destructor(efl_super(obj, MY_CLASS));
|
||||||
|
managers--;
|
||||||
|
#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_WL2) || defined(HAVE_ELEMENTARY_WIN32)
|
||||||
|
const char *ev = getenv("ELM_DISPLAY");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_ELEMENTARY_X
|
||||||
|
Eina_Bool init_x = EINA_FALSE;
|
||||||
|
Eina_Bool have_display = !!getenv("DISPLAY");
|
||||||
|
|
||||||
|
if (ev) /* If ELM_DISPLAY is specified */
|
||||||
|
{
|
||||||
|
if (!strcmp(ev, "x11")) /* and it is X11 */
|
||||||
|
{
|
||||||
|
if (!have_display) /* if there is no $DISPLAY */
|
||||||
|
{
|
||||||
|
ERR("$ELM_DISPLAY is set to x11 but $DISPLAY is not set");
|
||||||
|
init_x = EINA_FALSE;
|
||||||
|
}
|
||||||
|
else /* if there is */
|
||||||
|
init_x = EINA_TRUE;
|
||||||
|
}
|
||||||
|
else /* not X11 */
|
||||||
|
init_x = EINA_FALSE;
|
||||||
|
}
|
||||||
|
else /* ELM_DISPLAY not specified */
|
||||||
|
{
|
||||||
|
if (have_display) /* If there is a $DISPLAY */
|
||||||
|
init_x = EINA_TRUE;
|
||||||
|
else /* No $DISPLAY */
|
||||||
|
init_x = EINA_FALSE;
|
||||||
|
}
|
||||||
|
if (init_x)
|
||||||
|
{
|
||||||
|
ecore_x_shutdown();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ELEMENTARY_WL2
|
||||||
|
Eina_Bool init_wl = EINA_FALSE;
|
||||||
|
Eina_Bool have_wl_display = !!getenv("WAYLAND_DISPLAY");
|
||||||
|
|
||||||
|
if (ev) /* If ELM_DISPLAY is specified */
|
||||||
|
{
|
||||||
|
if (!strcmp(ev, "wl")) /* and it is WL */
|
||||||
|
{
|
||||||
|
/* always try to connect to wl when it is enforced */
|
||||||
|
init_wl = EINA_TRUE;
|
||||||
|
}
|
||||||
|
else /* not wl */
|
||||||
|
init_wl = EINA_FALSE;
|
||||||
|
}
|
||||||
|
else /* ELM_DISPLAY not specified */
|
||||||
|
{
|
||||||
|
/* If there is a $WAYLAND_DISPLAY */
|
||||||
|
if ((have_wl_display) && (!getenv("DISPLAY")))
|
||||||
|
init_wl = EINA_TRUE;
|
||||||
|
else /* No $WAYLAND_DISPLAY */
|
||||||
|
init_wl = EINA_FALSE;
|
||||||
|
}
|
||||||
|
if (init_wl)
|
||||||
|
{
|
||||||
|
if (!managers) ecore_wl2_display_disconnect(_elm_wl_display);
|
||||||
|
ecore_wl2_shutdown();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_ELEMENTARY_X
|
#ifdef HAVE_ELEMENTARY_X
|
||||||
|
|
|
@ -4244,78 +4244,6 @@ _elm_config_file_monitor_cb(void *data EINA_UNUSED,
|
||||||
void
|
void
|
||||||
_elm_config_sub_init(void)
|
_elm_config_sub_init(void)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_ELEMENTARY_X) || defined(HAVE_ELEMENTARY_WL2) || defined(HAVE_ELEMENTARY_WIN32)
|
|
||||||
const char *ev = getenv("ELM_DISPLAY");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_ELEMENTARY_X
|
|
||||||
Eina_Bool init_x = EINA_FALSE;
|
|
||||||
Eina_Bool have_display = !!getenv("DISPLAY");
|
|
||||||
|
|
||||||
if (ev) /* If ELM_DISPLAY is specified */
|
|
||||||
{
|
|
||||||
if (!strcmp(ev, "x11")) /* and it is X11 */
|
|
||||||
{
|
|
||||||
if (!have_display) /* if there is no $DISPLAY */
|
|
||||||
{
|
|
||||||
ERR("$ELM_DISPLAY is set to x11 but $DISPLAY is not set");
|
|
||||||
init_x = EINA_FALSE;
|
|
||||||
}
|
|
||||||
else /* if there is */
|
|
||||||
init_x = EINA_TRUE;
|
|
||||||
}
|
|
||||||
else /* not X11 */
|
|
||||||
init_x = EINA_FALSE;
|
|
||||||
}
|
|
||||||
else /* ELM_DISPLAY not specified */
|
|
||||||
{
|
|
||||||
if (have_display) /* If there is a $DISPLAY */
|
|
||||||
init_x = EINA_TRUE;
|
|
||||||
else /* No $DISPLAY */
|
|
||||||
init_x = EINA_FALSE;
|
|
||||||
}
|
|
||||||
if (init_x)
|
|
||||||
{
|
|
||||||
ecore_x_init(NULL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ELEMENTARY_WL2
|
|
||||||
Eina_Bool init_wl = EINA_FALSE;
|
|
||||||
Eina_Bool have_wl_display = !!getenv("WAYLAND_DISPLAY");
|
|
||||||
|
|
||||||
if (ev) /* If ELM_DISPLAY is specified */
|
|
||||||
{
|
|
||||||
if (!strcmp(ev, "wl")) /* and it is WL */
|
|
||||||
{
|
|
||||||
/* always try to connect to wl when it is enforced */
|
|
||||||
init_wl = EINA_TRUE;
|
|
||||||
}
|
|
||||||
else /* not wl */
|
|
||||||
init_wl = EINA_FALSE;
|
|
||||||
}
|
|
||||||
else /* ELM_DISPLAY not specified */
|
|
||||||
{
|
|
||||||
/* If there is a $WAYLAND_DISPLAY */
|
|
||||||
if ((have_wl_display) && (!getenv("DISPLAY")))
|
|
||||||
init_wl = EINA_TRUE;
|
|
||||||
else /* No $WAYLAND_DISPLAY */
|
|
||||||
init_wl = EINA_FALSE;
|
|
||||||
}
|
|
||||||
if (init_wl)
|
|
||||||
{
|
|
||||||
if (!ecore_wl2_init())
|
|
||||||
{
|
|
||||||
ERR("Could not initialize Ecore_Wl2");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
_elm_wl_display = ecore_wl2_display_connect(NULL);
|
|
||||||
if (!_elm_wl_display)
|
|
||||||
{
|
|
||||||
ERR("Could not connect to Wayland Display");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ELEMENTARY_COCOA
|
#ifdef HAVE_ELEMENTARY_COCOA
|
||||||
ecore_cocoa_init();
|
ecore_cocoa_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue