summaryrefslogtreecommitdiff
path: root/src/glut/fbdev/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glut/fbdev/input.c')
-rw-r--r--src/glut/fbdev/input.c94
1 files changed, 50 insertions, 44 deletions
diff --git a/src/glut/fbdev/input.c b/src/glut/fbdev/input.c
index 7daec8c914..4fbd94d070 100644
--- a/src/glut/fbdev/input.c
+++ b/src/glut/fbdev/input.c
@@ -126,8 +126,11 @@ static void KeyboardHandler(int sig)
if(!release && labelval >= K_F1 && labelval <= K_F12)
if(KeyboardModifiers & GLUT_ACTIVE_ALT) {
/* VT switch, we must do it */
- if(ioctl(ConsoleFD, VT_ACTIVATE, labelval - K_F1 + 1) < 0)
- sprintf(exiterror, "Error switching console\n");
+ if(Swapping)
+ VTSwitch = labelval - K_F1 + 1;
+ else
+ if(ioctl(ConsoleFD, VT_ACTIVATE, labelval - K_F1 + 1) < 0)
+ sprintf(exiterror, "Error switching console\n");
return;
}
write(kbdpipe[1], &code, 1);
@@ -456,6 +459,7 @@ static int ReadMouse(void)
PassiveMotionFunc(MouseX, MouseY);
EraseCursor();
+
if(ActiveMenu)
Redisplay = 1;
else
@@ -515,14 +519,17 @@ void InitializeVT(int usestdin)
struct vt_mode vt;
char console[128];
- /* terminos settings for straight-through mode */
+ signal(SIGIO, SIG_IGN);
+
+ /* save old terminos settings */
if (tcgetattr(0, &OldTermios) < 0) {
sprintf(exiterror, "tcgetattr failed\n");
exit(0);
}
tio = OldTermios;
-
+
+ /* terminos settings for straight-through mode */
tio.c_lflag &= ~(ICANON | ECHO | ISIG);
tio.c_iflag &= ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON);
tio.c_iflag |= IGNBRK;
@@ -607,8 +614,8 @@ void InitializeVT(int usestdin)
}
/* use SIGIO so VT switching can work if the program is locked */
- if(ConsoleFD)
signal(SIGIO, KeyboardHandler);
+
pipe(kbdpipe);
if(fcntl(kbdpipe[0], F_SETFL, O_NONBLOCK | O_ASYNC) < 0) {
@@ -642,64 +649,63 @@ void InitializeVT(int usestdin)
void RestoreVT(void)
{
- if(ConsoleFD >= 0)
- if (tcsetattr(0, TCSANOW, &OldTermios) < 0)
- fprintf(stderr, "tcsetattr failed\n");
+ if(ConsoleFD < 0)
+ return;
- if(ConsoleFD > 0) {
- /* restore keyboard state */
- if (ioctl(ConsoleFD, VT_SETMODE, &OldVTMode) < 0)
- fprintf(stderr, "Failed to set vtmode\n");
+ if (tcsetattr(0, TCSANOW, &OldTermios) < 0)
+ fprintf(stderr, "tcsetattr failed\n");
- if (ioctl(ConsoleFD, KDSKBMODE, OldKDMode) < 0)
- fprintf(stderr, "ioctl KDSKBMODE failed!\n");
+ if(ConsoleFD == 0)
+ return;
- /* if we were in text mode, switching to graphics and back restores
- the colormap */
- if(ioctl(ConsoleFD, KDSETMODE, KD_GRAPHICS) < 0)
- fprintf(stderr, "ioctl KDSETMODE failed!\n");
+ /* restore keyboard state */
+ if (ioctl(ConsoleFD, VT_SETMODE, &OldVTMode) < 0)
+ fprintf(stderr, "Failed to set vtmode\n");
- if(ioctl(ConsoleFD, KDSETMODE, OldMode) < 0)
- fprintf(stderr, "ioctl KDSETMODE failed!\n");
+ if (ioctl(ConsoleFD, KDSKBMODE, OldKDMode) < 0)
+ fprintf(stderr, "ioctl KDSKBMODE failed!\n");
- close(ConsoleFD);
- }
+ if(ioctl(ConsoleFD, KDSETMODE, OldMode) < 0)
+ fprintf(stderr, "ioctl KDSETMODE failed!\n");
+
+ close(ConsoleFD);
}
void InitializeMouse(void)
{
#ifdef HAVE_GPM
- if(GpmMouse) {
+ if(!GpmMouse)
+#endif
+ {
+ const char *mousedev = getenv("MOUSE");
+ if(!mousedev)
+ mousedev = MOUSEDEV;
+ if((MouseFD = open(mousedev, O_RDONLY)) >= 0) {
+ if(!MouseSpeed)
+ MouseSpeed = 1;
+ NumMouseButtons = 3;
+ return;
+ }
+ }
+#ifdef HAVE_GPM
+ {
Gpm_Connect conn;
int c;
conn.eventMask = ~0; /* Want to know about all the events */
conn.defaultMask = 0; /* don't handle anything by default */
conn.minMod = 0; /* want everything */
conn.maxMod = ~0; /* all modifiers included */
- if(Gpm_Open(&conn, 0) == -1) {
- fprintf(stderr, "Cannot open gpmctl. Continuing without Mouse\n");
+ if(Gpm_Open(&conn, 0) != -1) {
+ if(!MouseSpeed)
+ MouseSpeed = 8;
+ NumMouseButtons = 3;
return;
}
-
- if(!MouseSpeed)
- MouseSpeed = 5;
- } else
+ fprintf(stderr, "Cannot open gpmctl.\n");
+ }
#endif
- {
- const char *mousedev = getenv("MOUSE");
- if(!mousedev)
- mousedev = MOUSEDEV;
- if((MouseFD = open(mousedev, O_RDONLY)) < 0) {
- fprintf(stderr,"Cannot open %s.\n"
- "Continuing without Mouse\n", MOUSEDEV);
- return;
- }
-
- if(!MouseSpeed)
- MouseSpeed = 1;
- }
-
- NumMouseButtons = 3;
+ fprintf(stderr,"Cannot open %s.\n"
+ "Continuing without Mouse\n", MOUSEDEV);
}
void CloseMouse(void)