diff -r eef1f76150fe -r bb412d8e435f QTfrontend/util/DataManager.cpp --- a/QTfrontend/util/DataManager.cpp Sun Apr 28 00:09:56 2019 +0300 +++ b/QTfrontend/util/DataManager.cpp Mon Apr 29 21:23:50 2019 +0200 @@ -28,9 +28,12 @@ #include #include +#include + #include "hwconsts.h" #include "HWApplication.h" #include "sdlkeys.h" +#include "KeyMap.h" #include "physfs.h" #include "DataManager.h" @@ -147,6 +150,7 @@ QStandardItemModel * DataManager::bindsModel() { + KeyMap km = KeyMap::instance(); if(m_bindsModel == NULL) { m_bindsModel = new QStandardItemModel(); @@ -160,8 +164,27 @@ { QStandardItem * item = new QStandardItem(); QString keyId = QString(sdlkeys[j][0]); - QString keyTr = HWApplication::translate("binds (keys)", sdlkeys[j][1]); - item->setData((keyId == "none" || keyTr.contains(": ")) ? keyTr : HWApplication::translate("binds (keys)", "Keyboard") + QString(": ") + keyTr, Qt::DisplayRole); + QString keyDisplay; + bool isKeyboard = !QString(sdlkeys[j][1]).contains(": "); + if (keyId == "none" || (!isKeyboard)) + keyDisplay = HWApplication::translate("binds (keys)", sdlkeys[j][1]); + else + // Get key name with respect to keyboard layout + keyDisplay = QString(SDL_GetKeyName(SDL_GetKeyFromScancode(km.getScancodeFromKeyname(sdlkeys[j][0])))); + + bool kbFallback = keyDisplay.trimmed().isEmpty(); + if (kbFallback) + { + // If SDL doesn't know a name, show fallback enclosed in brackets + keyDisplay = QString(sdlkeys[j][1]) + QString(" ") + HWApplication::translate("binds (keys)", "(unsupported)"); + } + if (isKeyboard) + { + if (!kbFallback) + keyDisplay = HWApplication::translate("binds (keys)", keyDisplay.toUtf8().constData()); + keyDisplay = HWApplication::translate("binds (keys)", "Keyboard") + QString(": ") + keyDisplay; + } + item->setData(keyDisplay, Qt::DisplayRole); item->setData(sdlkeys[j][0], Qt::UserRole + 1); m_bindsModel->appendRow(item); }