seat: add enable/disable logic to sessions

If we want to allow dummy sessions, we need some way to disable these so
they are never activated on a seat. This patch disables every session by
default and you need to explicitely enable them to be available for
activation.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
David Herrmann 2012-10-12 15:30:13 +02:00
parent 70386fb702
commit a737fcd92d
2 changed files with 34 additions and 5 deletions

View File

@ -47,6 +47,8 @@ struct kmscon_session {
unsigned long ref;
struct kmscon_seat *seat;
bool enabled;
kmscon_session_cb_t cb;
void *data;
};
@ -110,7 +112,7 @@ static void session_activate(struct kmscon_session *sess)
{
struct kmscon_seat *seat = sess->seat;
if (seat->cur_sess == sess)
if (seat->cur_sess == sess || !sess->enabled)
return;
if (seat->cur_sess) {
@ -128,7 +130,7 @@ static void session_deactivate(struct kmscon_session *sess)
{
struct kmscon_seat *seat = sess->seat;
if (seat->cur_sess != sess)
if (seat->cur_sess != sess || !sess->enabled)
return;
if (seat->awake)
@ -302,6 +304,7 @@ int kmscon_seat_new(struct kmscon_seat **out,
ret = kmscon_terminal_register(&s, seat);
if (ret)
goto err_vt;
kmscon_session_enable(s);
ev_eloop_ref(seat->eloop);
uterm_vt_master_ref(seat->vtm);
@ -440,9 +443,6 @@ int kmscon_seat_register_session(struct kmscon_seat *seat,
shl_dlist_link(&seat->sessions, &sess->list);
*out = sess;
if (!seat->cur_sess)
session_activate(sess);
return 0;
}
@ -499,3 +499,28 @@ bool kmscon_session_is_active(struct kmscon_session *sess)
{
return sess && sess->seat && sess->seat->cur_sess == sess;
}
void kmscon_session_enable(struct kmscon_session *sess)
{
if (!sess)
return;
sess->enabled = true;
if (sess->seat && !sess->seat->cur_sess)
session_activate(sess);
}
void kmscon_session_disable(struct kmscon_session *sess)
{
if (!sess)
return;
if (sess->seat)
session_deactivate(sess);
sess->enabled = false;
}
bool kmscon_session_is_enabled(struct kmscon_session *sess)
{
return sess && sess->enabled;
}

View File

@ -95,4 +95,8 @@ void kmscon_session_activate(struct kmscon_session *sess);
void kmscon_session_deactivate(struct kmscon_session *sess);
bool kmscon_session_is_active(struct kmscon_session *sess);
void kmscon_session_enable(struct kmscon_session *sess);
void kmscon_session_disable(struct kmscon_session *sess);
bool kmscon_session_is_enabled(struct kmscon_session *sess);
#endif /* KMSCON_SEAT_H */