Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions desmume/src/frontend/posix/gtk/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
#include "movie.h"
#include "dTool.h"
#include "../shared/desmume_config.h"
#include "../shared/gdksdl.cpp"
#include "cheatsGTK.h"
#include "frontend/modules/osd/agg/agg_osd.h"

Expand Down Expand Up @@ -2046,7 +2047,11 @@ static void Edit_Controls(GSimpleAction *action, GVariant *parameter, gpointer u
GtkWidget *ecDialog;
GtkWidget *ecKey;
gchar *Key_Label;
u32 keyboard_cfg_sdl[NB_KEYS];
int i;

g_assert(sizeof(Keypad_Temp) == sizeof(keyboard_cfg) &&
sizeof(keyboard_cfg) == sizeof(keyboard_cfg_sdl));

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

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

switch (gtk_dialog_run(GTK_DIALOG(ecDialog))) {
case GTK_RESPONSE_OK:
memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg));
desmume_config_update_keys(keyfile);
/* convert keycodes to SDL for the cli frontend, since it has no config menu */
for (i = 0; i < NB_KEYS; ++i) {
int sk = gdk_to_sdl_keycode(Keypad_Temp[i]);
/* if we don't know the keycode, chances are that SDL knows it anyways */
if (sk == -1) sk = (u32) Keypad_Temp[i];
keyboard_cfg_sdl[i] = sk;
}
memcpy(keyboard_cfg, keyboard_cfg_sdl, sizeof(keyboard_cfg));
desmume_config_update_keys(keyfile, "SDLKEYS");
memcpy(keyboard_cfg, Keypad_Temp, sizeof(keyboard_cfg));
desmume_config_update_keys(keyfile, "KEYS");
break;
case GTK_RESPONSE_CANCEL:
case GTK_RESPONSE_NONE:
Expand Down
281 changes: 281 additions & 0 deletions desmume/src/frontend/posix/shared/gdksdl.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,286 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
#include <SDL.h>

#if GTK_CHECK_VERSION(3, 0, 0)

