xfree86: Only switch to original VT if it is active.
If the X server is terminated while its VT is not active, it should not change the current VT. v2: Query current state in xf86CloseConsole using VT_GETSTATE instead of keeping track in xf86VTEnter/xf86VTLeave/etc.
This commit is contained in:
parent
7c25439f0d
commit
ff91c696ff
|
@ -299,6 +299,7 @@ void
|
||||||
xf86CloseConsole(void)
|
xf86CloseConsole(void)
|
||||||
{
|
{
|
||||||
struct vt_mode VT;
|
struct vt_mode VT;
|
||||||
|
struct vt_stat vts;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (xf86Info.ShareVTs) {
|
if (xf86Info.ShareVTs) {
|
||||||
|
@ -336,10 +337,19 @@ xf86CloseConsole(void)
|
||||||
|
|
||||||
if (xf86Info.autoVTSwitch) {
|
if (xf86Info.autoVTSwitch) {
|
||||||
/*
|
/*
|
||||||
* Perform a switch back to the active VT when we were started
|
* Perform a switch back to the active VT when we were started if our
|
||||||
*/
|
* vt is active now.
|
||||||
|
*/
|
||||||
if (activeVT >= 0) {
|
if (activeVT >= 0) {
|
||||||
switch_to(activeVT, "xf86CloseConsole");
|
SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts));
|
||||||
|
if (ret < 0) {
|
||||||
|
xf86Msg(X_WARNING, "xf86OpenConsole: VT_GETSTATE failed: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
} else {
|
||||||
|
if (vts.v_active == xf86Info.vtno) {
|
||||||
|
switch_to(activeVT, "xf86CloseConsole");
|
||||||
|
}
|
||||||
|
}
|
||||||
activeVT = -1;
|
activeVT = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue