mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-22 12:55:58 +01:00
backend/session: add assertions
This commit is contained in:
parent
6c05f17a25
commit
07ea98dab9
3 changed files with 34 additions and 13 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
#include <assert.h>
|
||||||
#include <dev/evdev/input.h>
|
#include <dev/evdev/input.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -32,8 +33,14 @@ struct direct_session {
|
||||||
struct wl_event_source *vt_source;
|
struct wl_event_source *vt_source;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct direct_session *direct_session_from_session(
|
||||||
|
struct wlr_session *base) {
|
||||||
|
assert(base->impl == &session_direct);
|
||||||
|
return (struct direct_session *)base;
|
||||||
|
}
|
||||||
|
|
||||||
static int direct_session_open(struct wlr_session *base, const char *path) {
|
static int direct_session_open(struct wlr_session *base, const char *path) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
|
|
||||||
int fd = direct_ipc_open(session->sock, path);
|
int fd = direct_ipc_open(session->sock, path);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
@ -46,7 +53,7 @@ static int direct_session_open(struct wlr_session *base, const char *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void direct_session_close(struct wlr_session *base, int fd) {
|
static void direct_session_close(struct wlr_session *base, int fd) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
|
|
||||||
int ev;
|
int ev;
|
||||||
struct drm_version dv = {0};
|
struct drm_version dv = {0};
|
||||||
|
@ -60,12 +67,12 @@ static void direct_session_close(struct wlr_session *base, int fd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
|
static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
return ioctl(session->tty_fd, VT_ACTIVATE, (int)vt) == 0;
|
return ioctl(session->tty_fd, VT_ACTIVATE, (int)vt) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void direct_session_destroy(struct wlr_session *base) {
|
static void direct_session_destroy(struct wlr_session *base) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
struct vt_mode mode = {
|
struct vt_mode mode = {
|
||||||
.mode = VT_AUTO,
|
.mode = VT_AUTO,
|
||||||
};
|
};
|
||||||
|
@ -157,7 +164,8 @@ static bool setup_tty(struct direct_session *session, struct wl_display *display
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(fd, KDSKBMODE, K_CODE)) {
|
if (ioctl(fd, KDSKBMODE, K_CODE)) {
|
||||||
wlr_log_errno(WLR_ERROR, "Failed to set keyboard mode K_CODE on tty %d", tty);
|
wlr_log_errno(WLR_ERROR,
|
||||||
|
"Failed to set keyboard mode K_CODE on tty %d", tty);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#define _POSIX_C_SOURCE 200809L
|
#define _POSIX_C_SOURCE 200809L
|
||||||
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
@ -33,8 +34,14 @@ struct direct_session {
|
||||||
struct wl_event_source *vt_source;
|
struct wl_event_source *vt_source;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct direct_session *direct_session_from_session(
|
||||||
|
struct wlr_session *base) {
|
||||||
|
assert(base->impl == &session_direct);
|
||||||
|
return (struct direct_session *)base;
|
||||||
|
}
|
||||||
|
|
||||||
static int direct_session_open(struct wlr_session *base, const char *path) {
|
static int direct_session_open(struct wlr_session *base, const char *path) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
|
|
||||||
int fd = direct_ipc_open(session->sock, path);
|
int fd = direct_ipc_open(session->sock, path);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
@ -57,7 +64,7 @@ static int direct_session_open(struct wlr_session *base, const char *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void direct_session_close(struct wlr_session *base, int fd) {
|
static void direct_session_close(struct wlr_session *base, int fd) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
|
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (fstat(fd, &st) < 0) {
|
if (fstat(fd, &st) < 0) {
|
||||||
|
@ -76,7 +83,7 @@ static void direct_session_close(struct wlr_session *base, int fd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
|
static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
|
|
||||||
// Only seat0 has VTs associated with it
|
// Only seat0 has VTs associated with it
|
||||||
if (strcmp(session->base.seat, "seat0") != 0) {
|
if (strcmp(session->base.seat, "seat0") != 0) {
|
||||||
|
@ -87,7 +94,7 @@ static bool direct_change_vt(struct wlr_session *base, unsigned vt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void direct_session_destroy(struct wlr_session *base) {
|
static void direct_session_destroy(struct wlr_session *base) {
|
||||||
struct direct_session *session = wl_container_of(base, session, base);
|
struct direct_session *session = direct_session_from_session(base);
|
||||||
|
|
||||||
if (strcmp(session->base.seat, "seat0") == 0) {
|
if (strcmp(session->base.seat, "seat0") == 0) {
|
||||||
struct vt_mode mode = {
|
struct vt_mode mode = {
|
||||||
|
|
|
@ -37,8 +37,14 @@ struct logind_session {
|
||||||
char *path;
|
char *path;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct logind_session *logind_session_from_session(
|
||||||
|
struct wlr_session *base) {
|
||||||
|
assert(base->impl == &session_logind);
|
||||||
|
return (struct logind_session *)base;
|
||||||
|
}
|
||||||
|
|
||||||
static int logind_take_device(struct wlr_session *base, const char *path) {
|
static int logind_take_device(struct wlr_session *base, const char *path) {
|
||||||
struct logind_session *session = wl_container_of(base, session, base);
|
struct logind_session *session = logind_session_from_session(base);
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
@ -83,7 +89,7 @@ error:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void logind_release_device(struct wlr_session *base, int fd) {
|
static void logind_release_device(struct wlr_session *base, int fd) {
|
||||||
struct logind_session *session = wl_container_of(base, session, base);
|
struct logind_session *session = logind_session_from_session(base);
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
sd_bus_message *msg = NULL;
|
sd_bus_message *msg = NULL;
|
||||||
|
@ -108,7 +114,7 @@ static void logind_release_device(struct wlr_session *base, int fd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool logind_change_vt(struct wlr_session *base, unsigned vt) {
|
static bool logind_change_vt(struct wlr_session *base, unsigned vt) {
|
||||||
struct logind_session *session = wl_container_of(base, session, base);
|
struct logind_session *session = logind_session_from_session(base);
|
||||||
|
|
||||||
// Only seat0 has VTs associated with it
|
// Only seat0 has VTs associated with it
|
||||||
if (strcmp(session->base.seat, "seat0") != 0) {
|
if (strcmp(session->base.seat, "seat0") != 0) {
|
||||||
|
@ -212,7 +218,7 @@ static void release_control(struct logind_session *session) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void logind_session_destroy(struct wlr_session *base) {
|
static void logind_session_destroy(struct wlr_session *base) {
|
||||||
struct logind_session *session = wl_container_of(base, session, base);
|
struct logind_session *session = logind_session_from_session(base);
|
||||||
|
|
||||||
release_control(session);
|
release_control(session);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue