Branch data 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 : : }