seat: clean up session-callback function type
We use structures to pass information in all callbacks so we always get 3 arguments: parent, parameters, data Also change the return type to int so we can catch errors when changing session stati. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
f448fdb3f8
commit
68af064040
@ -270,14 +270,13 @@ static void client_free(struct cdev_client *client)
|
||||
free(client);
|
||||
}
|
||||
|
||||
static void client_session_event(struct kmscon_session *s,
|
||||
unsigned int event,
|
||||
struct uterm_display *disp,
|
||||
void *data)
|
||||
static int client_session_event(struct kmscon_session *s,
|
||||
struct kmscon_session_event *ev,
|
||||
void *data)
|
||||
{
|
||||
struct cdev_client *client = data;
|
||||
|
||||
switch (event) {
|
||||
switch (ev->type) {
|
||||
case KMSCON_SESSION_ACTIVATE:
|
||||
client->active = true;
|
||||
break;
|
||||
@ -288,6 +287,8 @@ static void client_session_event(struct kmscon_session *s,
|
||||
client_free(client);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int client_new(struct cdev_client **out, struct kmscon_cdev *cdev)
|
||||
@ -1037,18 +1038,20 @@ void kmscon_cdev_destroy(struct kmscon_cdev *cdev)
|
||||
close(cdev->fd);
|
||||
}
|
||||
|
||||
static void session_event(struct kmscon_session *session, unsigned int event,
|
||||
struct uterm_display *disp, void *data)
|
||||
static int session_event(struct kmscon_session *session,
|
||||
struct kmscon_session_event *ev, void *data)
|
||||
{
|
||||
struct kmscon_cdev *cdev = data;
|
||||
|
||||
switch (event) {
|
||||
switch (ev->type) {
|
||||
case KMSCON_SESSION_UNREGISTER:
|
||||
log_debug("destroy cdev session");
|
||||
kmscon_cdev_destroy(cdev);
|
||||
free(cdev);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kmscon_cdev_register(struct kmscon_session **out,
|
||||
|
@ -775,18 +775,19 @@ static void compositor_destroy(struct compositor *comp)
|
||||
free(comp);
|
||||
}
|
||||
|
||||
static void compositor_session_event(struct kmscon_session *s, unsigned int ev,
|
||||
struct uterm_display *disp, void *data)
|
||||
static int compositor_session_event(struct kmscon_session *s,
|
||||
struct kmscon_session_event *ev,
|
||||
void *data)
|
||||
{
|
||||
struct compositor *comp = data;
|
||||
struct output *output;
|
||||
|
||||
switch (ev) {
|
||||
switch (ev->type) {
|
||||
case KMSCON_SESSION_DISPLAY_NEW:
|
||||
compositor_add_output(comp, disp);
|
||||
compositor_add_output(comp, ev->disp);
|
||||
break;
|
||||
case KMSCON_SESSION_DISPLAY_GONE:
|
||||
output = compositor_find_output(comp, disp);
|
||||
output = compositor_find_output(comp, ev->disp);
|
||||
if (!output)
|
||||
return;
|
||||
compositor_remove_output(comp, output);
|
||||
@ -795,6 +796,8 @@ static void compositor_session_event(struct kmscon_session *s, unsigned int ev,
|
||||
compositor_destroy(comp);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kmscon_compositor_register(struct kmscon_session **out,
|
||||
|
@ -61,15 +61,14 @@ static void dummy_redraw(struct kmscon_dummy *dummy, struct display *d)
|
||||
uterm_display_swap(d->disp);
|
||||
}
|
||||
|
||||
static void dummy_session_event(struct kmscon_session *session,
|
||||
unsigned int event, struct uterm_display *disp,
|
||||
void *data)
|
||||
static int dummy_session_event(struct kmscon_session *session,
|
||||
struct kmscon_session_event *ev, void *data)
|
||||
{
|
||||
struct kmscon_dummy *dummy = data;
|
||||
struct display *d;
|
||||
struct shl_dlist *iter;
|
||||
|
||||
switch (event) {
|
||||
switch (ev->type) {
|
||||
case KMSCON_SESSION_DISPLAY_NEW:
|
||||
d = malloc(sizeof(*d));
|
||||
if (!d) {
|
||||
@ -77,7 +76,7 @@ static void dummy_session_event(struct kmscon_session *session,
|
||||
break;
|
||||
}
|
||||
memset(d, 0, sizeof(*d));
|
||||
d->disp = disp;
|
||||
d->disp = ev->disp;
|
||||
shl_dlist_link_tail(&dummy->displays, &d->list);
|
||||
if (dummy->active)
|
||||
dummy_redraw(dummy, d);
|
||||
@ -85,7 +84,7 @@ static void dummy_session_event(struct kmscon_session *session,
|
||||
case KMSCON_SESSION_DISPLAY_GONE:
|
||||
shl_dlist_for_each(iter, &dummy->displays) {
|
||||
d = shl_dlist_entry(iter, struct display, list);
|
||||
if (d->disp != disp)
|
||||
if (d->disp != ev->disp)
|
||||
continue;
|
||||
|
||||
shl_dlist_unlink(&d->list);
|
||||
@ -114,6 +113,8 @@ static void dummy_session_event(struct kmscon_session *session,
|
||||
free(dummy);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kmscon_dummy_register(struct kmscon_session **out,
|
||||
|
@ -89,10 +89,15 @@ struct kmscon_seat {
|
||||
static void session_call(struct kmscon_session *sess, unsigned int event,
|
||||
struct uterm_display *disp)
|
||||
{
|
||||
struct kmscon_session_event ev;
|
||||
|
||||
if (!sess->cb)
|
||||
return;
|
||||
|
||||
sess->cb(sess, event, disp, sess->data);
|
||||
memset(&ev, 0, sizeof(ev));
|
||||
ev.type = event;
|
||||
ev.disp = disp;
|
||||
sess->cb(sess, &ev, sess->data);
|
||||
}
|
||||
|
||||
static void session_call_activate(struct kmscon_session *sess)
|
||||
|
@ -50,7 +50,7 @@ typedef void (*kmscon_seat_cb_t) (struct kmscon_seat *seat,
|
||||
unsigned int event,
|
||||
void *data);
|
||||
|
||||
enum kmscon_session_event {
|
||||
enum kmscon_session_event_type {
|
||||
KMSCON_SESSION_DISPLAY_NEW,
|
||||
KMSCON_SESSION_DISPLAY_GONE,
|
||||
KMSCON_SESSION_ACTIVATE,
|
||||
@ -58,10 +58,14 @@ enum kmscon_session_event {
|
||||
KMSCON_SESSION_UNREGISTER,
|
||||
};
|
||||
|
||||
typedef void (*kmscon_session_cb_t) (struct kmscon_session *session,
|
||||
unsigned int event,
|
||||
struct uterm_display *disp,
|
||||
void *data);
|
||||
struct kmscon_session_event {
|
||||
unsigned int type;
|
||||
struct uterm_display *disp;
|
||||
};
|
||||
|
||||
typedef int (*kmscon_session_cb_t) (struct kmscon_session *session,
|
||||
struct kmscon_session_event *event,
|
||||
void *data);
|
||||
|
||||
int kmscon_seat_new(struct kmscon_seat **out,
|
||||
struct conf_ctx *main_conf,
|
||||
|
@ -426,17 +426,17 @@ static void terminal_destroy(struct kmscon_terminal *term)
|
||||
free(term);
|
||||
}
|
||||
|
||||
static void session_event(struct kmscon_session *session, unsigned int event,
|
||||
struct uterm_display *disp, void *data)
|
||||
static int session_event(struct kmscon_session *session,
|
||||
struct kmscon_session_event *ev, void *data)
|
||||
{
|
||||
struct kmscon_terminal *term = data;
|
||||
|
||||
switch (event) {
|
||||
switch (ev->type) {
|
||||
case KMSCON_SESSION_DISPLAY_NEW:
|
||||
add_display(term, disp);
|
||||
add_display(term, ev->disp);
|
||||
break;
|
||||
case KMSCON_SESSION_DISPLAY_GONE:
|
||||
rm_display(term, disp);
|
||||
rm_display(term, ev->disp);
|
||||
break;
|
||||
case KMSCON_SESSION_ACTIVATE:
|
||||
term->awake = true;
|
||||
@ -451,6 +451,8 @@ static void session_event(struct kmscon_session *session, unsigned int event,
|
||||
terminal_destroy(term);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pty_input(struct kmscon_pty *pty, const char *u8, size_t len,
|
||||
|
Loading…
x
Reference in New Issue
Block a user