Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-//#include <termios.h>
-//#include <sys/ioctl.h>
-//#include <sys/stat.h>
-//#include <sys/vt.h>
-//#include <stdarg.h>
-//#include <stdio.h>
#include <signal.h>
#include <dlfcn.h>
case XK_Insert:key = K_INS; break;
case XK_KP_Insert: key = K_KP_INS; break;
- case XK_KP_Multiply: key = '*'; break;
+ case XK_KP_Multiply: key = K_KP_MULTIPLY; break;
case XK_KP_Add: key = K_KP_PLUS; break;
case XK_KP_Subtract: key = K_KP_MINUS; break;
case XK_KP_Divide: key = K_KP_SLASH; break;
#endif
XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);
- XGrabKeyboard(vidx11_display, win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
+ if (vid_grabkeyboard.integer || vid_isfullscreen)
+ XGrabKeyboard(vidx11_display, win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
mouse_x = mouse_y = 0;
cl_ignoremousemove = true;
break;
case DestroyNotify:
// window has been destroyed
- Sys_Quit();
+ Sys_Quit(0);
break;
case ClientMessage:
// window manager messages
if ((event.xclient.format == 32) && ((unsigned int)event.xclient.data.l[0] == wm_delete_window_atom))
- Sys_Quit();
+ Sys_Quit(0);
break;
case MapNotify:
// window restored
vid_hidden = false;
- vid_activewindow = false;
VID_RestoreSystemGamma();
break;
case UnmapNotify:
// window iconified/rolledup/whatever
vid_hidden = true;
- vid_activewindow = false;
VID_RestoreSystemGamma();
break;
case FocusIn:
Con_Printf("Unable to open symbol list for %s\n", name);
return false;
}
- strcpy(gl_driver, name);
+ strlcpy(gl_driver, name, sizeof(gl_driver));
return true;
}
{
Con_Printf("Received signal %d, exiting...\n", sig);
VID_RestoreSystemGamma();
- Sys_Quit();
- exit(0);
+ Sys_Quit(1);
}
void InitSig(void)
Con_Print("glXSwapIntervalSGI didn't accept the vid_vsync change, it will take effect on next vid_restart (GLX_SGI_swap_control does not allow turning off vsync)\n");
}
-// handle the mouse state when windowed if that's changed
+ // handle the mouse state when windowed if that's changed
vid_usemouse = false;
if (allowmousegrab && vid_mouse.integer && !key_consoleactive && (key_dest != key_game || !cls.demoplayback))
vid_usemouse = true;
#endif
InitSig(); // trap evil signals
// COMMANDLINEOPTION: Input: -nomouse disables mouse support (see also vid_mouse cvar)
- if (COM_CheckParm ("-nomouse") || COM_CheckParm("-safe"))
+ if (COM_CheckParm ("-nomouse"))
mouse_avail = false;
}
-void VID_BuildGLXAttrib(int *attrib, int stencil)
+void VID_BuildGLXAttrib(int *attrib, qboolean stencil, qboolean stereobuffer)
{
*attrib++ = GLX_RGBA;
*attrib++ = GLX_RED_SIZE;*attrib++ = 1;
*attrib++ = GLX_STENCIL_SIZE;*attrib++ = 8;
*attrib++ = GLX_ALPHA_SIZE;*attrib++ = 1;
}
+ if (stereobuffer)
+ *attrib++ = GLX_STEREO;
*attrib++ = None;
}
-int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate)
+int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate, int stereobuffer)
{
int i;
int attrib[32];
return false;
}
- VID_BuildGLXAttrib(attrib, bpp == 32);
+ VID_BuildGLXAttrib(attrib, bpp == 32, stereobuffer);
visinfo = qglXChooseVisual(vidx11_display, vidx11_screen, attrib);
if (!visinfo)
{
void Sys_SendKeyEvents(void)
{
+ static qboolean sound_active = true;
+
+ // enable/disable sound on focus gain/loss
+ if (!vid_activewindow && sound_active)
+ {
+ S_BlockSound ();
+ sound_active = false;
+ }
+ else if (vid_activewindow && !sound_active)
+ {
+ S_UnblockSound ();
+ sound_active = true;
+ }
+
HandleEvents();
}