{ 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;
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) {
}
}
- 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:
DestroyKeyboard();
exit(1);
}
+
+ return keystate_x11;
}