$OpenBSD: patch-gfx_common_x11_common_c,v 1.1 2019/04/01 03:11:18 bentley Exp $

Revert upstream commit 347519a4d8f3befb719f11eeb0121c736ce64dee,
which breaks keyboard input.

Index: gfx/common/x11_common.c
--- gfx/common/x11_common.c.orig
+++ gfx/common/x11_common.c
@@ -405,7 +405,7 @@ bool x11_get_metrics(void *data,
    return true;
 }
 
-static void x11_handle_key_event(unsigned keycode, XEvent *event, XIC ic, bool filter)
+static void x11_handle_key_event(XEvent *event, XIC ic, bool filter)
 {
    int i;
    Status status;
@@ -455,11 +455,9 @@ static void x11_handle_key_event(unsigned keycode, XEv
     * to feed it keysyms anyway, so here is a little hack... */
    if (keysym >= XK_A && keysym <= XK_Z)
        keysym += XK_z - XK_Z;
-       
-   /* Get the real keycode,
-      that correctly ignores international layouts as windows code does. */
-   key     = input_keymaps_translate_keysym_to_rk(keycode);
 
+   key   = input_keymaps_translate_keysym_to_rk(keysym);
+
    if (state & ShiftMask)
       mod |= RETROKMOD_SHIFT;
    if (state & LockMask)
@@ -468,10 +466,10 @@ static void x11_handle_key_event(unsigned keycode, XEv
       mod |= RETROKMOD_CTRL;
    if (state & Mod1Mask)
       mod |= RETROKMOD_ALT;
-   if (state & Mod2Mask)
-      mod |= RETROKMOD_NUMLOCK;
    if (state & Mod4Mask)
       mod |= RETROKMOD_META;
+   if (IsKeypadKey(keysym))
+      mod |= RETROKMOD_NUMLOCK;
 
    input_keyboard_event(down, key, chars[0], mod, RETRO_DEVICE_KEYBOARD);
 
@@ -486,14 +484,9 @@ bool x11_alive(void *data)
    {
       XEvent event;
       bool filter = false;
-      unsigned keycode = 0;
 
       /* Can get events from older windows. Check this. */
       XNextEvent(g_x11_dpy, &event);
-      
-      /* IMPORTANT - Get keycode before XFilterEvent
-         because the event is localizated after the call */
-      keycode = event.xkey.keycode;
       filter = XFilterEvent(&event, g_x11_win);
 
       switch (event.type)
@@ -556,7 +549,7 @@ bool x11_alive(void *data)
          case KeyPress:
          case KeyRelease:
             if (event.xkey.window == g_x11_win)
-               x11_handle_key_event(keycode, &event, g_x11_xic, filter);
+               x11_handle_key_event(&event, g_x11_xic, filter);
             break;
       }
    }
