Skip to content

Commit 121ce08

Browse files
committed
v2.5.4 fix: CefKeyEvent
1 parent 39a9a04 commit 121ce08

File tree

5 files changed

+68
-8
lines changed

5 files changed

+68
-8
lines changed

src/CEF_Events_Implement.inc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,11 @@ begin
291291
end;
292292

293293
procedure TLCLEvent.ChromiumEvent_OnPreKeyEvent(Sender: TObject; const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out isKeyboardShortcut: boolean; out Result: boolean);
294+
var
295+
TempEvent: PMCefKeyEvent;
294296
begin
295-
SendEvent([Sender, browser, event, osEvent, @isKeyboardShortcut, @Result]);
297+
TempEvent := CefKeyEventToGo(event^);
298+
SendEvent([Sender, browser, @TempEvent, osEvent, @isKeyboardShortcut, @Result]);
296299
end;
297300

298301
procedure TLCLEvent.ChromiumEvent_OnProtocolExecution(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; var allowOsExecution: boolean);
@@ -492,8 +495,11 @@ begin
492495
end;
493496

494497
procedure TLCLEvent.ChromiumEvent_OnKeyEvent(Sender: TObject; const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out Result: boolean);
498+
var
499+
TempEvent: PMCefKeyEvent;
495500
begin
496-
SendEvent([Sender, browser, event, osEvent, @Result]);
501+
TempEvent := CefKeyEventToGo(event^);
502+
SendEvent([Sender, browser, @TempEvent, osEvent, @Result]);
497503
end;
498504

499505
procedure TLCLEvent.ChromiumEvent_OnLoadStart(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; transitionType: TCefTransitionType);

src/CEF_LCL_Browser.inc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,16 @@ begin
180180
handleExceptionEnd
181181
end;
182182

183-
procedure CEFBrowser_SendKeyEvent(const TObj: ICefBrowser; const event: PCefKeyEvent); extdecl;
183+
procedure CEFBrowser_SendKeyEvent(const TObj: ICefBrowser; const event: PPMCefKeyEvent); extdecl;
184+
var
185+
TempEvent: TCefKeyEvent;
184186
begin
185187
handleExceptionBegin
186188
if TObj.GetHost <> nil then
187-
TObj.GetHost.SendKeyEvent(event);
189+
begin
190+
TempEvent := CefKeyEventToPas(event^);
191+
TObj.GetHost.SendKeyEvent(@TempEvent);
192+
end;
188193
handleExceptionEnd
189194
end;
190195

src/CEF_LCL_Chromium_Proc.inc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,10 +464,13 @@ begin
464464
handleExceptionEnd
465465
end;
466466

467-
procedure CEFChromium_SendKeyEvent(const TObj: TChromium; const event: PCefKeyEvent); extdecl;
467+
procedure CEFChromium_SendKeyEvent(const TObj: TChromium; const event: PPMCefKeyEvent); extdecl;
468+
var
469+
TempEvent: TCefKeyEvent;
468470
begin
469471
handleExceptionBegin
470-
TObj.SendKeyEvent(event);
472+
TempEvent := CefKeyEventToPas(event^);
473+
TObj.SendKeyEvent(@TempEvent);
471474
handleExceptionEnd
472475
end;
473476

src/uCEF_LCL_ClientHandlersRef.pas

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,22 +1080,28 @@ destructor TJsDialogHandlerRef.Destroy;
10801080

10811081
{== KeyboardHandler ==}
10821082
function TKeyboardHandlerRef.OnPreKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out isKeyboardShortcut: boolean): boolean;
1083+
var
1084+
TempEvent: PMCefKeyEvent;
10831085
begin
10841086
Result := False;
10851087
if (PreKeyEventPtr <> nil) then
10861088
begin
1087-
TCEFEventCallback.SendEvent(PreKeyEventPtr, [browser, event, osEvent, @isKeyboardShortcut, @Result]);
1089+
TempEvent := CefKeyEventToGo(event^);
1090+
TCEFEventCallback.SendEvent(PreKeyEventPtr, [browser, @TempEvent, osEvent, @isKeyboardShortcut, @Result]);
10881091
end
10891092
else
10901093
Result := inherited OnPreKeyEvent(browser, event, osEvent, isKeyboardShortcut);
10911094
end;
10921095

