From 0037d540f01ca80fc97bf702173a368f88377676 Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Mon, 7 Dec 2015 18:01:38 +0900 Subject: [PATCH] quick-init: delayed to init edje, efreet, e_pointer Change-Id: I4ca8ccc5bff653a06aba001b69b01ed0a4de3705 --- src/bin/e_client.c | 2 ++ src/bin/e_comp.c | 14 ++++++++ src/bin/e_desk.c | 2 ++ src/bin/e_main.c | 73 ++++++++++++++++++++--------------------- src/bin/e_pointer.c | 11 ++++++- src/modules/wl_drm/e_mod_main.c | 8 +++-- src/modules/wl_x11/e_mod_main.c | 4 +-- 7 files changed, 70 insertions(+), 44 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 388a9ef..b65e0e9 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -2971,10 +2971,12 @@ e_client_init(void) E_LIST_HANDLER_APPEND(handlers, E_EVENT_POINTER_WARP, _e_client_cb_pointer_warp, NULL); +#ifndef ENABLE_QUICK_INIT E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_DESKTOP_CACHE_UPDATE, _e_client_cb_efreet_cache_update, NULL); E_LIST_HANDLER_APPEND(handlers, EFREET_EVENT_ICON_CACHE_UPDATE, _e_client_cb_efreet_cache_update, NULL); +#endif E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_ICON_THEME, _e_client_cb_config_icon_theme, NULL); E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIG_MODE_CHANGED, diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index c7cdb72..cc225ba 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -1363,9 +1363,23 @@ e_comp_shutdown(void) EAPI void e_comp_deferred_job(void) { + /* Add elm fake win */ e_comp->elm = elm_win_fake_add(e_comp->ee); evas_object_show(e_comp->elm); + /* Bg update */ + if (e_zone_current_get(e_comp)->bg_object) + e_bg_zone_update(e_zone_current_get(e_comp), E_BG_TRANSITION_DESK); + else + e_bg_zone_update(e_zone_current_get(e_comp), E_BG_TRANSITION_START); + + /* Pointer setting */ + if (!e_comp->pointer) + { + e_comp->pointer = e_pointer_canvas_new(e_comp->ee, EINA_TRUE); + e_pointer_hide(e_comp->pointer); + } + #if defined(HAVE_WAYLAND_CLIENTS) || defined(HAVE_WAYLAND_ONLY) e_comp_wl_deferred_job(); #endif diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index 6b08aef..de14d7b 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -296,10 +296,12 @@ e_desk_show(E_Desk *desk) evas_object_focus_set(e_client_focused_get()->frame, 0); } +#ifndef ENABLE_QUICK_INIT if (was_zone) e_bg_zone_update(desk->zone, E_BG_TRANSITION_DESK); else e_bg_zone_update(desk->zone, E_BG_TRANSITION_START); +#endif ev = E_NEW(E_Event_Desk_Show, 1); ev->desk = desk; diff --git a/src/bin/e_main.c b/src/bin/e_main.c index e4151be..4d4cf4c 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -225,6 +225,26 @@ _e_main_subsystem_defer(void *data EINA_UNUSED) } TS("[DEFERRED] Elementary Init Done"); + TS("[DEFERRED] Edje Init"); + if (!edje_init()) + { + e_error_message_show(_("Enlightenment cannot initialize Edje!\n")); + _e_main_shutdown(-1); + } + TS("[DEFERRED] Edje Init Done"); + _e_main_shutdown_push(edje_shutdown); + + TS("[DEFERRED] Efreet Init"); + if (!efreet_init()) + { + e_error_message_show(_("Enlightenment cannot initialize the FDO desktop system.\n" + "Perhaps you lack permissions on ~/.cache/efreet or are\n" + "out of memory or disk space?")); + _e_main_shutdown(-1); + } + TS("[DEFERRED] Efreet Init Done"); + _e_main_shutdown_push(efreet_shutdown); + TS("[DEFERRED] Screens Init: win"); if (!e_win_init()) { @@ -233,6 +253,16 @@ _e_main_subsystem_defer(void *data EINA_UNUSED) } TS("[DEFERRED] Screens Init: win Done"); + TS("[DEFERRED] E_Pointer Init"); + if (!e_pointer_init()) + { + e_error_message_show(_("Enlightenment cannot set up its pointer system.\n")); + _e_main_shutdown(-1); + } + + TS("[DEFERRED] E_Pointer Init Done"); + _e_main_shutdown_push(e_pointer_shutdown); + TS("[DEFERRED] E_Scale Init"); if (!e_scale_init()) { @@ -242,6 +272,10 @@ _e_main_subsystem_defer(void *data EINA_UNUSED) TS("[DEFERRED E_Scale Init Done"); _e_main_shutdown_push(e_scale_shutdown); + TS("[DEFERRED] Efreet Paths"); + _e_main_efreet_paths_init(); + TS("[DEFERRED] Efreet Paths Done"); + TS("[DEFERRED] E_Test_Helper Init"); e_test_helper_init(); _e_main_shutdown_push(e_test_helper_shutdown); @@ -1154,16 +1188,6 @@ main(int argc, char **argv) } TS("Ecore_Evas Engine Check Done"); - TS("Edje Init"); - if (!edje_init()) - { - e_error_message_show(_("Enlightenment cannot initialize Edje!\n")); - _e_main_shutdown(-1); - } - TS("Edje Init Done"); - _e_main_shutdown_push(edje_shutdown); - edje_freeze(); - /*** Initialize E Subsystems We Need ***/ TS("E Directories Init"); @@ -1213,7 +1237,7 @@ main(int argc, char **argv) TS("E Paths Init Done"); _e_main_shutdown_push(_e_main_path_shutdown); - edje_frametime_set(1.0 / e_config->framerate); + ecore_animator_frametime_set(1.0 / e_config->framerate); TS("E_Font Init"); if (!e_font_init()) @@ -1242,17 +1266,6 @@ main(int argc, char **argv) TS("E_Moveresize Init Done"); _e_main_shutdown_push(e_moveresize_shutdown); - TS("Efreet Init"); - if (!efreet_init()) - { - e_error_message_show(_("Enlightenment cannot initialize the FDO desktop system.\n" - "Perhaps you lack permissions on ~/.cache/efreet or are\n" - "out of memory or disk space?")); - _e_main_shutdown(-1); - } - TS("Efreet Init Done"); - _e_main_shutdown_push(efreet_shutdown); - e_screensaver_preinit(); if (e_config->show_splash) @@ -1308,22 +1321,6 @@ main(int argc, char **argv) _e_main_shutdown_push(_e_main_screens_shutdown); e_screensaver_force_update(); - TS("E_Pointer Init"); - if (!e_pointer_init()) - { - e_error_message_show(_("Enlightenment cannot set up its pointer system.\n")); - _e_main_shutdown(-1); - } - TS("E_Pointer Init Done"); - _e_main_shutdown_push(e_pointer_shutdown); - e_menu_init(); - - if (e_config->show_splash) - e_init_status_set(_("Setup Paths")); - TS("Efreet Paths"); - _e_main_efreet_paths_init(); - TS("Efreet Paths Done"); - if (e_config->show_splash) e_init_status_set(_("Setup System Controls")); TS("E_Sys Init"); diff --git a/src/bin/e_pointer.c b/src/bin/e_pointer.c index e21b6e0..99cae1a 100644 --- a/src/bin/e_pointer.c +++ b/src/bin/e_pointer.c @@ -10,6 +10,7 @@ struct _E_Pointer_Stack /* local variables */ static Eina_List *_hdlrs = NULL; static Eina_List *_ptrs = NULL; +static Eina_Bool _initted = EINA_FALSE; static inline void _e_pointer_hot_update(E_Pointer *ptr, int x, int y) @@ -453,12 +454,14 @@ e_pointer_init(void) _e_pointer_cb_mouse_move, NULL); E_LIST_HANDLER_APPEND(_hdlrs, ECORE_EVENT_MOUSE_WHEEL, _e_pointer_cb_mouse_wheel, NULL); + _initted = EINA_TRUE; return 1; } EINTERN int e_pointer_shutdown(void) { + _initted = EINA_FALSE; E_FREE_LIST(_hdlrs, ecore_event_handler_del); return 1; } @@ -469,6 +472,7 @@ e_pointer_window_new(Ecore_Window win, Eina_Bool filled) E_Pointer *ptr = NULL; EINA_SAFETY_ON_FALSE_RETURN_VAL(win, NULL); + if (!_initted) return NULL; /* allocate space for new pointer */ if (!(ptr = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_cb_free))) @@ -497,6 +501,7 @@ e_pointer_canvas_new(Ecore_Evas *ee, Eina_Bool filled) E_Pointer *ptr = NULL; EINA_SAFETY_ON_FALSE_RETURN_VAL(ee, NULL); + if (!_initted) return NULL; /* allocate space for new pointer */ if (!(ptr = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_cb_free))) @@ -563,6 +568,8 @@ e_pointers_size_set(int size) EAPI void e_pointer_hide(E_Pointer *ptr) { + EINA_SAFETY_ON_NULL_RETURN(ptr); + if ((ptr->evas) && (!ptr->canvas)) _e_pointer_canvas_del(ptr); else if (ptr->canvas) @@ -762,6 +769,8 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y) Evas_Object *o; E_Client *ec; + EINA_SAFETY_ON_NULL_RETURN(ptr); + /* don't show cursor if in hidden mode */ if (!e_config->show_cursor) { @@ -786,7 +795,7 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y) ec->hidden = 1; ecore_evas_object_cursor_set(ptr->ee, obj, EVAS_LAYER_MAX, x, y); } - else + else if (ptr->o_ptr) { ecore_evas_object_cursor_set(ptr->ee, ptr->o_ptr, EVAS_LAYER_MAX, ptr->hot.x, ptr->hot.y); evas_object_show(ptr->o_ptr); diff --git a/src/modules/wl_drm/e_mod_main.c b/src/modules/wl_drm/e_mod_main.c index fbc203b..8442689 100644 --- a/src/modules/wl_drm/e_mod_main.c +++ b/src/modules/wl_drm/e_mod_main.c @@ -249,9 +249,11 @@ e_modapi_init(E_Module *m) /* comp->pointer = */ /* e_pointer_window_new(ecore_evas_window_get(comp->ee), 1); */ - comp->pointer = e_pointer_canvas_new(comp->ee, EINA_TRUE); - comp->pointer->color = EINA_TRUE; - e_pointer_hide(comp->pointer); + if ((comp->pointer = e_pointer_canvas_new(comp->ee, EINA_TRUE))) + { + comp->pointer->color = EINA_TRUE; + e_pointer_hide(comp->pointer); + } /* FIXME: We need a way to trap for user changing the keymap inside of E * without the event coming from X11 */ diff --git a/src/modules/wl_x11/e_mod_main.c b/src/modules/wl_x11/e_mod_main.c index 6845cc7..bc34295 100644 --- a/src/modules/wl_x11/e_mod_main.c +++ b/src/modules/wl_x11/e_mod_main.c @@ -116,8 +116,8 @@ e_modapi_init(E_Module *m) /* comp->pointer = */ /* e_pointer_window_new(ecore_evas_window_get(comp->ee), EINA_TRUE); */ - comp->pointer = e_pointer_canvas_new(comp->ee, EINA_TRUE); - comp->pointer->color = EINA_TRUE; + if ((comp->pointer = e_pointer_canvas_new(comp->ee, EINA_TRUE)) + comp->pointer->color = EINA_TRUE; /* force a keymap update so compositor keyboard gets setup */ _cb_keymap_changed(comp->wl_comp_data, 0, NULL); -- 2.7.4