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:
parent
d16122e98a
commit
51c7467516
5 changed files with 186 additions and 190 deletions
|
@ -21,7 +21,7 @@ struct client {
|
|||
gid_t gid;
|
||||
|
||||
struct seat *seat;
|
||||
int seat_vt;
|
||||
int session;
|
||||
bool pending_disable;
|
||||
|
||||
struct linked_list devices;
|
||||
|
@ -31,7 +31,6 @@ struct client *client_create(struct server *server, int client_fd);
|
|||
void client_destroy(struct client *client);
|
||||
|
||||
int client_handle_connection(int fd, uint32_t mask, void *data);
|
||||
int client_get_session(const struct client *client);
|
||||
int client_send_enable_seat(struct client *client);
|
||||
int client_send_disable_seat(struct client *client);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue