src/video/x11/SDL_x11dga.c
author Sam Lantinga <slouken@libsdl.org>
Wed, 06 Mar 2002 11:23:08 +0000
changeset 297 f6ffac90895c
parent 292 eadc0746dfaf
child 769 b8d311d90021
permissions -rw-r--r--
Updated copyright information for 2002
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Library General Public
     7     License as published by the Free Software Foundation; either
     8     version 2 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Library General Public License for more details.
    14 
    15     You should have received a copy of the GNU Library General Public
    16     License along with this library; if not, write to the Free
    17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 #ifdef SAVE_RCSID
    24 static char rcsid =
    25  "@(#) $Id$";
    26 #endif
    27 
    28 /* This is currently only used to enable DGA mouse.
    29    The new fullscreen code makes it very difficult to handle DGA dynamically.
    30    There will be a completely separate DGA driver that is fullscreen-only.
    31 */
    32 
    33 #include <stdlib.h>		/* For getenv() */
    34 #include "SDL_video.h"
    35 #include "SDL_cursor_c.h"
    36 #include "SDL_x11dga_c.h"
    37 
    38 /* Global for the error handler */
    39 int dga_event, dga_error = -1;
    40 
    41 void X11_EnableDGAMouse(_THIS)
    42 {
    43 #ifdef XFREE86_DGAMOUSE
    44     int dga_major, dga_minor;
    45     int use_dgamouse;
    46     const char *env_use_dgamouse;
    47 
    48     /* Check configuration to see if we should use DGA mouse */
    49 #ifdef DEFAULT_DGAMOUSE
    50     use_dgamouse = 1;
    51 #else
    52     use_dgamouse = 0;
    53 #endif
    54     env_use_dgamouse = getenv("SDL_VIDEO_X11_DGAMOUSE");
    55     if ( env_use_dgamouse ) {
    56         use_dgamouse = atoi(env_use_dgamouse);
    57     }
    58     /* Check for buggy X servers */
    59     if ( use_dgamouse && BUGGY_XFREE86(==, 4000) ) {
    60         use_dgamouse = 0;
    61     }
    62     /* Only use DGA mouse if the cursor is not showing (in relative mode) */
    63     if ( use_dgamouse && local_X11 && !(using_dga & DGA_MOUSE) &&
    64          SDL_NAME(XF86DGAQueryExtension)(SDL_Display, &dga_event, &dga_error) &&
    65          SDL_NAME(XF86DGAQueryVersion)(SDL_Display, &dga_major, &dga_minor) ) {
    66 	if ( SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, XF86DGADirectMouse) ) {
    67             using_dga |= DGA_MOUSE;
    68         }
    69     }
    70 #endif /* XFREE86_DGAMOUSE */
    71 }
    72 
    73 /* Argh.  Glide resets DGA mouse mode when it makes the context current! */
    74 void X11_CheckDGAMouse(_THIS)
    75 {
    76 #ifdef XFREE86_DGAMOUSE
    77     int flags;
    78 
    79     if ( using_dga & DGA_MOUSE ) {
    80         SDL_NAME(XF86DGAQueryDirectVideo)(SDL_Display, SDL_Screen, &flags);
    81         if ( ! (flags & XF86DGADirectMouse) ) {
    82                 SDL_NAME(XF86DGADirectVideo)(SDL_Display,SDL_Screen,XF86DGADirectMouse);
    83         }
    84     }
    85 #endif
    86 }
    87 
    88 void X11_DisableDGAMouse(_THIS)
    89 {
    90 #ifdef XFREE86_DGAMOUSE
    91     if ( using_dga & DGA_MOUSE ) {
    92 	SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, 0);
    93         using_dga &= ~DGA_MOUSE;
    94     }
    95 #endif /* XFREE86_DGAMOUSE */
    96 }