You've already forked CEF4Delphi
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:
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user