X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fxkb.c;h=88dbc5611e4dabb22850fda958178fadb974f0b0;hp=874531c351a603b45378ccd11d3bcdcf0b653431;hb=76d1d09c1224af8d663ce63dc5b32425bd62cb29;hpb=447783f8d0108feedf3a5801c1f61853d046a733 diff --git a/frontend/xkb.c b/frontend/xkb.c index 874531c3..88dbc561 100644 --- a/frontend/xkb.c +++ b/frontend/xkb.c @@ -44,6 +44,11 @@ static const struct { { XK_t, DKEY_R2 }, { XK_c, DKEY_SELECT }, { XK_v, DKEY_START }, + + { XK_F6, 32 + SACTION_SAVE_STATE }, + { XK_F7, 32 + SACTION_PREV_SSLOT }, + { XK_F8, 32 + SACTION_NEXT_SSLOT }, + { XK_F9, 32 + SACTION_LOAD_STATE }, }; static Atom wmprotocols, wmdelwindow; @@ -68,22 +73,23 @@ static void DestroyKeyboard(void) { XkbSetDetectableAutoRepeat(disp, 0, NULL); } -void x11_update_keys(void) { +int x11_update_keys(unsigned int *action) { uint8_t i; XEvent evt; XClientMessageEvent *xce; uint16_t Key; + static int keystate_x11; int psxkey, leave = 0; Display *disp = (Display *)gpuDisp; - if (initialized < 2000) { + if (!disp) + return 0; + + if (!initialized) { initialized++; InitKeyboard(); } - if (!disp) - return; - while (XPending(disp)) { XNextEvent(disp, &evt); switch (evt.type) { @@ -99,14 +105,18 @@ void x11_update_keys(void) { } } - if (psxkey >= 0) { + if (0 <= psxkey && psxkey < 32) { if (evt.type == KeyPress) - keystate |= 1 << psxkey; + keystate_x11 |= 1 << psxkey; else - keystate &= ~(1 << psxkey); + keystate_x11 &= ~(1 << psxkey); + } + if (evt.type == KeyPress) { + if (psxkey > 32) + *action = psxkey - 32; + if (Key == XK_Escape) + leave = 1; } - if (evt.type == KeyPress && Key == XK_Escape) - leave = 1; break; case ClientMessage: @@ -121,4 +131,6 @@ void x11_update_keys(void) { DestroyKeyboard(); exit(1); } + + return keystate_x11; }