Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11keyboard.c @ 3473:7bdc10624cba
This is terrible, but the OpenGL standard says that lines are half open, which means that one endpoint is not covered so adjoining lines don't overlap. It also doesn't define which end is open, and indeed Mac OS X and Linux differ. Mac OS X seems to leave the second endpoint open, but Linux uses the right-most endpoint for x major lines and the bottom-most endpoint for y major lines.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 21 Nov 2009 07:14:21 +0000 |
parents | dc1eb82ffdaa |
children | cc7eca3a4e13 |
rev | line source |
---|---|
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
2859 | 3 Copyright (C) 1997-2009 Sam Lantinga |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #include "SDL_x11video.h" |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 #include "../../events/SDL_keyboard_c.h" |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
27 #include "../../events/scancodes_darwin.h" |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
28 #include "../../events/scancodes_xfree86.h" |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
30 #include <X11/keysym.h> |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
31 |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
32 #include "imKStoUCS.h" |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
33 |
3001 | 34 /* *INDENT-OFF* */ |
3162 | 35 static const struct { |
3001 | 36 KeySym keysym; |
37 SDLKey sdlkey; | |
38 } KeySymToSDLKey[] = { | |
39 { XK_Return, SDLK_RETURN }, | |
40 { XK_Escape, SDLK_ESCAPE }, | |
41 { XK_BackSpace, SDLK_BACKSPACE }, | |
42 { XK_Tab, SDLK_TAB }, | |
43 { XK_Caps_Lock, SDLK_CAPSLOCK }, | |
44 { XK_F1, SDLK_F1 }, | |
45 { XK_F2, SDLK_F2 }, | |
46 { XK_F3, SDLK_F3 }, | |
47 { XK_F4, SDLK_F4 }, | |
48 { XK_F5, SDLK_F5 }, | |
49 { XK_F6, SDLK_F6 }, | |
50 { XK_F7, SDLK_F7 }, | |
51 { XK_F8, SDLK_F8 }, | |
52 { XK_F9, SDLK_F9 }, | |
53 { XK_F10, SDLK_F10 }, | |
54 { XK_F11, SDLK_F11 }, | |
55 { XK_F12, SDLK_F12 }, | |
56 { XK_Print, SDLK_PRINTSCREEN }, | |
57 { XK_Scroll_Lock, SDLK_SCROLLLOCK }, | |
58 { XK_Pause, SDLK_PAUSE }, | |
59 { XK_Insert, SDLK_INSERT }, | |
60 { XK_Home, SDLK_HOME }, | |
61 { XK_Prior, SDLK_PAGEUP }, | |
62 { XK_Delete, SDLK_DELETE }, | |
63 { XK_End, SDLK_END }, | |
64 { XK_Next, SDLK_PAGEDOWN }, | |
65 { XK_Right, SDLK_RIGHT }, | |
66 { XK_Left, SDLK_LEFT }, | |
67 { XK_Down, SDLK_DOWN }, | |
68 { XK_Up, SDLK_UP }, | |
69 { XK_Num_Lock, SDLK_NUMLOCKCLEAR }, | |
70 { XK_KP_Divide, SDLK_KP_DIVIDE }, | |
71 { XK_KP_Multiply, SDLK_KP_MULTIPLY }, | |
72 { XK_KP_Subtract, SDLK_KP_MINUS }, | |
73 { XK_KP_Add, SDLK_KP_PLUS }, | |
74 { XK_KP_Enter, SDLK_KP_ENTER }, | |
75 { XK_KP_Delete, SDLK_KP_PERIOD }, | |
76 { XK_KP_End, SDLK_KP_1 }, | |
77 { XK_KP_Down, SDLK_KP_2 }, | |
78 { XK_KP_Next, SDLK_KP_3 }, | |
79 { XK_KP_Left, SDLK_KP_4 }, | |
80 { XK_KP_Begin, SDLK_KP_5 }, | |
81 { XK_KP_Right, SDLK_KP_6 }, | |
82 { XK_KP_Home, SDLK_KP_7 }, | |
83 { XK_KP_Up, SDLK_KP_8 }, | |
84 { XK_KP_Prior, SDLK_KP_9 }, | |
85 { XK_KP_Insert, SDLK_KP_0 }, | |
86 { XK_KP_Decimal, SDLK_KP_PERIOD }, | |
87 { XK_KP_1, SDLK_KP_1 }, | |
88 { XK_KP_2, SDLK_KP_2 }, | |
89 { XK_KP_3, SDLK_KP_3 }, | |
90 { XK_KP_4, SDLK_KP_4 }, | |
91 { XK_KP_5, SDLK_KP_5 }, | |
92 { XK_KP_6, SDLK_KP_6 }, | |
93 { XK_KP_7, SDLK_KP_7 }, | |
94 { XK_KP_8, SDLK_KP_8 }, | |
95 { XK_KP_9, SDLK_KP_9 }, | |
96 { XK_KP_0, SDLK_KP_0 }, | |
97 { XK_KP_Decimal, SDLK_KP_PERIOD }, | |
98 { XK_Hyper_R, SDLK_APPLICATION }, | |
99 { XK_KP_Equal, SDLK_KP_EQUALS }, | |
100 { XK_F13, SDLK_F13 }, | |
101 { XK_F14, SDLK_F14 }, | |
102 { XK_F15, SDLK_F15 }, | |
103 { XK_F16, SDLK_F16 }, | |
104 { XK_F17, SDLK_F17 }, | |
105 { XK_F18, SDLK_F18 }, | |
106 { XK_F19, SDLK_F19 }, | |
107 { XK_F20, SDLK_F20 }, | |
108 { XK_F21, SDLK_F21 }, | |
109 { XK_F22, SDLK_F22 }, | |
110 { XK_F23, SDLK_F23 }, | |
111 { XK_F24, SDLK_F24 }, | |
112 { XK_Execute, SDLK_EXECUTE }, | |
113 { XK_Help, SDLK_HELP }, | |
114 { XK_Menu, SDLK_MENU }, | |
115 { XK_Select, SDLK_SELECT }, | |
116 { XK_Cancel, SDLK_STOP }, | |
117 { XK_Redo, SDLK_AGAIN }, | |
118 { XK_Undo, SDLK_UNDO }, | |
119 { XK_Find, SDLK_FIND }, | |
120 { XK_KP_Separator, SDLK_KP_COMMA }, | |
121 { XK_Sys_Req, SDLK_SYSREQ }, | |
122 { XK_Control_L, SDLK_LCTRL }, | |
123 { XK_Shift_L, SDLK_LSHIFT }, | |
124 { XK_Alt_L, SDLK_LALT }, | |
125 { XK_Meta_L, SDLK_LGUI }, | |
126 { XK_Super_L, SDLK_LGUI }, | |
127 { XK_Control_R, SDLK_RCTRL }, | |
128 { XK_Shift_R, SDLK_RSHIFT }, | |
129 { XK_Alt_R, SDLK_RALT }, | |
130 { XK_Meta_R, SDLK_RGUI }, | |
131 { XK_Super_R, SDLK_RGUI }, | |
132 { XK_Mode_switch, SDLK_MODE }, | |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
133 }; |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
134 |
3162 | 135 static const struct |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
136 { |
3162 | 137 const SDL_scancode const *table; |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
138 int table_size; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
139 } scancode_set[] = { |
2308
514f7c1651fc
Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents:
2306
diff
changeset
|
140 { darwin_scancode_table, SDL_arraysize(darwin_scancode_table) }, |
514f7c1651fc
Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents:
2306
diff
changeset
|
141 { xfree86_scancode_table, SDL_arraysize(xfree86_scancode_table) }, |
2825
620a91b6d263
Date: Tue, 02 Dec 2008 23:38:26 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2323
diff
changeset
|
142 { xfree86_scancode_table2, SDL_arraysize(xfree86_scancode_table2) }, |
2308
514f7c1651fc
Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents:
2306
diff
changeset
|
143 }; |
514f7c1651fc
Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents:
2306
diff
changeset
|
144 /* *INDENT-OFF* */ |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
145 |
3001 | 146 static SDLKey |
147 X11_KeyCodeToSDLKey(Display *display, KeyCode keycode) | |
148 { | |
149 KeySym keysym; | |
150 unsigned int ucs4; | |
151 int i; | |
152 | |
153 keysym = XKeycodeToKeysym(display, keycode, 0); | |
154 if (keysym == NoSymbol) { | |
155 return SDLK_UNKNOWN; | |
156 } | |
157 | |
158 ucs4 = X11_KeySymToUcs4(keysym); | |
159 if (ucs4) { | |
160 return (SDLKey) ucs4; | |
161 } | |
162 | |
163 for (i = 0; i < SDL_arraysize(KeySymToSDLKey); ++i) { | |
164 if (keysym == KeySymToSDLKey[i].keysym) { | |
165 return KeySymToSDLKey[i].sdlkey; | |
166 } | |
167 } | |
168 return SDLK_UNKNOWN; | |
169 } | |
170 | |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
171 int |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 X11_InitKeyboard(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 SDL_Keyboard keyboard; |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
176 int i, j; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
177 int min_keycode, max_keycode; |
3001 | 178 struct { |
179 SDL_scancode scancode; | |
180 KeySym keysym; | |
181 int value; | |
182 } fingerprint[] = { | |
183 { SDL_SCANCODE_HOME, XK_Home, 0 }, | |
184 { SDL_SCANCODE_PAGEUP, XK_Prior, 0 }, | |
185 { SDL_SCANCODE_PAGEDOWN, XK_Next, 0 }, | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
186 }; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
187 SDL_bool fingerprint_detected; |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
188 |
2299
a7cbc25071b6
Enabled key board auto repeat in X11_InitKeyboard.c. Had to add a couple of new Xlib symbols.
Bob Pendleton <bob@pendleton.com>
parents:
2298
diff
changeset
|
189 XAutoRepeatOn(data->display); |
a7cbc25071b6
Enabled key board auto repeat in X11_InitKeyboard.c. Had to add a couple of new Xlib symbols.
Bob Pendleton <bob@pendleton.com>
parents:
2298
diff
changeset
|
190 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
191 /* Try to determine which scancodes are being used based on fingerprint */ |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
192 fingerprint_detected = SDL_FALSE; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
193 XDisplayKeycodes(data->display, &min_keycode, &max_keycode); |
3001 | 194 for (i = 0; i < SDL_arraysize(fingerprint); ++i) { |
195 fingerprint[i].value = | |
196 XKeysymToKeycode(data->display, fingerprint[i].keysym) - | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
197 min_keycode; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
198 } |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
199 for (i = 0; i < SDL_arraysize(scancode_set); ++i) { |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
200 /* Make sure the scancode set isn't too big */ |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
201 if ((max_keycode - min_keycode + 1) <= scancode_set[i].table_size) { |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
202 continue; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
203 } |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
204 for (j = 0; j < SDL_arraysize(fingerprint); ++j) { |
3001 | 205 if (fingerprint[j].value < 0 |
206 || fingerprint[j].value >= scancode_set[i].table_size) { | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
207 break; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
208 } |
3001 | 209 if (scancode_set[i].table[fingerprint[j].value] != |
210 fingerprint[j].scancode) { | |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
211 break; |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
212 } |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
213 } |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
214 if (j == SDL_arraysize(fingerprint)) { |
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2308
diff
changeset
|
215 /* printf("Using scancode set %d\n", i); */ |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
216 SDL_memcpy(&data->key_layout[min_keycode], scancode_set[i].table, |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
217 sizeof(SDL_scancode) * scancode_set[i].table_size); |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
218 fingerprint_detected = SDL_TRUE; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
219 break; |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
220 } |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
221 } |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
222 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
223 if (!fingerprint_detected) { |
3001 | 224 SDLKey keymap[SDL_NUM_SCANCODES]; |
225 | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
226 printf |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
227 ("Keyboard layout unknown, please send the following to the SDL mailing list (sdl@libsdl.org):\n"); |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
228 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
229 /* Determine key_layout - only works on US QWERTY layout */ |
3001 | 230 SDL_GetDefaultKeymap(keymap); |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
231 for (i = min_keycode; i <= max_keycode; ++i) { |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
232 KeySym sym; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
233 sym = XKeycodeToKeysym(data->display, i, 0); |
3001 | 234 if (sym != NoSymbol) { |
235 SDLKey key; | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
236 printf("code = %d, sym = 0x%X (%s) ", i - min_keycode, sym, |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
237 XKeysymToString(sym)); |
3001 | 238 key = X11_KeyCodeToSDLKey(data->display, i); |
239 for (j = 0; j < SDL_arraysize(keymap); ++j) { | |
240 if (keymap[j] == key) { | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
241 data->key_layout[i] = (SDL_scancode) j; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
242 break; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
243 } |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
244 } |
3001 | 245 if (j == SDL_arraysize(keymap)) { |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
246 printf("scancode not found\n"); |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
247 } else { |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
248 printf("scancode = %d (%s)\n", j, SDL_GetScancodeName(j)); |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
249 } |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
250 } |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
251 } |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
252 } |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
253 |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
254 SDL_zero(keyboard); |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
255 data->keyboard = SDL_AddKeyboard(&keyboard, -1); |
2306 | 256 X11_UpdateKeymap(_this); |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
257 |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
258 SDL_SetScancodeName(SDL_SCANCODE_APPLICATION, "Menu"); |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
259 |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
260 return 0; |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
261 } |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
262 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
263 void |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
264 X11_UpdateKeymap(_THIS) |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
265 { |
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
266 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
267 int i; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
268 SDL_scancode scancode; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
269 SDLKey keymap[SDL_NUM_SCANCODES]; |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
270 |
3001 | 271 SDL_zero(keymap); |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
272 |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
273 for (i = 0; i < SDL_arraysize(data->key_layout); i++) { |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
274 |
3001 | 275 /* Make sure this is a valid scancode */ |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
276 scancode = data->key_layout[i]; |
3001 | 277 if (scancode == SDL_SCANCODE_UNKNOWN) { |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
278 continue; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
279 } |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
280 |
3001 | 281 keymap[scancode] = X11_KeyCodeToSDLKey(data->display, (KeyCode)i); |
2295
dbc6d1893869
Checking in Christian Walther's patch for x11 keyboard input. Minor code tweaks by Bob.
Bob Pendleton <bob@pendleton.com>
parents:
1950
diff
changeset
|
282 } |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
283 SDL_SetKeymap(data->keyboard, 0, keymap, SDL_NUM_SCANCODES); |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 } |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 X11_QuitKeyboard(_THIS) |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 { |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 SDL_DelKeyboard(data->keyboard); |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 } |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 /* vi: set ts=4 sw=4 expandtab: */ |