Line data Source code
1 : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : #pragma once 3 : 4 : typedef struct Seat Seat; 5 : 6 : #include "list.h" 7 : #include "logind-session.h" 8 : 9 : struct Seat { 10 : Manager *manager; 11 : char *id; 12 : 13 : char *state_file; 14 : 15 : LIST_HEAD(Device, devices); 16 : 17 : Session *active; 18 : Session *pending_switch; 19 : LIST_HEAD(Session, sessions); 20 : 21 : Session **positions; 22 : size_t position_count; 23 : 24 : bool in_gc_queue:1; 25 : bool started:1; 26 : 27 : LIST_FIELDS(Seat, gc_queue); 28 : }; 29 : 30 : int seat_new(Seat **ret, Manager *m, const char *id); 31 : Seat* seat_free(Seat *s); 32 : 33 0 : DEFINE_TRIVIAL_CLEANUP_FUNC(Seat *, seat_free); 34 : 35 : int seat_save(Seat *s); 36 : int seat_load(Seat *s); 37 : 38 : int seat_apply_acls(Seat *s, Session *old_active); 39 : int seat_set_active(Seat *s, Session *session); 40 : int seat_switch_to(Seat *s, unsigned num); 41 : int seat_switch_to_next(Seat *s); 42 : int seat_switch_to_previous(Seat *s); 43 : int seat_active_vt_changed(Seat *s, unsigned vtnr); 44 : int seat_read_active_vt(Seat *s); 45 : int seat_preallocate_vts(Seat *s); 46 : 47 : int seat_attach_session(Seat *s, Session *session); 48 : void seat_complete_switch(Seat *s); 49 : void seat_evict_position(Seat *s, Session *session); 50 : void seat_claim_position(Seat *s, Session *session, unsigned pos); 51 : 52 : bool seat_has_vts(Seat *s); 53 : bool seat_is_seat0(Seat *s); 54 : bool seat_can_multi_session(Seat *s); 55 : bool seat_can_tty(Seat *s); 56 : bool seat_has_master_device(Seat *s); 57 : bool seat_can_graphical(Seat *s); 58 : 59 : int seat_get_idle_hint(Seat *s, dual_timestamp *t); 60 : 61 : int seat_start(Seat *s); 62 : int seat_stop(Seat *s, bool force); 63 : int seat_stop_sessions(Seat *s, bool force); 64 : 65 : bool seat_may_gc(Seat *s, bool drop_not_started); 66 : void seat_add_to_gc_queue(Seat *s); 67 : 68 : bool seat_name_is_valid(const char *name); 69 : 70 0 : static inline bool SEAT_IS_SELF(const char *name) { 71 0 : return isempty(name) || streq(name, "self"); 72 : } 73 : 74 0 : static inline bool SEAT_IS_AUTO(const char *name) { 75 0 : return streq_ptr(name, "auto"); 76 : }