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   There is a completely separate DGA driver that is fullscreen-only.
26*/
27
28#include "SDL_video.h"
29#include "../SDL_cursor_c.h"
30#include "SDL_x11dga_c.h"
31
32/* Global for the error handler */
33int dga_event, dga_error = -1;
34
35void X11_EnableDGAMouse(_THIS)
36{
37#if SDL_VIDEO_DRIVER_X11_DGAMOUSE
38    static int use_dgamouse = -1;
39
40    /* Check configuration to see if we should use DGA mouse */
41    if ( use_dgamouse < 0 ) {
42        int dga_major, dga_minor;
43        int dga_flags;
44        const char *env_use_dgamouse;
45
46        use_dgamouse = 1;
47        env_use_dgamouse = SDL_getenv("SDL_VIDEO_X11_DGAMOUSE");
48        if ( env_use_dgamouse ) {
49            use_dgamouse = SDL_atoi(env_use_dgamouse);
50        }
51        /* Check for buggy X servers */
52        if ( use_dgamouse && BUGGY_XFREE86(==, 4000) ) {
53            use_dgamouse = 0;
54        }
55        if ( !use_dgamouse || !local_X11 ||
56             !SDL_NAME(XF86DGAQueryExtension)(SDL_Display, &dga_event, &dga_error) ||
57             !SDL_NAME(XF86DGAQueryVersion)(SDL_Display, &dga_major, &dga_minor) ||
58             !SDL_NAME(XF86DGAQueryDirectVideo)(SDL_Display, SDL_Screen, &dga_flags) ||
59             !(dga_flags & XF86DGADirectPresent) ) {
60            use_dgamouse = 0;
61        }
62    }
63
64    if ( use_dgamouse && !(using_dga & DGA_MOUSE) ) {
65	if ( SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, XF86DGADirectMouse) ) {
66            using_dga |= DGA_MOUSE;
67        }
68    }
69#endif /* SDL_VIDEO_DRIVER_X11_DGAMOUSE */
70}
71
72/* Argh.  Glide resets DGA mouse mode when it makes the context current! */
73void X11_CheckDGAMouse(_THIS)
74{
75#if SDL_VIDEO_DRIVER_X11_DGAMOUSE
76    if ( using_dga & DGA_MOUSE ) {
77	SDL_NAME(XF86DGADirectVideo)(SDL_Display,SDL_Screen,XF86DGADirectMouse);
78    }
79#endif
80}
81
82void X11_DisableDGAMouse(_THIS)
83{
84#if SDL_VIDEO_DRIVER_X11_DGAMOUSE
85    if ( using_dga & DGA_MOUSE ) {
86	SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, 0);
87        using_dga &= ~DGA_MOUSE;
88    }
89#endif /* SDL_VIDEO_DRIVER_X11_DGAMOUSE */
90}
91