diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 9ac678c93b53185094685e012a7e833c9f3c799c..567620ba50dfa7c868525569f2b0b8dd5d752efe 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -645,6 +645,13 @@ void QWaylandInputDevice::Keyboard::keyboard_key(uint32_t serial, uint32_t time,
 
     qtkey = QWaylandXkb::keysymToQtKey(sym, modifiers, text);
 
+
+    // Map control + letter to proper text
+    if (utf32 >= 'A' && utf32 <= '~' && (modifiers & Qt::ControlModifier)) {
+        utf32 &= ~0x60;
+        text = QString::fromUcs4(&utf32, 1);
+    }
+
     QWindowSystemInterface::handleExtendedKeyEvent(window->window(),
                                                     time, type, qtkey,
                                                     modifiers,