qxkbcommon: Map Super/Hyper to Meta early enough to have an effect

Super/Hyper keys are detected during a direct mapping phase, but the
function returned before the translation to Meta could take place.

Task-number: QTBUG-62102
Pick-to: 5.15 6.0 6.1
Change-Id: I9f7ccfd757fa86dbc648951306deb1b43ccf4167
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Andrey Butirsky <butirsky@gmail.com>
This commit is contained in:
Andrey Butirsky 2021-05-17 18:14:06 +03:00 committed by Tor Arne Vestbø
parent cb881f7c97
commit b45b9090c3

View File

@ -560,6 +560,12 @@ static int keysymToQtKey_internal(xkb_keysym_t keysym, Qt::KeyboardModifiers mod
auto it = std::lower_bound(KeyTbl.cbegin(), KeyTbl.cend(), searchKey);
if (it != KeyTbl.end() && !(searchKey < *it))
qtKey = it->qt;
// translate Super/Hyper keys to Meta if we're using them as the MetaModifier
if (superAsMeta && (qtKey == Qt::Key_Super_L || qtKey == Qt::Key_Super_R))
qtKey = Qt::Key_Meta;
if (hyperAsMeta && (qtKey == Qt::Key_Hyper_L || qtKey == Qt::Key_Hyper_R))
qtKey = Qt::Key_Meta;
}
if (qtKey)
@ -586,12 +592,6 @@ static int keysymToQtKey_internal(xkb_keysym_t keysym, Qt::KeyboardModifiers mod
}
}
// translate Super/Hyper keys to Meta if we're using them as the MetaModifier
if (superAsMeta && (qtKey == Qt::Key_Super_L || qtKey == Qt::Key_Super_R))
qtKey = Qt::Key_Meta;
if (hyperAsMeta && (qtKey == Qt::Key_Hyper_L || qtKey == Qt::Key_Hyper_R))
qtKey = Qt::Key_Meta;
return qtKey;
}