Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11keyboard.c @ 3521:76f9b76ddf0f
Don't add any renderers if you can't add any displays
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 04 Dec 2009 09:01:48 +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: */ |