diff options
Diffstat (limited to 'backend/session/session.c')
-rw-r--r-- | backend/session/session.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/backend/session/session.c b/backend/session/session.c new file mode 100644 index 00000000..3f4c7910 --- /dev/null +++ b/backend/session/session.c @@ -0,0 +1,54 @@ +#include <stddef.h> +#include <stdarg.h> +#include <wlr/session.h> +#include <wlr/session/interface.h> +#include <wlr/util/log.h> + +extern const struct session_impl session_logind; +extern const struct session_impl session_direct; + +static const struct session_impl *impls[] = { +#ifdef HAS_SYSTEMD + &session_logind, +#endif + &session_direct, + NULL, +}; + +struct wlr_session *wlr_session_start(struct wl_display *disp) { + const struct session_impl **iter; + + for (iter = impls; *iter; ++iter) { + struct wlr_session *session = (*iter)->start(disp); + if (session) { + return session; + } + } + + wlr_log(L_ERROR, "Failed to load session backend"); + return NULL; +} + +void wlr_session_finish(struct wlr_session *session) { + if (!session) { + return; + } + + session->impl->finish(session); +}; + +int wlr_session_open_file(struct wlr_session *session, const char *path) { + return session->impl->open(session, path); +} + +void wlr_session_close_file(struct wlr_session *session, int fd) { + session->impl->close(session, fd); +} + +bool wlr_session_change_vt(struct wlr_session *session, unsigned vt) { + if (!session) { + return false; + } + + return session->impl->change_vt(session, vt); +} |