diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c
index 8f8511c1148fe31b1d9e5fdecf22046f554b127a..dc577f7b0ea47aaa6bd83d3bff6a454b51c46d26 100644
--- a/src/conio/sdl_con.c
+++ b/src/conio/sdl_con.c
@@ -1221,10 +1221,18 @@ unsigned int sdl_get_char_code(unsigned int keysym, unsigned int mod, unsigned i
 
 				if(mod & KMOD_CTRL)
 					expect=sdl_keyval[i].ctrl;
-				else if(mod & KMOD_SHIFT)
-					expect=sdl_keyval[i].shift;
-				else
-					expect=sdl_keyval[i].key;
+				else if(mod & KMOD_SHIFT) {
+					if(mod & KMOD_CAPS)
+						expect=sdl_keyval[i].key;
+					else
+						expect=sdl_keyval[i].shift;
+				}
+				else {
+					if(mod & KMOD_CAPS)
+						expect=sdl_keyval[i].shift;
+					else
+						expect=sdl_keyval[i].key;
+				}
 
 				/*
 				 * Now handle the ALT case so that expect will