src/video/x11/SDL_x11dga.c
author Ryan C. Gordon <icculus@icculus.org>
Wed, 22 Mar 2006 05:00:59 +0000
changeset 1575 3ba88cb7eb1b
parent 1402 d910939febfa
child 1662 782fd950bd46
child 1895 c121d94672cb
child 4021 cbad710a6509
permissions -rw-r--r--
Updated dynamic X11 code. See details in Bugzilla #170.
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2006 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 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     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 #include "SDL_config.h"
    23 
    24 /* This is currently only used to enable DGA mouse.
    25    The new fullscreen code makes it very difficult to handle DGA dynamically.
    26    There will be a completely separate DGA driver that is fullscreen-only.
    27 */
    28 
    29 #include "SDL_video.h"
    30 #include "../SDL_cursor_c.h"
    31 #include "SDL_x11dga_c.h"
    32 
    33 /* Global for the error handler */
    34 int dga_event, dga_error = -1;
    35 
    36 void X11_EnableDGAMouse(_THIS)
    37 {
    38 #if SDL_VIDEO_DRIVER_X11_DGAMOUSE
    39     int dga_major, dga_minor;
    40     int use_dgamouse;
    41     const char *env_use_dgamouse;
    42 
    43     /* Check configuration to see if we should use DGA mouse */
    44     use_dgamouse = 1;
    45     env_use_dgamouse = SDL_getenv("SDL_VIDEO_X11_DGAMOUSE");
    46     if ( env_use_dgamouse ) {
    47         use_dgamouse = atoi(env_use_dgamouse);
    48     }
    49     /* Check for buggy X servers */
    50     if ( use_dgamouse && BUGGY_XFREE86(==, 4000) ) {
    51         use_dgamouse = 0;
    52     }
    53     /* Only use DGA mouse if the cursor is not showing (in relative mode) */
    54     if ( use_dgamouse && local_X11 && !(using_dga & DGA_MOUSE) &&
    55          SDL_NAME(XF86DGAQueryExtension)(SDL_Display, &dga_event, &dga_error) &&
    56          SDL_NAME(XF86DGAQueryVersion)(SDL_Display, &dga_major, &dga_minor) ) {
    57 	if ( SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, XF86DGADirectMouse) ) {
    58             using_dga |= DGA_MOUSE;
    59         }
    60     }
    61 #endif /* SDL_VIDEO_DRIVER_X11_DGAMOUSE */
    62 }
    63 
    64 /* Argh.  Glide resets DGA mouse mode when it makes the context current! */
    65 void X11_CheckDGAMouse(_THIS)
    66 {
    67 #if SDL_VIDEO_DRIVER_X11_DGAMOUSE
    68     int flags;
    69 
    70     if ( using_dga & DGA_MOUSE ) {
    71         SDL_NAME(XF86DGAQueryDirectVideo)(SDL_Display, SDL_Screen, &flags);
    72         if ( ! (flags & XF86DGADirectMouse) ) {
    73                 SDL_NAME(XF86DGADirectVideo)(SDL_Display,SDL_Screen,XF86DGADirectMouse);
    74         }
    75     }
    76 #endif
    77 }
    78 
    79 void X11_DisableDGAMouse(_THIS)
    80 {
    81 #if SDL_VIDEO_DRIVER_X11_DGAMOUSE
    82     if ( using_dga & DGA_MOUSE ) {
    83 	SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, 0);
    84         using_dga &= ~DGA_MOUSE;
    85     }
    86 #endif /* SDL_VIDEO_DRIVER_X11_DGAMOUSE */
    87 }