Handle XKB groups properly in x0vncserver
diff --git a/unix/x0vncserver/x0vncserver.cxx b/unix/x0vncserver/x0vncserver.cxx
index a60a727..f4dd6f9 100644
--- a/unix/x0vncserver/x0vncserver.cxx
+++ b/unix/x0vncserver/x0vncserver.cxx
@@ -373,8 +373,11 @@
          keycode <= xkb->max_key_code;
          keycode++) {
       KeySym cursym;
-      unsigned int mods;
-      XkbTranslateKeyCode(xkb, keycode, state.compat_state, &mods, &cursym);
+      unsigned int mods, out_mods;
+      // XkbStateFieldFromRec() doesn't work properly because
+      // state.lookup_mods isn't properly updated, so we do this manually
+      mods = XkbBuildCoreState(XkbStateMods(&state), state.group);
+      XkbTranslateKeyCode(xkb, keycode, mods, &out_mods, &cursym);
       if (cursym == keysym)
         break;
     }