summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2013-06-12 15:53:03 +0200
committerDavid Herrmann <dh.herrmann@gmail.com>2013-06-12 15:53:03 +0200
commit4962213bace101fd2861c19cc0e4c057b15a2030 (patch)
treefeacce7a15270701bd4d89d4ca54ee991bdbbf31
parent35eb595863af94a9b89cf00fecec21490fe0ffd7 (diff)
downloadkmscon-4962213bace101fd2861c19cc0e4c057b15a2030.tar.gz
kmscon-4962213bace101fd2861c19cc0e4c057b15a2030.tar.bz2
kmscon-4962213bace101fd2861c19cc0e4c057b15a2030.zip
kmscon: pass vtnr to pty so XDG_VTNR is set
We need to correctly set the VTNR for each new pty, otherwise the pty cannot set the XDG_VTNR correctly. Note that we do this only for real VTs, that is, vtnr > 0. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
-rw-r--r--src/kmscon_seat.c6
-rw-r--r--src/kmscon_terminal.c8
-rw-r--r--src/kmscon_terminal.h6
3 files changed, 15 insertions, 5 deletions
diff --git a/src/kmscon_seat.c b/src/kmscon_seat.c
index 8a259b9..9565f49 100644
--- a/src/kmscon_seat.c
+++ b/src/kmscon_seat.c
@@ -614,7 +614,8 @@ static void seat_input_event(struct uterm_input *input,
ev->handled = true;
if (!seat->conf->session_control)
return;
- ret = kmscon_terminal_register(&s, seat);
+ ret = kmscon_terminal_register(&s, seat,
+ uterm_vt_get_num(seat->vt));
if (ret == -EOPNOTSUPP) {
log_notice("terminal support not compiled in");
} else if (ret) {
@@ -791,7 +792,8 @@ void kmscon_seat_startup(struct kmscon_seat *seat)
}
if (seat->conf->terminal_session) {
- ret = kmscon_terminal_register(&s, seat);
+ ret = kmscon_terminal_register(&s, seat,
+ uterm_vt_get_num(seat->vt));
if (ret == -EOPNOTSUPP)
log_notice("terminal support not compiled in");
else if (ret)
diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c
index 740a27c..482d50f 100644
--- a/src/kmscon_terminal.c
+++ b/src/kmscon_terminal.c
@@ -580,7 +580,7 @@ static void write_event(struct tsm_vte *vte, const char *u8, size_t len,
}
int kmscon_terminal_register(struct kmscon_session **out,
- struct kmscon_seat *seat)
+ struct kmscon_seat *seat, unsigned int vtnr)
{
struct kmscon_terminal *term;
int ret;
@@ -646,6 +646,12 @@ int kmscon_terminal_register(struct kmscon_session **out,
if (ret)
goto err_pty;
+ if (vtnr > 0) {
+ ret = kmscon_pty_set_vtnr(term->pty, vtnr);
+ if (ret)
+ goto err_pty;
+ }
+
ret = ev_eloop_new_fd(term->eloop, &term->ptyfd,
kmscon_pty_get_fd(term->pty),
EV_READABLE, pty_event, term);
diff --git a/src/kmscon_terminal.h b/src/kmscon_terminal.h
index 9035b72..9c6a373 100644
--- a/src/kmscon_terminal.h
+++ b/src/kmscon_terminal.h
@@ -40,12 +40,14 @@
#ifdef BUILD_ENABLE_SESSION_TERMINAL
int kmscon_terminal_register(struct kmscon_session **out,
- struct kmscon_seat *seat);
+ struct kmscon_seat *seat,
+ unsigned int vtnr);
#else /* !BUILD_ENABLE_SESSION_TERMINAL */
static inline int kmscon_terminal_register(struct kmscon_session **out,
- struct kmscon_seat *seat)
+ struct kmscon_seat *seat,
+ unsigned int vtnr)
{
return -EOPNOTSUPP;
}