Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11mouse.c @ 1555:780fd5b61df1
Fixed bug #89
Date: Sun, 23 Oct 2005 16:39:03 +0200
From: "A. Schmid" <sahib@phreaker.net>
Subject: [SDL] no software surfaces with svgalib driver?
Hi,
I noticed that the SDL (1.2.9) svgalib driver only makes use of linear
addressable (framebuffer) video modes. On older systems (like one of
mine), linear addressable modes are often not available.
Especially for cards with VESA VBE < 2.0 the svgalib vesa driver is
unusable, since VESA only supports framebuffering for VBE 2.0 and later.
The changes necessary to add support for software surfaces seem to be
relatively small. I only had to hack src/video/svga/SDL_svgavideo.c (see
attached patch). The code worked fine for me, but it is no more than a
proof of concept and should be reviewed (probably has a memory leak when
switching modes). It also uses the vgagl library (included in the
svgalib package) and needs to be linked against it.
-Alex
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 19 Mar 2006 12:05:16 +0000 |
parents | d910939febfa |
children | 3ba88cb7eb1b |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 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 | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1168
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
80
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
24 #include <X11/Xlib.h> | |
25 #include <X11/Xutil.h> | |
26 | |
27 #include "SDL_mouse.h" | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
28 #include "../../events/SDL_events_c.h" |
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
29 #include "../SDL_cursor_c.h" |
0 | 30 #include "SDL_x11dga_c.h" |
31 #include "SDL_x11mouse_c.h" | |
32 | |
33 | |
34 /* The implementation dependent data for the window manager cursor */ | |
35 struct WMcursor { | |
36 Cursor x_cursor; | |
37 }; | |
38 | |
39 | |
40 void X11_FreeWMCursor(_THIS, WMcursor *cursor) | |
41 { | |
42 if ( SDL_Display != NULL ) { | |
43 SDL_Lock_EventThread(); | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
44 pXFreeCursor(SDL_Display, cursor->x_cursor); |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
45 pXSync(SDL_Display, False); |
0 | 46 SDL_Unlock_EventThread(); |
47 } | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
48 SDL_free(cursor); |
0 | 49 } |
50 | |
51 WMcursor *X11_CreateWMCursor(_THIS, | |
52 Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y) | |
53 { | |
54 WMcursor *cursor; | |
55 XGCValues GCvalues; | |
56 GC GCcursor; | |
57 XImage *data_image, *mask_image; | |
58 Pixmap data_pixmap, mask_pixmap; | |
59 int clen, i; | |
60 char *x_data, *x_mask; | |
61 static XColor black = { 0, 0, 0, 0 }; | |
62 static XColor white = { 0xffff, 0xffff, 0xffff, 0xffff }; | |
63 | |
64 /* Allocate the cursor memory */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
65 cursor = (WMcursor *)SDL_malloc(sizeof(WMcursor)); |
0 | 66 if ( cursor == NULL ) { |
67 SDL_OutOfMemory(); | |
68 return(NULL); | |
69 } | |
70 | |
71 /* Mix the mask and the data */ | |
72 clen = (w/8)*h; | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
73 x_data = (char *)SDL_malloc(clen); |
0 | 74 if ( x_data == NULL ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
75 SDL_free(cursor); |
0 | 76 SDL_OutOfMemory(); |
77 return(NULL); | |
78 } | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
79 x_mask = (char *)SDL_malloc(clen); |
0 | 80 if ( x_mask == NULL ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
81 SDL_free(cursor); |
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
82 SDL_free(x_data); |
0 | 83 SDL_OutOfMemory(); |
84 return(NULL); | |
85 } | |
86 for ( i=0; i<clen; ++i ) { | |
87 /* The mask is OR'd with the data to turn inverted color | |
88 pixels black since inverted color cursors aren't supported | |
89 under X11. | |
90 */ | |
91 x_mask[i] = data[i] | mask[i]; | |
92 x_data[i] = data[i]; | |
93 } | |
94 | |
95 /* Prevent the event thread from running while we use the X server */ | |
96 SDL_Lock_EventThread(); | |
97 | |
98 /* Create the data image */ | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
99 data_image = pXCreateImage(SDL_Display, |
0 | 100 DefaultVisual(SDL_Display, SDL_Screen), |
101 1, XYBitmap, 0, x_data, w, h, 8, w/8); | |
102 data_image->byte_order = MSBFirst; | |
103 data_image->bitmap_bit_order = MSBFirst; | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
104 data_pixmap = pXCreatePixmap(SDL_Display, SDL_Root, w, h, 1); |
0 | 105 |
106 /* Create the data mask */ | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
107 mask_image = pXCreateImage(SDL_Display, |
0 | 108 DefaultVisual(SDL_Display, SDL_Screen), |
109 1, XYBitmap, 0, x_mask, w, h, 8, w/8); | |
110 mask_image->byte_order = MSBFirst; | |
111 mask_image->bitmap_bit_order = MSBFirst; | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
112 mask_pixmap = pXCreatePixmap(SDL_Display, SDL_Root, w, h, 1); |
0 | 113 |
114 /* Create the graphics context */ | |
115 GCvalues.function = GXcopy; | |
116 GCvalues.foreground = ~0; | |
117 GCvalues.background = 0; | |
118 GCvalues.plane_mask = AllPlanes; | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
119 GCcursor = pXCreateGC(SDL_Display, data_pixmap, |
0 | 120 (GCFunction|GCForeground|GCBackground|GCPlaneMask), |
121 &GCvalues); | |
122 | |
123 /* Blit the images to the pixmaps */ | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
124 pXPutImage(SDL_Display, data_pixmap, GCcursor, data_image, |
0 | 125 0, 0, 0, 0, w, h); |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
126 pXPutImage(SDL_Display, mask_pixmap, GCcursor, mask_image, |
0 | 127 0, 0, 0, 0, w, h); |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
128 pXFreeGC(SDL_Display, GCcursor); |
0 | 129 /* These free the x_data and x_mask memory pointers */ |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
130 pXDestroyImage(data_image); |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
131 pXDestroyImage(mask_image); |
0 | 132 |
133 /* Create the cursor */ | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
134 cursor->x_cursor = pXCreatePixmapCursor(SDL_Display, data_pixmap, |
0 | 135 mask_pixmap, &black, &white, hot_x, hot_y); |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
136 pXFreePixmap(SDL_Display, data_pixmap); |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
137 pXFreePixmap(SDL_Display, mask_pixmap); |
0 | 138 |
139 /* Release the event thread */ | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
140 pXSync(SDL_Display, False); |
0 | 141 SDL_Unlock_EventThread(); |
142 | |
143 return(cursor); | |
144 } | |
145 | |
146 int X11_ShowWMCursor(_THIS, WMcursor *cursor) | |
147 { | |
148 /* Don't do anything if the display is gone */ | |
149 if ( SDL_Display == NULL ) { | |
150 return(0); | |
151 } | |
152 | |
153 /* Set the X11 cursor cursor, or blank if cursor is NULL */ | |
154 if ( SDL_Window ) { | |
155 SDL_Lock_EventThread(); | |
156 if ( cursor == NULL ) { | |
157 if ( SDL_BlankCursor != NULL ) { | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
158 pXDefineCursor(SDL_Display, SDL_Window, |
0 | 159 SDL_BlankCursor->x_cursor); |
160 } | |
161 } else { | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
162 pXDefineCursor(SDL_Display, SDL_Window, cursor->x_cursor); |
0 | 163 } |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
164 pXSync(SDL_Display, False); |
0 | 165 SDL_Unlock_EventThread(); |
166 } | |
167 return(1); | |
168 } | |
169 | |
170 void X11_WarpWMCursor(_THIS, Uint16 x, Uint16 y) | |
171 { | |
172 if ( using_dga & DGA_MOUSE ) { | |
527
5c74ac147358
Fixed mouse warp position bug with offset video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
173 SDL_PrivateMouseMotion(0, 0, x, y); |
5c74ac147358
Fixed mouse warp position bug with offset video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
174 } else if ( mouse_relative) { |
5c74ac147358
Fixed mouse warp position bug with offset video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
175 /* RJR: March 28, 2000 |
5c74ac147358
Fixed mouse warp position bug with offset video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
176 leave physical cursor at center of screen if |
5c74ac147358
Fixed mouse warp position bug with offset video modes
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
177 mouse hidden and grabbed */ |
0 | 178 SDL_PrivateMouseMotion(0, 0, x, y); |
179 } else { | |
180 SDL_Lock_EventThread(); | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
181 pXWarpPointer(SDL_Display, None, SDL_Window, 0, 0, 0, 0, x, y); |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
182 pXSync(SDL_Display, False); |
0 | 183 SDL_Unlock_EventThread(); |
184 } | |
185 } | |
186 | |
187 /* Sets the mouse acceleration from a string of the form: | |
188 2/1/0 | |
189 The first number is the numerator, followed by the acceleration | |
190 denumenator and threshold. | |
191 */ | |
192 static void SetMouseAccel(_THIS, const char *accel_param) | |
193 { | |
194 int i; | |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
195 size_t len; |
0 | 196 int accel_value[3]; |
197 char *mouse_param, *mouse_param_buf, *pin; | |
198 | |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
199 len = SDL_strlen(accel_param)+1; |
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
200 mouse_param_buf = SDL_stack_alloc(char, len); |
0 | 201 if ( ! mouse_param_buf ) { |
202 return; | |
203 } | |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
204 SDL_strlcpy(mouse_param_buf, accel_param, len); |
0 | 205 mouse_param = mouse_param_buf; |
206 | |
207 for ( i=0; (i < 3) && mouse_param; ++i ) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
208 pin = SDL_strchr(mouse_param, '/'); |
0 | 209 if ( pin ) { |
210 *pin = '\0'; | |
211 } | |
212 accel_value[i] = atoi(mouse_param); | |
213 if ( pin ) { | |
214 mouse_param = pin+1; | |
215 } else { | |
216 mouse_param = NULL; | |
217 } | |
218 } | |
219 if ( mouse_param_buf ) { | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
220 pXChangePointerControl(SDL_Display, True, True, |
0 | 221 accel_value[0], accel_value[1], accel_value[2]); |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
222 SDL_free(mouse_param_buf); |
0 | 223 } |
224 } | |
225 | |
226 /* Check to see if we need to enter or leave mouse relative mode */ | |
227 void X11_CheckMouseModeNoLock(_THIS) | |
228 { | |
79
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
229 char *env_override; |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
230 int enable_relative = 1; |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
231 |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
232 /* Allow the user to override the relative mouse mode. |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
233 They almost never want to do this, as it seriously affects |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
234 applications that rely on continuous relative mouse motion. |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
235 */ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
236 env_override = SDL_getenv("SDL_MOUSE_RELATIVE"); |
79
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
237 if ( env_override ) { |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
238 enable_relative = atoi(env_override); |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
239 } |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
240 |
0 | 241 /* If the mouse is hidden and input is grabbed, we use relative mode */ |
79
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
242 if ( enable_relative && |
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
243 !(SDL_cursorstate & CURSOR_VISIBLE) && |
0 | 244 (this->input_grab != SDL_GRAB_OFF) && |
79
ffadd05de74d
Allow the user to override the relative mouse mode.
Sam Lantinga <slouken@lokigames.com>
parents:
78
diff
changeset
|
245 (SDL_GetAppState() & SDL_APPACTIVE) ) { |
0 | 246 if ( ! mouse_relative ) { |
247 X11_EnableDGAMouse(this); | |
248 if ( ! (using_dga & DGA_MOUSE) ) { | |
249 char *xmouse_accel; | |
250 | |
251 SDL_GetMouseState(&mouse_last.x, &mouse_last.y); | |
252 /* Use as raw mouse mickeys as possible */ | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
253 pXGetPointerControl(SDL_Display, |
0 | 254 &mouse_accel.numerator, |
255 &mouse_accel.denominator, | |
256 &mouse_accel.threshold); | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
257 xmouse_accel=SDL_getenv("SDL_VIDEO_X11_MOUSEACCEL"); |
0 | 258 if ( xmouse_accel ) { |
259 SetMouseAccel(this, xmouse_accel); | |
260 } | |
261 } | |
262 mouse_relative = 1; | |
263 } | |
264 } else { | |
265 if ( mouse_relative ) { | |
266 if ( using_dga & DGA_MOUSE ) { | |
267 X11_DisableDGAMouse(this); | |
268 } else { | |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
888
diff
changeset
|
269 pXChangePointerControl(SDL_Display, True, True, |
0 | 270 mouse_accel.numerator, |
271 mouse_accel.denominator, | |
272 mouse_accel.threshold); | |
273 } | |
274 mouse_relative = 0; | |
275 } | |
276 } | |
277 } | |
278 void X11_CheckMouseMode(_THIS) | |
279 { | |
280 SDL_Lock_EventThread(); | |
281 X11_CheckMouseModeNoLock(this); | |
282 SDL_Unlock_EventThread(); | |
283 } |