Skip to content

Commit c5bd273

Browse files
thesourcehimrofl0r
authored andcommitted
Port commit 58bbe69 to GTK3 frontend
1 parent 288a1e8 commit c5bd273

File tree

2 files changed

+297
-2
lines changed

2 files changed

+297
-2
lines changed

desmume/src/frontend/posix/gtk/main.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
#include "movie.h"
5454
#include "dTool.h"
5555
#include "../shared/desmume_config.h"
56+
#include "../shared/gdksdl.cpp"
5657
#include "cheatsGTK.h"
5758
#include "frontend/modules/osd/agg/agg_osd.h"
5859

@@ -2046,7 +2047,11 @@ static void Edit_Controls(GSimpleAction *action, GVariant *parameter, gpointer u
20462047
GtkWidget *ecDialog;
20472048
GtkWidget *ecKey;
20482049
gchar *Key_Label;
2050+
u32 keyboard_cfg_sdl[NB_KEYS];
20492051
int i;
2052+
2053+
g_assert(sizeof(Keypad_Temp) == sizeof(keyboard_cfg) &&
2054+
sizeof(keyboard_cfg) == sizeof(keyboard_cfg_sdl));
20502055

20512056
memcpy(&Keypad_Temp, &keyboard_cfg, sizeof(keyboard_cfg));
20522057

@@ -2069,8 +2074,17 @@ static void Edit_Controls(GSimpleAction *action, GVariant *parameter, gpointer u
20692074

20702075
switch (gtk_dialog_run(GTK_DIALOG(ecDialog))) {
20712076
case GTK_RESPONSE_OK:
2072-
memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg));
2073-
desmume_config_update_keys(keyfile);
2077+
/* convert keycodes to SDL for the cli frontend, since it has no config menu */
2078+
for (i = 0; i < NB_KEYS; ++i) {
2079+
int sk = gdk_to_sdl_keycode(Keypad_Temp[i]);
2080+
/* if we don't know the keycode, chances are that SDL knows it anyways */
2081+
if (sk == -1) sk = (u32) Keypad_Temp[i];
2082+
keyboard_cfg_sdl[i] = sk;
2083+
}
2084+
memcpy(keyboard_cfg, keyboard_cfg_sdl, sizeof(keyboard_cfg));
2085+
desmume_config_update_keys(keyfile, "SDLKEYS");
2086+
memcpy(keyboard_cfg, Keypad_Temp, sizeof(keyboard_cfg));
2087+
desmume_config_update_keys(keyfile, "KEYS");
20742088
break;
20752089
case GTK_RESPONSE_CANCEL:
20762090
case GTK_RESPONSE_NONE:

desmume/src/frontend/posix/shared/gdksdl.cpp

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,286 @@
11
#include <gdk/gdkkeysyms.h>
2+
#include <gtk/gtk.h>
23
#include <SDL.h>
34

5+
#if GTK_CHECK_VERSION(3, 0, 0)
6+
7+
int gdk_to_sdl_keycode(int gdk_key)
8+
{
9+
switch (gdk_key)
10+
{
11+
case GDK_KEY_BackSpace:
12+
return SDLK_BACKSPACE;
13+
case GDK_KEY_Tab:
14+
return SDLK_TAB;
15+
case GDK_KEY_Clear:
16+
return SDLK_CLEAR;
17+
case GDK_KEY_Return:
18+
return SDLK_RETURN;
19+
case GDK_KEY_Pause:
20+
return SDLK_PAUSE;
21+
case GDK_KEY_Escape:
22+
return SDLK_ESCAPE;
23+
case GDK_KEY_KP_Space:
24+
return SDLK_SPACE;
25+
case GDK_KEY_exclamdown:
26+
return SDLK_EXCLAIM;
27+
case GDK_KEY_quotedbl:
28+
return SDLK_QUOTEDBL;
29+
case GDK_KEY_numbersign:
30+
return SDLK_HASH;
31+
case GDK_KEY_dollar:
32+
return SDLK_DOLLAR;
33+
case GDK_KEY_ampersand:
34+
return SDLK_AMPERSAND;
35+
case GDK_KEY_quoteright:
36+
return SDLK_QUOTE;
37+
case GDK_KEY_parenleft:
38+
return SDLK_LEFTPAREN;
39+
case GDK_KEY_parenright:
40+
return SDLK_RIGHTPAREN;
41+
case GDK_KEY_asterisk:
42+
return SDLK_ASTERISK;
43+
case GDK_KEY_plus:
44+
return SDLK_PLUS;
45+
case GDK_KEY_comma:
46+
return SDLK_COMMA;
47+
case GDK_KEY_minus:
48+
return SDLK_MINUS;
49+
case GDK_KEY_period:
50+
return SDLK_PERIOD;
51+
case GDK_KEY_slash:
52+
return SDLK_SLASH;
53+
case GDK_KEY_0:
54+
return SDLK_0;
55+
case GDK_KEY_1:
56+
return SDLK_1;
57+
case GDK_KEY_2:
58+
return SDLK_2;
59+
case GDK_KEY_3:
60+
return SDLK_3;
61+
case GDK_KEY_4:
62+
return SDLK_4;
63+
case GDK_KEY_5:
64+
return SDLK_5;
65+
case GDK_KEY_6:
66+
return SDLK_6;
67+
case GDK_KEY_7:
68+
return SDLK_7;
69+
case GDK_KEY_8:
70+
return SDLK_8;
71+
case GDK_KEY_9:
72+
return SDLK_9;
73+
case GDK_KEY_colon:
74+
return SDLK_COLON;
75+
case GDK_KEY_semicolon:
76+
return SDLK_SEMICOLON;
77+
case GDK_KEY_less:
78+
return SDLK_LESS;
79+
case GDK_KEY_equal:
80+
return SDLK_EQUALS;
81+
case GDK_KEY_greater:
82+
return SDLK_GREATER;
83+
case GDK_KEY_question:
84+
return SDLK_QUESTION;
85+
case GDK_KEY_at:
86+
return SDLK_AT;
87+
case GDK_KEY_bracketleft:
88+
return SDLK_LEFTBRACKET;
89+
case GDK_KEY_backslash:
90+
return SDLK_BACKSLASH;
91+
case GDK_KEY_bracketright:
92+
return SDLK_RIGHTBRACKET;
93+
case GDK_KEY_asciicircum:
94+
return SDLK_CARET;
95+
case GDK_KEY_underscore:
96+
return SDLK_UNDERSCORE;
97+
case GDK_KEY_quoteleft:
98+
return SDLK_BACKQUOTE;
99+
case GDK_KEY_a:
100+
return SDLK_a;
101+
case GDK_KEY_b:
102+
return SDLK_b;
103+
case GDK_KEY_c:
104+
return SDLK_c;
105+
case GDK_KEY_d:
106+
return SDLK_d;
107+
case GDK_KEY_e:
108+
return SDLK_e;
109+
case GDK_KEY_f:
110+
return SDLK_f;
111+
case GDK_KEY_g:
112+
return SDLK_g;
113+
case GDK_KEY_h:
114+
return SDLK_h;
115+
case GDK_KEY_i:
116+
return SDLK_i;
117+
case GDK_KEY_j:
118+
return SDLK_j;
119+
case GDK_KEY_k:
120+
return SDLK_k;
121+
case GDK_KEY_l:
122+
return SDLK_l;
123+
case GDK_KEY_m:
124+
return SDLK_m;
125+
case GDK_KEY_n:
126+
return SDLK_n;
127+
case GDK_KEY_o:
128+
return SDLK_o;
129+
case GDK_KEY_p:
130+
return SDLK_p;
131+
case GDK_KEY_q:
132+
return SDLK_q;
133+
case GDK_KEY_r:
134+
return SDLK_r;
135+
case GDK_KEY_s:
136+
return SDLK_s;
137+
case GDK_KEY_t:
138+
return SDLK_t;
139+
case GDK_KEY_u:
140+
return SDLK_u;
141+
case GDK_KEY_v:
142+
return SDLK_v;
143+
case GDK_KEY_w:
144+
return SDLK_w;
145+
case GDK_KEY_x:
146+
return SDLK_x;
147+
case GDK_KEY_y:
148+
return SDLK_y;
149+
case GDK_KEY_z:
150+
return SDLK_z;
151+
case GDK_KEY_Delete:
152+
return SDLK_DELETE;
153+
case GDK_KEY_KP_0:
154+
return SDLK_KP_0;
155+
case GDK_KEY_KP_1:
156+
return SDLK_KP_1;
157+
case GDK_KEY_KP_2:
158+
return SDLK_KP_2;
159+
case GDK_KEY_KP_3:
160+
return SDLK_KP_3;
161+
case GDK_KEY_KP_4:
162+
return SDLK_KP_4;
163+
case GDK_KEY_KP_5:
164+
return SDLK_KP_5;
165+
case GDK_KEY_KP_6:
166+
return SDLK_KP_6;
167+
case GDK_KEY_KP_7:
168+
return SDLK_KP_7;
169+
case GDK_KEY_KP_8:
170+
return SDLK_KP_8;
171+
case GDK_KEY_KP_9:
172+
return SDLK_KP_9;
173+
case GDK_KEY_KP_Decimal:
174+
return SDLK_KP_PERIOD;
175+
case GDK_KEY_KP_Divide:
176+
return SDLK_KP_DIVIDE;
177+
case GDK_KEY_KP_Multiply:
178+
return SDLK_KP_MULTIPLY;
179+
case GDK_KEY_KP_Subtract:
180+
return SDLK_KP_MINUS;
181+
case GDK_KEY_KP_Add:
182+
return SDLK_KP_PLUS;
183+
case GDK_KEY_KP_Enter:
184+
return SDLK_KP_ENTER;
185+
case GDK_KEY_KP_Equal:
186+
return SDLK_KP_EQUALS;
187+
case GDK_KEY_Up:
188+
return SDLK_UP;
189+
case GDK_KEY_Down:
190+
return SDLK_DOWN;
191+
case GDK_KEY_Right:
192+
return SDLK_RIGHT;
193+
case GDK_KEY_Left:
194+
return SDLK_LEFT;
195+
case GDK_KEY_Insert:
196+
return SDLK_INSERT;
197+
case GDK_KEY_Home:
198+
return SDLK_HOME;
199+
case GDK_KEY_End:
200+
return SDLK_END;
201+
case GDK_KEY_Page_Up:
202+
return SDLK_PAGEUP;
203+
case GDK_KEY_Page_Down:
204+
return SDLK_PAGEDOWN;
205+
case GDK_KEY_F1:
206+
return SDLK_F1;
207+
case GDK_KEY_F2:
208+
return SDLK_F2;
209+
case GDK_KEY_F3:
210+
return SDLK_F3;
211+
case GDK_KEY_F4:
212+
return SDLK_F4;
213+
case GDK_KEY_F5:
214+
return SDLK_F5;
215+
case GDK_KEY_F6:
216+
return SDLK_F6;
217+
case GDK_KEY_F7:
218+
return SDLK_F7;
219+
case GDK_KEY_F8:
220+
return SDLK_F8;
221+
case GDK_KEY_F9:
222+
return SDLK_F9;
223+
case GDK_KEY_F10:
224+
return SDLK_F10;
225+
case GDK_KEY_F11:
226+
return SDLK_F11;
227+
case GDK_KEY_F12:
228+
return SDLK_F12;
229+
case GDK_KEY_F13:
230+
return SDLK_F13;
231+
case GDK_KEY_F14:
232+
return SDLK_F14;
233+
case GDK_KEY_F15:
234+
return SDLK_F15;
235+
case GDK_KEY_Num_Lock:
236+
return SDLK_NUMLOCKCLEAR;
237+
case GDK_KEY_Caps_Lock:
238+
return SDLK_CAPSLOCK;
239+
case GDK_KEY_Scroll_Lock:
240+
return SDLK_SCROLLLOCK;
241+
case GDK_KEY_Shift_R:
242+
return SDLK_RSHIFT;
243+
case GDK_KEY_Shift_L:
244+
return SDLK_LSHIFT;
245+
case GDK_KEY_Control_R:
246+
return SDLK_RCTRL;
247+
case GDK_KEY_Control_L:
248+
return SDLK_LCTRL;
249+
case GDK_KEY_Alt_R:
250+
return SDLK_RALT;
251+
case GDK_KEY_Alt_L:
252+
return SDLK_LALT;
253+
case GDK_KEY_Meta_R:
254+
return SDLK_RGUI;
255+
case GDK_KEY_Meta_L:
256+
return SDLK_LGUI;
257+
case GDK_KEY_Super_L:
258+
return SDLK_LGUI;
259+
case GDK_KEY_Super_R:
260+
return SDLK_RGUI;
261+
case GDK_KEY_Mode_switch:
262+
return SDLK_MODE;
263+
264+
265+
case GDK_KEY_Help:
266+
return SDLK_HELP;
267+
case GDK_KEY_Print:
268+
return SDLK_PRINTSCREEN;
269+
case GDK_KEY_Sys_Req:
270+
return SDLK_SYSREQ;
271+
case GDK_KEY_Break:
272+
return SDLK_PAUSE;
273+
case GDK_KEY_Menu:
274+
return SDLK_MENU;
275+
276+
default:
277+
278+
return -1;
279+
}
280+
}
281+
282+
#else
283+
4284
int gdk_to_sdl_keycode(int gdk_key)
5285
{
6286
switch (gdk_key)
@@ -276,3 +556,4 @@ int gdk_to_sdl_keycode(int gdk_key)
276556
}
277557
}
278558

559+
#endif

0 commit comments

Comments
 (0)