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 __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__);
74 static Eina_Bool _e_main_cb_signal_hup(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__);
75 static Eina_Bool _e_main_cb_signal_user(void *data __UNUSED__, int ev_type __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 __UNUSED__);
88 static Eina_Bool _e_main_cb_idle_after(void *data __UNUSED__);
89 static Eina_Bool _e_main_cb_startup_fake_end(void *data __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 EAPI Eina_Bool e_precache_end = EINA_FALSE;
107 EAPI Eina_Bool x_fatal = EINA_FALSE;
108 EAPI Eina_Bool good = EINA_FALSE;
109 EAPI Eina_Bool evil = EINA_FALSE;
110 EAPI Eina_Bool starting = EINA_TRUE;
111 EAPI Eina_Bool stopping = EINA_FALSE;
112 EAPI Eina_Bool restart = EINA_FALSE;
113 EAPI 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);
290 #ifdef OBJECT_HASH_CHECK
291 e_object_hash_init();
295 e_error_message_show(_("Enlightenment could not create a logging domain!\n"));
296 _e_main_shutdown(-1);
302 t1 = ecore_time_unix_get(); \
303 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, x); \
307 TS("Eina Init Done");
308 _e_main_shutdown_push(e_log_shutdown);
310 TS("Determine Prefix");
311 if (!e_prefix_determine(argv[0]))
314 "ERROR: Enlightenment cannot determine it's installed\n"
315 " prefix from the system or argv[0].\n"
316 " This is because it is not on Linux AND has been\n"
317 " executed strangely. This is unusual.\n");
319 TS("Determine Prefix Done");
321 /* for debugging by redirecting stdout of e to a log file to tail */
322 setvbuf(stdout, NULL, _IONBF, 0);
324 TS("Environment Variables");
325 if (getenv("E_RESTART")) after_restart = EINA_TRUE;
326 if (getenv("DESKTOP_STARTUP_ID"))
327 e_util_env_set("DESKTOP_STARTUP_ID", NULL);
328 e_util_env_set("E_RESTART_OK", NULL);
329 e_util_env_set("PANTS", "ON");
330 e_util_env_set("DESKTOP", "Enlightenment-0.17.0");
331 TS("Environment Variables Done");
333 TS("Parse Arguments");
334 _e_main_parse_arguments(argc, argv);
335 TS("Parse Arguments Done");
337 /*** Initialize Core EFL Libraries We Need ***/
342 e_error_message_show(_("Enlightenment cannot initialize Eet!\n"));
343 _e_main_shutdown(-1);
346 _e_main_shutdown_push(eet_shutdown);
351 e_error_message_show(_("Enlightenment cannot initialize Ecore!\n"));
352 _e_main_shutdown(-1);
354 TS("Ecore Init Done");
355 _e_main_shutdown_push(ecore_shutdown);
357 e_first_frame = getenv("E_FIRST_FRAME");
358 if (e_first_frame && (!e_first_frame[0]))
359 e_first_frame = NULL;
361 e_first_frame_start_time = ecore_time_get();
366 e_error_message_show(_("Enlightenment cannot initialize EIO!\n"));
367 _e_main_shutdown(-1);
370 _e_main_shutdown_push(eio_shutdown);
372 ecore_app_args_set(argc, (const char **)argv);
374 TS("Ecore Event Handlers");
375 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT,
376 _e_main_cb_signal_exit, NULL))
378 e_error_message_show(_("Enlightenment cannot set up an exit signal handler.\n"
379 "Perhaps you are out of memory?"));
380 _e_main_shutdown(-1);
382 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_HUP,
383 _e_main_cb_signal_hup, NULL))
385 e_error_message_show(_("Enlightenment cannot set up a HUP signal handler.\n"
386 "Perhaps you are out of memory?"));
387 _e_main_shutdown(-1);
389 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
390 _e_main_cb_signal_user, NULL))
392 e_error_message_show(_("Enlightenment cannot set up a USER signal handler.\n"
393 "Perhaps you are out of memory?"));
394 _e_main_shutdown(-1);
396 TS("Ecore Event Handlers Done");
398 TS("Ecore_File Init");
399 if (!ecore_file_init())
401 e_error_message_show(_("Enlightenment cannot initialize Ecore_File!\n"));
402 _e_main_shutdown(-1);
404 TS("Ecore_File Init Done");
405 _e_main_shutdown_push(ecore_file_shutdown);
407 TS("Ecore_Con Init");
408 if (!ecore_con_init())
410 e_error_message_show(_("Enlightenment cannot initialize Ecore_Con!\n"));
411 _e_main_shutdown(-1);
413 TS("Ecore_Con Init Done");
414 _e_main_shutdown_push(ecore_con_shutdown);
416 TS("Ecore_Ipc Init");
417 if (!ecore_ipc_init())
419 e_error_message_show(_("Enlightenment cannot initialize Ecore_Ipc!\n"));
420 _e_main_shutdown(-1);
422 TS("Ecore_Ipc Init Done");
423 _e_main_shutdown_push(ecore_ipc_shutdown);
425 _idle_before = ecore_idle_enterer_before_add(_e_main_cb_idle_before, NULL);
427 _xdg_data_dirs_augment();
429 TS("Ecore_Evas Init");
430 if (!ecore_evas_init())
432 e_error_message_show(_("Enlightenment cannot initialize Ecore_Evas!\n"));
433 _e_main_shutdown(-1);
435 TS("Ecore_Evas Init Done");
436 // _e_main_shutdown_push(ecore_evas_shutdown);
438 TS("Elementary Init");
439 if (!elm_init(argc, argv))
441 e_error_message_show(_("Enlightenment cannot initialize Elementary!\n"));
442 _e_main_shutdown(-1);
444 TS("Elementary Init Done");
445 //_e_main_shutdown_push(elm_shutdown);
450 e_error_message_show(_("Enlightenment cannot initialize Emotion!\n"));
451 _e_main_shutdown(-1);
453 TS("Emotion Init Done");
454 _e_main_shutdown_push((void *)emotion_shutdown);
456 /* e doesn't sync to compositor - it should be one */
457 ecore_evas_app_comp_sync_set(0);
459 TS("Ecore_Evas Engine Check");
460 #ifdef HAVE_WAYLAND_ONLY
461 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_WAYLAND_SHM))
463 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Wayland SHM\n"
464 "rendering in Evas. Please check your installation of Evas and\n"
465 "Ecore and check they support the Wayland SHM rendering engine."));
466 _e_main_shutdown(-1);
469 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_XCB))
471 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_XLIB))
473 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Software X11\n"
474 "rendering in Evas. Please check your installation of Evas and\n"
475 "Ecore and check they support the Software X11 rendering engine."));
476 _e_main_shutdown(-1);
480 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_BUFFER))
482 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Software Buffer\n"
483 "rendering in Evas. Please check your installation of Evas and\n"
484 "Ecore and check they support the Software Buffer rendering engine."));
485 _e_main_shutdown(-1);
487 TS("Ecore_Evas Engine Check Done");
492 e_error_message_show(_("Enlightenment cannot initialize Edje!\n"));
493 _e_main_shutdown(-1);
495 TS("Edje Init Done");
496 _e_main_shutdown_push(edje_shutdown);
499 /*** Initialize E Subsystems We Need ***/
504 e_error_message_show(_("Enlightenment cannot initialize E_Intl!\n"));
505 _e_main_shutdown(-1);
507 TS("E Intl Init Done");
508 _e_main_shutdown_push(e_intl_shutdown);
510 #ifndef HAVE_WAYLAND_ONLY
511 /* init white box of death alert */
515 e_error_message_show(_("Enlightenment cannot initialize its emergency alert system.\n"
516 "Have you set your DISPLAY variable?"));
517 _e_main_shutdown(-1);
519 TS("E_Alert Init Done");
520 _e_main_shutdown_push(e_alert_shutdown);
523 TS("E_Configure Init");
525 TS("E_Configure Init Done");
527 TS("E Directories Init");
528 /* setup directories we will be using for configurations storage etc. */
529 if (!_e_main_dirs_init())
531 e_error_message_show(_("Enlightenment cannot create directories in your home directory.\n"
532 "Perhaps you have no home directory or the disk is full?"));
533 _e_main_shutdown(-1);
535 TS("E Directories Init Done");
536 _e_main_shutdown_push(_e_main_dirs_shutdown);
538 TS("E_Filereg Init");
539 if (!e_filereg_init())
541 e_error_message_show(_("Enlightenment cannot set up its file registry system.\n"));
542 _e_main_shutdown(-1);
544 TS("E_Filereg Init Done");
545 _e_main_shutdown_push(e_filereg_shutdown);
548 if (!e_config_init())
550 e_error_message_show(_("Enlightenment cannot set up its config system.\n"));
551 _e_main_shutdown(-1);
553 TS("E_Config Init Done");
554 _e_main_shutdown_push(e_config_shutdown);
559 e_error_message_show(_("Enlightenment cannot set up its environment.\n"));
560 _e_main_shutdown(-1);
562 TS("E_Env Init Done");
563 _e_main_shutdown_push(e_env_shutdown);
565 efreet_desktop_environment_set(e_config->desktop_environment);
566 e_util_env_set("E_ICON_THEME", e_config->icon_theme);
567 ecore_exe_run_priority_set(e_config->priority);
568 locked |= e_config->desklock_start_locked;
570 s = getenv("E_DESKLOCK_LOCKED");
571 if ((s) && (!strcmp(s, "locked"))) waslocked = EINA_TRUE;
574 if (!_e_main_path_init())
576 e_error_message_show(_("Enlightenment cannot set up paths for finding files.\n"
577 "Perhaps you are out of memory?"));
578 _e_main_shutdown(-1);
580 TS("E Paths Init Done");
581 _e_main_shutdown_push(_e_main_path_shutdown);
584 if (!e_ipc_init()) _e_main_shutdown(-1);
585 TS("E_Ipc Init Done");
586 _e_main_shutdown_push(e_ipc_shutdown);
588 edje_frametime_set(1.0 / e_config->framerate);
593 e_error_message_show(_("Enlightenment cannot set up its font system.\n"));
594 _e_main_shutdown(-1);
596 TS("E_Font Init Done");
597 _e_main_shutdown_push(e_font_shutdown);
601 TS("E_Font Apply Done");
606 e_error_message_show(_("Enlightenment cannot set up its theme system.\n"));
607 _e_main_shutdown(-1);
609 TS("E_Theme Init Done");
610 _e_main_shutdown_push(e_theme_shutdown);
612 TS("E_Moveresize Init");
614 TS("E_Moveresize Init Done");
615 _e_main_shutdown_push(e_moveresize_shutdown);
617 if (e_config->show_splash)
618 e_init_status_set(_("Setup Message Bus"));
621 _e_main_shutdown_push(e_msgbus_shutdown);
622 TS("E_Msgbus Init Done");
627 e_error_message_show(_("Enlightenment cannot initialize the FDO desktop system.\n"
628 "Perhaps you lack permissions on ~/.cache/efreet or are\n"
629 "out of memory or disk space?"));
630 _e_main_shutdown(-1);
632 TS("Efreet Init Done");
633 _e_main_shutdown_push(efreet_shutdown);
635 if (e_config->show_splash)
636 e_init_status_set(_("Starting International Support"));
637 TS("E_Intl Post Init");
638 if (!e_intl_post_init())
640 e_error_message_show(_("Enlightenment cannot set up its intl system.\n"));
641 _e_main_shutdown(-1);
643 TS("E_Intl Post Init Done");
644 _e_main_shutdown_push(e_intl_post_shutdown);
646 e_screensaver_preinit();
648 if (e_config->show_splash)
649 e_init_status_set(_("Setup Actions"));
650 TS("E_Actions Init");
651 if (!e_actions_init())
653 e_error_message_show(_("Enlightenment cannot set up its actions system.\n"));
654 _e_main_shutdown(-1);
656 TS("E_Actions Init Done");
657 _e_main_shutdown_push(e_actions_shutdown);
659 /* these just add event handlers and can't fail
660 * timestamping them is dumb.
666 if (e_config->show_splash)
667 e_init_status_set(_("Setup Powersave Modes"));
668 TS("E_Powersave Init");
669 if (!e_powersave_init())
671 e_error_message_show(_("Enlightenment cannot set up its powersave modes.\n"));
672 _e_main_shutdown(-1);
674 TS("E_Powersave Init Done");
675 _e_main_shutdown_push(e_powersave_shutdown);
677 if (e_config->show_splash)
678 e_init_status_set(_("Setup Screensaver"));
679 TS("E_Screensaver Init");
680 if (!e_screensaver_init())
682 e_error_message_show(_("Enlightenment cannot configure the X screensaver.\n"));
683 _e_main_shutdown(-1);
685 TS("E_Screensaver Init Done");
686 _e_main_shutdown_push(e_screensaver_shutdown);
688 if (e_config->show_splash)
689 e_init_status_set(_("Setup Screens"));
691 if (!_e_main_screens_init())
693 e_error_message_show(_("Enlightenment set up window management for all the screens on your system\n"
694 "failed. Perhaps another window manager is running?\n"));
695 _e_main_shutdown(-1);
697 TS("Screens Init Done");
698 _e_main_shutdown_push(_e_main_screens_shutdown);
699 e_screensaver_force_update();
701 TS("E_Pointer Init");
702 if (!e_pointer_init())
704 e_error_message_show(_("Enlightenment cannot set up its pointer system.\n"));
705 _e_main_shutdown(-1);
707 TS("E_Pointer Init Done");
708 _e_main_shutdown_push(e_pointer_shutdown);
714 e_error_message_show(_("Enlightenment cannot set up its scale system.\n"));
715 _e_main_shutdown(-1);
717 TS("E_Scale Init Done");
718 _e_main_shutdown_push(e_scale_shutdown);
720 if (e_config->show_splash)
725 e_error_message_show(_("Enlightenment cannot set up its init screen.\n"));
726 _e_main_shutdown(-1);
728 TS("E_Splash Init Done");
729 _e_main_shutdown_push(e_init_shutdown);
731 if (!((!e_config->show_splash) || (after_restart)))
736 TS("Test File Format Support");
737 _e_main_test_formats();
738 TS("Test File Format Support Done");
742 efreet_icon_extension_add(".svg");
743 efreet_icon_extension_add(".jpg");
744 efreet_icon_extension_add(".png");
745 efreet_icon_extension_add(".edj");
748 if (e_config->show_splash)
749 e_init_status_set(_("Setup ACPI"));
752 TS("E_Acpi Init Done");
753 _e_main_shutdown_push(e_acpi_shutdown);
755 if (e_config->show_splash)
756 e_init_status_set(_("Setup Backlight"));
757 TS("E_Backlight Init");
758 if (!e_backlight_init())
760 e_error_message_show(_("Enlightenment cannot configure the backlight.\n"));
761 _e_main_shutdown(-1);
763 TS("E_Backlight Init Done");
765 if (e_config->show_splash)
766 e_init_status_set(_("Setup DPMS"));
770 e_error_message_show(_("Enlightenment cannot configure the DPMS settings.\n"));
771 _e_main_shutdown(-1);
773 TS("E_Dpms Init Done");
774 _e_main_shutdown_push(e_dpms_shutdown);
776 if (e_config->show_splash)
777 e_init_status_set(_("Setup Desklock"));
778 TS("E_Desklock Init");
779 if (!e_desklock_init())
781 e_error_message_show(_("Enlightenment cannot set up its desk locking system.\n"));
782 _e_main_shutdown(-1);
784 TS("E_Desklock Init Done");
785 _e_main_shutdown_push(e_desklock_shutdown);
787 if (waslocked || (locked && ((!after_restart) || (!getenv("E_DESKLOCK_UNLOCKED")))))
788 e_desklock_show(EINA_TRUE);
790 if (e_config->show_splash)
791 e_init_status_set(_("Setup Paths"));
793 _e_main_efreet_paths_init();
794 TS("Efreet Paths Done");
796 if (e_config->show_splash)
797 e_init_status_set(_("Setup System Controls"));
801 e_error_message_show(_("Enlightenment cannot initialize the System Command system.\n"));
802 _e_main_shutdown(-1);
804 TS("E_Sys Init Done");
805 _e_main_shutdown_push(e_sys_shutdown);
807 if (e_config->show_splash)
808 e_init_status_set(_("Setup Execution System"));
812 e_error_message_show(_("Enlightenment cannot set up its exec system.\n"));
813 _e_main_shutdown(-1);
815 TS("E_Exec Init Done");
819 TS("E_Comp Freeze Done");
821 if (e_config->show_splash)
822 e_init_status_set(_("Setup Filemanager"));
826 e_error_message_show(_("Enlightenment cannot initialize the File manager.\n"));
827 _e_main_shutdown(-1);
829 TS("E_Fm2 Init Done");
830 _e_main_shutdown_push(e_fm2_shutdown);
832 if (e_config->show_splash)
833 e_init_status_set(_("Setup Message System"));
837 e_error_message_show(_("Enlightenment cannot set up its msg system.\n"));
838 _e_main_shutdown(-1);
840 TS("E_Msg Init Done");
841 _e_main_shutdown_push(e_msg_shutdown);
843 if (e_config->show_splash)
844 e_init_status_set(_("Setup Grab Input Handling"));
845 TS("E_Grabinput Init");
846 if (!e_grabinput_init())
848 e_error_message_show(_("Enlightenment cannot set up its grab input handling system.\n"));
849 _e_main_shutdown(-1);
851 TS("E_Grabinput Init Done");
852 _e_main_shutdown_push(e_grabinput_shutdown);
854 if (e_config->show_splash)
855 e_init_status_set(_("Setup Modules"));
857 if (!e_module_init())
859 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
860 _e_main_shutdown(-1);
862 TS("E_Module Init Done");
863 _e_main_shutdown_push(e_module_shutdown);
865 if (e_config->show_splash)
866 e_init_status_set(_("Setup Remembers"));
867 TS("E_Remember Init");
868 if (!e_remember_init(after_restart ? E_STARTUP_RESTART : E_STARTUP_START))
870 e_error_message_show(_("Enlightenment cannot setup remember settings.\n"));
871 _e_main_shutdown(-1);
873 TS("E_Remember Init Done");
874 _e_main_shutdown_push(e_remember_shutdown);
876 if (e_config->show_splash)
877 e_init_status_set(_("Setup Color Classes"));
878 TS("E_Color_Class Init");
879 if (!e_color_class_init())
881 e_error_message_show(_("Enlightenment cannot set up its color class system.\n"));
882 _e_main_shutdown(-1);
884 TS("E_Color_Class Init Done");
885 _e_main_shutdown_push(e_color_class_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_Manager Keys Grab");
993 e_managers_keys_grab();
994 TS("E_Manager 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 TS("E_Test_Helper Init");
1024 e_test_helper_init();
1025 _e_main_shutdown_push(e_test_helper_shutdown);
1026 TS("E_Test_Helper Done");
1028 TS("E_INFO_SERVER Init");
1029 e_info_server_init();
1030 _e_main_shutdown_push(e_info_server_shutdown);
1031 TS("E_INFO_SERVER Done");
1033 if (e_config->show_splash)
1034 e_init_status_set(_("Setup Shelves"));
1036 if (!e_shelf_init())
1038 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
1039 _e_main_shutdown(-1);
1041 TS("E_Shelf Init Done");
1043 ecore_idle_enterer_before_add(_e_main_shelf_init_job, NULL);
1045 _idle_after = ecore_idle_enterer_add(_e_main_cb_idle_after, NULL);
1047 if (e_config->show_splash)
1048 e_init_status_set(_("Almost Done"));
1050 starting = EINA_FALSE;
1053 e_util_env_set("E_RESTART", "1");
1055 TS("MAIN LOOP AT LAST");
1056 if (!setjmp(x_fatal_buff))
1057 ecore_main_loop_begin();
1059 CRI("FATAL: X Died. Connection gone. Abbreviated Shutdown\n");
1061 inloop = EINA_FALSE;
1062 stopping = EINA_TRUE;
1064 //if (!x_fatal) e_canvas_idle_flush();
1066 e_config_save_flush();
1067 _e_main_desk_save();
1068 e_remember_internal_save();
1069 e_comp_internal_save();
1071 _e_main_shutdown(0);
1075 e_util_env_set("E_RESTART_OK", "1");
1076 if (getenv("E_START_MTRACK"))
1077 e_util_env_set("MTRACK", "track");
1078 ecore_app_restart();
1081 e_prefix_shutdown();
1087 e_main_ts(const char *str)
1090 t1 = ecore_time_unix_get();
1091 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, str);
1097 /* local functions */
1099 _e_main_shutdown(int errcode)
1105 printf("E: Begin Shutdown Procedure!\n");
1107 if (_idle_before) ecore_idle_enterer_del(_idle_before);
1108 _idle_before = NULL;
1109 if (_idle_after) ecore_idle_enterer_del(_idle_after);
1112 dir = getenv("XDG_RUNTIME_DIR");
1115 char buf_env[PATH_MAX];
1116 snprintf(buf_env, sizeof(buf_env), "%s", dir);
1117 snprintf(buf, sizeof(buf), "%s/.e-deleteme", buf_env);
1118 if (ecore_file_exists(buf)) ecore_file_recursive_rm(buf_env);
1120 for (i = (_e_main_lvl - 1); i >= 0; i--)
1121 (*_e_main_shutdown_func[i])();
1122 #ifdef OBJECT_HASH_CHECK
1123 e_object_hash_shutdown();
1125 if (errcode < 0) exit(errcode);
1129 _e_main_shutdown_push(int (*func)(void))
1132 if (_e_main_lvl > MAX_LEVEL)
1135 e_error_message_show("WARNING: too many init levels. MAX = %i\n",
1139 _e_main_shutdown_func[_e_main_lvl - 1] = func;
1143 _e_main_parse_arguments(int argc, char **argv)
1148 /* handle some command-line parameters */
1149 for (i = 1; i < argc; i++)
1151 if ((!strcmp(argv[i], "-display")) && (i < (argc - 1)))
1154 e_util_env_set("DISPLAY", argv[i]);
1156 else if ((!strcmp(argv[i], "-fake-xinerama-screen")) && (i < (argc - 1)))
1161 if (sscanf(argv[i], "%ix%i+%i+%i", &w, &h, &x, &y) == 4)
1162 e_xinerama_fake_screen_add(x, y, w, h);
1164 else if (!strcmp(argv[i], "-good"))
1168 printf("LA LA LA\n");
1170 else if (!strcmp(argv[i], "-evil"))
1174 printf("MUHAHAHAHHAHAHAHAHA\n");
1176 else if (!strcmp(argv[i], "-psychotic"))
1180 printf("MUHAHALALALALALALALA\n");
1182 else if ((!strcmp(argv[i], "-profile")) && (i < (argc - 1)))
1185 if (!getenv("E_CONF_PROFILE"))
1186 e_util_env_set("E_CONF_PROFILE", argv[i]);
1188 else if (!strcmp(argv[i], "-i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it"))
1189 really_know = EINA_TRUE;
1190 else if (!strcmp(argv[i], "-locked"))
1192 else if (!strcmp(argv[i], "-nopause"))
1193 e_nopause = EINA_TRUE;
1194 else if ((!strcmp(argv[i], "-h")) ||
1195 (!strcmp(argv[i], "-help")) ||
1196 (!strcmp(argv[i], "--help")))
1201 "\t-display DISPLAY\n"
1202 "\t\tConnect to display named DISPLAY.\n"
1203 "\t\tEG: -display :1.0\n"
1204 "\t-fake-xinerama-screen WxH+X+Y\n"
1205 "\t\tAdd a FAKE xinerama screen (instead of the real ones)\n"
1206 "\t\tgiven the geometry. Add as many as you like. They all\n"
1207 "\t\treplace the real xinerama screens, if any. This can\n"
1208 "\t\tbe used to simulate xinerama.\n"
1209 "\t\tEG: -fake-xinerama-screen 800x600+0+0 -fake-xinerama-screen 800x600+800+0\n"
1210 "\t-profile CONF_PROFILE\n"
1211 "\t\tUse the configuration profile CONF_PROFILE instead of the user selected default or just \"default\".\n"
1217 "\t\tBe psychotic.\n"
1219 "\t\tStart with desklock on, so password will be asked.\n"
1220 "\t-i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it\n"
1221 "\t\tIf you need this help, you don't need this option.\n"
1224 _e_main_shutdown(-1);
1228 /* fix up DISPLAY to be :N.0 if no .screen is in it */
1229 s = getenv("DISPLAY");
1232 char *p, buff[4096];
1234 if (!(p = strrchr(s, ':')))
1236 snprintf(buff, sizeof(buff), "%s:0.0", s);
1237 e_util_env_set("DISPLAY", buff);
1241 if (!strrchr(p, '.'))
1243 snprintf(buff, sizeof(buff), "%s.0", s);
1244 e_util_env_set("DISPLAY", buff);
1249 /* we want to have been launched by enlightenment_start. there is a very */
1250 /* good reason we want to have been launched this way, thus check */
1251 if (!getenv("E_START"))
1253 e_error_message_show(_("You are executing enlightenment directly. This is\n"
1254 "bad. Please do not execute the \"enlightenment\"\n"
1255 "binary. Use the \"enlightenment_start\" launcher. It\n"
1256 "will handle setting up environment variables, paths,\n"
1257 "and launching any other required services etc.\n"
1258 "before enlightenment itself begins running.\n"));
1259 _e_main_shutdown(-1);
1264 _e_main_cb_x_fatal(void *data __UNUSED__)
1266 e_error_message_show("Lost X Connection.\n");
1267 ecore_main_loop_quit();
1270 x_fatal = EINA_TRUE;
1271 if (inloop) longjmp(x_fatal_buff, -99);
1276 _e_main_cb_signal_exit(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__)
1278 /* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */
1279 e_sys_action_do(E_SYS_EXIT, NULL);
1280 return ECORE_CALLBACK_RENEW;
1284 _e_main_cb_signal_hup(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__)
1286 e_sys_action_do(E_SYS_RESTART, NULL);
1287 return ECORE_CALLBACK_RENEW;
1291 _e_main_cb_signal_user(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
1293 Ecore_Event_Signal_User *e = ev;
1297 // E_Action *a = e_action_find("configuration");
1298 // if ((a) && (a->func.go)) a->func.go(NULL, NULL);
1300 else if (e->number == 2)
1302 // comp module has its own handler for this for enabling/disabling fps debug
1304 return ECORE_CALLBACK_RENEW;
1309 _e_main_dirs_init(void)
1312 const char *dirs[] =
1320 "applications/menu",
1321 "applications/menu/favorite",
1322 "applications/menu/all",
1324 "applications/bar/default",
1325 "applications/startup",
1326 "applications/restart",
1327 "applications/trash",
1328 "applications/desk-lock",
1329 "applications/desk-unlock",
1337 base = e_user_dir_get();
1338 if (ecore_file_mksubdirs(base, dirs) != sizeof(dirs) / sizeof(dirs[0]) - 1)
1340 e_error_message_show("Could not create one of the required "
1341 "subdirectories of '%s'\n", base);
1349 _e_main_dirs_shutdown(void)
1355 _e_main_path_init(void)
1359 /* setup data paths */
1360 path_data = e_path_new();
1363 e_error_message_show("Cannot allocate path for path_data\n");
1366 e_prefix_data_concat_static(buf, "data");
1367 e_path_default_path_append(path_data, buf);
1368 e_path_user_path_set(path_data, &(e_config->path_append_data));
1370 /* setup image paths */
1371 path_images = e_path_new();
1374 e_error_message_show("Cannot allocate path for path_images\n");
1377 e_user_dir_concat_static(buf, "/images");
1378 e_path_default_path_append(path_images, buf);
1379 e_prefix_data_concat_static(buf, "data/images");
1380 e_path_default_path_append(path_images, buf);
1381 e_path_user_path_set(path_images, &(e_config->path_append_images));
1383 /* setup font paths */
1384 path_fonts = e_path_new();
1387 e_error_message_show("Cannot allocate path for path_fonts\n");
1390 e_user_dir_concat_static(buf, "/fonts");
1391 e_path_default_path_append(path_fonts, buf);
1392 e_prefix_data_concat_static(buf, "data/fonts");
1393 e_path_default_path_append(path_fonts, buf);
1394 e_path_user_path_set(path_fonts, &(e_config->path_append_fonts));
1396 /* setup icon paths */
1397 path_icons = e_path_new();
1400 e_error_message_show("Cannot allocate path for path_icons\n");
1403 e_user_dir_concat_static(buf, "/icons");
1404 e_path_default_path_append(path_icons, buf);
1405 e_prefix_data_concat_static(buf, "data/icons");
1406 e_path_default_path_append(path_icons, buf);
1407 e_path_user_path_set(path_icons, &(e_config->path_append_icons));
1409 /* setup module paths */
1410 path_modules = e_path_new();
1413 e_error_message_show("Cannot allocate path for path_modules\n");
1416 e_user_dir_concat_static(buf, "/modules");
1417 e_path_default_path_append(path_modules, buf);
1418 snprintf(buf, sizeof(buf), "%s/enlightenment/modules", e_prefix_lib_get());
1419 e_path_default_path_append(path_modules, buf);
1420 /* FIXME: eventually this has to go - moduels should have installers that
1421 * add appropriate install paths (if not installed to user homedir) to
1422 * e's module search dirs
1424 snprintf(buf, sizeof(buf), "%s/enlightenment/modules_extra", e_prefix_lib_get());
1425 e_path_default_path_append(path_modules, buf);
1426 e_path_user_path_set(path_modules, &(e_config->path_append_modules));
1428 /* setup background paths */
1429 path_backgrounds = e_path_new();
1430 if (!path_backgrounds)
1432 e_error_message_show("Cannot allocate path for path_backgrounds\n");
1435 e_user_dir_concat_static(buf, "/backgrounds");
1436 e_path_default_path_append(path_backgrounds, buf);
1437 e_prefix_data_concat_static(buf, "data/backgrounds");
1438 e_path_default_path_append(path_backgrounds, buf);
1439 e_path_user_path_set(path_backgrounds, &(e_config->path_append_backgrounds));
1441 path_messages = e_path_new();
1444 e_error_message_show("Cannot allocate path for path_messages\n");
1447 e_user_dir_concat_static(buf, "/locale");
1448 e_path_default_path_append(path_messages, buf);
1449 e_path_default_path_append(path_messages, e_prefix_locale_get());
1450 e_path_user_path_set(path_messages, &(e_config->path_append_messages));
1456 _e_main_path_shutdown(void)
1460 e_object_del(E_OBJECT(path_data));
1465 e_object_del(E_OBJECT(path_images));
1470 e_object_del(E_OBJECT(path_fonts));
1475 e_object_del(E_OBJECT(path_icons));
1480 e_object_del(E_OBJECT(path_modules));
1481 path_modules = NULL;
1483 if (path_backgrounds)
1485 e_object_del(E_OBJECT(path_backgrounds));
1486 path_backgrounds = NULL;
1490 e_object_del(E_OBJECT(path_messages));
1491 path_messages = NULL;
1497 _e_main_test_formats(void)
1501 Evas_Object *im, *txt;
1503 char buff[PATH_MAX];
1505 if (e_config->show_splash)
1506 e_init_status_set(_("Testing Format Support"));
1508 if (!(ee = ecore_evas_buffer_new(1, 1)))
1510 e_error_message_show(_("Enlightenment found Evas can't create a buffer canvas. Please check\n"
1511 "Evas has Software Buffer engine support.\n"));
1512 _e_main_shutdown(-1);
1514 evas = ecore_evas_get(ee);
1515 im = evas_object_image_add(evas);
1517 e_prefix_data_concat_static(buff, "data/images/test.svg");
1518 evas_object_image_file_set(im, buff, NULL);
1519 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1521 e_error_message_show(_("Enlightenment found Evas can't load SVG files. "
1522 "Check Evas has SVG loader support.\n"));
1525 efreet_icon_extension_add(".svg");
1527 e_prefix_data_concat_static(buff, "data/images/test.jpg");
1528 evas_object_image_file_set(im, buff, NULL);
1529 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1531 e_error_message_show(_("Enlightenment found Evas can't load JPEG files. "
1532 "Check Evas has JPEG loader support.\n"));
1533 _e_main_shutdown(-1);
1535 efreet_icon_extension_add(".jpg");
1537 e_prefix_data_concat_static(buff, "data/images/test.png");
1538 evas_object_image_file_set(im, buff, NULL);
1539 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1541 e_error_message_show(_("Enlightenment found Evas can't load PNG files. "
1542 "Check Evas has PNG loader support.\n"));
1543 _e_main_shutdown(-1);
1545 efreet_icon_extension_add(".png");
1547 e_prefix_data_concat_static(buff, "data/images/test.edj");
1548 evas_object_image_file_set(im, buff, "images/0");
1549 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1551 e_error_message_show(_("Enlightenment found Evas can't load EET files. "
1552 "Check Evas has EET loader support.\n"));
1553 _e_main_shutdown(-1);
1555 efreet_icon_extension_add(".edj");
1557 evas_object_del(im);
1559 txt = evas_object_text_add(evas);
1560 evas_object_text_font_set(txt, "Sans", 10);
1561 evas_object_text_text_set(txt, "Hello");
1562 evas_object_geometry_get(txt, NULL, NULL, &tw, &th);
1563 if ((tw <= 0) && (th <= 0))
1565 e_error_message_show(_("Enlightenment found Evas can't load the 'Sans' font. Check Evas has fontconfig\n"
1566 "support and system fontconfig defines a 'Sans' font.\n"));
1567 _e_main_shutdown(-1);
1569 evas_object_del(txt);
1570 ecore_evas_free(ee);
1574 _e_main_screens_init(void)
1576 TS("\tscreens: manager");
1577 if (!e_manager_init()) return 0;
1579 TS("\tscreens: client");
1580 if (!e_client_init()) return 0;
1581 TS("\tscreens: win");
1582 if (!e_win_init()) return 0;
1583 #ifndef HAVE_WAYLAND_ONLY
1587 e_error_message_show(_("Enlightenment cannot setup XKB Keyboard layouts.\n"));
1588 _e_main_shutdown(-1);
1590 TS("E_Xkb Init Done");
1593 TS("Compositor Init");
1596 e_error_message_show(_("Enlightenment cannot create a compositor.\n"));
1597 _e_main_shutdown(-1);
1600 _e_main_desk_restore();
1602 #ifndef HAVE_WAYLAND_ONLY
1603 if (e_config->show_splash)
1604 e_init_status_set(_("Setup DND"));
1608 e_error_message_show(_("Enlightenment cannot set up its dnd system.\n"));
1609 _e_main_shutdown(-1);
1611 TS("E_Dnd Init Done");
1612 _e_main_shutdown_push(e_dnd_shutdown);
1619 _e_main_screens_shutdown(void)
1625 e_client_shutdown();
1626 e_exehist_shutdown();
1627 e_backlight_shutdown();
1632 e_manager_shutdown();
1637 _e_main_desk_save(void)
1640 char env[1024], name[1024];
1643 EINA_LIST_FOREACH(e_comp->zones, l, zone)
1645 snprintf(name, sizeof(name), "DESK_%d_%d", e_comp->num, zone->num);
1646 snprintf(env, sizeof(env), "%d,%d", zone->desk_x_current, zone->desk_y_current);
1647 e_util_env_set(name, env);
1652 _e_main_desk_restore(void)
1659 EINA_LIST_FOREACH(e_comp->zones, l, zone)
1665 snprintf(name, sizeof(name), "DESK_%d_%d", e_comp->num, zone->num);
1668 snprintf(buf_e, sizeof(buf_e), "%s", env);
1669 if (!sscanf(buf_e, "%d,%d", &desk_x, &desk_y)) continue;
1670 desk = e_desk_at_xy_get(zone, desk_x, desk_y);
1671 if (!desk) continue;
1677 _e_main_efreet_paths_init(void)
1681 if ((list = efreet_icon_extra_list_get()))
1683 char buff[PATH_MAX];
1685 e_user_dir_concat_static(buff, "icons");
1686 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1687 e_prefix_data_concat_static(buff, "data/icons");
1688 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1693 _e_main_modules_load_after(void *d EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED)
1695 e_int_config_modules(NULL, NULL);
1696 E_FREE_FUNC(mod_init_end, ecore_event_handler_del);
1697 return ECORE_CALLBACK_RENEW;
1701 _e_main_modules_load(Eina_Bool safe_mode)
1704 e_module_all_load();
1710 crashmodule = getenv("E_MODULE_LOAD");
1711 if (crashmodule) m = e_module_new(crashmodule);
1713 if ((crashmodule) && (m))
1715 e_module_disable(m);
1716 e_object_del(E_OBJECT(m));
1718 e_error_message_show
1719 (_("Enlightenment crashed early on start and has<br>"
1720 "been restarted. There was an error loading the<br>"
1721 "module named: %s. This module has been disabled<br>"
1722 "and will not be loaded."), crashmodule);
1724 (_("Enlightenment crashed early on start and has been restarted"),
1725 _("Enlightenment crashed early on start and has been restarted.<br>"
1726 "There was an error loading the module named: %s<br><br>"
1727 "This module has been disabled and will not be loaded."), crashmodule);
1728 e_module_all_load();
1732 e_error_message_show
1733 (_("Enlightenment crashed early on start and has<br>"
1734 "been restarted. All modules have been disabled<br>"
1735 "and will not be loaded to help remove any problem<br>"
1736 "modules from your configuration. The module<br>"
1737 "configuration dialog should let you select your<br>"
1738 "modules again.\n"));
1740 (_("Enlightenment crashed early on start and has been restarted"),
1741 _("Enlightenment crashed early on start and has been restarted.<br>"
1742 "All modules have been disabled and will not be loaded to help<br>"
1743 "remove any problem modules from your configuration.<br><br>"
1744 "The module configuration dialog should let you select your<br>"
1747 mod_init_end = ecore_event_handler_add(E_EVENT_MODULE_INIT_END, _e_main_modules_load_after, NULL);
1752 _e_main_cb_idle_before(void *data __UNUSED__)
1754 e_menu_idler_before();
1755 e_client_idler_before();
1756 e_pointer_idler_before();
1758 return ECORE_CALLBACK_RENEW;
1762 _e_main_cb_idle_after(void *data __UNUSED__)
1764 static int first_idle = 1;
1769 #ifdef E_RELEASE_BUILD
1774 e_precache_end = EINA_TRUE;
1777 if (first_idle++ < 60)
1781 e_precache_end = EINA_TRUE;
1785 return ECORE_CALLBACK_RENEW;
1789 _e_main_cb_startup_fake_end(void *data __UNUSED__)
1792 return ECORE_CALLBACK_CANCEL;