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_x_flusher(void *data __UNUSED__);
88 static Eina_Bool _e_main_cb_idle_before(void *data __UNUSED__);
89 static Eina_Bool _e_main_cb_idle_after(void *data __UNUSED__);
90 static Eina_Bool _e_main_cb_startup_fake_end(void *data __UNUSED__);
93 static Eina_Bool really_know = EINA_FALSE;
94 static Eina_Bool locked = EINA_FALSE;
95 static Eina_Bool inloop = EINA_FALSE;
96 static jmp_buf x_fatal_buff;
98 static int _e_main_lvl = 0;
99 static int(*_e_main_shutdown_func[MAX_LEVEL]) (void);
101 static Ecore_Idle_Enterer *_idle_before = NULL;
102 static Ecore_Idle_Enterer *_idle_after = NULL;
103 static Ecore_Idle_Enterer *_idle_flush = NULL;
105 static Ecore_Event_Handler *mod_init_end = NULL;
107 /* external variables */
108 EAPI Eina_Bool e_precache_end = EINA_FALSE;
109 EAPI Eina_Bool x_fatal = EINA_FALSE;
110 EAPI Eina_Bool good = EINA_FALSE;
111 EAPI Eina_Bool evil = EINA_FALSE;
112 EAPI Eina_Bool starting = EINA_TRUE;
113 EAPI Eina_Bool stopping = EINA_FALSE;
114 EAPI Eina_Bool restart = EINA_FALSE;
115 EAPI Eina_Bool e_nopause = EINA_FALSE;
116 EINTERN const char *e_first_frame = NULL;
117 EINTERN double e_first_frame_start_time = -1;
120 _xdg_check_str(const char *env, const char *str)
126 for (p = strstr(env, str); p; p++, p = strstr(p, str))
128 if ((!p[len]) || (p[len] == ':')) return EINA_TRUE;
134 _xdg_data_dirs_augment(void)
137 const char *p = e_prefix_get();
138 char newpath[4096], buf[4096];
142 s = getenv("XDG_DATA_DIRS");
145 Eina_Bool pfxdata, pfx;
147 pfxdata = !_xdg_check_str(s, e_prefix_data_get());
148 snprintf(newpath, sizeof(newpath), "%s/share", p);
149 pfx = !_xdg_check_str(s, newpath);
152 snprintf(buf, sizeof(buf), "%s%s%s%s%s",
153 pfxdata ? e_prefix_data_get() : "",
158 e_util_env_set("XDG_DATA_DIRS", buf);
163 snprintf(buf, sizeof(buf), "%s:%s/share:/usr/local/share:/usr/share", e_prefix_data_get(), p);
164 e_util_env_set("XDG_DATA_DIRS", buf);
167 s = getenv("XDG_CONFIG_DIRS");
168 snprintf(newpath, sizeof(newpath), "%s/etc/xdg", p);
171 if (!_xdg_check_str(s, newpath))
173 snprintf(buf, sizeof(buf), "%s:%s", newpath, s);
174 e_util_env_set("XDG_CONFIG_DIRS", buf);
179 snprintf(buf, sizeof(buf), "%s:/etc/xdg", newpath);
180 e_util_env_set("XDG_CONFIG_DIRS", buf);
183 if (!getenv("XDG_RUNTIME_DIR"))
187 snprintf(buf, sizeof(buf), "/tmp/xdg-XXXXXX");
189 if (!dir) dir = "/tmp";
192 e_util_env_set("XDG_RUNTIME_DIR", dir);
193 snprintf(buf, sizeof(buf), "%s/.e-deleteme", dir);
194 ecore_file_mkdir(buf);
198 /* set menu prefix so we get our e menu */
199 if (!getenv("XDG_MENU_PREFIX"))
201 e_util_env_set("XDG_MENU_PREFIX", "e-");
206 _e_main_shelf_init_job(void *data EINA_UNUSED)
208 e_shelf_config_update();
209 return ECORE_CALLBACK_CANCEL;
212 /* externally accessible functions */
214 main(int argc, char **argv)
216 Eina_Bool nostartup = EINA_FALSE;
217 Eina_Bool safe_mode = EINA_FALSE;
218 Eina_Bool after_restart = EINA_FALSE;
219 Eina_Bool waslocked = EINA_FALSE;
220 double t = 0.0, tstart = 0.0;
221 char *s = NULL, buff[32];
222 struct sigaction action;
225 # ifdef PR_SET_PTRACER
226 # ifdef PR_SET_PTRACER_ANY
227 prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY);
233 t0 = t1 = t2 = ecore_time_unix_get();
237 /* trap deadly bug signals and allow some form of sane recovery */
238 /* or ability to gdb attach and debug at this point - better than your */
239 /* wm/desktop vanishing and not knowing what happened */
240 if (!getenv("NOTIFY_SOCKET"))
243 action.sa_sigaction = e_sigseg_act;
244 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
245 sigemptyset(&action.sa_mask);
246 sigaction(SIGSEGV, &action, NULL);
248 action.sa_sigaction = e_sigill_act;
249 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
250 sigemptyset(&action.sa_mask);
251 sigaction(SIGILL, &action, NULL);
253 action.sa_sigaction = e_sigfpe_act;
254 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
255 sigemptyset(&action.sa_mask);
256 sigaction(SIGFPE, &action, NULL);
258 #ifndef HAVE_WAYLAND_ONLY
259 action.sa_sigaction = e_sigbus_act;
260 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
261 sigemptyset(&action.sa_mask);
262 sigaction(SIGBUS, &action, NULL);
265 action.sa_sigaction = e_sigabrt_act;
266 action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO;
267 sigemptyset(&action.sa_mask);
268 sigaction(SIGABRT, &action, NULL);
269 TS("Signal Trap Done");
272 t = ecore_time_unix_get();
273 s = getenv("E_START_TIME");
274 if ((s) && (!getenv("E_RESTART_OK")))
277 if ((t - tstart) < 5.0) safe_mode = EINA_TRUE;
280 snprintf(buff, sizeof(buff), "%1.1f", tstart);
281 e_util_env_set("E_START_TIME", buff);
283 if (getenv("E_START_MTRACK"))
284 e_util_env_set("MTRACK", NULL);
288 e_error_message_show(_("Enlightenment cannot initialize Eina!\n"));
289 _e_main_shutdown(-1);
291 _e_main_shutdown_push(eina_shutdown);
292 #ifdef OBJECT_HASH_CHECK
293 e_object_hash_init();
297 e_error_message_show(_("Enlightenment could not create a logging domain!\n"));
298 _e_main_shutdown(-1);
304 t1 = ecore_time_unix_get(); \
305 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, x); \
309 TS("Eina Init Done");
310 _e_main_shutdown_push(e_log_shutdown);
312 TS("Determine Prefix");
313 if (!e_prefix_determine(argv[0]))
316 "ERROR: Enlightenment cannot determine it's installed\n"
317 " prefix from the system or argv[0].\n"
318 " This is because it is not on Linux AND has been\n"
319 " executed strangely. This is unusual.\n");
321 TS("Determine Prefix Done");
323 /* for debugging by redirecting stdout of e to a log file to tail */
324 setvbuf(stdout, NULL, _IONBF, 0);
326 TS("Environment Variables");
327 if (getenv("E_RESTART")) after_restart = EINA_TRUE;
328 if (getenv("DESKTOP_STARTUP_ID"))
329 e_util_env_set("DESKTOP_STARTUP_ID", NULL);
330 e_util_env_set("E_RESTART_OK", NULL);
331 e_util_env_set("PANTS", "ON");
332 e_util_env_set("DESKTOP", "Enlightenment-0.17.0");
333 TS("Environment Variables Done");
335 TS("Parse Arguments");
336 _e_main_parse_arguments(argc, argv);
337 TS("Parse Arguments Done");
339 /*** Initialize Core EFL Libraries We Need ***/
344 e_error_message_show(_("Enlightenment cannot initialize Eet!\n"));
345 _e_main_shutdown(-1);
348 _e_main_shutdown_push(eet_shutdown);
353 e_error_message_show(_("Enlightenment cannot initialize Ecore!\n"));
354 _e_main_shutdown(-1);
356 TS("Ecore Init Done");
357 _e_main_shutdown_push(ecore_shutdown);
359 e_first_frame = getenv("E_FIRST_FRAME");
360 if (e_first_frame && (!e_first_frame[0]))
361 e_first_frame = NULL;
363 e_first_frame_start_time = ecore_time_get();
368 e_error_message_show(_("Enlightenment cannot initialize EIO!\n"));
369 _e_main_shutdown(-1);
372 _e_main_shutdown_push(eio_shutdown);
374 ecore_app_args_set(argc, (const char **)argv);
376 TS("Ecore Event Handlers");
377 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT,
378 _e_main_cb_signal_exit, NULL))
380 e_error_message_show(_("Enlightenment cannot set up an exit signal handler.\n"
381 "Perhaps you are out of memory?"));
382 _e_main_shutdown(-1);
384 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_HUP,
385 _e_main_cb_signal_hup, NULL))
387 e_error_message_show(_("Enlightenment cannot set up a HUP signal handler.\n"
388 "Perhaps you are out of memory?"));
389 _e_main_shutdown(-1);
391 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
392 _e_main_cb_signal_user, NULL))
394 e_error_message_show(_("Enlightenment cannot set up a USER signal handler.\n"
395 "Perhaps you are out of memory?"));
396 _e_main_shutdown(-1);
398 TS("Ecore Event Handlers Done");
400 TS("Ecore_File Init");
401 if (!ecore_file_init())
403 e_error_message_show(_("Enlightenment cannot initialize Ecore_File!\n"));
404 _e_main_shutdown(-1);
406 TS("Ecore_File Init Done");
407 _e_main_shutdown_push(ecore_file_shutdown);
409 TS("Ecore_Con Init");
410 if (!ecore_con_init())
412 e_error_message_show(_("Enlightenment cannot initialize Ecore_Con!\n"));
413 _e_main_shutdown(-1);
415 TS("Ecore_Con Init Done");
416 _e_main_shutdown_push(ecore_con_shutdown);
418 TS("Ecore_Ipc Init");
419 if (!ecore_ipc_init())
421 e_error_message_show(_("Enlightenment cannot initialize Ecore_Ipc!\n"));
422 _e_main_shutdown(-1);
424 TS("Ecore_Ipc Init Done");
425 _e_main_shutdown_push(ecore_ipc_shutdown);
427 _idle_before = ecore_idle_enterer_before_add(_e_main_cb_idle_before, NULL);
429 _xdg_data_dirs_augment();
431 TS("Ecore_Evas Init");
432 if (!ecore_evas_init())
434 e_error_message_show(_("Enlightenment cannot initialize Ecore_Evas!\n"));
435 _e_main_shutdown(-1);
437 TS("Ecore_Evas Init Done");
438 // _e_main_shutdown_push(ecore_evas_shutdown);
440 TS("Elementary Init");
441 if (!elm_init(argc, argv))
443 e_error_message_show(_("Enlightenment cannot initialize Elementary!\n"));
444 _e_main_shutdown(-1);
446 TS("Elementary Init Done");
447 //_e_main_shutdown_push(elm_shutdown);
452 e_error_message_show(_("Enlightenment cannot initialize Emotion!\n"));
453 _e_main_shutdown(-1);
455 TS("Emotion Init Done");
456 _e_main_shutdown_push((void *)emotion_shutdown);
458 /* e doesn't sync to compositor - it should be one */
459 ecore_evas_app_comp_sync_set(0);
461 TS("Ecore_Evas Engine Check");
462 #ifdef HAVE_WAYLAND_ONLY
463 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_WAYLAND_SHM))
465 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Wayland SHM\n"
466 "rendering in Evas. Please check your installation of Evas and\n"
467 "Ecore and check they support the Wayland SHM rendering engine."));
468 _e_main_shutdown(-1);
471 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_XCB))
473 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_XLIB))
475 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Software X11\n"
476 "rendering in Evas. Please check your installation of Evas and\n"
477 "Ecore and check they support the Software X11 rendering engine."));
478 _e_main_shutdown(-1);
482 if (!ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_SOFTWARE_BUFFER))
484 e_error_message_show(_("Enlightenment found ecore_evas doesn't support the Software Buffer\n"
485 "rendering in Evas. Please check your installation of Evas and\n"
486 "Ecore and check they support the Software Buffer rendering engine."));
487 _e_main_shutdown(-1);
489 TS("Ecore_Evas Engine Check Done");
494 e_error_message_show(_("Enlightenment cannot initialize Edje!\n"));
495 _e_main_shutdown(-1);
497 TS("Edje Init Done");
498 _e_main_shutdown_push(edje_shutdown);
501 /*** Initialize E Subsystems We Need ***/
506 e_error_message_show(_("Enlightenment cannot initialize E_Intl!\n"));
507 _e_main_shutdown(-1);
509 TS("E Intl Init Done");
510 _e_main_shutdown_push(e_intl_shutdown);
512 #ifndef HAVE_WAYLAND_ONLY
513 /* init white box of death alert */
517 e_error_message_show(_("Enlightenment cannot initialize its emergency alert system.\n"
518 "Have you set your DISPLAY variable?"));
519 _e_main_shutdown(-1);
521 TS("E_Alert Init Done");
522 _e_main_shutdown_push(e_alert_shutdown);
525 TS("E_Configure Init");
527 TS("E_Configure Init Done");
529 TS("E Directories Init");
530 /* setup directories we will be using for configurations storage etc. */
531 if (!_e_main_dirs_init())
533 e_error_message_show(_("Enlightenment cannot create directories in your home directory.\n"
534 "Perhaps you have no home directory or the disk is full?"));
535 _e_main_shutdown(-1);
537 TS("E Directories Init Done");
538 _e_main_shutdown_push(_e_main_dirs_shutdown);
540 TS("E_Filereg Init");
541 if (!e_filereg_init())
543 e_error_message_show(_("Enlightenment cannot set up its file registry system.\n"));
544 _e_main_shutdown(-1);
546 TS("E_Filereg Init Done");
547 _e_main_shutdown_push(e_filereg_shutdown);
550 if (!e_config_init())
552 e_error_message_show(_("Enlightenment cannot set up its config system.\n"));
553 _e_main_shutdown(-1);
555 TS("E_Config Init Done");
556 _e_main_shutdown_push(e_config_shutdown);
561 e_error_message_show(_("Enlightenment cannot set up its environment.\n"));
562 _e_main_shutdown(-1);
564 TS("E_Env Init Done");
565 _e_main_shutdown_push(e_env_shutdown);
567 efreet_desktop_environment_set(e_config->desktop_environment);
568 e_util_env_set("E_ICON_THEME", e_config->icon_theme);
569 ecore_exe_run_priority_set(e_config->priority);
570 locked |= e_config->desklock_start_locked;
572 s = getenv("E_DESKLOCK_LOCKED");
573 if ((s) && (!strcmp(s, "locked"))) waslocked = EINA_TRUE;
576 if (!_e_main_path_init())
578 e_error_message_show(_("Enlightenment cannot set up paths for finding files.\n"
579 "Perhaps you are out of memory?"));
580 _e_main_shutdown(-1);
582 TS("E Paths Init Done");
583 _e_main_shutdown_push(_e_main_path_shutdown);
586 if (!e_ipc_init()) _e_main_shutdown(-1);
587 TS("E_Ipc Init Done");
588 _e_main_shutdown_push(e_ipc_shutdown);
590 edje_frametime_set(1.0 / e_config->framerate);
595 e_error_message_show(_("Enlightenment cannot set up its font system.\n"));
596 _e_main_shutdown(-1);
598 TS("E_Font Init Done");
599 _e_main_shutdown_push(e_font_shutdown);
603 TS("E_Font Apply Done");
608 e_error_message_show(_("Enlightenment cannot set up its theme system.\n"));
609 _e_main_shutdown(-1);
611 TS("E_Theme Init Done");
612 _e_main_shutdown_push(e_theme_shutdown);
614 TS("E_Moveresize Init");
616 TS("E_Moveresize Init Done");
617 _e_main_shutdown_push(e_moveresize_shutdown);
619 if (e_config->show_splash)
620 e_init_status_set(_("Setup Message Bus"));
623 _e_main_shutdown_push(e_msgbus_shutdown);
624 TS("E_Msgbus Init Done");
629 e_error_message_show(_("Enlightenment cannot initialize the FDO desktop system.\n"
630 "Perhaps you lack permissions on ~/.cache/efreet or are\n"
631 "out of memory or disk space?"));
632 _e_main_shutdown(-1);
634 TS("Efreet Init Done");
635 _e_main_shutdown_push(efreet_shutdown);
637 if (e_config->show_splash)
638 e_init_status_set(_("Starting International Support"));
639 TS("E_Intl Post Init");
640 if (!e_intl_post_init())
642 e_error_message_show(_("Enlightenment cannot set up its intl system.\n"));
643 _e_main_shutdown(-1);
645 TS("E_Intl Post Init Done");
646 _e_main_shutdown_push(e_intl_post_shutdown);
648 e_screensaver_preinit();
650 if (e_config->show_splash)
651 e_init_status_set(_("Setup Actions"));
652 TS("E_Actions Init");
653 if (!e_actions_init())
655 e_error_message_show(_("Enlightenment cannot set up its actions system.\n"));
656 _e_main_shutdown(-1);
658 TS("E_Actions Init Done");
659 _e_main_shutdown_push(e_actions_shutdown);
661 /* these just add event handlers and can't fail
662 * timestamping them is dumb.
668 if (e_config->show_splash)
669 e_init_status_set(_("Setup Powersave Modes"));
670 TS("E_Powersave Init");
671 if (!e_powersave_init())
673 e_error_message_show(_("Enlightenment cannot set up its powersave modes.\n"));
674 _e_main_shutdown(-1);
676 TS("E_Powersave Init Done");
677 _e_main_shutdown_push(e_powersave_shutdown);
679 if (e_config->show_splash)
680 e_init_status_set(_("Setup Screensaver"));
681 TS("E_Screensaver Init");
682 if (!e_screensaver_init())
684 e_error_message_show(_("Enlightenment cannot configure the X screensaver.\n"));
685 _e_main_shutdown(-1);
687 TS("E_Screensaver Init Done");
688 _e_main_shutdown_push(e_screensaver_shutdown);
690 if (e_config->show_splash)
691 e_init_status_set(_("Setup Screens"));
693 if (!_e_main_screens_init())
695 e_error_message_show(_("Enlightenment set up window management for all the screens on your system\n"
696 "failed. Perhaps another window manager is running?\n"));
697 _e_main_shutdown(-1);
699 TS("Screens Init Done");
700 _e_main_shutdown_push(_e_main_screens_shutdown);
701 e_screensaver_force_update();
703 TS("E_Pointer Init");
704 if (!e_pointer_init())
706 e_error_message_show(_("Enlightenment cannot set up its pointer system.\n"));
707 _e_main_shutdown(-1);
709 TS("E_Pointer Init Done");
710 _e_main_shutdown_push(e_pointer_shutdown);
716 e_error_message_show(_("Enlightenment cannot set up its scale system.\n"));
717 _e_main_shutdown(-1);
719 TS("E_Scale Init Done");
720 _e_main_shutdown_push(e_scale_shutdown);
722 if (e_config->show_splash)
727 e_error_message_show(_("Enlightenment cannot set up its init screen.\n"));
728 _e_main_shutdown(-1);
730 TS("E_Splash Init Done");
731 _e_main_shutdown_push(e_init_shutdown);
733 if (!((!e_config->show_splash) || (after_restart)))
738 TS("Test File Format Support");
739 _e_main_test_formats();
740 TS("Test File Format Support Done");
744 efreet_icon_extension_add(".svg");
745 efreet_icon_extension_add(".jpg");
746 efreet_icon_extension_add(".png");
747 efreet_icon_extension_add(".edj");
750 if (e_config->show_splash)
751 e_init_status_set(_("Setup ACPI"));
754 TS("E_Acpi Init Done");
755 _e_main_shutdown_push(e_acpi_shutdown);
757 if (e_config->show_splash)
758 e_init_status_set(_("Setup Backlight"));
759 TS("E_Backlight Init");
760 if (!e_backlight_init())
762 e_error_message_show(_("Enlightenment cannot configure the backlight.\n"));
763 _e_main_shutdown(-1);
765 TS("E_Backlight Init Done");
767 if (e_config->show_splash)
768 e_init_status_set(_("Setup DPMS"));
772 e_error_message_show(_("Enlightenment cannot configure the DPMS settings.\n"));
773 _e_main_shutdown(-1);
775 TS("E_Dpms Init Done");
776 _e_main_shutdown_push(e_dpms_shutdown);
778 if (e_config->show_splash)
779 e_init_status_set(_("Setup Desklock"));
780 TS("E_Desklock Init");
781 if (!e_desklock_init())
783 e_error_message_show(_("Enlightenment cannot set up its desk locking system.\n"));
784 _e_main_shutdown(-1);
786 TS("E_Desklock Init Done");
787 _e_main_shutdown_push(e_desklock_shutdown);
789 if (waslocked || (locked && ((!after_restart) || (!getenv("E_DESKLOCK_UNLOCKED")))))
790 e_desklock_show(EINA_TRUE);
792 if (e_config->show_splash)
793 e_init_status_set(_("Setup Paths"));
795 _e_main_efreet_paths_init();
796 TS("Efreet Paths Done");
798 if (e_config->show_splash)
799 e_init_status_set(_("Setup System Controls"));
803 e_error_message_show(_("Enlightenment cannot initialize the System Command system.\n"));
804 _e_main_shutdown(-1);
806 TS("E_Sys Init Done");
807 _e_main_shutdown_push(e_sys_shutdown);
809 if (e_config->show_splash)
810 e_init_status_set(_("Setup Execution System"));
814 e_error_message_show(_("Enlightenment cannot set up its exec system.\n"));
815 _e_main_shutdown(-1);
817 TS("E_Exec Init Done");
821 TS("E_Comp Freeze Done");
823 if (e_config->show_splash)
824 e_init_status_set(_("Setup Filemanager"));
828 e_error_message_show(_("Enlightenment cannot initialize the File manager.\n"));
829 _e_main_shutdown(-1);
831 TS("E_Fm2 Init Done");
832 _e_main_shutdown_push(e_fm2_shutdown);
834 if (e_config->show_splash)
835 e_init_status_set(_("Setup Message System"));
839 e_error_message_show(_("Enlightenment cannot set up its msg system.\n"));
840 _e_main_shutdown(-1);
842 TS("E_Msg Init Done");
843 _e_main_shutdown_push(e_msg_shutdown);
845 if (e_config->show_splash)
846 e_init_status_set(_("Setup Grab Input Handling"));
847 TS("E_Grabinput Init");
848 if (!e_grabinput_init())
850 e_error_message_show(_("Enlightenment cannot set up its grab input handling system.\n"));
851 _e_main_shutdown(-1);
853 TS("E_Grabinput Init Done");
854 _e_main_shutdown_push(e_grabinput_shutdown);
856 if (e_config->show_splash)
857 e_init_status_set(_("Setup Modules"));
859 if (!e_module_init())
861 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
862 _e_main_shutdown(-1);
864 TS("E_Module Init Done");
865 _e_main_shutdown_push(e_module_shutdown);
867 if (e_config->show_splash)
868 e_init_status_set(_("Setup Remembers"));
869 TS("E_Remember Init");
870 if (!e_remember_init(after_restart ? E_STARTUP_RESTART : E_STARTUP_START))
872 e_error_message_show(_("Enlightenment cannot setup remember settings.\n"));
873 _e_main_shutdown(-1);
875 TS("E_Remember Init Done");
876 _e_main_shutdown_push(e_remember_shutdown);
878 if (e_config->show_splash)
879 e_init_status_set(_("Setup Color Classes"));
880 TS("E_Color_Class Init");
881 if (!e_color_class_init())
883 e_error_message_show(_("Enlightenment cannot set up its color class system.\n"));
884 _e_main_shutdown(-1);
886 TS("E_Color_Class Init Done");
887 _e_main_shutdown_push(e_color_class_shutdown);
889 if (e_config->show_splash)
890 e_init_status_set(_("Setup Gadcon"));
892 if (!e_gadcon_init())
894 e_error_message_show(_("Enlightenment cannot set up its gadget control system.\n"));
895 _e_main_shutdown(-1);
897 TS("E_Gadcon Init Done");
898 _e_main_shutdown_push(e_gadcon_shutdown);
900 if (e_config->show_splash)
901 e_init_status_set(_("Setup Toolbars"));
902 TS("E_Toolbar Init");
903 if (!e_toolbar_init())
905 e_error_message_show(_("Enlightenment cannot set up its toolbars.\n"));
906 _e_main_shutdown(-1);
908 TS("E_Toolbar Init Done");
909 _e_main_shutdown_push(e_toolbar_shutdown);
911 if (e_config->show_splash)
912 e_init_status_set(_("Setup Wallpaper"));
916 e_error_message_show(_("Enlightenment cannot set up its desktop background system.\n"));
917 _e_main_shutdown(-1);
919 TS("E_Bg Init Done");
920 _e_main_shutdown_push(e_bg_shutdown);
922 if (e_config->show_splash)
923 e_init_status_set(_("Setup Mouse"));
925 if (!e_mouse_update())
927 e_error_message_show(_("Enlightenment cannot configure the mouse settings.\n"));
928 _e_main_shutdown(-1);
930 TS("E_Mouse Init Done");
932 if (e_config->show_splash)
933 e_init_status_set(_("Setup Bindings"));
934 TS("E_Bindings Init");
935 if (!e_bindings_init())
937 e_error_message_show(_("Enlightenment cannot set up its bindings system.\n"));
938 _e_main_shutdown(-1);
940 TS("E_Bindings Init Done");
941 _e_main_shutdown_push(e_bindings_shutdown);
943 if (e_config->show_splash)
944 e_init_status_set(_("Setup Thumbnailer"));
948 e_error_message_show(_("Enlightenment cannot initialize the Thumbnailing system.\n"));
949 _e_main_shutdown(-1);
951 TS("E_Thumb Init Done");
952 _e_main_shutdown_push(e_thumb_shutdown);
957 e_error_message_show(_("Enlightenment cannot initialize the Icon Cache system.\n"));
958 _e_main_shutdown(-1);
960 TS("E_Icon Init Done");
961 _e_main_shutdown_push(e_icon_shutdown);
964 if (!e_update_init())
966 e_error_message_show(_("Enlightenment cannot initialize the Update system.\n"));
967 _e_main_shutdown(-1);
969 TS("E_Update Init Done");
970 _e_main_shutdown_push(e_update_shutdown);
972 if (e_config->show_splash)
973 e_init_status_set(_("Setup Desktop Environment"));
974 TS("E_Deskenv Init");
975 if (!e_deskenv_init())
977 e_error_message_show(_("Enlightenment cannot initialize its desktop environment.\n"));
978 _e_main_shutdown(-1);
980 TS("E_Deskenv Init Done");
981 _e_main_shutdown_push(e_deskenv_shutdown);
983 if (e_config->show_splash)
984 e_init_status_set(_("Setup File Ordering"));
988 e_error_message_show(_("Enlightenment cannot set up its order file system.\n"));
989 _e_main_shutdown(-1);
991 TS("E_Order Init Done");
992 _e_main_shutdown_push(e_order_shutdown);
994 TS("Add Idler For X Flush");
995 _idle_flush = ecore_idle_enterer_add(_e_main_cb_x_flusher, NULL);
996 TS("Add Idler For X Flush Done");
998 TS("E_Manager Keys Grab");
999 e_managers_keys_grab();
1000 TS("E_Manager Keys Grab Done");
1002 if (e_config->show_splash)
1003 e_init_status_set(_("Load Modules"));
1005 _e_main_modules_load(safe_mode);
1006 TS("Load Modules Done");
1008 TS("Run Startup Apps");
1012 e_startup(E_STARTUP_RESTART);
1014 e_startup(E_STARTUP_START);
1016 TS("Run Startup Apps Done");
1018 if (e_config->show_splash && (!after_restart))
1019 ecore_timer_add(2.0, _e_main_cb_startup_fake_end, NULL);
1023 TS("E_Comp Thaw Done");
1029 TS("E_Test_Helper Init");
1030 e_test_helper_init();
1031 _e_main_shutdown_push(e_test_helper_shutdown);
1032 TS("E_Test_Helper Done");
1034 TS("E_INFO_SERVER Init");
1035 e_info_server_init();
1036 _e_main_shutdown_push(e_info_server_shutdown);
1037 TS("E_INFO_SERVER Done");
1039 if (e_config->show_splash)
1040 e_init_status_set(_("Setup Shelves"));
1042 if (!e_shelf_init())
1044 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
1045 _e_main_shutdown(-1);
1047 TS("E_Shelf Init Done");
1049 ecore_idle_enterer_before_add(_e_main_shelf_init_job, NULL);
1051 _idle_after = ecore_idle_enterer_add(_e_main_cb_idle_after, NULL);
1053 if (e_config->show_splash)
1054 e_init_status_set(_("Almost Done"));
1056 starting = EINA_FALSE;
1059 e_util_env_set("E_RESTART", "1");
1061 TS("MAIN LOOP AT LAST");
1062 if (!setjmp(x_fatal_buff))
1063 ecore_main_loop_begin();
1065 CRI("FATAL: X Died. Connection gone. Abbreviated Shutdown\n");
1067 inloop = EINA_FALSE;
1068 stopping = EINA_TRUE;
1070 //if (!x_fatal) e_canvas_idle_flush();
1072 e_config_save_flush();
1073 _e_main_desk_save();
1074 e_remember_internal_save();
1075 e_comp_internal_save();
1077 _e_main_shutdown(0);
1081 e_util_env_set("E_RESTART_OK", "1");
1082 if (getenv("E_START_MTRACK"))
1083 e_util_env_set("MTRACK", "track");
1084 ecore_app_restart();
1087 e_prefix_shutdown();
1093 e_main_ts(const char *str)
1096 t1 = ecore_time_unix_get();
1097 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, str);
1103 /* local functions */
1105 _e_main_shutdown(int errcode)
1111 printf("E: Begin Shutdown Procedure!\n");
1113 if (_idle_before) ecore_idle_enterer_del(_idle_before);
1114 _idle_before = NULL;
1115 if (_idle_after) ecore_idle_enterer_del(_idle_after);
1117 if (_idle_flush) ecore_idle_enterer_del(_idle_flush);
1120 dir = getenv("XDG_RUNTIME_DIR");
1123 char buf_env[PATH_MAX];
1124 snprintf(buf_env, sizeof(buf_env), "%s", dir);
1125 snprintf(buf, sizeof(buf), "%s/.e-deleteme", buf_env);
1126 if (ecore_file_exists(buf)) ecore_file_recursive_rm(buf_env);
1128 for (i = (_e_main_lvl - 1); i >= 0; i--)
1129 (*_e_main_shutdown_func[i])();
1130 #ifdef OBJECT_HASH_CHECK
1131 e_object_hash_shutdown();
1133 if (errcode < 0) exit(errcode);
1137 _e_main_shutdown_push(int (*func)(void))
1140 if (_e_main_lvl > MAX_LEVEL)
1143 e_error_message_show("WARNING: too many init levels. MAX = %i\n",
1147 _e_main_shutdown_func[_e_main_lvl - 1] = func;
1151 _e_main_parse_arguments(int argc, char **argv)
1156 /* handle some command-line parameters */
1157 for (i = 1; i < argc; i++)
1159 if ((!strcmp(argv[i], "-display")) && (i < (argc - 1)))
1162 e_util_env_set("DISPLAY", argv[i]);
1164 else if ((!strcmp(argv[i], "-fake-xinerama-screen")) && (i < (argc - 1)))
1169 if (sscanf(argv[i], "%ix%i+%i+%i", &w, &h, &x, &y) == 4)
1170 e_xinerama_fake_screen_add(x, y, w, h);
1172 else if (!strcmp(argv[i], "-good"))
1176 printf("LA LA LA\n");
1178 else if (!strcmp(argv[i], "-evil"))
1182 printf("MUHAHAHAHHAHAHAHAHA\n");
1184 else if (!strcmp(argv[i], "-psychotic"))
1188 printf("MUHAHALALALALALALALA\n");
1190 else if ((!strcmp(argv[i], "-profile")) && (i < (argc - 1)))
1193 if (!getenv("E_CONF_PROFILE"))
1194 e_util_env_set("E_CONF_PROFILE", argv[i]);
1196 else if (!strcmp(argv[i], "-i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it"))
1197 really_know = EINA_TRUE;
1198 else if (!strcmp(argv[i], "-locked"))
1200 else if (!strcmp(argv[i], "-nopause"))
1201 e_nopause = EINA_TRUE;
1202 else if ((!strcmp(argv[i], "-h")) ||
1203 (!strcmp(argv[i], "-help")) ||
1204 (!strcmp(argv[i], "--help")))
1209 "\t-display DISPLAY\n"
1210 "\t\tConnect to display named DISPLAY.\n"
1211 "\t\tEG: -display :1.0\n"
1212 "\t-fake-xinerama-screen WxH+X+Y\n"
1213 "\t\tAdd a FAKE xinerama screen (instead of the real ones)\n"
1214 "\t\tgiven the geometry. Add as many as you like. They all\n"
1215 "\t\treplace the real xinerama screens, if any. This can\n"
1216 "\t\tbe used to simulate xinerama.\n"
1217 "\t\tEG: -fake-xinerama-screen 800x600+0+0 -fake-xinerama-screen 800x600+800+0\n"
1218 "\t-profile CONF_PROFILE\n"
1219 "\t\tUse the configuration profile CONF_PROFILE instead of the user selected default or just \"default\".\n"
1225 "\t\tBe psychotic.\n"
1227 "\t\tStart with desklock on, so password will be asked.\n"
1228 "\t-i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it\n"
1229 "\t\tIf you need this help, you don't need this option.\n"
1232 _e_main_shutdown(-1);
1236 /* fix up DISPLAY to be :N.0 if no .screen is in it */
1237 s = getenv("DISPLAY");
1240 char *p, buff[4096];
1242 if (!(p = strrchr(s, ':')))
1244 snprintf(buff, sizeof(buff), "%s:0.0", s);
1245 e_util_env_set("DISPLAY", buff);
1249 if (!strrchr(p, '.'))
1251 snprintf(buff, sizeof(buff), "%s.0", s);
1252 e_util_env_set("DISPLAY", buff);
1257 /* we want to have been launched by enlightenment_start. there is a very */
1258 /* good reason we want to have been launched this way, thus check */
1259 if (!getenv("E_START"))
1261 e_error_message_show(_("You are executing enlightenment directly. This is\n"
1262 "bad. Please do not execute the \"enlightenment\"\n"
1263 "binary. Use the \"enlightenment_start\" launcher. It\n"
1264 "will handle setting up environment variables, paths,\n"
1265 "and launching any other required services etc.\n"
1266 "before enlightenment itself begins running.\n"));
1267 _e_main_shutdown(-1);
1272 _e_main_cb_x_fatal(void *data __UNUSED__)
1274 e_error_message_show("Lost X Connection.\n");
1275 ecore_main_loop_quit();
1278 x_fatal = EINA_TRUE;
1279 if (inloop) longjmp(x_fatal_buff, -99);
1284 _e_main_cb_signal_exit(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__)
1286 /* called on ctrl-c, kill (pid) (also SIGINT, SIGTERM and SIGQIT) */
1287 e_sys_action_do(E_SYS_EXIT, NULL);
1288 return ECORE_CALLBACK_RENEW;
1292 _e_main_cb_signal_hup(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__)
1294 e_sys_action_do(E_SYS_RESTART, NULL);
1295 return ECORE_CALLBACK_RENEW;
1299 _e_main_cb_signal_user(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
1301 Ecore_Event_Signal_User *e = ev;
1305 // E_Action *a = e_action_find("configuration");
1306 // if ((a) && (a->func.go)) a->func.go(NULL, NULL);
1308 else if (e->number == 2)
1310 // comp module has its own handler for this for enabling/disabling fps debug
1312 return ECORE_CALLBACK_RENEW;
1317 _e_main_dirs_init(void)
1320 const char *dirs[] =
1328 "applications/menu",
1329 "applications/menu/favorite",
1330 "applications/menu/all",
1332 "applications/bar/default",
1333 "applications/startup",
1334 "applications/restart",
1335 "applications/trash",
1336 "applications/desk-lock",
1337 "applications/desk-unlock",
1345 base = e_user_dir_get();
1346 if (ecore_file_mksubdirs(base, dirs) != sizeof(dirs) / sizeof(dirs[0]) - 1)
1348 e_error_message_show("Could not create one of the required "
1349 "subdirectories of '%s'\n", base);
1357 _e_main_dirs_shutdown(void)
1363 _e_main_path_init(void)
1367 /* setup data paths */
1368 path_data = e_path_new();
1371 e_error_message_show("Cannot allocate path for path_data\n");
1374 e_prefix_data_concat_static(buf, "data");
1375 e_path_default_path_append(path_data, buf);
1376 e_path_user_path_set(path_data, &(e_config->path_append_data));
1378 /* setup image paths */
1379 path_images = e_path_new();
1382 e_error_message_show("Cannot allocate path for path_images\n");
1385 e_user_dir_concat_static(buf, "/images");
1386 e_path_default_path_append(path_images, buf);
1387 e_prefix_data_concat_static(buf, "data/images");
1388 e_path_default_path_append(path_images, buf);
1389 e_path_user_path_set(path_images, &(e_config->path_append_images));
1391 /* setup font paths */
1392 path_fonts = e_path_new();
1395 e_error_message_show("Cannot allocate path for path_fonts\n");
1398 e_user_dir_concat_static(buf, "/fonts");
1399 e_path_default_path_append(path_fonts, buf);
1400 e_prefix_data_concat_static(buf, "data/fonts");
1401 e_path_default_path_append(path_fonts, buf);
1402 e_path_user_path_set(path_fonts, &(e_config->path_append_fonts));
1404 /* setup icon paths */
1405 path_icons = e_path_new();
1408 e_error_message_show("Cannot allocate path for path_icons\n");
1411 e_user_dir_concat_static(buf, "/icons");
1412 e_path_default_path_append(path_icons, buf);
1413 e_prefix_data_concat_static(buf, "data/icons");
1414 e_path_default_path_append(path_icons, buf);
1415 e_path_user_path_set(path_icons, &(e_config->path_append_icons));
1417 /* setup module paths */
1418 path_modules = e_path_new();
1421 e_error_message_show("Cannot allocate path for path_modules\n");
1424 e_user_dir_concat_static(buf, "/modules");
1425 e_path_default_path_append(path_modules, buf);
1426 snprintf(buf, sizeof(buf), "%s/enlightenment/modules", e_prefix_lib_get());
1427 e_path_default_path_append(path_modules, buf);
1428 /* FIXME: eventually this has to go - moduels should have installers that
1429 * add appropriate install paths (if not installed to user homedir) to
1430 * e's module search dirs
1432 snprintf(buf, sizeof(buf), "%s/enlightenment/modules_extra", e_prefix_lib_get());
1433 e_path_default_path_append(path_modules, buf);
1434 e_path_user_path_set(path_modules, &(e_config->path_append_modules));
1436 /* setup background paths */
1437 path_backgrounds = e_path_new();
1438 if (!path_backgrounds)
1440 e_error_message_show("Cannot allocate path for path_backgrounds\n");
1443 e_user_dir_concat_static(buf, "/backgrounds");
1444 e_path_default_path_append(path_backgrounds, buf);
1445 e_prefix_data_concat_static(buf, "data/backgrounds");
1446 e_path_default_path_append(path_backgrounds, buf);
1447 e_path_user_path_set(path_backgrounds, &(e_config->path_append_backgrounds));
1449 path_messages = e_path_new();
1452 e_error_message_show("Cannot allocate path for path_messages\n");
1455 e_user_dir_concat_static(buf, "/locale");
1456 e_path_default_path_append(path_messages, buf);
1457 e_path_default_path_append(path_messages, e_prefix_locale_get());
1458 e_path_user_path_set(path_messages, &(e_config->path_append_messages));
1464 _e_main_path_shutdown(void)
1468 e_object_del(E_OBJECT(path_data));
1473 e_object_del(E_OBJECT(path_images));
1478 e_object_del(E_OBJECT(path_fonts));
1483 e_object_del(E_OBJECT(path_icons));
1488 e_object_del(E_OBJECT(path_modules));
1489 path_modules = NULL;
1491 if (path_backgrounds)
1493 e_object_del(E_OBJECT(path_backgrounds));
1494 path_backgrounds = NULL;
1498 e_object_del(E_OBJECT(path_messages));
1499 path_messages = NULL;
1505 _e_main_test_formats(void)
1509 Evas_Object *im, *txt;
1511 char buff[PATH_MAX];
1513 if (e_config->show_splash)
1514 e_init_status_set(_("Testing Format Support"));
1516 if (!(ee = ecore_evas_buffer_new(1, 1)))
1518 e_error_message_show(_("Enlightenment found Evas can't create a buffer canvas. Please check\n"
1519 "Evas has Software Buffer engine support.\n"));
1520 _e_main_shutdown(-1);
1522 evas = ecore_evas_get(ee);
1523 im = evas_object_image_add(evas);
1525 e_prefix_data_concat_static(buff, "data/images/test.svg");
1526 evas_object_image_file_set(im, buff, NULL);
1527 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1529 e_error_message_show(_("Enlightenment found Evas can't load SVG files. "
1530 "Check Evas has SVG loader support.\n"));
1533 efreet_icon_extension_add(".svg");
1535 e_prefix_data_concat_static(buff, "data/images/test.jpg");
1536 evas_object_image_file_set(im, buff, NULL);
1537 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1539 e_error_message_show(_("Enlightenment found Evas can't load JPEG files. "
1540 "Check Evas has JPEG loader support.\n"));
1541 _e_main_shutdown(-1);
1543 efreet_icon_extension_add(".jpg");
1545 e_prefix_data_concat_static(buff, "data/images/test.png");
1546 evas_object_image_file_set(im, buff, NULL);
1547 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1549 e_error_message_show(_("Enlightenment found Evas can't load PNG files. "
1550 "Check Evas has PNG loader support.\n"));
1551 _e_main_shutdown(-1);
1553 efreet_icon_extension_add(".png");
1555 e_prefix_data_concat_static(buff, "data/images/test.edj");
1556 evas_object_image_file_set(im, buff, "images/0");
1557 if (evas_object_image_load_error_get(im) != EVAS_LOAD_ERROR_NONE)
1559 e_error_message_show(_("Enlightenment found Evas can't load EET files. "
1560 "Check Evas has EET loader support.\n"));
1561 _e_main_shutdown(-1);
1563 efreet_icon_extension_add(".edj");
1565 evas_object_del(im);
1567 txt = evas_object_text_add(evas);
1568 evas_object_text_font_set(txt, "Sans", 10);
1569 evas_object_text_text_set(txt, "Hello");
1570 evas_object_geometry_get(txt, NULL, NULL, &tw, &th);
1571 if ((tw <= 0) && (th <= 0))
1573 e_error_message_show(_("Enlightenment found Evas can't load the 'Sans' font. Check Evas has fontconfig\n"
1574 "support and system fontconfig defines a 'Sans' font.\n"));
1575 _e_main_shutdown(-1);
1577 evas_object_del(txt);
1578 ecore_evas_free(ee);
1582 _e_main_screens_init(void)
1584 TS("\tscreens: manager");
1585 if (!e_manager_init()) return 0;
1587 TS("\tscreens: client");
1588 if (!e_client_init()) return 0;
1589 TS("\tscreens: win");
1590 if (!e_win_init()) return 0;
1591 #ifndef HAVE_WAYLAND_ONLY
1595 e_error_message_show(_("Enlightenment cannot setup XKB Keyboard layouts.\n"));
1596 _e_main_shutdown(-1);
1598 TS("E_Xkb Init Done");
1601 TS("Compositor Init");
1604 e_error_message_show(_("Enlightenment cannot create a compositor.\n"));
1605 _e_main_shutdown(-1);
1608 _e_main_desk_restore();
1610 #ifndef HAVE_WAYLAND_ONLY
1611 if (e_config->show_splash)
1612 e_init_status_set(_("Setup DND"));
1616 e_error_message_show(_("Enlightenment cannot set up its dnd system.\n"));
1617 _e_main_shutdown(-1);
1619 TS("E_Dnd Init Done");
1620 _e_main_shutdown_push(e_dnd_shutdown);
1627 _e_main_screens_shutdown(void)
1633 e_client_shutdown();
1634 e_exehist_shutdown();
1635 e_backlight_shutdown();
1640 e_manager_shutdown();
1645 _e_main_desk_save(void)
1648 char env[1024], name[1024];
1651 EINA_LIST_FOREACH(e_comp->zones, l, zone)
1653 snprintf(name, sizeof(name), "DESK_%d_%d", e_comp->num, zone->num);
1654 snprintf(env, sizeof(env), "%d,%d", zone->desk_x_current, zone->desk_y_current);
1655 e_util_env_set(name, env);
1660 _e_main_desk_restore(void)
1667 EINA_LIST_FOREACH(e_comp->zones, l, zone)
1673 snprintf(name, sizeof(name), "DESK_%d_%d", e_comp->num, zone->num);
1676 snprintf(buf_e, sizeof(buf_e), "%s", env);
1677 if (!sscanf(buf_e, "%d,%d", &desk_x, &desk_y)) continue;
1678 desk = e_desk_at_xy_get(zone, desk_x, desk_y);
1679 if (!desk) continue;
1685 _e_main_efreet_paths_init(void)
1689 if ((list = efreet_icon_extra_list_get()))
1691 char buff[PATH_MAX];
1693 e_user_dir_concat_static(buff, "icons");
1694 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1695 e_prefix_data_concat_static(buff, "data/icons");
1696 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1701 _e_main_modules_load_after(void *d EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED)
1703 e_int_config_modules(NULL, NULL);
1704 E_FREE_FUNC(mod_init_end, ecore_event_handler_del);
1705 return ECORE_CALLBACK_RENEW;
1709 _e_main_modules_load(Eina_Bool safe_mode)
1712 e_module_all_load();
1718 crashmodule = getenv("E_MODULE_LOAD");
1719 if (crashmodule) m = e_module_new(crashmodule);
1721 if ((crashmodule) && (m))
1723 e_module_disable(m);
1724 e_object_del(E_OBJECT(m));
1726 e_error_message_show
1727 (_("Enlightenment crashed early on start and has<br>"
1728 "been restarted. There was an error loading the<br>"
1729 "module named: %s. This module has been disabled<br>"
1730 "and will not be loaded."), crashmodule);
1732 (_("Enlightenment crashed early on start and has been restarted"),
1733 _("Enlightenment crashed early on start and has been restarted.<br>"
1734 "There was an error loading the module named: %s<br><br>"
1735 "This module has been disabled and will not be loaded."), crashmodule);
1736 e_module_all_load();
1740 e_error_message_show
1741 (_("Enlightenment crashed early on start and has<br>"
1742 "been restarted. All modules have been disabled<br>"
1743 "and will not be loaded to help remove any problem<br>"
1744 "modules from your configuration. The module<br>"
1745 "configuration dialog should let you select your<br>"
1746 "modules again.\n"));
1748 (_("Enlightenment crashed early on start and has been restarted"),
1749 _("Enlightenment crashed early on start and has been restarted.<br>"
1750 "All modules have been disabled and will not be loaded to help<br>"
1751 "remove any problem modules from your configuration.<br><br>"
1752 "The module configuration dialog should let you select your<br>"
1755 mod_init_end = ecore_event_handler_add(E_EVENT_MODULE_INIT_END, _e_main_modules_load_after, NULL);
1760 _e_main_cb_idle_before(void *data __UNUSED__)
1762 e_menu_idler_before();
1763 e_client_idler_before();
1764 e_pointer_idler_before();
1766 return ECORE_CALLBACK_RENEW;
1770 _e_main_cb_idle_after(void *data __UNUSED__)
1772 static int first_idle = 1;
1776 #ifdef E_RELEASE_BUILD
1781 e_precache_end = EINA_TRUE;
1784 if (first_idle++ < 60)
1788 e_precache_end = EINA_TRUE;
1792 return ECORE_CALLBACK_RENEW;
1796 _e_main_cb_x_flusher(void *data __UNUSED__)
1799 #ifndef HAVE_WAYLAND_ONLY
1800 if (e_comp->comp_type == E_PIXMAP_TYPE_X)
1803 return ECORE_CALLBACK_RENEW;
1807 _e_main_cb_startup_fake_end(void *data __UNUSED__)
1810 return ECORE_CALLBACK_CANCEL;