chiark / gitweb /
Prep v231.2: Add mor debug messages to find out, why 'loginctl suspend' isn't working.
[elogind.git] / src / login / logind-seat.h
1 #pragma once
2
3 /***
4   This file is part of systemd.
5
6   Copyright 2011 Lennart Poettering
7
8   systemd is free software; you can redistribute it and/or modify it
9   under the terms of the GNU Lesser General Public License as published by
10   the Free Software Foundation; either version 2.1 of the License, or
11   (at your option) any later version.
12
13   systemd is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16   Lesser General Public License for more details.
17
18   You should have received a copy of the GNU Lesser General Public License
19   along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 typedef struct Seat Seat;
23
24 #include "list.h"
25 #include "logind-session.h"
26
27 struct Seat {
28         Manager *manager;
29         char *id;
30
31         char *state_file;
32
33         LIST_HEAD(Device, devices);
34
35         Session *active;
36         Session *pending_switch;
37         LIST_HEAD(Session, sessions);
38
39         Session **positions;
40         size_t position_count;
41
42         bool in_gc_queue:1;
43         bool started:1;
44
45         LIST_FIELDS(Seat, gc_queue);
46 };
47
48 Seat *seat_new(Manager *m, const char *id);
49 void seat_free(Seat *s);
50
51 int seat_save(Seat *s);
52 int seat_load(Seat *s);
53
54 int seat_apply_acls(Seat *s, Session *old_active);
55 int seat_set_active(Seat *s, Session *session);
56 int seat_switch_to(Seat *s, unsigned int num);
57 int seat_switch_to_next(Seat *s);
58 int seat_switch_to_previous(Seat *s);
59 int seat_active_vt_changed(Seat *s, unsigned int vtnr);
60 int seat_read_active_vt(Seat *s);
61 #if 0 /// UNNEEDED by elogind
62 int seat_preallocate_vts(Seat *s);
63 #endif // 0
64
65 int seat_attach_session(Seat *s, Session *session);
66 void seat_complete_switch(Seat *s);
67 void seat_evict_position(Seat *s, Session *session);
68 void seat_claim_position(Seat *s, Session *session, unsigned int pos);
69
70 bool seat_has_vts(Seat *s);
71 bool seat_is_seat0(Seat *s);
72 bool seat_can_multi_session(Seat *s);
73 bool seat_can_tty(Seat *s);
74 bool seat_has_master_device(Seat *s);
75 bool seat_can_graphical(Seat *s);
76
77 int seat_get_idle_hint(Seat *s, dual_timestamp *t);
78
79 int seat_start(Seat *s);
80 int seat_stop(Seat *s, bool force);
81 int seat_stop_sessions(Seat *s, bool force);
82
83 bool seat_check_gc(Seat *s, bool drop_not_started);
84 void seat_add_to_gc_queue(Seat *s);
85
86 bool seat_name_is_valid(const char *name);
87
88 extern const sd_bus_vtable seat_vtable[];
89
90 int seat_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
91 int seat_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
92 char *seat_bus_path(Seat *s);
93
94 int seat_send_signal(Seat *s, bool new_seat);
95 int seat_send_changed(Seat *s, const char *properties, ...) _sentinel_;
96
97 int bus_seat_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error);