From 275692ee702890960e7cc06f3690f3e85be742e1 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Mon, 19 Nov 2012 13:06:43 +0100 Subject: [PATCH] seat: allow sessions to control VT-switches A new helper allows sessions to manually handly input events so the core does no longer perform session/VT switches on their behalf. Signed-off-by: David Herrmann --- src/kmscon_seat.c | 13 +++++++++++-- src/kmscon_seat.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/kmscon_seat.c b/src/kmscon_seat.c index a595695..d326346 100644 --- a/src/kmscon_seat.c +++ b/src/kmscon_seat.c @@ -53,6 +53,7 @@ struct kmscon_session { bool enabled; bool foreground; + bool manual_input; bool deactivating; struct ev_timer *timer; @@ -535,14 +536,14 @@ static void seat_input_event(struct uterm_input *input, if (conf_grab_matches(seat->conf->grab_session_next, ev->mods, ev->num_syms, ev->keysyms)) { ev->handled = true; - if (seat->foreground) + if (!seat->current_sess || !seat->current_sess->manual_input) seat_next(seat); return; } if (conf_grab_matches(seat->conf->grab_session_prev, ev->mods, ev->num_syms, ev->keysyms)) { ev->handled = true; - if (seat->foreground) + if (!seat->current_sess || !seat->current_sess->manual_input) seat_prev(seat); return; } @@ -948,6 +949,14 @@ bool kmscon_session_is_active(struct kmscon_session *sess) return sess && sess->seat && sess->seat->current_sess == sess; } +void kmscon_session_set_manual_input(struct kmscon_session *sess, bool set) +{ + if (!sess) + return; + + sess->manual_input = set; +} + void kmscon_session_enable(struct kmscon_session *sess) { if (!sess || sess->enabled) diff --git a/src/kmscon_seat.h b/src/kmscon_seat.h index f56b367..0ce5851 100644 --- a/src/kmscon_seat.h +++ b/src/kmscon_seat.h @@ -101,6 +101,7 @@ void kmscon_session_unregister(struct kmscon_session *sess); bool kmscon_session_is_registered(struct kmscon_session *sess); bool kmscon_session_is_active(struct kmscon_session *sess); +void kmscon_session_set_manual_input(struct kmscon_session *sess, bool set); void kmscon_session_enable(struct kmscon_session *sess); void kmscon_session_disable(struct kmscon_session *sess);