Browse Source

* preserve the unicode keycode returned from ReadKey in the result of SysGetEnhancedKeyEvent

git-svn-id: branches/unicodekvm@41525 -
nickysn 6 years ago
parent
commit
1e94304bf0
1 changed files with 11 additions and 2 deletions
  1. 11 2
      packages/rtl-console/src/unix/keyboard.pp

+ 11 - 2
packages/rtl-console/src/unix/keyboard.pp

@@ -1742,6 +1742,7 @@ const
 var
   MyScan:byte;
   MyChar : char;
+  MyUniChar: WideChar;
   MyKey: TEnhancedKeyEvent;
   EscUsed,AltPrefixUsed,CtrlPrefixUsed,ShiftPrefixUsed,Again : boolean;
   SState: TEnhancedShiftState;
@@ -1756,6 +1757,7 @@ begin {main}
   SysGetEnhancedKeyEvent:=NilEnhancedKeyEvent;
   MyKey:=ReadKey;
   MyChar:=MyKey.AsciiChar;
+  MyUniChar:=MyKey.UnicodeChar;
   MyScan:=MyKey.VirtualScanCode shr 8;
   Sstate:=MyKey.ShiftState;
   CtrlPrefixUsed:=false;
@@ -1811,9 +1813,10 @@ begin {main}
           end;
         if myscan=kbAltBack then
           Include(sstate, essAlt);
-        if (MyChar<>#0) or (MyScan<>0) or (SState<>[]) then
+        if (MyChar<>#0) or (MyUniChar<>WideChar(0)) or (MyScan<>0) or (SState<>[]) then
           begin
             SysGetEnhancedKeyEvent.AsciiChar:=MyChar;
+            SysGetEnhancedKeyEvent.UnicodeChar:=MyUniChar;
             SysGetEnhancedKeyEvent.ShiftState:=SState;
             SysGetEnhancedKeyEvent.VirtualScanCode:=(MyScan shl 8) or Ord(MyChar);
           end;
@@ -1867,6 +1870,7 @@ begin {main}
       begin
         MyKey:=ReadKey;
         MyChar:=MyKey.AsciiChar;
+        MyUniChar:=MyKey.UnicodeChar;
         MyScan:=MyKey.VirtualScanCode shr 8;
       end;
   until not Again;
@@ -1876,6 +1880,7 @@ begin {main}
       if MyChar=#9 then
         begin
           MyChar:=#0;
+          MyUniChar:=WideChar(0);
           MyScan:=kbCtrlTab;
         end;
     end
@@ -1884,6 +1889,7 @@ begin {main}
       if MyChar=#9 then
         begin
           MyChar:=#0;
+          MyUniChar:=WideChar(0);
           MyScan:=kbAltTab;
         end
       else
@@ -1891,17 +1897,20 @@ begin {main}
           if MyScan in [$02..$0D] then
             inc(MyScan,$76);
           MyChar:=chr(0);
+          MyUniChar:=WideChar(0);
         end;
     end
   else if essShift in SState then
     if MyChar=#9 then
       begin
         MyChar:=#0;
+        MyUniChar:=WideChar(0);
         MyScan:=kbShiftTab;
       end;
-  if (MyChar<>#0) or (MyScan<>0) or (SState<>[]) then
+  if (MyChar<>#0) or (MyUniChar<>WideChar(0)) or (MyScan<>0) or (SState<>[]) then
     begin
       SysGetEnhancedKeyEvent.AsciiChar:=MyChar;
+      SysGetEnhancedKeyEvent.UnicodeChar:=MyUniChar;
       SysGetEnhancedKeyEvent.ShiftState:=SState;
       SysGetEnhancedKeyEvent.VirtualScanCode:=(MyScan shl 8) or Ord(MyChar);
     end;