File xenia_PR2234.patch of Package xenia-canary
From a2db63287a4ffb0789a3783eccd60016ef13ed0b Mon Sep 17 00:00:00 2001
From: guccigang420 <>
Date: Fri, 6 Oct 2023 17:12:38 +0200
Subject: [PATCH] Added a translation for GTK virtual keys to ui::VirtualKey
---
src/xenia/ui/window_gtk.cc | 149 ++++++++++++++++++++++++++++++++++++-
src/xenia/ui/window_gtk.h | 4 +
2 files changed, 152 insertions(+), 1 deletion(-)
diff --git a/src/xenia/ui/window_gtk.cc b/src/xenia/ui/window_gtk.cc
index 6eb563667d..a82d156dd6 100644
--- a/src/xenia/ui/window_gtk.cc
+++ b/src/xenia/ui/window_gtk.cc
@@ -350,6 +350,153 @@ void GTKWindow::EndBatchedSizeUpdate(
}
}
+VirtualKey GTKWindow::TranslateVirtualKey(guint keyval) {
+ switch (keyval) {
+ case GDK_KEY_a:
+ return VirtualKey::kA;
+ case GDK_KEY_A:
+ return VirtualKey::kA;
+ case GDK_KEY_b:
+ return VirtualKey::kB;
+ case GDK_KEY_B:
+ return VirtualKey::kB;
+ case GDK_KEY_c:
+ return VirtualKey::kC;
+ case GDK_KEY_C:
+ return VirtualKey::kC;
+ case GDK_KEY_d:
+ return VirtualKey::kD;
+ case GDK_KEY_D:
+ return VirtualKey::kD;
+ case GDK_KEY_e:
+ return VirtualKey::kE;
+ case GDK_KEY_E:
+ return VirtualKey::kE;
+ case GDK_KEY_f:
+ return VirtualKey::kF;
+ case GDK_KEY_F:
+ return VirtualKey::kF;
+ case GDK_KEY_g:
+ return VirtualKey::kG;
+ case GDK_KEY_G:
+ return VirtualKey::kG;
+ case GDK_KEY_h:
+ return VirtualKey::kH;
+ case GDK_KEY_H:
+ return VirtualKey::kH;
+ case GDK_KEY_i:
+ return VirtualKey::kI;
+ case GDK_KEY_I:
+ return VirtualKey::kI;
+ case GDK_KEY_j:
+ return VirtualKey::kJ;
+ case GDK_KEY_J:
+ return VirtualKey::kJ;
+ case GDK_KEY_k:
+ return VirtualKey::kK;
+ case GDK_KEY_K:
+ return VirtualKey::kK;
+ case GDK_KEY_l:
+ return VirtualKey::kL;
+ case GDK_KEY_L:
+ return VirtualKey::kL;
+ case GDK_KEY_m:
+ return VirtualKey::kM;
+ case GDK_KEY_M:
+ return VirtualKey::kM;
+ case GDK_KEY_n:
+ return VirtualKey::kN;
+ case GDK_KEY_N:
+ return VirtualKey::kN;
+ case GDK_KEY_o:
+ return VirtualKey::kO;
+ case GDK_KEY_O:
+ return VirtualKey::kO;
+ case GDK_KEY_p:
+ return VirtualKey::kP;
+ case GDK_KEY_P:
+ return VirtualKey::kP;
+ case GDK_KEY_q:
+ return VirtualKey::kQ;
+ case GDK_KEY_Q:
+ return VirtualKey::kQ;
+ case GDK_KEY_r:
+ return VirtualKey::kR;
+ case GDK_KEY_R:
+ return VirtualKey::kR;
+ case GDK_KEY_s:
+ return VirtualKey::kS;
+ case GDK_KEY_S:
+ return VirtualKey::kS;
+ case GDK_KEY_t:
+ return VirtualKey::kT;
+ case GDK_KEY_T:
+ return VirtualKey::kT;
+ case GDK_KEY_u:
+ return VirtualKey::kU;
+ case GDK_KEY_U:
+ return VirtualKey::kU;
+ case GDK_KEY_v:
+ return VirtualKey::kV;
+ case GDK_KEY_V:
+ return VirtualKey::kV;
+ case GDK_KEY_w:
+ return VirtualKey::kW;
+ case GDK_KEY_W:
+ return VirtualKey::kW;
+ case GDK_KEY_x:
+ return VirtualKey::kX;
+ case GDK_KEY_X:
+ return VirtualKey::kX;
+ case GDK_KEY_y:
+ return VirtualKey::kY;
+ case GDK_KEY_Y:
+ return VirtualKey::kY;
+ case GDK_KEY_z:
+ return VirtualKey::kZ;
+ case GDK_KEY_Z:
+ return VirtualKey::kZ;
+ case GDK_KEY_0:
+ return VirtualKey::k0;
+ case GDK_KEY_1:
+ return VirtualKey::k1;
+ case GDK_KEY_2:
+ return VirtualKey::k2;
+ case GDK_KEY_3:
+ return VirtualKey::k3;
+ case GDK_KEY_4:
+ return VirtualKey::k4;
+ case GDK_KEY_5:
+ return VirtualKey::k5;
+ case GDK_KEY_6:
+ return VirtualKey::k6;
+ case GDK_KEY_7:
+ return VirtualKey::k7;
+ case GDK_KEY_8:
+ return VirtualKey::k8;
+ case GDK_KEY_9:
+ return VirtualKey::k9;
+ case GDK_KEY_semicolon:
+ return VirtualKey::kOem1;
+ case GDK_KEY_apostrophe:
+ return VirtualKey::kOem7;
+ case GDK_KEY_comma:
+ return VirtualKey::kOemComma;
+ case GDK_KEY_period:
+ return VirtualKey::kOemPeriod;
+ case GDK_KEY_uparrow:
+ return VirtualKey::kUp;
+ case GDK_KEY_downarrow:
+ return VirtualKey::kDown;
+ case GDK_KEY_leftarrow:
+ return VirtualKey::kLeft;
+ case GDK_KEY_rightarrow:
+ return VirtualKey::kRight;
+ default:
+ return VirtualKey(keyval);
+ }
+}
+
bool GTKWindow::HandleMouse(GdkEvent* event,
WindowDestructionReceiver& destruction_receiver) {
MouseEvent::Button button = MouseEvent::Button::kNone;
@@ -433,7 +580,7 @@ bool GTKWindow::HandleKeyboard(
bool super_pressed = modifiers & GDK_SUPER_MASK;
uint32_t key_char = gdk_keyval_to_unicode(event->keyval);
// TODO(Triang3l): event->hardware_keycode to VirtualKey translation.
- KeyEvent e(this, VirtualKey(event->hardware_keycode), 1,
+ KeyEvent e(this, TranslateVirtualKey(event->keyval), 1,
event->type == GDK_KEY_RELEASE, shift_pressed, ctrl_pressed,
alt_pressed, super_pressed);
switch (event->type) {
diff --git a/src/xenia/ui/window_gtk.h b/src/xenia/ui/window_gtk.h
index a78cae29f9..fce5547e0e 100644
--- a/src/xenia/ui/window_gtk.h
+++ b/src/xenia/ui/window_gtk.h
@@ -59,6 +59,10 @@ class GTKWindow : public Window {
void BeginBatchedSizeUpdate();
void EndBatchedSizeUpdate(WindowDestructionReceiver& destruction_receiver);
+
+ //Translates a gtk virtual key to xenia ui::VirtualKey
+ VirtualKey TranslateVirtualKey(guint keyval);
+
// Handling events related to the whole window.
bool HandleMouse(GdkEvent* event,
WindowDestructionReceiver& destruction_receiver);