Qt5,Qt6: map unicode chars to lcl keys where possible. issue #41452

(cherry picked from commit 17407a1e4d)

Co-authored-by: zeljan1 <zeljko@holobit.hr>
This commit is contained in:
Željan Rikalo 2025-02-22 23:47:18 +00:00 committed by Željan Rikalo
parent e65b28a14a
commit e434f37890
2 changed files with 26 additions and 2 deletions

View File

@ -3496,7 +3496,19 @@ begin
// Translates a Qt4 Key to a LCL VK_* key
if KeyMsg.CharCode = 0 then
begin
ACharCode := QtKeyToLCLKey(QKeyEvent_key(QKeyEventH(Event)), Text, QKeyEventH(Event));
{$IFDEF HASX11}
//key is unicode char, nativeVirtualKey is XKey.
if (QKeyEvent_key(QKeyEventH(Event)) >= $100) and (QKeyEvent_key(QKeyEventH(Event)) < $017f) then
ACharCode := QtKeyToLCLKey((QKeyEvent_nativeVirtualKey(QKeyEventH(Event)) - $0100) or $0080, Text, QKeyEventH(Event))
else
if (QKeyEvent_key(QKeyEventH(Event)) >= $0180) and (QKeyEvent_key(QKeyEventH(Event)) <= $024F) then
ACharCode := QtKeyToLCLKey((QKeyEvent_nativeVirtualKey(QKeyEventH(Event)) - $0180) or $0080, Text, QKeyEventH(Event))
else
if (QKeyEvent_key(QKeyEventH(Event)) >= $0400) and (QKeyEvent_key(QKeyEventH(Event)) <= $04ff) then
ACharCode := QtKeyToLCLKey((QKeyEvent_key(QKeyEventH(Event)) - $0360), Text, QKeyEventH(Event))
else
{$ENDIF}
ACharCode := QtKeyToLCLKey(QKeyEvent_key(QKeyEventH(Event)), Text, QKeyEventH(Event));
KeyMsg.CharCode := ACharCode;
end;

View File

@ -3494,7 +3494,19 @@ begin
// Translates a Qt4 Key to a LCL VK_* key
if KeyMsg.CharCode = 0 then
begin
ACharCode := QtKeyToLCLKey(QKeyEvent_key(QKeyEventH(Event)), Text, QKeyEventH(Event));
{$IFDEF HASX11}
//key is unicode char, nativeVirtualKey is XKey.
if (QKeyEvent_key(QKeyEventH(Event)) >= $100) and (QKeyEvent_key(QKeyEventH(Event)) < $017f) then
ACharCode := QtKeyToLCLKey((QKeyEvent_nativeVirtualKey(QKeyEventH(Event)) - $0100) or $0080, Text, QKeyEventH(Event))
else
if (QKeyEvent_key(QKeyEventH(Event)) >= $0180) and (QKeyEvent_key(QKeyEventH(Event)) <= $024F) then
ACharCode := QtKeyToLCLKey((QKeyEvent_nativeVirtualKey(QKeyEventH(Event)) - $0180) or $0080, Text, QKeyEventH(Event))
else
if (QKeyEvent_key(QKeyEventH(Event)) >= $0400) and (QKeyEvent_key(QKeyEventH(Event)) <= $04ff) then
ACharCode := QtKeyToLCLKey((QKeyEvent_key(QKeyEventH(Event)) - $0360), Text, QKeyEventH(Event))
else
{$ENDIF}
ACharCode := QtKeyToLCLKey(QKeyEvent_key(QKeyEventH(Event)), Text, QKeyEventH(Event));
KeyMsg.CharCode := ACharCode;
end;