]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
c2f1db8f | 2 | #pragma once |
90821c93 | 3 | |
90821c93 LP |
4 | typedef struct Seat Seat; |
5 | ||
6 | #include "list.h" | |
90821c93 LP |
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; | |
d7bd01b5 | 18 | Session *pending_switch; |
90821c93 | 19 | LIST_HEAD(Session, sessions); |
14c3baca | 20 | |
49e6fdbf DH |
21 | Session **positions; |
22 | size_t position_count; | |
23 | ||
14c3baca | 24 | bool in_gc_queue:1; |
3f49d45a | 25 | bool started:1; |
14c3baca LP |
26 | |
27 | LIST_FIELDS(Seat, gc_queue); | |
90821c93 LP |
28 | }; |
29 | ||
8c29a457 LP |
30 | int seat_new(Seat **ret, Manager *m, const char *id); |
31 | Seat* seat_free(Seat *s); | |
32 | ||
33 | DEFINE_TRIVIAL_CLEANUP_FUNC(Seat *, seat_free); | |
14c3baca | 34 | |
90821c93 LP |
35 | int seat_save(Seat *s); |
36 | int seat_load(Seat *s); | |
37 | ||
14c3baca | 38 | int seat_apply_acls(Seat *s, Session *old_active); |
9418f147 | 39 | int seat_set_active(Seat *s, Session *session); |
14cb109d | 40 | int seat_switch_to(Seat *s, unsigned num); |
49e6fdbf DH |
41 | int seat_switch_to_next(Seat *s); |
42 | int seat_switch_to_previous(Seat *s); | |
14cb109d | 43 | int seat_active_vt_changed(Seat *s, unsigned vtnr); |
14c3baca | 44 | int seat_read_active_vt(Seat *s); |
30ed21ce | 45 | int seat_preallocate_vts(Seat *s); |
14c3baca | 46 | |
a185c5aa | 47 | int seat_attach_session(Seat *s, Session *session); |
d7bd01b5 | 48 | void seat_complete_switch(Seat *s); |
49e6fdbf | 49 | void seat_evict_position(Seat *s, Session *session); |
14cb109d | 50 | void seat_claim_position(Seat *s, Session *session, unsigned pos); |
a185c5aa | 51 | |
bf7825ae | 52 | bool seat_has_vts(Seat *s); |
92432fcc | 53 | bool seat_is_seat0(Seat *s); |
f1a8e221 | 54 | bool seat_can_tty(Seat *s); |
718d006a | 55 | bool seat_has_master_device(Seat *s); |
f1a8e221 LP |
56 | bool seat_can_graphical(Seat *s); |
57 | ||
a185c5aa LP |
58 | int seat_get_idle_hint(Seat *s, dual_timestamp *t); |
59 | ||
14c3baca | 60 | int seat_start(Seat *s); |
9bb69af4 ZJS |
61 | int seat_stop(Seat *s, bool force); |
62 | int seat_stop_sessions(Seat *s, bool force); | |
14c3baca | 63 | |
5c093a23 | 64 | bool seat_may_gc(Seat *s, bool drop_not_started); |
14c3baca LP |
65 | void seat_add_to_gc_queue(Seat *s); |
66 | ||
3f49d45a | 67 | bool seat_name_is_valid(const char *name); |
3f49d45a | 68 | |
3b92c086 LP |
69 | static inline bool SEAT_IS_SELF(const char *name) { |
70 | return isempty(name) || streq(name, "self"); | |
71 | } | |
72 | ||
73 | static inline bool SEAT_IS_AUTO(const char *name) { | |
74 | return streq_ptr(name, "auto"); | |
75 | } |