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:
David Herrmann 2012-11-02 18:25:49 +01:00
parent f448fdb3f8
commit 68af064040
6 changed files with 48 additions and 30 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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)

View File

@ -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,

View File

@ -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,