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);
294 e_error_message_show(_("Enlightenment could not create a logging domain!\n"));
295 _e_main_shutdown(-1);
301 t1 = ecore_time_unix_get(); \
302 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, x); \
306 TS("Eina Init Done");
307 _e_main_shutdown_push(e_log_shutdown);
309 TS("Determine Prefix");
310 if (!e_prefix_determine(argv[0]))
313 "ERROR: Enlightenment cannot determine it's installed\n"
314 " prefix from the system or argv[0].\n"
315 " This is because it is not on Linux AND has been\n"
316 " executed strangely. This is unusual.\n");
318 TS("Determine Prefix Done");
320 /* for debugging by redirecting stdout of e to a log file to tail */
321 setvbuf(stdout, NULL, _IONBF, 0);
323 TS("Environment Variables");
324 if (getenv("E_RESTART")) after_restart = EINA_TRUE;
325 if (getenv("DESKTOP_STARTUP_ID"))
326 e_util_env_set("DESKTOP_STARTUP_ID", NULL);
327 e_util_env_set("E_RESTART_OK", NULL);
328 e_util_env_set("PANTS", "ON");
329 e_util_env_set("DESKTOP", "Enlightenment-0.17.0");
330 TS("Environment Variables Done");
332 TS("Parse Arguments");
333 _e_main_parse_arguments(argc, argv);
334 TS("Parse Arguments Done");
336 /*** Initialize Core EFL Libraries We Need ***/
341 e_error_message_show(_("Enlightenment cannot initialize Eet!\n"));
342 _e_main_shutdown(-1);
345 _e_main_shutdown_push(eet_shutdown);
350 e_error_message_show(_("Enlightenment cannot initialize Ecore!\n"));
351 _e_main_shutdown(-1);
353 TS("Ecore Init Done");
354 _e_main_shutdown_push(ecore_shutdown);
356 e_first_frame = getenv("E_FIRST_FRAME");
357 if (e_first_frame && (!e_first_frame[0]))
358 e_first_frame = NULL;
360 e_first_frame_start_time = ecore_time_get();
365 e_error_message_show(_("Enlightenment cannot initialize EIO!\n"));
366 _e_main_shutdown(-1);
369 _e_main_shutdown_push(eio_shutdown);
371 ecore_app_args_set(argc, (const char **)argv);
373 TS("Ecore Event Handlers");
374 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT,
375 _e_main_cb_signal_exit, NULL))
377 e_error_message_show(_("Enlightenment cannot set up an exit signal handler.\n"
378 "Perhaps you are out of memory?"));
379 _e_main_shutdown(-1);
381 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_HUP,
382 _e_main_cb_signal_hup, NULL))
384 e_error_message_show(_("Enlightenment cannot set up a HUP signal handler.\n"
385 "Perhaps you are out of memory?"));
386 _e_main_shutdown(-1);
388 if (!ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER,
389 _e_main_cb_signal_user, NULL))
391 e_error_message_show(_("Enlightenment cannot set up a USER signal handler.\n"
392 "Perhaps you are out of memory?"));
393 _e_main_shutdown(-1);
395 TS("Ecore Event Handlers Done");
397 TS("Ecore_File Init");
398 if (!ecore_file_init())
400 e_error_message_show(_("Enlightenment cannot initialize Ecore_File!\n"));
401 _e_main_shutdown(-1);
403 TS("Ecore_File Init Done");
404 _e_main_shutdown_push(ecore_file_shutdown);
406 TS("Ecore_Con Init");
407 if (!ecore_con_init())
409 e_error_message_show(_("Enlightenment cannot initialize Ecore_Con!\n"));
410 _e_main_shutdown(-1);
412 TS("Ecore_Con Init Done");
413 _e_main_shutdown_push(ecore_con_shutdown);
415 TS("Ecore_Ipc Init");
416 if (!ecore_ipc_init())
418 e_error_message_show(_("Enlightenment cannot initialize Ecore_Ipc!\n"));
419 _e_main_shutdown(-1);
421 TS("Ecore_Ipc Init Done");
422 _e_main_shutdown_push(ecore_ipc_shutdown);
424 _idle_before = ecore_idle_enterer_before_add(_e_main_cb_idle_before, NULL);
426 _xdg_data_dirs_augment();
428 TS("Ecore_Evas Init");
429 if (!ecore_evas_init())
431 e_error_message_show(_("Enlightenment cannot initialize Ecore_Evas!\n"));
432 _e_main_shutdown(-1);
434 TS("Ecore_Evas Init Done");
435 // _e_main_shutdown_push(ecore_evas_shutdown);
437 TS("Elementary Init");
438 if (!elm_init(argc, argv))
440 e_error_message_show(_("Enlightenment cannot initialize Elementary!\n"));
441 _e_main_shutdown(-1);
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);
522 TS("E_Configure Init");
524 TS("E_Configure Init Done");
526 TS("E Directories Init");
527 /* setup directories we will be using for configurations storage etc. */
528 if (!_e_main_dirs_init())
530 e_error_message_show(_("Enlightenment cannot create directories in your home directory.\n"
531 "Perhaps you have no home directory or the disk is full?"));
532 _e_main_shutdown(-1);
534 TS("E Directories Init Done");
535 _e_main_shutdown_push(_e_main_dirs_shutdown);
537 TS("E_Filereg Init");
538 if (!e_filereg_init())
540 e_error_message_show(_("Enlightenment cannot set up its file registry system.\n"));
541 _e_main_shutdown(-1);
543 TS("E_Filereg Init Done");
544 _e_main_shutdown_push(e_filereg_shutdown);
547 if (!e_config_init())
549 e_error_message_show(_("Enlightenment cannot set up its config system.\n"));
550 _e_main_shutdown(-1);
552 TS("E_Config Init Done");
553 _e_main_shutdown_push(e_config_shutdown);
558 e_error_message_show(_("Enlightenment cannot set up its environment.\n"));
559 _e_main_shutdown(-1);
561 TS("E_Env Init Done");
562 _e_main_shutdown_push(e_env_shutdown);
564 efreet_desktop_environment_set(e_config->desktop_environment);
565 e_util_env_set("E_ICON_THEME", e_config->icon_theme);
566 ecore_exe_run_priority_set(e_config->priority);
567 locked |= e_config->desklock_start_locked;
569 s = getenv("E_DESKLOCK_LOCKED");
570 if ((s) && (!strcmp(s, "locked"))) waslocked = EINA_TRUE;
573 if (!_e_main_path_init())
575 e_error_message_show(_("Enlightenment cannot set up paths for finding files.\n"
576 "Perhaps you are out of memory?"));
577 _e_main_shutdown(-1);
579 TS("E Paths Init Done");
580 _e_main_shutdown_push(_e_main_path_shutdown);
583 if (!e_ipc_init()) _e_main_shutdown(-1);
584 TS("E_Ipc Init Done");
585 _e_main_shutdown_push(e_ipc_shutdown);
587 edje_frametime_set(1.0 / e_config->framerate);
592 e_error_message_show(_("Enlightenment cannot set up its font system.\n"));
593 _e_main_shutdown(-1);
595 TS("E_Font Init Done");
596 _e_main_shutdown_push(e_font_shutdown);
600 TS("E_Font Apply Done");
605 e_error_message_show(_("Enlightenment cannot set up its theme system.\n"));
606 _e_main_shutdown(-1);
608 TS("E_Theme Init Done");
609 _e_main_shutdown_push(e_theme_shutdown);
611 TS("E_Moveresize Init");
613 TS("E_Moveresize Init Done");
614 _e_main_shutdown_push(e_moveresize_shutdown);
616 if (e_config->show_splash)
617 e_init_status_set(_("Setup Message Bus"));
620 _e_main_shutdown_push(e_msgbus_shutdown);
621 TS("E_Msgbus Init Done");
626 e_error_message_show(_("Enlightenment cannot initialize the FDO desktop system.\n"
627 "Perhaps you lack permissions on ~/.cache/efreet or are\n"
628 "out of memory or disk space?"));
629 _e_main_shutdown(-1);
631 TS("Efreet Init Done");
632 _e_main_shutdown_push(efreet_shutdown);
634 if (e_config->show_splash)
635 e_init_status_set(_("Starting International Support"));
636 TS("E_Intl Post Init");
637 if (!e_intl_post_init())
639 e_error_message_show(_("Enlightenment cannot set up its intl system.\n"));
640 _e_main_shutdown(-1);
642 TS("E_Intl Post Init Done");
643 _e_main_shutdown_push(e_intl_post_shutdown);
645 e_screensaver_preinit();
647 if (e_config->show_splash)
648 e_init_status_set(_("Setup Actions"));
649 TS("E_Actions Init");
650 if (!e_actions_init())
652 e_error_message_show(_("Enlightenment cannot set up its actions system.\n"));
653 _e_main_shutdown(-1);
655 TS("E_Actions Init Done");
656 _e_main_shutdown_push(e_actions_shutdown);
658 /* these just add event handlers and can't fail
659 * timestamping them is dumb.
665 if (e_config->show_splash)
666 e_init_status_set(_("Setup Powersave Modes"));
667 TS("E_Powersave Init");
668 if (!e_powersave_init())
670 e_error_message_show(_("Enlightenment cannot set up its powersave modes.\n"));
671 _e_main_shutdown(-1);
673 TS("E_Powersave Init Done");
674 _e_main_shutdown_push(e_powersave_shutdown);
676 if (e_config->show_splash)
677 e_init_status_set(_("Setup Screensaver"));
678 TS("E_Screensaver Init");
679 if (!e_screensaver_init())
681 e_error_message_show(_("Enlightenment cannot configure the X screensaver.\n"));
682 _e_main_shutdown(-1);
684 TS("E_Screensaver Init Done");
685 _e_main_shutdown_push(e_screensaver_shutdown);
687 if (e_config->show_splash)
688 e_init_status_set(_("Setup Screens"));
690 if (!_e_main_screens_init())
692 e_error_message_show(_("Enlightenment set up window management for all the screens on your system\n"
693 "failed. Perhaps another window manager is running?\n"));
694 _e_main_shutdown(-1);
696 TS("Screens Init Done");
697 _e_main_shutdown_push(_e_main_screens_shutdown);
698 e_screensaver_force_update();
700 TS("E_Pointer Init");
701 if (!e_pointer_init())
703 e_error_message_show(_("Enlightenment cannot set up its pointer system.\n"));
704 _e_main_shutdown(-1);
706 TS("E_Pointer Init Done");
707 _e_main_shutdown_push(e_pointer_shutdown);
713 e_error_message_show(_("Enlightenment cannot set up its scale system.\n"));
714 _e_main_shutdown(-1);
716 TS("E_Scale Init Done");
717 _e_main_shutdown_push(e_scale_shutdown);
719 if (e_config->show_splash)
724 e_error_message_show(_("Enlightenment cannot set up its init screen.\n"));
725 _e_main_shutdown(-1);
727 TS("E_Splash Init Done");
728 _e_main_shutdown_push(e_init_shutdown);
730 if (!((!e_config->show_splash) || (after_restart)))
735 TS("Test File Format Support");
736 _e_main_test_formats();
737 TS("Test File Format Support Done");
741 efreet_icon_extension_add(".svg");
742 efreet_icon_extension_add(".jpg");
743 efreet_icon_extension_add(".png");
744 efreet_icon_extension_add(".edj");
747 if (e_config->show_splash)
748 e_init_status_set(_("Setup ACPI"));
751 TS("E_Acpi Init Done");
752 _e_main_shutdown_push(e_acpi_shutdown);
754 if (e_config->show_splash)
755 e_init_status_set(_("Setup Backlight"));
756 TS("E_Backlight Init");
757 if (!e_backlight_init())
759 e_error_message_show(_("Enlightenment cannot configure the backlight.\n"));
760 _e_main_shutdown(-1);
762 TS("E_Backlight Init Done");
764 if (e_config->show_splash)
765 e_init_status_set(_("Setup DPMS"));
769 e_error_message_show(_("Enlightenment cannot configure the DPMS settings.\n"));
770 _e_main_shutdown(-1);
772 TS("E_Dpms Init Done");
773 _e_main_shutdown_push(e_dpms_shutdown);
775 if (e_config->show_splash)
776 e_init_status_set(_("Setup Desklock"));
777 TS("E_Desklock Init");
778 if (!e_desklock_init())
780 e_error_message_show(_("Enlightenment cannot set up its desk locking system.\n"));
781 _e_main_shutdown(-1);
783 TS("E_Desklock Init Done");
784 _e_main_shutdown_push(e_desklock_shutdown);
786 if (waslocked || (locked && ((!after_restart) || (!getenv("E_DESKLOCK_UNLOCKED")))))
787 e_desklock_show(EINA_TRUE);
789 if (e_config->show_splash)
790 e_init_status_set(_("Setup Paths"));
792 _e_main_efreet_paths_init();
793 TS("Efreet Paths Done");
795 if (e_config->show_splash)
796 e_init_status_set(_("Setup System Controls"));
800 e_error_message_show(_("Enlightenment cannot initialize the System Command system.\n"));
801 _e_main_shutdown(-1);
803 TS("E_Sys Init Done");
804 _e_main_shutdown_push(e_sys_shutdown);
806 if (e_config->show_splash)
807 e_init_status_set(_("Setup Execution System"));
811 e_error_message_show(_("Enlightenment cannot set up its exec system.\n"));
812 _e_main_shutdown(-1);
814 TS("E_Exec Init Done");
818 TS("E_Comp Freeze Done");
820 if (e_config->show_splash)
821 e_init_status_set(_("Setup Filemanager"));
825 e_error_message_show(_("Enlightenment cannot initialize the File manager.\n"));
826 _e_main_shutdown(-1);
828 TS("E_Fm2 Init Done");
829 _e_main_shutdown_push(e_fm2_shutdown);
831 if (e_config->show_splash)
832 e_init_status_set(_("Setup Message System"));
836 e_error_message_show(_("Enlightenment cannot set up its msg system.\n"));
837 _e_main_shutdown(-1);
839 TS("E_Msg Init Done");
840 _e_main_shutdown_push(e_msg_shutdown);
842 if (e_config->show_splash)
843 e_init_status_set(_("Setup Grab Input Handling"));
844 TS("E_Grabinput Init");
845 if (!e_grabinput_init())
847 e_error_message_show(_("Enlightenment cannot set up its grab input handling system.\n"));
848 _e_main_shutdown(-1);
850 TS("E_Grabinput Init Done");
851 _e_main_shutdown_push(e_grabinput_shutdown);
853 if (e_config->show_splash)
854 e_init_status_set(_("Setup Modules"));
856 if (!e_module_init())
858 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
859 _e_main_shutdown(-1);
861 TS("E_Module Init Done");
862 _e_main_shutdown_push(e_module_shutdown);
864 if (e_config->show_splash)
865 e_init_status_set(_("Setup Remembers"));
866 TS("E_Remember Init");
867 if (!e_remember_init(after_restart ? E_STARTUP_RESTART : E_STARTUP_START))
869 e_error_message_show(_("Enlightenment cannot setup remember settings.\n"));
870 _e_main_shutdown(-1);
872 TS("E_Remember Init Done");
873 _e_main_shutdown_push(e_remember_shutdown);
875 if (e_config->show_splash)
876 e_init_status_set(_("Setup Color Classes"));
877 TS("E_Color_Class Init");
878 if (!e_color_class_init())
880 e_error_message_show(_("Enlightenment cannot set up its color class system.\n"));
881 _e_main_shutdown(-1);
883 TS("E_Color_Class Init Done");
884 _e_main_shutdown_push(e_color_class_shutdown);
886 if (e_config->show_splash)
887 e_init_status_set(_("Setup Gadcon"));
889 if (!e_gadcon_init())
891 e_error_message_show(_("Enlightenment cannot set up its gadget control system.\n"));
892 _e_main_shutdown(-1);
894 TS("E_Gadcon Init Done");
895 _e_main_shutdown_push(e_gadcon_shutdown);
897 if (e_config->show_splash)
898 e_init_status_set(_("Setup Toolbars"));
899 TS("E_Toolbar Init");
900 if (!e_toolbar_init())
902 e_error_message_show(_("Enlightenment cannot set up its toolbars.\n"));
903 _e_main_shutdown(-1);
905 TS("E_Toolbar Init Done");
906 _e_main_shutdown_push(e_toolbar_shutdown);
908 if (e_config->show_splash)
909 e_init_status_set(_("Setup Wallpaper"));
913 e_error_message_show(_("Enlightenment cannot set up its desktop background system.\n"));
914 _e_main_shutdown(-1);
916 TS("E_Bg Init Done");
917 _e_main_shutdown_push(e_bg_shutdown);
919 if (e_config->show_splash)
920 e_init_status_set(_("Setup Mouse"));
922 if (!e_mouse_update())
924 e_error_message_show(_("Enlightenment cannot configure the mouse settings.\n"));
925 _e_main_shutdown(-1);
927 TS("E_Mouse Init Done");
929 if (e_config->show_splash)
930 e_init_status_set(_("Setup Bindings"));
931 TS("E_Bindings Init");
932 if (!e_bindings_init())
934 e_error_message_show(_("Enlightenment cannot set up its bindings system.\n"));
935 _e_main_shutdown(-1);
937 TS("E_Bindings Init Done");
938 _e_main_shutdown_push(e_bindings_shutdown);
940 if (e_config->show_splash)
941 e_init_status_set(_("Setup Thumbnailer"));
945 e_error_message_show(_("Enlightenment cannot initialize the Thumbnailing system.\n"));
946 _e_main_shutdown(-1);
948 TS("E_Thumb Init Done");
949 _e_main_shutdown_push(e_thumb_shutdown);
954 e_error_message_show(_("Enlightenment cannot initialize the Icon Cache system.\n"));
955 _e_main_shutdown(-1);
957 TS("E_Icon Init Done");
958 _e_main_shutdown_push(e_icon_shutdown);
961 if (!e_update_init())
963 e_error_message_show(_("Enlightenment cannot initialize the Update system.\n"));
964 _e_main_shutdown(-1);
966 TS("E_Update Init Done");
967 _e_main_shutdown_push(e_update_shutdown);
969 if (e_config->show_splash)
970 e_init_status_set(_("Setup Desktop Environment"));
971 TS("E_Deskenv Init");
972 if (!e_deskenv_init())
974 e_error_message_show(_("Enlightenment cannot initialize its desktop environment.\n"));
975 _e_main_shutdown(-1);
977 TS("E_Deskenv Init Done");
978 _e_main_shutdown_push(e_deskenv_shutdown);
980 if (e_config->show_splash)
981 e_init_status_set(_("Setup File Ordering"));
985 e_error_message_show(_("Enlightenment cannot set up its order file system.\n"));
986 _e_main_shutdown(-1);
988 TS("E_Order Init Done");
989 _e_main_shutdown_push(e_order_shutdown);
991 TS("Add Idler For X Flush");
992 _idle_flush = ecore_idle_enterer_add(_e_main_cb_x_flusher, NULL);
993 TS("Add Idler For X Flush Done");
995 TS("E_Manager Keys Grab");
996 e_managers_keys_grab();
997 TS("E_Manager Keys Grab Done");
999 if (e_config->show_splash)
1000 e_init_status_set(_("Load Modules"));
1002 _e_main_modules_load(safe_mode);
1003 TS("Load Modules Done");
1005 TS("Run Startup Apps");
1009 e_startup(E_STARTUP_RESTART);
1011 e_startup(E_STARTUP_START);
1013 TS("Run Startup Apps Done");
1015 if (e_config->show_splash && (!after_restart))
1016 ecore_timer_add(2.0, _e_main_cb_startup_fake_end, NULL);
1020 TS("E_Comp Thaw Done");
1026 TS("E_Test_Helper Init");
1027 e_test_helper_init();
1028 _e_main_shutdown_push(e_test_helper_shutdown);
1029 TS("E_Test_Helper Done");
1031 TS("E_INFO_SERVER Init");
1032 e_info_server_init();
1033 _e_main_shutdown_push(e_info_server_shutdown);
1034 TS("E_INFO_SERVER Done");
1036 if (e_config->show_splash)
1037 e_init_status_set(_("Setup Shelves"));
1039 if (!e_shelf_init())
1041 e_error_message_show(_("Enlightenment cannot set up its module system.\n"));
1042 _e_main_shutdown(-1);
1044 TS("E_Shelf Init Done");
1046 ecore_idle_enterer_before_add(_e_main_shelf_init_job, NULL);
1048 _idle_after = ecore_idle_enterer_add(_e_main_cb_idle_after, NULL);
1050 if (e_config->show_splash)
1051 e_init_status_set(_("Almost Done"));
1053 starting = EINA_FALSE;
1056 e_util_env_set("E_RESTART", "1");
1058 TS("MAIN LOOP AT LAST");
1059 if (!setjmp(x_fatal_buff))
1060 ecore_main_loop_begin();
1062 CRI("FATAL: X Died. Connection gone. Abbreviated Shutdown\n");
1064 inloop = EINA_FALSE;
1065 stopping = EINA_TRUE;
1067 //if (!x_fatal) e_canvas_idle_flush();
1069 e_config_save_flush();
1070 _e_main_desk_save();
1071 e_remember_internal_save();
1072 e_comp_internal_save();
1074 _e_main_shutdown(0);
1078 e_util_env_set("E_RESTART_OK", "1");
1079 if (getenv("E_START_MTRACK"))
1080 e_util_env_set("MTRACK", "track");
1081 ecore_app_restart();
1084 e_prefix_shutdown();
1090 e_main_ts(const char *str)
1093 t1 = ecore_time_unix_get();
1094 printf("ESTART: %1.5f [%1.5f] - %s\n", t1 - t0, t1 - t2, str);
1100 /* local functions */
1102 _e_main_shutdown(int errcode)
1108 printf("E: Begin Shutdown Procedure!\n");
1110 if (_idle_before) ecore_idle_enterer_del(_idle_before);
1111 _idle_before = NULL;
1112 if (_idle_after) ecore_idle_enterer_del(_idle_after);
1114 if (_idle_flush) ecore_idle_enterer_del(_idle_flush);
1117 dir = getenv("XDG_RUNTIME_DIR");
1120 snprintf(buf, sizeof(buf), "%s/.e-deleteme", dir);
1121 if (ecore_file_exists(buf)) ecore_file_recursive_rm(dir);
1123 for (i = (_e_main_lvl - 1); i >= 0; i--)
1124 (*_e_main_shutdown_func[i])();
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)
1664 snprintf(name, sizeof(name), "DESK_%d_%d", e_comp->num, zone->num);
1667 if (!sscanf(env, "%d,%d", &desk_x, &desk_y)) continue;
1668 desk = e_desk_at_xy_get(zone, desk_x, desk_y);
1669 if (!desk) continue;
1675 _e_main_efreet_paths_init(void)
1679 if ((list = efreet_icon_extra_list_get()))
1681 char buff[PATH_MAX];
1683 e_user_dir_concat_static(buff, "icons");
1684 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1685 e_prefix_data_concat_static(buff, "data/icons");
1686 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buff));
1691 _e_main_modules_load_after(void *d EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUSED)
1693 e_int_config_modules(NULL, NULL);
1694 E_FREE_FUNC(mod_init_end, ecore_event_handler_del);
1695 return ECORE_CALLBACK_RENEW;
1699 _e_main_modules_load(Eina_Bool safe_mode)
1702 e_module_all_load();
1708 crashmodule = getenv("E_MODULE_LOAD");
1709 if (crashmodule) m = e_module_new(crashmodule);
1711 if ((crashmodule) && (m))
1713 e_module_disable(m);
1714 e_object_del(E_OBJECT(m));
1716 e_error_message_show
1717 (_("Enlightenment crashed early on start and has<br>"
1718 "been restarted. There was an error loading the<br>"
1719 "module named: %s. This module has been disabled<br>"
1720 "and will not be loaded."), crashmodule);
1722 (_("Enlightenment crashed early on start and has been restarted"),
1723 _("Enlightenment crashed early on start and has been restarted.<br>"
1724 "There was an error loading the module named: %s<br><br>"
1725 "This module has been disabled and will not be loaded."), crashmodule);
1726 e_module_all_load();
1730 e_error_message_show
1731 (_("Enlightenment crashed early on start and has<br>"
1732 "been restarted. All modules have been disabled<br>"
1733 "and will not be loaded to help remove any problem<br>"
1734 "modules from your configuration. The module<br>"
1735 "configuration dialog should let you select your<br>"
1736 "modules again.\n"));
1738 (_("Enlightenment crashed early on start and has been restarted"),
1739 _("Enlightenment crashed early on start and has been restarted.<br>"
1740 "All modules have been disabled and will not be loaded to help<br>"
1741 "remove any problem modules from your configuration.<br><br>"
1742 "The module configuration dialog should let you select your<br>"
1745 mod_init_end = ecore_event_handler_add(E_EVENT_MODULE_INIT_END, _e_main_modules_load_after, NULL);
1750 _e_main_cb_idle_before(void *data __UNUSED__)
1752 e_menu_idler_before();
1753 e_client_idler_before();
1754 e_pointer_idler_before();
1756 return ECORE_CALLBACK_RENEW;
1760 _e_main_cb_idle_after(void *data __UNUSED__)
1762 static int first_idle = 1;
1766 #ifdef E_RELEASE_BUILD
1771 e_precache_end = EINA_TRUE;
1774 if (first_idle++ < 60)
1778 e_precache_end = EINA_TRUE;
1782 return ECORE_CALLBACK_RENEW;
1786 _e_main_cb_x_flusher(void *data __UNUSED__)
1789 #ifndef HAVE_WAYLAND_ONLY
1790 if (e_comp->comp_type == E_PIXMAP_TYPE_X)
1793 return ECORE_CALLBACK_RENEW;
1797 _e_main_cb_startup_fake_end(void *data __UNUSED__)
1800 return ECORE_CALLBACK_CANCEL;