146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL - Simple DirectMedia Layer 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 1997-2006 Sam Lantinga 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is free software; you can redistribute it and/or 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner modify it under the terms of the GNU Lesser General Public 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License as published by the Free Software Foundation; either 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner version 2.1 of the License, or (at your option) any later version. 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is distributed in the hope that it will be useful, 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner but WITHOUT ANY WARRANTY; without even the implied warranty of 1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Lesser General Public License for more details. 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner You should have received a copy of the GNU Lesser General Public 1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License along with this library; if not, write to the Free Software 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Sam Lantinga 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner slouken@libsdl.org 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h" 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* This is currently only used to enable DGA mouse. 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner There is a completely separate DGA driver that is fullscreen-only. 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_video.h" 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../SDL_cursor_c.h" 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_x11dga_c.h" 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Global for the error handler */ 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint dga_event, dga_error = -1; 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid X11_EnableDGAMouse(_THIS) 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if SDL_VIDEO_DRIVER_X11_DGAMOUSE 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner static int use_dgamouse = -1; 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Check configuration to see if we should use DGA mouse */ 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( use_dgamouse < 0 ) { 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int dga_major, dga_minor; 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int dga_flags; 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner const char *env_use_dgamouse; 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner use_dgamouse = 1; 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner env_use_dgamouse = SDL_getenv("SDL_VIDEO_X11_DGAMOUSE"); 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( env_use_dgamouse ) { 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner use_dgamouse = SDL_atoi(env_use_dgamouse); 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Check for buggy X servers */ 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( use_dgamouse && BUGGY_XFREE86(==, 4000) ) { 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner use_dgamouse = 0; 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( !use_dgamouse || !local_X11 || 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner !SDL_NAME(XF86DGAQueryExtension)(SDL_Display, &dga_event, &dga_error) || 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner !SDL_NAME(XF86DGAQueryVersion)(SDL_Display, &dga_major, &dga_minor) || 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner !SDL_NAME(XF86DGAQueryDirectVideo)(SDL_Display, SDL_Screen, &dga_flags) || 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner !(dga_flags & XF86DGADirectPresent) ) { 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner use_dgamouse = 0; 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( use_dgamouse && !(using_dga & DGA_MOUSE) ) { 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, XF86DGADirectMouse) ) { 6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner using_dga |= DGA_MOUSE; 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* SDL_VIDEO_DRIVER_X11_DGAMOUSE */ 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Argh. Glide resets DGA mouse mode when it makes the context current! */ 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid X11_CheckDGAMouse(_THIS) 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if SDL_VIDEO_DRIVER_X11_DGAMOUSE 7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( using_dga & DGA_MOUSE ) { 7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_NAME(XF86DGADirectVideo)(SDL_Display,SDL_Screen,XF86DGADirectMouse); 7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid X11_DisableDGAMouse(_THIS) 8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if SDL_VIDEO_DRIVER_X11_DGAMOUSE 8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( using_dga & DGA_MOUSE ) { 8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_NAME(XF86DGADirectVideo)(SDL_Display, SDL_Screen, 0); 8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner using_dga &= ~DGA_MOUSE; 8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* SDL_VIDEO_DRIVER_X11_DGAMOUSE */ 9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 91