seat: Rework seat activation/switch logic

The seat activation logic did not correctly handle VT switching and
switching between multiple sessions.

Session switching on VT-bound seats is now performed using a VT switch,
taking advantage of VT signals to perform the actual switch. This
simplifies switching logic and makes it more robust.
This commit is contained in:
Kenny Levinsen 2020-09-18 15:38:53 +02:00
parent d16122e98a
commit 51c7467516
5 changed files with 186 additions and 190 deletions

View file

@ -33,9 +33,9 @@ struct seat {
struct client *next_client;
bool vt_bound;
bool vt_pending_ack;
int next_vt;
int curttyfd;
int cur_ttyfd;
int cur_vt;
int session_cnt;
};
struct seat *seat_create(const char *name, bool vt_bound);
@ -52,7 +52,7 @@ int seat_close_device(struct client *client, struct seat_device *seat_device);
struct seat_device *seat_find_device(struct client *client, int device_id);
int seat_set_next_session(struct client *client, int session);
int seat_activate(struct seat *seat);
int seat_vt_activate(struct seat *seat);
int seat_prepare_vt_switch(struct seat *seat);
#endif