]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_glx.c
in teamplay, frags counter now shows other teams instead of distribution/place in...
[xonotic/darkplaces.git] / vid_glx.c
index 96bf36f26d51d0b2dd2a7e50a55ae22cc4212cb2..e755f19b1bb9d92704bf00feb0d225dae6855deb 100644 (file)
--- a/vid_glx.c
+++ b/vid_glx.c
@@ -88,14 +88,13 @@ static qboolean vid_usingmouse = false;
 static qboolean vid_usingvsync = false;
 static qboolean vid_usevsync = false;
 static qboolean vid_x11_hardwaregammasupported = false;
+static qboolean vid_x11_dgasupported = false;
 static int vid_x11_gammarampsize = 0;
 static float   mouse_x, mouse_y;
 static int p_mouse_x, p_mouse_y;
 
 #if !defined(__APPLE__) && !defined(SUNOS)
-// FIXME: vid_dga_mouseaccel is poorly named, it is actually the multiplier for mouse movement, not an acceleration (which would be a power function or something)
-cvar_t vid_dga = {CVAR_SAVE, "vid_dga", "1", "make use of DGA mouse input"};
-cvar_t vid_dga_mouseaccel = {0, "vid_dga_mouseaccel", "1", "speed of mouse when using DGA mouse input"};
+cvar_t vid_dgamouse = {CVAR_SAVE, "vid_dgamouse", "1", "make use of DGA mouse input"};
 #endif
 
 qboolean vidmode_ext = false;
@@ -202,7 +201,7 @@ static int XLateKey(XKeyEvent *ev, char *ascii)
                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;
@@ -266,28 +265,16 @@ static void IN_Activate (qboolean grab)
                        XGrabPointer(vidx11_display, win,  True, 0, GrabModeAsync, GrabModeAsync, win, None, CurrentTime);
 
 #if !defined(__APPLE__) && !defined(SUNOS)
-                       if (vid_dga.integer)
+                       if (vid_dgamouse.integer && vid_x11_dgasupported)
                        {
-                               int MajorVersion, MinorVersion;
-
-                               if (!XF86DGAQueryVersion(vidx11_display, &MajorVersion, &MinorVersion))
-                               {
-                                       // unable to query, probably not supported
-                                       Con_Print( "Failed to detect XF86DGA Mouse\n" );
-                                       Cvar_SetValueQuick(&vid_dga, 0);
-                                       XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);
-                               }
-                               else
-                               {
-                                       XF86DGADirectVideo(vidx11_display, DefaultScreen(vidx11_display), XF86DGADirectMouse);
-                                       XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, 0, 0);
-                               }
+                               XF86DGADirectVideo(vidx11_display, DefaultScreen(vidx11_display), XF86DGADirectMouse);
+                               XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, 0, 0);
                        }
                        else
 #endif
                                XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);
 
-                       if (vid_grabkeyboard.integer)
+                       if (vid_grabkeyboard.integer || vid_isfullscreen)
                                XGrabKeyboard(vidx11_display, win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
 
                        mouse_x = mouse_y = 0;
@@ -300,7 +287,7 @@ static void IN_Activate (qboolean grab)
                if (vid_usingmouse)
                {
 #if !defined(__APPLE__) && !defined(SUNOS)
-                       if (vid_dga.integer)
+                       if (vid_x11_dgasupported)
                                XF86DGADirectVideo(vidx11_display, DefaultScreen(vidx11_display), 0);
 #endif
 
@@ -372,10 +359,10 @@ static void HandleEvents(void)
                        if (vid_usingmouse)
                        {
 #if !defined(__APPLE__) && !defined(SUNOS)
-                               if (vid_dga.integer == 1)
+                               if (vid_dgamouse.integer == 1 && vid_x11_dgasupported)
                                {
-                                       mouse_x += event.xmotion.x_root * vid_dga_mouseaccel.value;
-                                       mouse_y += event.xmotion.y_root * vid_dga_mouseaccel.value;
+                                       mouse_x += event.xmotion.x_root;
+                                       mouse_y += event.xmotion.y_root;
                                }
                                else
 #endif
@@ -425,12 +412,12 @@ static void HandleEvents(void)
                        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
@@ -487,7 +474,7 @@ static int GL_OpenLibrary(const char *name)
 {
        Con_Printf("Loading OpenGL driver %s\n", name);
        GL_CloseLibrary();
-       if (!(prjobj = dlopen(name, RTLD_LAZY)))
+       if (!(prjobj = dlopen(name, RTLD_LAZY | RTLD_GLOBAL)))
        {
                Con_Printf("Unable to open symbol list for %s\n", name);
                return false;
@@ -537,8 +524,7 @@ void signal_handler(int sig)
 {
        Con_Printf("Received signal %d, exiting...\n", sig);
        VID_RestoreSystemGamma();
-       Sys_Quit();
-       exit(0);
+       Sys_Quit(1);
 }
 
 void InitSig(void)
@@ -604,12 +590,11 @@ int VID_GetGamma(unsigned short *ramps, int rampsize)
 void VID_Init(void)
 {
 #if !defined(__APPLE__) && !defined(SUNOS)
-       Cvar_RegisterVariable (&vid_dga);
-       Cvar_RegisterVariable (&vid_dga_mouseaccel);
+       Cvar_RegisterVariable (&vid_dgamouse);
 #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;
 }
 
@@ -838,6 +823,11 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate
        vid_hidden = false;
        vid_activewindow = true;
        vid_x11_hardwaregammasupported = XF86VidModeGetGammaRampSize(vidx11_display, vidx11_screen, &vid_x11_gammarampsize) != 0;
+#if !defined(__APPLE__) && !defined(SUNOS)
+       vid_x11_dgasupported = XF86DGAQueryVersion(vidx11_display, &MajorVersion, &MinorVersion);
+       if (!vid_x11_dgasupported)
+               Con_Print( "Failed to detect XF86DGA Mouse extension\n" );
+#endif
        GL_Init();
        return true;
 }