1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-06-12 22:07:39 +02:00

Fixed UTF8 string conversion in SimpleBrowser for Linux

- Removed "cmem" and "interfaces" from the TinyBrowser2 demo for Linux.
- Simplified the code of the TinyBrowser2 demo for Linux.
- Added the workaround for the CEF focus issue to TChromiumWindow in Linux.
- Set the result type of GetChildWindowHandle to LclType.THandle in FPC for TCEFWinControl, TCEFLinkedWindowParent and TChromiumWindow.
This commit is contained in:
Salvador Diaz Fau
2021-02-21 11:11:08 +01:00
parent 8c8e43b671
commit 51d8c20f63
8 changed files with 90 additions and 59 deletions

View File

@ -74,10 +74,9 @@ type
{$IFDEF FPC}
procedure SetVisible(Value: Boolean); override;
{$ENDIF}
function GetBrowserInitialized : boolean;
function GetBrowserInitialized : boolean;
function GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle; override;
{$IFDEF MSWINDOWS}
function GetChildWindowHandle : THandle; override;
procedure WndProc(var aMessage: TMessage); override;
procedure OnCloseMsg(var aMessage : TMessage); message CEF_DOONCLOSE;
@ -86,11 +85,14 @@ type
procedure WebBrowser_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
procedure WebBrowser_OnBeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure WebBrowser_OnAfterCreated(Sender: TObject; const browser: ICefBrowser);
{$IFDEF FPC}
procedure BrowserAfterCreated(Data: PtrInt);
procedure WebBrowser_OnGotFocus(Sender: TObject; const browser: ICefBrowser);
procedure BrowserSetFocusMsg(Data: PtrInt);
procedure BrowserAfterCreated(Data: PtrInt);
procedure BrowserOnCLose(Data: PtrInt);
{$ENDIF}
procedure DoEnter; override;
procedure DoExit; override;
public
constructor Create(AOwner: TComponent); override;
@ -176,11 +178,15 @@ begin
FChromium.OnClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnClose;
FChromium.OnBeforeClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnBeforeClose;
FChromium.OnAfterCreated := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnAfterCreated;
{$IFDEF LINUX}
// This is a workaround for the CEF issue #2026. Read below for more info.
FChromium.OnGotFocus := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnGotFocus;
TabStop := True;
{$ENDIF}
end;
end;
{$IFDEF MSWINDOWS}
function TChromiumWindow.GetChildWindowHandle : THandle;
function TChromiumWindow.GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle;
begin
Result := 0;
@ -189,6 +195,7 @@ begin
if (Result = 0) then Result := inherited GetChildWindowHandle;
end;
{$IFDEF MSWINDOWS}
procedure TChromiumWindow.WndProc(var aMessage: TMessage);
var
TempHandle : THandle;
@ -274,6 +281,16 @@ end;
{$ENDIF}
{$IFDEF FPC}
procedure TChromiumWindow.WebBrowser_OnGotFocus(Sender: TObject; const browser: ICefBrowser);
begin
Application.QueueAsyncCall(@BrowserSetFocusMsg, 0);
end;
procedure TChromiumWindow.BrowserSetFocusMsg(Data: PtrInt);
begin
SetFocus;
end;
procedure TChromiumWindow.BrowserAfterCreated(Data: PtrInt);
begin
UpdateSize;
@ -344,6 +361,34 @@ begin
{$ENDIF}
end;
// This is a workaround for the CEF issue #2026
// https://bitbucket.org/chromiumembedded/cef/issues/2026/multiple-major-keyboard-focus-issues-on
// We use ChromiumWindow1.OnEnter, ChromiumWindow1.OnExit and
// TChromium.OnGotFocus to avoid most of the focus issues.
// ChromiumWindow1.TabStop must be TRUE.
procedure TChromiumWindow.DoEnter;
begin
inherited DoEnter;
{$IFDEF LINUX}
if not(csDesigning in ComponentState) and
FChromium.Initialized and
not(FChromium.FrameIsFocused) then
FChromium.SendFocusEvent(True);
{$ENDIF}
end;
procedure TChromiumWindow.DoExit;
begin
inherited DoExit;
{$IFDEF LINUX}
if not(csDesigning in ComponentState) then
FChromium.SendCaptureLostEvent;
{$ENDIF}
end;
{$IFDEF FPC}
procedure Register;
begin

View File

@ -73,7 +73,7 @@ type
{$ENDIF}
procedure SetChromium(aValue : TChromium);
function GetChildWindowHandle : THandle; override;
function GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle; override;
{$IFDEF MSWINDOWS}
procedure WndProc(var aMessage: TMessage); override;
{$ENDIF}
@ -105,7 +105,7 @@ begin
FChromium := nil;
end;
function TCEFLinkedWindowParent.GetChildWindowHandle : THandle;
function TCEFLinkedWindowParent.GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle;
begin
Result := 0;

View File

@ -62,7 +62,7 @@ uses
type
TCEFWinControl = class(TWinControl)
protected
function GetChildWindowHandle : THandle; virtual;
function GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle; virtual;
procedure Resize; override;
public
@ -110,7 +110,7 @@ implementation
uses
uCEFMiscFunctions, uCEFClient, uCEFConstants;
function TCEFWinControl.GetChildWindowHandle : THandle;
function TCEFWinControl.GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle;
begin
{$IFDEF MSWINDOWS}
if not(csDesigning in ComponentState) and HandleAllocated then