10931096
function TKeyboardHandlerRef.OnKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle): boolean;
1097+
var
1098+
TempEvent: PMCefKeyEvent;
10941099
begin
10951100
Result := False;
10961101
if (KeyEventPtr <> nil) then
10971102
begin
1098-
TCEFEventCallback.SendEvent(KeyEventPtr, [browser, event, osEvent, @Result]);
1103+
TempEvent := CefKeyEventToGo(event^);
1104+
TCEFEventCallback.SendEvent(KeyEventPtr, [browser, @TempEvent, osEvent, @Result]);
10991105
end
11001106
else
11011107
Result := inherited OnKeyEvent(browser, event, osEvent);

src/uCEF_LCL_Entity.pas

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,18 @@ TSimulateMouseEvent = record
276276
pointerType: TCefSimulatedPointerType
277277
end;
278278

279+
PPMCefKeyEvent = ^PMCefKeyEvent;
280+
PMCefKeyEvent = record
281+
kind : TCefKeyEventType;
282+
modifiers : TCefEventFlags;
283+
windows_key_code : Integer;
284+
native_key_code : Integer;
285+
is_system_key : Integer;
286+
character : WideChar;
287+
unmodified_character : WideChar;
288+
focus_on_editable_field : Integer;
289+
end;
290+
279291
//string to hash
280292
function StrToHash(const SoureStr: string): cardinal;
281293
//PChar 转 UnicodeString
@@ -325,6 +337,9 @@ function PdfPrintSettingsToPas(const AData: PMCefPdfPrintSettings): TCefPdfPrint
325337
function TouchHandleStateToGo(const AData: TCefTouchHandleState): PMCefTouchHandleState;
326338
function TouchHandleStateToPas(const AData: PMCefTouchHandleState): TCefTouchHandleState;
327339

340+
function CefKeyEventToGo(const AData: TCefKeyEvent): PMCefKeyEvent;
341+
function CefKeyEventToPas(const AData: PMCefKeyEvent): TCefKeyEvent;
342+
328343

329344

330345
var
@@ -827,6 +842,7 @@ function PdfPrintSettingsToGo(const AData: TCefPdfPrintSettings): PMCefPdfPrintS
827842

828843
function PdfPrintSettingsToPas(const AData: PMCefPdfPrintSettings): TCefPdfPrintSettings;
829844
begin
845+
Result.size := SizeOf(TCefPdfPrintSettings);
830846
Result.landscape := Integer(AData.landscape^);
831847
Result.print_background := Integer(AData.print_background^);
832848
Result.scale := double(AData.scale^);
@@ -870,5 +886,29 @@ function TouchHandleStateToPas(const AData: PMCefTouchHandleState): TCefTouchHan
870886
Result.alpha := integer(AData.alpha^);
871887
end;
872888

889+
function CefKeyEventToGo(const AData: TCefKeyEvent): PMCefKeyEvent;
890+
begin
891+
Result.kind := AData.kind;
892+
Result.modifiers := AData.modifiers;
893+
Result.windows_key_code := AData.windows_key_code;
894+
Result.native_key_code := AData.native_key_code;
895+
Result.is_system_key := AData.is_system_key;
896+
Result.character := AData.character;
897+
Result.unmodified_character := AData.unmodified_character;
898+
Result.focus_on_editable_field := AData.focus_on_editable_field;
899+
end;
900+
901+
function CefKeyEventToPas(const AData: PMCefKeyEvent): TCefKeyEvent;
902+
begin
903+
Result.size := SizeOf(TCefKeyEvent);
904+
Result.kind := AData.kind;
905+
Result.modifiers := AData.modifiers;
906+
Result.windows_key_code := AData.windows_key_code;
907+
Result.native_key_code := AData.native_key_code;
908+
Result.is_system_key := AData.is_system_key;
909+
Result.character := AData.character;
910+
Result.unmodified_character := AData.unmodified_character;
911+
Result.focus_on_editable_field := AData.focus_on_editable_field;
912+
end;
873913

874914
end.

0 commit comments

Comments
 (0)