frontend: support some emu actions in x11 build
authornotaz <notasas@gmail.com>
Mon, 6 Jun 2011 15:46:34 +0000 (18:46 +0300)
committernotaz <notasas@gmail.com>
Mon, 6 Jun 2011 15:46:34 +0000 (18:46 +0300)
frontend/plugin_lib.c
frontend/xkb.c

index c2fa100..ee0e086 100644 (file)
@@ -171,8 +171,9 @@ static void update_input(void)
        in_keystate = actions[IN_BINDTYPE_PLAYER12];
 
 #ifdef X11
-       extern int x11_update_keys(void);
-       in_keystate |= x11_update_keys();
+       extern int x11_update_keys(unsigned int *action);
+       in_keystate |= x11_update_keys(&emu_act);
+       emu_set_action(emu_act);
 #endif
 }
 
index 7d00786..88dbc56 100644 (file)
@@ -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,7 +73,7 @@ static void DestroyKeyboard(void) {
                XkbSetDetectableAutoRepeat(disp, 0, NULL);
 }
 
-int x11_update_keys(void) {
+int x11_update_keys(unsigned int *action) {
        uint8_t                                 i;
        XEvent                                  evt;
        XClientMessageEvent             *xce;
@@ -100,14 +105,18 @@ int x11_update_keys(void) {
                                        }
                                }
 
-                               if (psxkey >= 0) {
+                               if (0 <= psxkey && psxkey < 32) {
                                        if (evt.type == KeyPress)
                                                keystate_x11 |= 1 << psxkey;
                                        else
                                                keystate_x11 &= ~(1 << psxkey);
                                }
-                               if (evt.type == KeyPress && Key == XK_Escape)
-                                       leave = 1;
+                               if (evt.type == KeyPress) {
+                                       if (psxkey > 32)
+                                               *action = psxkey - 32;
+                                       if (Key == XK_Escape)
+                                               leave = 1;
+                               }
                                break;
 
                        case ClientMessage: