X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogind.c;h=d72a5bfa8b11e77b0cfb83ae8a2edbaaa63f2211;hb=a185c5aa2d8bef98716f8cf160da263c17e588b2;hp=a62802895c1feec12c54adc2fc7c9b0d1a1f9cec;hpb=91f9dcaf9270fe465525638cc08bd94590273349;p=elogind.git diff --git a/src/logind.c b/src/logind.c index a62802895..d72a5bfa8 100644 --- a/src/logind.c +++ b/src/logind.c @@ -853,6 +853,44 @@ void manager_gc(Manager *m) { } } +int manager_get_idle_hint(Manager *m, dual_timestamp *t) { + Session *s; + bool idle_hint = true; + dual_timestamp ts = { 0, 0 }; + Iterator i; + + assert(m); + + HASHMAP_FOREACH(s, m->sessions, i) { + dual_timestamp k; + int ih; + + ih = session_get_idle_hint(s, &k); + if (ih < 0) + return ih; + + if (!ih) { + if (!idle_hint) { + if (k.monotonic < ts.monotonic) + ts = k; + } else { + idle_hint = false; + ts = k; + } + } else if (idle_hint) { + + if (k.monotonic > ts.monotonic) + ts = k; + } + } + + if (t) + *t = ts; + + return idle_hint; +} + + int manager_startup(Manager *m) { int r; Seat *seat;