2004-12-09 05:56:06 -08:00
|
|
|
#include "e.h"
|
|
|
|
|
2007-03-24 15:53:16 -07:00
|
|
|
/* TODO:
|
|
|
|
* - Need some kind of "wait for exit" system, maybe register with
|
|
|
|
* e_config? startup and restart apps could also be in e_config
|
|
|
|
*/
|
|
|
|
|
2004-12-09 05:56:06 -08:00
|
|
|
/* local subsystem functions */
|
|
|
|
static void _e_startup(void);
|
2007-03-24 15:53:16 -07:00
|
|
|
static void _e_startup_next_cb(void *data);
|
2004-12-09 05:56:06 -08:00
|
|
|
|
|
|
|
/* local subsystem globals */
|
2007-03-24 15:53:16 -07:00
|
|
|
static E_Order *startup_apps = NULL;
|
|
|
|
static int start_app_pos = -1;
|
2004-12-09 05:56:06 -08:00
|
|
|
|
|
|
|
/* externally accessible functions */
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2004-12-09 05:56:06 -08:00
|
|
|
e_startup(E_Startup_Mode mode)
|
|
|
|
{
|
|
|
|
char buf[PATH_MAX];
|
|
|
|
if (mode == E_STARTUP_START)
|
2009-04-10 23:20:11 -07:00
|
|
|
{
|
2009-04-13 07:56:38 -07:00
|
|
|
e_user_dir_concat_static(buf, "applications/startup/.order");
|
|
|
|
if (!ecore_file_exists(buf))
|
|
|
|
e_prefix_data_concat_static(buf, "data/applications/startup/.order");
|
2009-04-10 23:20:11 -07:00
|
|
|
}
|
2004-12-09 05:56:06 -08:00
|
|
|
else if (mode == E_STARTUP_RESTART)
|
2009-04-10 23:20:11 -07:00
|
|
|
{
|
2009-04-13 07:56:38 -07:00
|
|
|
e_user_dir_concat_static(buf, "applications/restart/.order");
|
|
|
|
if (!ecore_file_exists(buf))
|
|
|
|
e_prefix_data_concat_static(buf, "data/applications/restart/.order");
|
2009-04-10 23:20:11 -07:00
|
|
|
}
|
2007-03-24 15:53:16 -07:00
|
|
|
startup_apps = e_order_new(buf);
|
2007-03-25 15:45:00 -07:00
|
|
|
if (!startup_apps) return;
|
2004-12-09 05:56:06 -08:00
|
|
|
start_app_pos = 0;
|
2007-09-23 18:16:47 -07:00
|
|
|
e_init_undone();
|
2004-12-09 05:56:06 -08:00
|
|
|
_e_startup();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* local subsystem functions */
|
|
|
|
static void
|
|
|
|
_e_startup(void)
|
|
|
|
{
|
2007-03-24 15:53:16 -07:00
|
|
|
Efreet_Desktop *desktop;
|
2004-12-09 05:56:06 -08:00
|
|
|
char buf[4096];
|
|
|
|
|
2005-06-22 07:09:17 -07:00
|
|
|
if (!startup_apps)
|
|
|
|
{
|
|
|
|
e_init_done();
|
|
|
|
return;
|
|
|
|
}
|
2008-10-22 04:49:33 -07:00
|
|
|
desktop = eina_list_nth(startup_apps->desktops, start_app_pos);
|
2004-12-09 05:56:06 -08:00
|
|
|
start_app_pos++;
|
2007-03-24 15:53:16 -07:00
|
|
|
if (!desktop)
|
2004-12-09 05:56:06 -08:00
|
|
|
{
|
2007-03-24 15:53:16 -07:00
|
|
|
e_object_del(E_OBJECT(startup_apps));
|
2004-12-09 05:56:06 -08:00
|
|
|
startup_apps = NULL;
|
|
|
|
start_app_pos = -1;
|
2005-06-22 07:09:17 -07:00
|
|
|
e_init_done();
|
2004-12-09 05:56:06 -08:00
|
|
|
return;
|
|
|
|
}
|
2007-03-24 15:53:16 -07:00
|
|
|
e_exec(NULL, desktop, NULL, NULL, NULL);
|
2007-09-23 18:16:47 -07:00
|
|
|
snprintf(buf, sizeof(buf), "%s %s", _("Starting"), desktop->name);
|
2007-01-12 05:29:54 -08:00
|
|
|
e_init_status_set(buf);
|
2007-03-24 15:53:16 -07:00
|
|
|
ecore_job_add(_e_startup_next_cb, NULL);
|
2004-12-09 05:56:06 -08:00
|
|
|
}
|
|
|
|
|
2007-03-24 15:53:16 -07:00
|
|
|
static void
|
2010-06-24 09:19:12 -07:00
|
|
|
_e_startup_next_cb(__UNUSED__ void *data)
|
2004-12-09 05:56:06 -08:00
|
|
|
{
|
|
|
|
_e_startup();
|
|
|
|
}
|