int gdk_to_sdl_keycode(int gdk_key)
{
switch (gdk_key)
{
case GDK_KEY_BackSpace:
return SDLK_BACKSPACE;
case GDK_KEY_Tab:
return SDLK_TAB;
case GDK_KEY_Clear:
return SDLK_CLEAR;
case GDK_KEY_Return:
return SDLK_RETURN;
case GDK_KEY_Pause:
return SDLK_PAUSE;
case GDK_KEY_Escape:
return SDLK_ESCAPE;
case GDK_KEY_KP_Space:
return SDLK_SPACE;
case GDK_KEY_exclamdown:
return SDLK_EXCLAIM;
case GDK_KEY_quotedbl:
return SDLK_QUOTEDBL;
case GDK_KEY_numbersign:
return SDLK_HASH;
case GDK_KEY_dollar:
return SDLK_DOLLAR;
case GDK_KEY_ampersand:
return SDLK_AMPERSAND;
case GDK_KEY_quoteright:
return SDLK_QUOTE;
case GDK_KEY_parenleft:
return SDLK_LEFTPAREN;
case GDK_KEY_parenright:
return SDLK_RIGHTPAREN;
case GDK_KEY_asterisk:
return SDLK_ASTERISK;
case GDK_KEY_plus:
return SDLK_PLUS;
case GDK_KEY_comma:
return SDLK_COMMA;
case GDK_KEY_minus:
return SDLK_MINUS;
case GDK_KEY_period:
return SDLK_PERIOD;
case GDK_KEY_slash:
return SDLK_SLASH;
case GDK_KEY_0:
return SDLK_0;
case GDK_KEY_1:
return SDLK_1;
case GDK_KEY_2:
return SDLK_2;
case GDK_KEY_3:
return SDLK_3;
case GDK_KEY_4:
return SDLK_4;
case GDK_KEY_5:
return SDLK_5;
case GDK_KEY_6:
return SDLK_6;
case GDK_KEY_7:
return SDLK_7;
case GDK_KEY_8:
return SDLK_8;
case GDK_KEY_9:
return SDLK_9;
case GDK_KEY_colon:
return SDLK_COLON;
case GDK_KEY_semicolon:
return SDLK_SEMICOLON;
case GDK_KEY_less:
return SDLK_LESS;
case GDK_KEY_equal:
return SDLK_EQUALS;
case GDK_KEY_greater:
return SDLK_GREATER;
case GDK_KEY_question:
return SDLK_QUESTION;
case GDK_KEY_at:
return SDLK_AT;
case GDK_KEY_bracketleft:
return SDLK_LEFTBRACKET;
case GDK_KEY_backslash:
return SDLK_BACKSLASH;
case GDK_KEY_bracketright:
return SDLK_RIGHTBRACKET;
case GDK_KEY_asciicircum:
return SDLK_CARET;
case GDK_KEY_underscore:
return SDLK_UNDERSCORE;
case GDK_KEY_quoteleft:
return SDLK_BACKQUOTE;
case GDK_KEY_a:
return SDLK_a;
case GDK_KEY_b:
return SDLK_b;
case GDK_KEY_c:
return SDLK_c;
case GDK_KEY_d:
return SDLK_d;
case GDK_KEY_e:
return SDLK_e;
case GDK_KEY_f:
return SDLK_f;
case GDK_KEY_g:
return SDLK_g;
case GDK_KEY_h:
return SDLK_h;
case GDK_KEY_i:
return SDLK_i;
case GDK_KEY_j:
return SDLK_j;
case GDK_KEY_k:
return SDLK_k;
case GDK_KEY_l:
return SDLK_l;
case GDK_KEY_m:
return SDLK_m;
case GDK_KEY_n:
return SDLK_n;
case GDK_KEY_o:
return SDLK_o;
case GDK_KEY_p:
return SDLK_p;
case GDK_KEY_q:
return SDLK_q;
case GDK_KEY_r:
return SDLK_r;
case GDK_KEY_s:
return SDLK_s;
case GDK_KEY_t:
return SDLK_t;
case GDK_KEY_u:
return SDLK_u;
case GDK_KEY_v:
return SDLK_v;
case GDK_KEY_w:
return SDLK_w;
case GDK_KEY_x:
return SDLK_x;
case GDK_KEY_y:
return SDLK_y;
case GDK_KEY_z:
return SDLK_z;
case GDK_KEY_Delete:
return SDLK_DELETE;
case GDK_KEY_KP_0:
return SDLK_KP_0;
case GDK_KEY_KP_1:
return SDLK_KP_1;
case GDK_KEY_KP_2:
return SDLK_KP_2;
case GDK_KEY_KP_3:
return SDLK_KP_3;
case GDK_KEY_KP_4:
return SDLK_KP_4;
case GDK_KEY_KP_5:
return SDLK_KP_5;
case GDK_KEY_KP_6:
return SDLK_KP_6;
case GDK_KEY_KP_7:
return SDLK_KP_7;
case GDK_KEY_KP_8:
return SDLK_KP_8;
case GDK_KEY_KP_9:
return SDLK_KP_9;
case GDK_KEY_KP_Decimal:
return SDLK_KP_PERIOD;
case GDK_KEY_KP_Divide:
return SDLK_KP_DIVIDE;
case GDK_KEY_KP_Multiply:
return SDLK_KP_MULTIPLY;
case GDK_KEY_KP_Subtract:
return SDLK_KP_MINUS;
case GDK_KEY_KP_Add:
return SDLK_KP_PLUS;
case GDK_KEY_KP_Enter:
return SDLK_KP_ENTER;
case GDK_KEY_KP_Equal:
return SDLK_KP_EQUALS;
case GDK_KEY_Up:
return SDLK_UP;
case GDK_KEY_Down:
return SDLK_DOWN;
case GDK_KEY_Right:
return SDLK_RIGHT;
case GDK_KEY_Left:
return SDLK_LEFT;
case GDK_KEY_Insert:
return SDLK_INSERT;
case GDK_KEY_Home:
return SDLK_HOME;
case GDK_KEY_End:
return SDLK_END;
case GDK_KEY_Page_Up:
return SDLK_PAGEUP;
case GDK_KEY_Page_Down:
return SDLK_PAGEDOWN;
case GDK_KEY_F1:
return SDLK_F1;
case GDK_KEY_F2:
return SDLK_F2;
case GDK_KEY_F3:
return SDLK_F3;
case GDK_KEY_F4:
return SDLK_F4;
case GDK_KEY_F5:
return SDLK_F5;
case GDK_KEY_F6:
return SDLK_F6;
case GDK_KEY_F7:
return SDLK_F7;
case GDK_KEY_F8:
return SDLK_F8;
case GDK_KEY_F9:
return SDLK_F9;
case GDK_KEY_F10:
return SDLK_F10;
case GDK_KEY_F11:
return SDLK_F11;
case GDK_KEY_F12:
return SDLK_F12;
case GDK_KEY_F13:
return SDLK_F13;
case GDK_KEY_F14:
return SDLK_F14;
case GDK_KEY_F15:
return SDLK_F15;
case GDK_KEY_Num_Lock:
return SDLK_NUMLOCKCLEAR;
case GDK_KEY_Caps_Lock:
return SDLK_CAPSLOCK;
case GDK_KEY_Scroll_Lock:
return SDLK_SCROLLLOCK;
case GDK_KEY_Shift_R:
return SDLK_RSHIFT;
case GDK_KEY_Shift_L:
return SDLK_LSHIFT;
case GDK_KEY_Control_R:
return SDLK_RCTRL;
case GDK_KEY_Control_L:
return SDLK_LCTRL;
case GDK_KEY_Alt_R:
return SDLK_RALT;
case GDK_KEY_Alt_L:
return SDLK_LALT;
case GDK_KEY_Meta_R:
return SDLK_RGUI;
case GDK_KEY_Meta_L:
return SDLK_LGUI;
case GDK_KEY_Super_L:
return SDLK_LGUI;
case GDK_KEY_Super_R:
return SDLK_RGUI;
case GDK_KEY_Mode_switch:
return SDLK_MODE;


case GDK_KEY_Help:
return SDLK_HELP;
case GDK_KEY_Print:
return SDLK_PRINTSCREEN;
case GDK_KEY_Sys_Req:
return SDLK_SYSREQ;
case GDK_KEY_Break:
return SDLK_PAUSE;
case GDK_KEY_Menu:
return SDLK_MENU;

default:

return -1;
}
}

#else

int gdk_to_sdl_keycode(int gdk_key)
{
switch (gdk_key)
Expand Down Expand Up @@ -276,3 +556,4 @@ int gdk_to_sdl_keycode(int gdk_key)
}
}

#endif