3 # include <sys/prctl.h>
12 t1 = ecore_time_unix_get(); \
13 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, x); \
16 static double t0, t1, t2;
22 * i need to make more use of these when i'm baffled as to when something is
25 * void *(*__malloc_hook)(size_t size, const void *caller);
27 * void *(*__realloc_hook)(void *ptr, size_t size, const void *caller);
29 * void *(*__memalign_hook)(size_t alignment, size_t size,
30 * const void *caller);
32 * void (*__free_hook)(void *ptr, const void *caller);
34 * void (*__malloc_initialize_hook)(void);
36 * void (*__after_morecore_hook)(void);
39 static void my_init_hook(void);
40 static void my_free_hook(void *p, const void *caller);
42 static void (*old_free_hook)(void *ptr, const void *caller) = NULL;
43 void (*__free_hook)(void *ptr, const void *caller);
45 void (*__malloc_initialize_hook) (void) = my_init_hook;
49 old_free_hook = __free_hook;
50 __free_hook = my_free_hook;
53 //void *magicfree = NULL;
56 my_free_hook(void *p, const void *caller)
58 __free_hook = old_free_hook;
59 // if ((p) && (p == magicfree))
61 // printf("CAUGHT!!!!! %p ...\n", p);
65 __free_hook = my_free_hook;
69 /* local function prototypes */
70 static void _e_main_shutdown(int errcode);
71 static void _e_main_shutdown_push(int (*func)(void));
72 static void _e_main_parse_arguments(int argc, char **argv);
73 static Eina_Bool _e_main_cb_signal_exit(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev EINA_UNUSED);
74 static Eina_Bool _e_main_cb_signal_hup(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev EINA_UNUSED);
75 static Eina_Bool _e_main_cb_signal_user(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev);
76 static int _e_main_dirs_init(void);
77 static int _e_main_dirs_shutdown(void);
78 static int _e_main_path_init(void);
79 static int _e_main_path_shutdown(void);
80 static void _e_main_test_formats(void);
81 static int _e_main_screens_init(void);
82 static int _e_main_screens_shutdown(void);
83 static void _e_main_desk_save(void);
84 static void _e_main_desk_restore(void);
85 static void _e_main_efreet_paths_init(void);
86 static void _e_main_modules_load(Eina_Bool safe_mode);
87 static Eina_Bool _e_main_cb_idle_before(void *data EINA_UNUSED);
88 static Eina_Bool _e_main_cb_idle_after(void *data EINA_UNUSED);
89 static Eina_Bool _e_main_cb_startup_fake_end(void *data EINA_UNUSED);
92 static Eina_Bool really_know = EINA_FALSE;
93 static Eina_Bool locked = EINA_FALSE;
94 static Eina_Bool inloop = EINA_FALSE;
95 static jmp_buf x_fatal_buff;
97 static int _e_main_lvl = 0;
98 static int(*_e_main_shutdown_func[MAX_LEVEL]) (void);
100 static Ecore_Idle_Enterer *_idle_before = NULL;
101 static Ecore_Idle_Enterer *_idle_after = NULL;
103 static Ecore_Event_Handler *mod_init_end = NULL;
105 /* external variables */
106 E_API Eina_Bool e_precache_end = EINA_FALSE;
107 E_API Eina_Bool x_fatal = EINA_FALSE;
108 E_API Eina_Bool good = EINA_FALSE;
109 E_API Eina_Bool evil = EINA_FALSE;
110 E_API Eina_Bool starting = EINA_TRUE;
111 E_API Eina_Bool stopping = EINA_FALSE;
112 E_API Eina_Bool restart = EINA_FALSE;
113 E_API Eina_Bool e_nopause = EINA_FALSE;
114 EINTERN const char *e_first_frame = NULL;
115 EINTERN double e_first_frame_start_time = -1;
118 _xdg_check_str(const char *env, const char *str)
124 for (p = strstr(env, str); p; p++, p = strstr(p, str))
126 if ((!p[len]) || (p[len] == ':')) return EINA_TRUE;
132 _xdg_data_dirs_augment(void)
135 const char *p = e_prefix_get();
136 char newpath[4096], buf[4096];
140 s = getenv("XDG_DATA_DIRS");
143 Eina_Bool pfxdata, pfx;
145 pfxdata = !_xdg_check_str(s, e_prefix_data_get());
146 snprintf(newpath, sizeof(newpath), "%s/share", p);
147 pfx = !_xdg_check_str(s, newpath);
150 snprintf(buf, sizeof(buf), "%s%s%s%s%s",
151 pfxdata ? e_prefix_data_get() : "",
156 e_util_env_set("XDG_DATA_DIRS", buf);
161 snprintf(buf, sizeof(buf), "%s:%s/share:/usr/local/share:/usr/share", e_prefix_data_get(), p);
162 e_util_env_set("XDG_DATA_DIRS", buf);
165 s = getenv("XDG_CONFIG_DIRS");
166 snprintf(newpath, sizeof(newpath), "%s/etc/xdg", p);
169 if (!_xdg_check_str(s, newpath))
171 snprintf(buf, sizeof(buf), "%s:%s", newpath, s);
172 e_util_env_set("XDG_CONFIG_DIRS", buf);
177 snprintf(buf, sizeof(buf), "%s:/etc/xdg", newpath);
178 e_util_env_set("XDG_CONFIG_DIRS", buf);
181 if (!getenv("XDG_RUNTIME_DIR"))
185 snprintf(buf, sizeof(buf), "/tmp/xdg-XXXXXX");
187 if (!dir) dir = "/tmp";
190 e_util_env_set("XDG_RUNTIME_DIR", dir);
191 snprintf(buf, sizeof(buf), "%s/.e-deleteme", dir);
192 ecore_file_mkdir(buf);
196 /* set menu prefix so we get our e menu */
197 if (!getenv("XDG_MENU_PREFIX"))
199 e_util_env_set("XDG_MENU_PREFIX", "e-");
204 _e_main_shelf_init_job(void *data EINA_UNUSED)
206 e_shelf_config_update();
207 return ECORE_CALLBACK_CANCEL;
210 /* externally accessible functions */
212 main(int argc, char **argv)
214 Eina_Bool nostartup = EINA_FALSE;
215 Eina_Bool safe_mode = EINA_FALSE;
216 Eina_Bool after_restart = EINA_FALSE;
217 Eina_Bool waslocked = EINA_FALSE;
218 double t = 0.0, tstart = 0.0;
219 char *s = NULL, buff[32];
220 struct sigaction action;
223 # ifdef PR_SET_PTRACER
224 # ifdef PR_SET_PTRACER_ANY
225 prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY);
231 t0 = t1 = t2 = ecore_time_unix_get();
235 /* trap deadly bug signals and allow some form of sane recovery */
236 /* or ability to gdb attach and debug at this point - better than your */
237 /* wm/desktop vanishing and not knowing what happened */
238 if (!getenv("NOTIFY_SOCKET"))
241 action.sa_sigaction = e_sigseg_act;
242 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
243 sigemptyset(&action.sa_mask);
244 sigaction(SIGSEGV, &action, NULL);
246 action.sa_sigaction = e_sigill_act;
247 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
248 sigemptyset(&action.sa_mask);
249 sigaction(SIGILL, &action, NULL);
251 action.sa_sigaction = e_sigfpe_act;
252 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
253 sigemptyset(&action.sa_mask);
254 sigaction(SIGFPE, &action, NULL);
256 #ifndef HAVE_WAYLAND_ONLY
257 action.sa_sigaction = e_sigbus_act;
258 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
259 sigemptyset(&action.sa_mask);
260 sigaction(SIGBUS, &action, NULL);
263 action.sa_sigaction = e_sigabrt_act;
264 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
265 sigemptyset(&action.sa_mask);
266 sigaction(SIGABRT, &action, NULL);
267 TS("Signal Trap Done");
270 t = ecore_time_unix_get();
271 s = getenv("E_START_TIME");
272 if ((s) && (!getenv("E_RESTART_OK")))
275 if ((t - tstart) < 5.0) safe_mode = EINA_TRUE;
278 snprintf(buff, sizeof(buff), "%1.1f", tstart);
279 e_util_env_set("E_START_TIME", buff);
281 if (getenv("E_START_MTRACK"))
282 e_util_env_set("MTRACK", NULL);
286 e_error_message_show(_("Enlightenment cannot initialize Eina!\n"));
287 _e_main_shutdown(-1);
289 _e_main_shutdown_push(eina_shutdown);
292 e_error_message_show(_("Enlightenment could not create a logging domain!\n"));
293 _e_main_shutdown(-1);
299 t1 = ecore_time_unix_get(); \
300 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, x); \
304 TS("Eina Init Done");
305 _e_main_shutdown_push(e_log_shutdown);
307 TS("Determine Prefix");
308 if (!e_prefix_determine(argv[0]))
311 "ERROR: Enlightenment cannot determine it's installed\n"
312 " prefix from the system or argv[0].\n"
313 " This is because it is not on Linux AND has been\n"
314 " executed strangely. This is unusual.\n");
316 TS("Determine Prefix Done");
318 /* for debugging by redirecting stdout of e to a log file to tail */
319 setvbuf(stdout, NULL, _IONBF, 0);
321 TS("Environment Variables");
322 if (getenv("E_RESTART")) after_restart = EINA_TRUE;
323 if (getenv("DESKTOP_STARTUP_ID"))
324 e_util_env_set("DESKTOP_STARTUP_ID", NULL);
325 e_util_env_set("E_RESTART_OK", NULL);
326 e_util_env_set("PANTS", "ON");
327 e_util_env_set("DESKTOP", "Enlightenment");
328 TS("Environment Variables Done");
330 TS("Parse Arguments");
331 _e_main_parse_arguments(argc, argv);
332 TS("Parse Arguments Done");
334 /*** Initialize Core EFL Libraries We Need ***/
339 e_error_message_show(_("Enlightenment cannot initialize Eet!\n"));
340 _e_main_shutdown(-1);
343 _e_main_shutdown_push(eet_shutdown);
348 e_error_message_show(_("Enlightenment cannot initialize Ecore!\n"));
349 _e_main_shutdown(-1);
351 TS("Ecore Init Done");
352 _e_main_shutdown_push(ecore_shutdown);
354 e_first_frame = getenv("E_FIRST_FRAME");
355 if (e_first_frame && (!e_first_frame[0]))
356 e_first_frame = NULL;
358 e_first_frame_start_time = ecore_time_get();
363 e_error_message_show(_("Enlightenment cannot initialize EIO!\n"));
364 _e_main_shutdown(-1);
367 _e_main_shutdown_push(eio_shutdown);
369 ecore_app_args_set(argc, (const char **)argv);
371 TS("Ecore Event Handlers");
372 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT,
373 _e_main_cb_signal_exit, NULL))
375 e_error_message_show(_("Enlightenment cannot set up an exit signal handler.\n"
376 "Perhaps you are out of memory?"));
377 _e_main_shutdown(-1);
379 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_HUP,
380 _e_main_cb_signal_hup, NULL))
382 e_error_message_show(_("Enlightenment cannot set up a HUP signal handler.\n"
383 "Perhaps you are out of memory?"));
384 _e_main_shutdown(-1);
386 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
387 _e_main_cb_signal_user, NULL))
389 e_error_message_show(_("Enlightenment cannot set up a USER signal handler.\n"
390 "Perhaps you are out of memory?"));
391 _e_main_shutdown(-1);
393 TS("Ecore Event Handlers Done");
395 TS("Ecore_File Init");
396 if (!ecore_file_init())
398 e_error_message_show(_("Enlightenment cannot initialize Ecore_File!\n"));
399 _e_main_shutdown(-1);
401 TS("Ecore_File Init Done");
402 _e_main_shutdown_push(ecore_file_shutdown);
404 TS("Ecore_Con Init");
405 if (!ecore_con_init())
407 e_error_message_show(_("Enlightenment cannot initialize Ecore_Con!\n"));
408 _e_main_shutdown(-1);
410 TS("Ecore_Con Init Done");
411 _e_main_shutdown_push(ecore_con_shutdown);
413 TS("Ecore_Ipc Init");
414 if (!ecore_ipc_init())
416 e_error_message_show(_("Enlightenment cannot initialize Ecore_Ipc!\n"));
417 _e_main_shutdown(-1);
419 TS("Ecore_Ipc Init Done");
420 _e_main_shutdown_push(ecore_ipc_shutdown);
422 _idle_before = ecore_idle_enterer_before_add(_e_main_cb_idle_before, NULL);
424 _xdg_data_dirs_augment();
426 TS("Ecore_Evas Init");
427 if (!ecore_evas_init())
429 e_error_message_show(_("Enlightenment cannot initialize Ecore_Evas!\n"));
430 _e_main_shutdown(-1);
432 TS("Ecore_Evas Init Done");
433 // _e_main_shutdown_push(ecore_evas_shutdown);
435 TS("Elementary Init");
436 if (!elm_init(argc, argv))
438 e_error_message_show(_("Enlightenment cannot initialize Elementary!\n"));
439 _e_main_shutdown(-1);
441 if (!eina_streq(elm_theme_get(NULL), "default"))
442 elm_theme_extension_add(NULL, "default");
443 TS("Elementary Init Done");
444 //_e_main_shutdown_push(elm_shutdown);
449 e_error_message_show(_("Enlightenment cannot initialize Emotion!\n"));
450 _e_main_shutdown(-1);
452 TS("Emotion Init Done");
453 _e_main_shutdown_push((void *)emotion_shutdown);
455 /* e doesn't sync to compositor - it should be one */
456 ecore_evas_app_comp_sync_set(0);
458 TS("Ecore_Evas Engine Check");
459 #ifdef HAVE_WAYLAND_ONLY
460 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_WAYLAND_SHM))
462 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Wayland SHM\n"
463 "rendering in Evas. Please check your installation of Evas and\n"
464 "Ecore and check they support the Wayland SHM rendering engine."));
465 _e_main_shutdown(-1);
468 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_XCB))
470 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_XLIB))
472 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Software X11\n"
473 "rendering in Evas. Please check your installation of Evas and\n"
474 "Ecore and check they support the Software X11 rendering engine."));
475 _e_main_shutdown(-1);
479 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_BUFFER))
481 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Software Buffer\n"
482 "rendering in Evas. Please check your installation of Evas and\n"
483 "Ecore and check they support the Software Buffer rendering engine."));
484 _e_main_shutdown(-1);
486 TS("Ecore_Evas Engine Check Done");
491 e_error_message_show(_("Enlightenment cannot initialize Edje!\n"));
492 _e_main_shutdown(-1);
494 TS("Edje Init Done");
495 _e_main_shutdown_push(edje_shutdown);
498 /*** Initialize E Subsystems We Need ***/
503 e_error_message_show(_("Enlightenment cannot initialize E_Intl!\n"));
504 _e_main_shutdown(-1);
506 TS("E Intl Init Done");
507 _e_main_shutdown_push(e_intl_shutdown);
509 #ifndef HAVE_WAYLAND_ONLY
510 /* init white box of death alert */
514 e_error_message_show(_("Enlightenment cannot initialize its emergency alert system.\n"
515 "Have you set your DISPLAY variable?"));
516 _e_main_shutdown(-1);
518 TS("E_Alert Init Done");
519 _e_main_shutdown_push(e_alert_shutdown);
523 //#ifdef HAVE_WAYLAND
524 /* init uuid store for window/surface properties */
525 TS("E_UUID_Store Init");
526 if (!e_uuid_store_init())
528 e_error_message_show(_("Enlightenment cannot initialize its UUID store.\n"));
529 _e_main_shutdown(-1);
531 TS("E_UUID_Store Init Done");
532 _e_main_shutdown_push(e_uuid_store_shutdown);
535 TS("E_Configure Init");
537 TS("E_Configure Init Done");
539 TS("E Directories Init");
540 /* setup directories we will be using for configurations storage etc. */
541 if (!_e_main_dirs_init())
543 e_error_message_show(_("Enlightenment cannot create directories in your home directory.\n"
544 "Perhaps you have no home directory or the disk is full?"));
545 _e_main_shutdown(-1);
547 TS("E Directories Init Done");
548 _e_main_shutdown_push(_e_main_dirs_shutdown);
550 TS("E_Filereg Init");
551 if (!e_filereg_init())
553 e_error_message_show(_("Enlightenment cannot set up its file registry system.\n"));
554 _e_main_shutdown(-1);
556 TS("E_Filereg Init Done");
557 _e_main_shutdown_push(e_filereg_shutdown);
560 if (!e_config_init())
562 e_error_message_show(_("Enlightenment cannot set up its config system.\n"));
563 _e_main_shutdown(-1);
565 TS("E_Config Init Done");
566 _e_main_shutdown_push(e_config_shutdown);
571 e_error_message_show(_("Enlightenment cannot set up its environment.\n"));
572 _e_main_shutdown(-1);
574 TS("E_Env Init Done");
575 _e_main_shutdown_push(e_env_shutdown);
577 efreet_desktop_environment_set(e_config->desktop_environment);
578 e_util_env_set("E_ICON_THEME", e_config->icon_theme);
579 ecore_exe_run_priority_set(e_config->priority);
580 locked |= e_config->desklock_start_locked;
582 s = getenv("E_DESKLOCK_LOCKED");
583 if ((s) && (!strcmp(s, "locked"))) waslocked = EINA_TRUE;
586 if (!_e_main_path_init())
588 e_error_message_show(_("Enlightenment cannot set up paths for finding files.\n"
589 "Perhaps you are out of memory?"));
590 _e_main_shutdown(-1);
592 TS("E Paths Init Done");
593 _e_main_shutdown_push(_e_main_path_shutdown);
596 if (!e_ipc_init()) _e_main_shutdown(-1);
597 TS("E_Ipc Init Done");
598 _e_main_shutdown_push(e_ipc_shutdown);
600 edje_frametime_set(1.0 / e_config->framerate);
605 e_error_message_show(_("Enlightenment cannot set up its font system.\n"));
606 _e_main_shutdown(-1);
608 TS("E_Font Init Done");
609 _e_main_shutdown_push(e_font_shutdown);
613 TS("E_Font Apply Done");
618 e_error_message_show(_("Enlightenment cannot set up its theme system.\n"));
619 _e_main_shutdown(-1);
621 TS("E_Theme Init Done");
622 _e_main_shutdown_push(e_theme_shutdown);
624 TS("E_Moveresize Init");
626 TS("E_Moveresize Init Done");
627 _e_main_shutdown_push(e_moveresize_shutdown);
629 if (e_config->show_splash)
630 e_init_status_set(_("Setup Message Bus"));
633 _e_main_shutdown_push(e_msgbus_shutdown);
634 TS("E_Msgbus Init Done");
639 e_error_message_show(_("Enlightenment cannot initialize the FDO desktop system.\n"
640 "Perhaps you lack permissions on ~/.cache/efreet or are\n"
641 "out of memory or disk space?"));
642 _e_main_shutdown(-1);
644 TS("Efreet Init Done");
645 _e_main_shutdown_push(efreet_shutdown);
647 if (e_config->show_splash)
648 e_init_status_set(_("Starting International Support"));
649 TS("E_Intl Post Init");
650 if (!e_intl_post_init())
652 e_error_message_show(_("Enlightenment cannot set up its intl system.\n"));
653 _e_main_shutdown(-1);
655 TS("E_Intl Post Init Done");
656 _e_main_shutdown_push(e_intl_post_shutdown);
658 e_screensaver_preinit();
660 if (e_config->show_splash)
661 e_init_status_set(_("Setup Actions"));
662 TS("E_Actions Init");
663 if (!e_actions_init())
665 e_error_message_show(_("Enlightenment cannot set up its actions system.\n"));
666 _e_main_shutdown(-1);
668 TS("E_Actions Init Done");
669 _e_main_shutdown_push(e_actions_shutdown);
671 /* these just add event handlers and can't fail
672 * timestamping them is dumb.
678 if (e_config->show_splash)
679 e_init_status_set(_("Setup Powersave Modes"));
680 TS("E_Powersave Init");
681 if (!e_powersave_init())
683 e_error_message_show(_("Enlightenment cannot set up its powersave modes.\n"));
684 _e_main_shutdown(-1);
686 TS("E_Powersave Init Done");
687 _e_main_shutdown_push(e_powersave_shutdown);
689 if (e_config->show_splash)
690 e_init_status_set(_("Setup Screensaver"));
691 TS("E_Screensaver Init");
692 if (!e_screensaver_init())
694 e_error_message_show(_("Enlightenment cannot configure the X screensaver.\n"));
695 _e_main_shutdown(-1);
697 TS("E_Screensaver Init Done");
698 _e_main_shutdown_push(e_screensaver_shutdown);
700 if (e_config->show_splash)
701 e_init_status_set(_("Setup Screens"));
703 if (!_e_main_screens_init())
705 e_error_message_show(_("Enlightenment set up window management for all the screens on your system\n"
706 "failed. Perhaps another window manager is running?\n"));
707 _e_main_shutdown(-1);
709 TS("Screens Init Done");
710 _e_main_shutdown_push(_e_main_screens_shutdown);
712 TS("E_Pointer Init");
713 if (!e_pointer_init())
715 e_error_message_show(_("Enlightenment cannot set up its pointer system.\n"));
716 _e_main_shutdown(-1);
718 TS("E_Pointer Init Done");
719 _e_main_shutdown_push(e_pointer_shutdown);
725 e_error_message_show(_("Enlightenment cannot set up its scale system.\n"));
726 _e_main_shutdown(-1);
728 TS("E_Scale Init Done");
729 _e_main_shutdown_push(e_scale_shutdown);
731 if (e_config->show_splash)
736 e_error_message_show(_("Enlightenment cannot set up its init screen.\n"));
737 _e_main_shutdown(-1);
739 TS("E_Splash Init Done");
740 _e_main_shutdown_push(e_init_shutdown);
742 if (!((!e_config->show_splash) || (after_restart)))
747 TS("Test File Format Support");
748 _e_main_test_formats();
749 TS("Test File Format Support Done");
753 efreet_icon_extension_add(".svg");
754 efreet_icon_extension_add(".jpg");
755 efreet_icon_extension_add(".png");
756 efreet_icon_extension_add(".edj");
759 if (e_config->show_splash)
760 e_init_status_set(_("Setup ACPI"));
763 TS("E_Acpi Init Done");
764 _e_main_shutdown_push(e_acpi_shutdown);
766 if (e_config->show_splash)
767 e_init_status_set(_("Setup Backlight"));
768 TS("E_Backlight Init");
769 if (!e_backlight_init())
771 e_error_message_show(_("Enlightenment cannot configure the backlight.\n"));
772 _e_main_shutdown(-1);
774 TS("E_Backlight Init Done");
776 if (e_config->show_splash)
777 e_init_status_set(_("Setup DPMS"));
781 e_error_message_show(_("Enlightenment cannot configure the DPMS settings.\n"));
782 _e_main_shutdown(-1);
784 TS("E_Dpms Init Done");
785 _e_main_shutdown_push(e_dpms_shutdown);
787 if (e_config->show_splash)
788 e_init_status_set(_("Setup Desklock"));
789 TS("E_Desklock Init");
790 if (!e_desklock_init())
792 e_error_message_show(_("Enlightenment cannot set up its desk locking system.\n"));
793 _e_main_shutdown(-1);
795 TS("E_Desklock Init Done");
796 _e_main_shutdown_push(e_desklock_shutdown);
798 if (waslocked || (locked && ((!after_restart) || (!getenv("E_DESKLOCK_UNLOCKED")))))
799 e_desklock_show(EINA_TRUE);
801 if (e_config->show_splash)
802 e_init_status_set(_("Setup Paths"));
804 _e_main_efreet_paths_init();
805 TS("Efreet Paths Done");
807 if (e_config->show_splash)
808 e_init_status_set(_("Setup System Controls"));
812 e_error_message_show(_("Enlightenment cannot initialize the System Command system.\n"));
813 _e_main_shutdown(-1);
815 TS("E_Sys Init Done");
816 _e_main_shutdown_push(e_sys_shutdown);
818 if (e_config->show_splash)
819 e_init_status_set(_("Setup Execution System"));
823 e_error_message_show(_("Enlightenment cannot set up its exec system.\n"));
824 _e_main_shutdown(-1);
826 TS("E_Exec Init Done");
830 TS("E_Comp Freeze Done");
832 if (e_config->show_splash)
833 e_init_status_set(_("Setup Filemanager"));
837 e_error_message_show(_("Enlightenment cannot initialize the File manager.\n"));
838 _e_main_shutdown(-1);
840 TS("E_Fm2 Init Done");
841 _e_main_shutdown_push(e_fm2_shutdown);
843 if (e_config->show_splash)
844 e_init_status_set(_("Setup Message System"));
848 e_error_message_show(_("Enlightenment cannot set up its msg system.\n"));
849 _e_main_shutdown(-1);
851 TS("E_Msg Init Done");
852 _e_main_shutdown_push(e_msg_shutdown);
854 if (e_config->show_splash)
855 e_init_status_set(_("Setup Grab Input Handling"));
856 TS("E_Grabinput Init");
857 if (!e_grabinput_init())
859 e_error_message_show(_("Enlightenment cannot set up its grab input handling system.\n"));
860 _e_main_shutdown(-1);
862 TS("E_Grabinput Init Done");
863 _e_main_shutdown_push(e_grabinput_shutdown);
865 if (e_config->show_splash)
866 e_init_status_set(_("Setup Modules"));
868 if (!e_module_init())
870 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
871 _e_main_shutdown(-1);
873 TS("E_Module Init Done");
874 _e_main_shutdown_push(e_module_shutdown);
876 if (e_config->show_splash)
877 e_init_status_set(_("Setup Remembers"));
878 TS("E_Remember Init");
879 if (!e_remember_init(after_restart ? E_STARTUP_RESTART : E_STARTUP_START))
881 e_error_message_show(_("Enlightenment cannot setup remember settings.\n"));
882 _e_main_shutdown(-1);
884 TS("E_Remember Init Done");
885 _e_main_shutdown_push(e_remember_shutdown);
887 if (e_config->show_splash)
888 e_init_status_set(_("Setup Gadcon"));
890 if (!e_gadcon_init())
892 e_error_message_show(_("Enlightenment cannot set up its gadget control system.\n"));
893 _e_main_shutdown(-1);
895 TS("E_Gadcon Init Done");
896 _e_main_shutdown_push(e_gadcon_shutdown);
898 if (e_config->show_splash)
899 e_init_status_set(_("Setup Toolbars"));
900 TS("E_Toolbar Init");
901 if (!e_toolbar_init())
903 e_error_message_show(_("Enlightenment cannot set up its toolbars.\n"));
904 _e_main_shutdown(-1);
906 TS("E_Toolbar Init Done");
907 _e_main_shutdown_push(e_toolbar_shutdown);
909 if (e_config->show_splash)
910 e_init_status_set(_("Setup Wallpaper"));
914 e_error_message_show(_("Enlightenment cannot set up its desktop background system.\n"));
915 _e_main_shutdown(-1);
917 TS("E_Bg Init Done");
918 _e_main_shutdown_push(e_bg_shutdown);
920 if (e_config->show_splash)
921 e_init_status_set(_("Setup Mouse"));
923 if (!e_mouse_update())
925 e_error_message_show(_("Enlightenment cannot configure the mouse settings.\n"));
926 _e_main_shutdown(-1);
928 TS("E_Mouse Init Done");
930 if (e_config->show_splash)
931 e_init_status_set(_("Setup Bindings"));
932 TS("E_Bindings Init");
933 if (!e_bindings_init())
935 e_error_message_show(_("Enlightenment cannot set up its bindings system.\n"));
936 _e_main_shutdown(-1);
938 TS("E_Bindings Init Done");
939 _e_main_shutdown_push(e_bindings_shutdown);
941 if (e_config->show_splash)
942 e_init_status_set(_("Setup Thumbnailer"));
946 e_error_message_show(_("Enlightenment cannot initialize the Thumbnailing system.\n"));
947 _e_main_shutdown(-1);
949 TS("E_Thumb Init Done");
950 _e_main_shutdown_push(e_thumb_shutdown);
955 e_error_message_show(_("Enlightenment cannot initialize the Icon Cache system.\n"));
956 _e_main_shutdown(-1);
958 TS("E_Icon Init Done");
959 _e_main_shutdown_push(e_icon_shutdown);
962 if (!e_update_init())
964 e_error_message_show(_("Enlightenment cannot initialize the Update system.\n"));
965 _e_main_shutdown(-1);
967 TS("E_Update Init Done");
968 _e_main_shutdown_push(e_update_shutdown);
970 if (e_config->show_splash)
971 e_init_status_set(_("Setup Desktop Environment"));
972 TS("E_Deskenv Init");
973 if (!e_deskenv_init())
975 e_error_message_show(_("Enlightenment cannot initialize its desktop environment.\n"));
976 _e_main_shutdown(-1);
978 TS("E_Deskenv Init Done");
979 _e_main_shutdown_push(e_deskenv_shutdown);
981 if (e_config->show_splash)
982 e_init_status_set(_("Setup File Ordering"));
986 e_error_message_show(_("Enlightenment cannot set up its order file system.\n"));
987 _e_main_shutdown(-1);
989 TS("E_Order Init Done");
990 _e_main_shutdown_push(e_order_shutdown);
992 TS("E_Comp_Canvas Keys Grab");
993 e_comp_canvas_keys_grab();
994 TS("E_Comp_Canvas Keys Grab Done");
996 if (e_config->show_splash)
997 e_init_status_set(_("Load Modules"));
999 _e_main_modules_load(safe_mode);
1000 TS("Load Modules Done");
1002 TS("Run Startup Apps");
1006 e_startup(E_STARTUP_RESTART);
1008 e_startup(E_STARTUP_START);
1010 TS("Run Startup Apps Done");
1012 if (e_config->show_splash && (!after_restart))
1013 ecore_timer_add(2.0, _e_main_cb_startup_fake_end, NULL);
1017 TS("E_Comp Thaw Done");
1023 if (e_config->show_splash)
1024 e_init_status_set(_("Setup Shelves"));
1026 if (!e_shelf_init())
1028 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
1029 _e_main_shutdown(-1);
1031 TS("E_Shelf Init Done");
1033 ecore_idle_enterer_before_add(_e_main_shelf_init_job, NULL);
1035 _idle_after = ecore_idle_enterer_add(_e_main_cb_idle_after, NULL);
1037 if (e_config->show_splash)
1038 e_init_status_set(_("Almost Done"));
1040 starting = EINA_FALSE;
1043 e_util_env_set("E_RESTART", "1");
1045 TS("MAIN LOOP AT LAST");
1046 if (!setjmp(x_fatal_buff))
1047 ecore_main_loop_begin();
1049 CRI("FATAL: X Died. Connection gone. Abbreviated Shutdown\n");
1051 inloop = EINA_FALSE;
1052 stopping = EINA_TRUE;
1054 //if (!x_fatal) e_canvas_idle_flush();
1056 e_config_save_flush();
1057 _e_main_desk_save();
1058 e_remember_internal_save();
1059 e_comp_internal_save();
1061 _e_main_shutdown(0);
1065 e_util_env_set("E_RESTART_OK", "1");
1066 if (getenv("E_START_MTRACK"))
1067 e_util_env_set("MTRACK", "track");
1068 ecore_app_restart();
1071 e_prefix_shutdown();
1077 e_main_ts(const char *str)
1080 t1 = ecore_time_unix_get();
1081 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, str);
1087 /* local functions */
1089 _e_main_shutdown(int errcode)
1095 printf("E: Begin Shutdown Procedure!\n");
1097 if (_idle_before) ecore_idle_enterer_del(_idle_before);
1098 _idle_before = NULL;
1099 if (_idle_after) ecore_idle_enterer_del(_idle_after);
1102 dir = getenv("XDG_RUNTIME_DIR");
1105 snprintf(buf, sizeof(buf), "%s/.e-deleteme", dir);
1106 if (ecore_file_exists(buf)) ecore_file_recursive_rm(dir);
1108 for (i = (_e_main_lvl - 1); i >= 0; i--)
1109 (*_e_main_shutdown_func[i])();
1110 if (errcode < 0) exit(errcode);
1114 _e_main_shutdown_push(int (*func)(void))
1117 if (_e_main_lvl > MAX_LEVEL)
1120 e_error_message_show("WARNING: too many init levels. MAX = %i\n",
1124 _e_main_shutdown_func[_e_main_lvl - 1] = func;
1128 _e_main_parse_arguments(int argc, char **argv)
1133 /* handle some command-line parameters */
1134 for (i = 1; i < argc; i++)
1136 if ((!strcmp(argv[i], "-display")) && (i < (argc - 1)))
1139 e_util_env_set("DISPLAY", argv[i]);
1141 else if ((!strcmp(argv[i], "-fake-xinerama-screen")) && (i < (argc - 1)))
1146 if (sscanf(argv[i], "%ix%i+%i+%i", &w, &h, &x, &y) == 4)
1147 e_xinerama_fake_screen_add(x, y, w, h);
1149 else if (!strcmp(argv[i], "-good"))
1153 printf("LA LA LA\n");
1155 else if (!strcmp(argv[i], "-evil"))
1159 printf("MUHAHAHAHHAHAHAHAHA\n");
1161 else if (!strcmp(argv[i], "-psychotic"))
1165 printf("MUHAHALALALALALALALA\n");
1167 else if ((!strcmp(argv[i], "-profile")) && (i < (argc - 1)))
1170 if (!getenv("E_CONF_PROFILE"))
1171 e_util_env_set("E_CONF_PROFILE", argv[i]);
1173 else if (!strcmp(argv[i], "-i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it"))
1174 really_know = EINA_TRUE;
1175 else if (!strcmp(argv[i], "-locked"))
1177 else if (!strcmp(argv[i], "-nopause"))
1178 e_nopause = EINA_TRUE;
1179 else if ((!strcmp(argv[i], "-version")) ||
1180 (!strcmp(argv[i], "--version")))
1182 printf(_("Version: %s\n"), PACKAGE_VERSION);
1183 _e_main_shutdown(-1);
1185 else if ((!strcmp(argv[i], "-h")) ||
1186 (!strcmp(argv[i], "-help")) ||
1187 (!strcmp(argv[i], "--help")))
1192 "\t-display DISPLAY\n"
1193 "\t\tConnect to display named DISPLAY.\n"
1194 "\t\tEG: -display :1.0\n"
1195 "\t-fake-xinerama-screen WxH+X+Y\n"
1196 "\t\tAdd a FAKE xinerama screen (instead of the real ones)\n"
1197 "\t\tgiven the geometry. Add as many as you like. They all\n"
1198 "\t\treplace the real xinerama screens, if any. This can\n"
1199 "\t\tbe used to simulate xinerama.\n"
1200 "\t\tEG: -fake-xinerama-screen 800x600+0+0 -fake-xinerama-screen 800x600+800+0\n"
1201 "\t-profile CONF_PROFILE\n"
1202 "\t\tUse the configuration profile CONF_PROFILE instead of the user selected default or just \"default\".\n"
1208 "\t\tBe psychotic.\n"
1210 "\t\tStart with desklock on, so password will be asked.\n"
1211 "\t-i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it\n"
1212 "\t\tIf you need this help, you don't need this option.\n"
1216 _e_main_shutdown(-1);
1220 /* fix up DISPLAY to be :N.0 if no .screen is in it */
1221 s = getenv("DISPLAY");
1224 char *p, buff[4096];
1226 if (!(p = strrchr(s, ':')))
1228 snprintf(buff, sizeof(buff), "%s:0.0", s);
1229 e_util_env_set("DISPLAY", buff);
1233 if (!strrchr(p, '.'))
1235 snprintf(buff, sizeof(buff), "%s.0", s);
1236 e_util_env_set("DISPLAY", buff);
1241 /* we want to have been launched by enlightenment_start. there is a very */
1242 /* good reason we want to have been launched this way, thus check */
1243 if (!getenv("E_START"))
1245 e_error_message_show(_("You are executing enlightenment directly. This is\n"
1246 "bad. Please do not execute the \"enlightenment\"\n"
1247 "binary. Use the \"enlightenment_start\" launcher. It\n"
1248 "will handle setting up environment variables, paths,\n"
1249 "and launching any other required services etc.\n"
1250 "before enlightenment itself begins running.\n"));
1251 _e_main_shutdown(-1);
1256 _e_main_cb_x_fatal(void *data EINA_UNUSED)
1258 e_error_message_show("Lost X Connection.\n");
1259 ecore_main_loop_quit();
1262 x_fatal = EINA_TRUE;
1263 if (inloop) longjmp(x_fatal_buff, -99);
1268 _e_main_cb_signal_exit(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev EINA_UNUSED)
1270 /* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */
1271 e_sys_action_do(E_SYS_EXIT, NULL);
1272 return ECORE_CALLBACK_RENEW;
1276 _e_main_cb_signal_hup(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev EINA_UNUSED)
1278 e_sys_action_do(E_SYS_RESTART, NULL);
1279 return ECORE_CALLBACK_RENEW;
1283 _e_main_cb_signal_user(void *data EINA_UNUSED, int ev_type EINA_UNUSED, void *ev)
1285 Ecore_Event_Signal_User *e = ev;
1289 // E_Action *a = e_action_find("configuration");
1290 // if ((a) && (a->func.go)) a->func.go(NULL, NULL);
1292 else if (e->number == 2)
1294 // comp module has its own handler for this for enabling/disabling fps debug
1296 return ECORE_CALLBACK_RENEW;
1301 _e_main_dirs_init(void)
1304 const char *dirs[] =
1312 "applications/menu",
1313 "applications/menu/favorite",
1314 "applications/menu/all",
1316 "applications/bar/default",
1317 "applications/startup",
1318 "applications/restart",
1319 "applications/trash",
1320 "applications/desk-lock",
1321 "applications/desk-unlock",
1329 base = e_user_dir_get();
1330 if (ecore_file_mksubdirs(base, dirs) != sizeof(dirs) / sizeof(dirs[0]) - 1)
1332 e_error_message_show("Could not create one of the required "
1333 "subdirectories of '%s'\n", base);
1341 _e_main_dirs_shutdown(void)
1347 _e_main_path_init(void)
1351 /* setup data paths */
1352 path_data = e_path_new();
1355 e_error_message_show("Cannot allocate path for path_data\n");
1358 e_prefix_data_concat_static(buf, "data");
1359 e_path_default_path_append(path_data, buf);
1360 e_path_user_path_set(path_data, &(e_config->path_append_data));
1362 /* setup image paths */
1363 path_images = e_path_new();
1366 e_error_message_show("Cannot allocate path for path_images\n");
1369 e_user_dir_concat_static(buf, "/images");
1370 e_path_default_path_append(path_images, buf);
1371 e_prefix_data_concat_static(buf, "data/images");
1372 e_path_default_path_append(path_images, buf);
1373 e_path_user_path_set(path_images, &(e_config->path_append_images));
1375 /* setup font paths */
1376 path_fonts = e_path_new();
1379 e_error_message_show("Cannot allocate path for path_fonts\n");
1382 e_user_dir_concat_static(buf, "/fonts");
1383 e_path_default_path_append(path_fonts, buf);
1384 e_prefix_data_concat_static(buf, "data/fonts");
1385 e_path_default_path_append(path_fonts, buf);
1386 e_path_user_path_set(path_fonts, &(e_config->path_append_fonts));
1388 /* setup icon paths */
1389 path_icons = e_path_new();
1392 e_error_message_show("Cannot allocate path for path_icons\n");
1395 e_user_dir_concat_static(buf, "/icons");
1396 e_path_default_path_append(path_icons, buf);
1397 e_prefix_data_concat_static(buf, "data/icons");
1398 e_path_default_path_append(path_icons, buf);
1399 e_path_user_path_set(path_icons, &(e_config->path_append_icons));
1401 /* setup module paths */
1402 path_modules = e_path_new();
1405 e_error_message_show("Cannot allocate path for path_modules\n");
1408 e_user_dir_concat_static(buf, "/modules");
1409 e_path_default_path_append(path_modules, buf);
1410 snprintf(buf, sizeof(buf), "%s/enlightenment/modules", e_prefix_lib_get());
1411 e_path_default_path_append(path_modules, buf);
1412 /* FIXME: eventually this has to go - moduels should have installers that
1413 * add appropriate install paths (if not installed to user homedir) to
1414 * e's module search dirs
1416 snprintf(buf, sizeof(buf), "%s/enlightenment/modules_extra", e_prefix_lib_get());
1417 e_path_default_path_append(path_modules, buf);
1418 e_path_user_path_set(path_modules, &(e_config->path_append_modules));
1420 /* setup background paths */
1421 path_backgrounds = e_path_new();
1422 if (!path_backgrounds)
1424 e_error_message_show("Cannot allocate path for path_backgrounds\n");
1427 e_user_dir_concat_static(buf, "/backgrounds");
1428 e_path_default_path_append(path_backgrounds, buf);
1429 e_prefix_data_concat_static(buf, "data/backgrounds");
1430 e_path_default_path_append(path_backgrounds, buf);
1431 e_path_user_path_set(path_backgrounds, &(e_config->path_append_backgrounds));
1433 path_messages = e_path_new();
1436 e_error_message_show("Cannot allocate path for path_messages\n");
1439 e_user_dir_concat_static(buf, "/locale");
1440 e_path_default_path_append(path_messages, buf);
1441 e_path_default_path_append(path_messages, e_prefix_locale_get());
1442 e_path_user_path_set(path_messages, &(e_config->path_append_messages));
1448 _e_main_path_shutdown(void)
1452 e_object_del(E_OBJECT(path_data));
1457 e_object_del(E_OBJECT(path_images));
1462 e_object_del(E_OBJECT(path_fonts));
1467 e_object_del(E_OBJECT(path_icons));
1472 e_object_del(E_OBJECT(path_modules));
1473 path_modules = NULL;
1475 if (path_backgrounds)
1477 e_object_del(E_OBJECT(path_backgrounds));
1478 path_backgrounds = NULL;
1482 e_object_del(E_OBJECT(path_messages));
1483 path_messages = NULL;
1489 _e_main_test_formats(void)
1493 Evas_Object *im, *txt;
1495 char buff[PATH_MAX];
1497 if (e_config->show_splash)
1498 e_init_status_set(_("Testing Format Support"));
1500 if (!(ee = ecore_evas_buffer_new(1, 1)))
1502 e_error_message_show(_("Enlightenment found Evas can't create a buffer canvas. Please check\n"
1503 "Evas has Software Buffer engine support.\n"));
1504 _e_main_shutdown(-1);
1506 evas = ecore_evas_get(ee);
1507 im = evas_object_image_add(evas);
1509 e_prefix_data_concat_static(buff, "data/images/test.svg");
1510 evas_object_image_file_set(im, buff, NULL);
1511 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1513 e_error_message_show(_("Enlightenment found Evas can't load SVG files. "
1514 "Check Evas has SVG loader support.\n"));
1517 efreet_icon_extension_add(".svg");
1519 e_prefix_data_concat_static(buff, "data/images/test.jpg");
1520 evas_object_image_file_set(im, buff, NULL);
1521 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1523 e_error_message_show(_("Enlightenment found Evas can't load JPEG files. "
1524 "Check Evas has JPEG loader support.\n"));
1525 _e_main_shutdown(-1);
1527 efreet_icon_extension_add(".jpg");
1529 e_prefix_data_concat_static(buff, "data/images/test.png");
1530 evas_object_image_file_set(im, buff, NULL);
1531 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1533 e_error_message_show(_("Enlightenment found Evas can't load PNG files. "
1534 "Check Evas has PNG loader support.\n"));
1535 _e_main_shutdown(-1);
1537 efreet_icon_extension_add(".png");
1539 e_prefix_data_concat_static(buff, "data/images/test.edj");
1540 evas_object_image_file_set(im, buff, "images/0");
1541 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1543 e_error_message_show(_("Enlightenment found Evas can't load EET files. "
1544 "Check Evas has EET loader support.\n"));
1545 _e_main_shutdown(-1);
1547 efreet_icon_extension_add(".edj");
1549 evas_object_del(im);
1551 txt = evas_object_text_add(evas);
1552 evas_object_text_font_set(txt, "Sans", 10);
1553 evas_object_text_text_set(txt, "Hello");
1554 evas_object_geometry_get(txt, NULL, NULL, &tw, &th);
1555 if ((tw <= 0) && (th <= 0))
1557 e_error_message_show(_("Enlightenment found Evas can't load the 'Sans' font. Check Evas has fontconfig\n"
1558 "support and system fontconfig defines a 'Sans' font.\n"));
1559 _e_main_shutdown(-1);
1561 evas_object_del(txt);
1562 ecore_evas_free(ee);
1566 _e_main_screens_init(void)
1568 TS("\tscreens: client");
1569 if (!e_client_init()) return 0;
1570 TS("\tscreens: win");
1571 if (!e_win_init()) return 0;
1572 #ifndef HAVE_WAYLAND_ONLY
1576 e_error_message_show(_("Enlightenment cannot setup XKB Keyboard layouts.\n"));
1577 _e_main_shutdown(-1);
1579 TS("E_Xkb Init Done");
1582 TS("Compositor Init");
1585 e_error_message_show(_("Enlightenment cannot create a compositor.\n"));
1586 _e_main_shutdown(-1);
1589 _e_main_desk_restore();
1591 #ifndef HAVE_WAYLAND_ONLY
1592 if (e_config->show_splash)
1593 e_init_status_set(_("Setup DND"));
1597 e_error_message_show(_("Enlightenment cannot set up its dnd system.\n"));
1598 _e_main_shutdown(-1);
1600 TS("E_Dnd Init Done");
1601 _e_main_shutdown_push(e_dnd_shutdown);
1608 _e_main_screens_shutdown(void)
1614 e_client_shutdown();
1615 e_exehist_shutdown();
1616 e_backlight_shutdown();
1625 _e_main_desk_save(void)
1628 char env[1024], name[1024];
1631 EINA_LIST_FOREACH(e_comp->zones, l, zone)
1633 snprintf(name, sizeof(name), "DESK_%d_%d", 0, zone->num);
1634 snprintf(env, sizeof(env), "%d,%d", zone->desk_x_current, zone->desk_y_current);
1635 e_util_env_set(name, env);
1640 _e_main_desk_restore(void)
1648 EINA_LIST_FOREACH(e_comp->zones, l, zone)
1653 snprintf(name, sizeof(name), "DESK_%d_%d", 0, zone->num);
1656 if (!sscanf(env, "%d,%d", &desk_x, &desk_y)) continue;
1657 desk = e_desk_at_xy_get(zone, desk_x, desk_y);
1658 if (!desk) continue;
1662 E_CLIENT_REVERSE_FOREACH(ec)
1663 if ((!e_client_util_ignored_get(ec)) && e_client_util_desk_visible(ec, e_desk_current_get(ec->zone)))
1665 ec->want_focus = ec->take_focus = 1;
1671 _e_main_efreet_paths_init(void)
1675 if ((list = efreet_icon_extra_list_get()))
1677 char buff[PATH_MAX];
1679 e_user_dir_concat_static(buff, "icons");
1680 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1681 e_prefix_data_concat_static(buff, "data/icons");
1682 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1687 _e_main_modules_load_after(void *d EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED)
1689 e_int_config_modules(NULL, NULL);
1690 E_FREE_FUNC(mod_init_end, ecore_event_handler_del);
1691 return ECORE_CALLBACK_RENEW;
1695 _e_main_modules_load(Eina_Bool safe_mode)
1698 e_module_all_load();
1704 crashmodule = getenv("E_MODULE_LOAD");
1705 if (crashmodule) m = e_module_new(crashmodule);
1707 if ((crashmodule) && (m))
1709 e_module_disable(m);
1710 e_object_del(E_OBJECT(m));
1712 e_error_message_show
1713 (_("Enlightenment crashed early on start and has<br>"
1714 "been restarted. There was an error loading the<br>"
1715 "module named: %s. This module has been disabled<br>"
1716 "and will not be loaded."), crashmodule);
1718 (_("Enlightenment crashed early on start and has been restarted"),
1719 _("Enlightenment crashed early on start and has been restarted.<br>"
1720 "There was an error loading the module named: %s<br><br>"
1721 "This module has been disabled and will not be loaded."), crashmodule);
1722 e_module_all_load();
1726 e_error_message_show
1727 (_("Enlightenment crashed early on start and has<br>"
1728 "been restarted. All modules have been disabled<br>"
1729 "and will not be loaded to help remove any problem<br>"
1730 "modules from your configuration. The module<br>"
1731 "configuration dialog should let you select your<br>"
1732 "modules again.\n"));
1734 (_("Enlightenment crashed early on start and has been restarted"),
1735 _("Enlightenment crashed early on start and has been restarted.<br>"
1736 "All modules have been disabled and will not be loaded to help<br>"
1737 "remove any problem modules from your configuration.<br><br>"
1738 "The module configuration dialog should let you select your<br>"
1741 mod_init_end = ecore_event_handler_add(E_EVENT_MODULE_INIT_END, _e_main_modules_load_after, NULL);
1746 _e_main_cb_idle_before(void *data EINA_UNUSED)
1748 e_menu_idler_before();
1749 e_client_idler_before();
1750 e_pointer_idler_before();
1752 return ECORE_CALLBACK_RENEW;
1756 _e_main_cb_idle_after(void *data EINA_UNUSED)
1758 static int first_idle = 1;
1763 #ifdef E_RELEASE_BUILD
1768 e_precache_end = EINA_TRUE;
1771 if (first_idle++ < 60)
1775 e_precache_end = EINA_TRUE;
1779 return ECORE_CALLBACK_RENEW;
1783 _e_main_cb_startup_fake_end(void *data EINA_UNUSED)
1786 return ECORE_CALLBACK_CANCEL;