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 (at) 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 */ 33 int dga_event, dga_error = -1; 34 35 void 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! */ 73 void 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 82 void 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