forked from enlightenment/enlightenment
e startup - support gnome autostart delay
support autostart delay - fixes T6785
This commit is contained in:
parent
923578705d
commit
8dcf7a8b0a
|
@ -57,11 +57,46 @@ e_startup(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
|
static Eina_Bool
|
||||||
|
_e_startup_delay(void *data)
|
||||||
|
{
|
||||||
|
Efreet_Desktop *desktop = data;
|
||||||
|
e_exec(NULL, desktop, NULL, NULL, NULL);
|
||||||
|
efreet_desktop_unref(desktop);
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom float parser for N.nnnn, or N,nnnn or N to avoid locale issues
|
||||||
|
static double
|
||||||
|
_atof(const char *s)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
double v = 0, dec;
|
||||||
|
|
||||||
|
for (p = s; isdigit(*p); p++)
|
||||||
|
{
|
||||||
|
v *= 10.0;
|
||||||
|
v += (double)(*p - '0');
|
||||||
|
}
|
||||||
|
if ((*p == '.') || (*p == ','))
|
||||||
|
{
|
||||||
|
dec = 0.1;
|
||||||
|
for (p++; isdigit(*p); p++)
|
||||||
|
{
|
||||||
|
v += ((double)(*p - '0')) * dec;
|
||||||
|
dec /= 10.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_startup(void)
|
_e_startup(void)
|
||||||
{
|
{
|
||||||
Efreet_Desktop *desktop;
|
Efreet_Desktop *desktop;
|
||||||
char buf[8192];
|
char buf[1024];
|
||||||
|
const char *s;
|
||||||
|
double delay = 0.0;
|
||||||
|
|
||||||
if (!startup_apps)
|
if (!startup_apps)
|
||||||
{
|
{
|
||||||
|
@ -78,7 +113,22 @@ _e_startup(void)
|
||||||
e_init_done();
|
e_init_done();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
e_exec(NULL, desktop, NULL, NULL, NULL);
|
if (desktop->x)
|
||||||
|
{
|
||||||
|
s = eina_hash_find(desktop->x, "X-GNOME-Autostart-Delay");
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
|
const char *prev = setlocale(LC_NUMERIC, "C");
|
||||||
|
delay = _atof(s);
|
||||||
|
setlocale(LC_NUMERIC, prev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (delay > 0.0)
|
||||||
|
{
|
||||||
|
efreet_desktop_ref(desktop);
|
||||||
|
ecore_timer_add(delay, _e_startup_delay, desktop);
|
||||||
|
}
|
||||||
|
else e_exec(NULL, desktop, NULL, NULL, NULL);
|
||||||
snprintf(buf, sizeof(buf), _("Starting %s"), desktop->name);
|
snprintf(buf, sizeof(buf), _("Starting %s"), desktop->name);
|
||||||
e_init_status_set(buf);
|
e_init_status_set(buf);
|
||||||
ecore_job_add(_e_startup_next_cb, NULL);
|
ecore_job_add(_e_startup_next_cb, NULL);
|
||||||
|
|
Loading…
Reference in New Issue