Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11keyboard.c @ 4495:dbbfdb9ea716
Simplified clipboard API for sanity's sake.
A complete clipboard implementation would support multiple formats that could be queried at runtime, events for when the clipboard contents changed, support for HTML, images, etc. We're not going that crazy, at least for now. :)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 07 Jul 2010 23:54:03 -0700 |
parents | 3e69e077cb95 |
children | ce811c9247da |
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 |
3697 | 3 Copyright (C) 1997-2010 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; |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
175 int i, j; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
176 int min_keycode, max_keycode; |
3001 | 177 struct { |
178 SDL_scancode scancode; | |
179 KeySym keysym; | |
180 int value; | |
181 } fingerprint[] = { | |
182 { SDL_SCANCODE_HOME, XK_Home, 0 }, | |
183 { SDL_SCANCODE_PAGEUP, XK_Prior, 0 }, | |
184 { 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
|
185 }; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
186 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
|
187 |
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
|
188 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
|
189 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
190 /* 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
|
191 fingerprint_detected = SDL_FALSE; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
192 XDisplayKeycodes(data->display, &min_keycode, &max_keycode); |
3001 | 193 for (i = 0; i < SDL_arraysize(fingerprint); ++i) { |
194 fingerprint[i].value = | |
195 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
|
196 min_keycode; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
197 } |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
198 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
|
199 /* 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
|
200 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
|
201 continue; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
202 } |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
203 for (j = 0; j < SDL_arraysize(fingerprint); ++j) { |
3001 | 204 if (fingerprint[j].value < 0 |
205 || 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
|
206 break; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
207 } |
3001 | 208 if (scancode_set[i].table[fingerprint[j].value] != |
209 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
|
210 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
|
211 } |
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 } |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
213 if (j == SDL_arraysize(fingerprint)) { |
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2308
diff
changeset
|
214 /* 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
|
215 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
|
216 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
|
217 fingerprint_detected = SDL_TRUE; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
218 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
|
219 } |
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 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
222 if (!fingerprint_detected) { |
3001 | 223 SDLKey keymap[SDL_NUM_SCANCODES]; |
224 | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
225 printf |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
226 ("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
|
227 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
228 /* Determine key_layout - only works on US QWERTY layout */ |
3001 | 229 SDL_GetDefaultKeymap(keymap); |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
230 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
|
231 KeySym sym; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
232 sym = XKeycodeToKeysym(data->display, i, 0); |
3001 | 233 if (sym != NoSymbol) { |
234 SDLKey key; | |
3667
cc7eca3a4e13
Fixed compiler warning.
Ryan C. Gordon <icculus@icculus.org>
parents:
3162
diff
changeset
|
235 printf("code = %d, sym = 0x%X (%s) ", i - min_keycode, |
cc7eca3a4e13
Fixed compiler warning.
Ryan C. Gordon <icculus@icculus.org>
parents:
3162
diff
changeset
|
236 (unsigned int) sym, XKeysymToString(sym)); |
3001 | 237 key = X11_KeyCodeToSDLKey(data->display, i); |
238 for (j = 0; j < SDL_arraysize(keymap); ++j) { | |
239 if (keymap[j] == key) { | |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
240 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
|
241 break; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
242 } |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
243 } |
3001 | 244 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
|
245 printf("scancode not found\n"); |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
246 } else { |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
247 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
|
248 } |
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
|
249 } |
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 } |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
252 |
2306 | 253 X11_UpdateKeymap(_this); |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
254 |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
255 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
|
256 |
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
|
257 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
|
258 } |
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 |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
260 void |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
261 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
|
262 { |
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
|
263 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
|
264 int i; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
265 SDL_scancode scancode; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
266 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
|
267 |
3001 | 268 SDL_zero(keymap); |
2305
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
269 |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
270 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
|
271 |
3001 | 272 /* 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
|
273 scancode = data->key_layout[i]; |
3001 | 274 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
|
275 continue; |
fbe8ff44c519
First pass of new SDL scancode concept for X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2299
diff
changeset
|
276 } |
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
|
277 |
3001 | 278 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
|
279 } |
4465
3e69e077cb95
Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
280 SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES); |
1950
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 } |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 void |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 X11_QuitKeyboard(_THIS) |
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 } |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 |
a344e42bce3b
Started work on the new X11 driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 /* vi: set ts=4 sw=4 expandtab: */ |