You've already forked CEF4Delphi
mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-06-22 22:17:48 +02:00
@ -50,20 +50,22 @@ interface
|
||||
|
||||
uses
|
||||
{$IFDEF DELPHI16_UP}
|
||||
{$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, WinApi.ActiveX, WinApi.CommCtrl,{$ENDIF}
|
||||
System.Classes, System.SyncObjs, System.Types,
|
||||
{$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, WinApi.ActiveX, WinApi.CommCtrl,{$ENDIF}
|
||||
System.Classes, System.SyncObjs, System.Types,
|
||||
{$ELSE}
|
||||
{$IFDEF MSWINDOWS}Windows, ActiveX, CommCtrl,{$ENDIF} Classes,
|
||||
{$IFDEF FPC}
|
||||
LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase,
|
||||
LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase,
|
||||
{$IFDEF LINUX}xlib,{$ENDIF}
|
||||
{$ELSE}
|
||||
Messages,
|
||||
Messages,
|
||||
{$ENDIF}
|
||||
SyncObjs,
|
||||
{$ENDIF}
|
||||
uCEFTypes, uCEFInterfaces, uCEFLibFunctions, uCEFMiscFunctions, uCEFClient,
|
||||
uCEFConstants, uCEFTask, uCEFDomVisitor, uCEFChromiumEvents,
|
||||
{$IFDEF MSWINDOWS}uCEFDragAndDropMgr,{$ENDIF}
|
||||
{$IFDEF LINUX}uCEFLinuxTypes,{$ENDIF}
|
||||
uCEFChromiumOptions, uCEFChromiumFontOptions, uCEFPDFPrintOptions,
|
||||
uCEFBrowserViewComponent;
|
||||
|
||||
@ -143,6 +145,10 @@ type
|
||||
FJavascriptEnabled : boolean;
|
||||
FLoadImagesAutomatically : boolean;
|
||||
|
||||
{$IFDEF LINUX}
|
||||
FXDisplay : PXDisplay;
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
FOldBrowserCompWndPrc : TFNWndProc;
|
||||
FOldWidgetCompWndPrc : TFNWndProc;
|
||||
@ -356,6 +362,9 @@ type
|
||||
function GetBrowserById(aID : integer) : ICefBrowser;
|
||||
function GetBrowserCount : integer;
|
||||
function GetBrowserIdByIndex(aIndex : integer) : integer;
|
||||
{$IFDEF LINUX}
|
||||
function GetXDisplay : PXDisplay;
|
||||
{$ENDIF}
|
||||
|
||||
procedure SetDoNotTrack(aValue : boolean);
|
||||
procedure SetSendReferrer(aValue : boolean);
|
||||
@ -436,9 +445,6 @@ type
|
||||
function ExecuteSetZoomLevelTask(const aValue : double) : boolean;
|
||||
function ExecuteSetZoomStepTask(aValue : byte) : boolean;
|
||||
function ExecuteBrowserNavigationTask(aTask : TCefBrowserNavigation) : boolean;
|
||||
function ExecuteUpdateSizeTask(aLeft, aTop, aWidth, aHeight : integer) : boolean;
|
||||
function ExecuteSendCaptureLostEventTask : boolean;
|
||||
function ExecuteUpdateXWindowVisibilityTask(aVisible : boolean) : boolean;
|
||||
|
||||
procedure UpdateHostZoomLevel(const aValue : double);
|
||||
procedure UpdateHostZoomPct(const aValue : double);
|
||||
@ -643,9 +649,6 @@ type
|
||||
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); virtual;
|
||||
procedure doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring); virtual;
|
||||
procedure doBrowserNavigation(aTask : TCefBrowserNavigation); virtual;
|
||||
procedure doUpdateSize(aLeft, aTop, aWidth, aHeight : integer); virtual;
|
||||
procedure doSendCaptureLostEvent; virtual;
|
||||
procedure doUpdateXWindowVisibility(aVisible : boolean); virtual;
|
||||
function MustCreateAudioHandler : boolean; virtual;
|
||||
function MustCreateDevToolsMessageObserver : boolean; virtual;
|
||||
function MustCreateLoadHandler : boolean; virtual;
|
||||
@ -906,6 +909,9 @@ type
|
||||
property QuicAllowed : boolean read FQuicAllowed write SetQuicAllowed;
|
||||
property JavascriptEnabled : boolean read FJavascriptEnabled write SetJavascriptEnabled;
|
||||
property LoadImagesAutomatically : boolean read FLoadImagesAutomatically write SetLoadImagesAutomatically;
|
||||
{$IFDEF LINUX}
|
||||
property XDisplay : PXDisplay read GetXDisplay;
|
||||
{$ENDIF}
|
||||
|
||||
property WebRTCIPHandlingPolicy : TCefWebRTCHandlingPolicy read FWebRTCIPHandlingPolicy write SetWebRTCIPHandlingPolicy;
|
||||
property WebRTCMultipleRoutes : TCefState read FWebRTCMultipleRoutes write SetWebRTCMultipleRoutes;
|
||||
@ -1161,7 +1167,7 @@ uses
|
||||
{$IFDEF DELPHI16_UP}
|
||||
System.SysUtils, System.Math,
|
||||
{$ELSE}
|
||||
SysUtils, Math, {$IFDEF FPC}{$IFDEF LINUX}xlib, x, xatom,{$ENDIF}{$ENDIF}
|
||||
SysUtils, Math, {$IFDEF FPC}{$IFDEF LINUX}x, xatom, gdk2x, gtk2,{$ENDIF}{$ENDIF}
|
||||
{$ENDIF}
|
||||
uCEFBrowser, uCEFValue, uCEFDictionaryValue, uCEFStringMultimap, uCEFFrame,
|
||||
uCEFApplicationCore, uCEFProcessMessage, uCEFRequestContext,
|
||||
@ -1220,6 +1226,9 @@ begin
|
||||
FQuicAllowed := True;
|
||||
FJavascriptEnabled := True;
|
||||
FLoadImagesAutomatically := True;
|
||||
{$IFDEF LINUX}
|
||||
FXDisplay := nil;
|
||||
{$ENDIF}
|
||||
|
||||
if (GlobalCEFApp <> nil) then
|
||||
FHyperlinkAuditing := GlobalCEFApp.HyperlinkAuditing
|
||||
@ -2517,57 +2526,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TChromiumCore.ExecuteUpdateSizeTask(aLeft, aTop, aWidth, aHeight : integer) : boolean;
|
||||
var
|
||||
TempTask : ICefTask;
|
||||
begin
|
||||
Result := False;
|
||||
|
||||
try
|
||||
if Initialized then
|
||||
begin
|
||||
TempTask := TCefUpdateSizeTask.Create(self, aLeft, aTop, aWidth, aHeight);
|
||||
Result := CefPostTask(TID_UI, TempTask);
|
||||
end;
|
||||
finally
|
||||
TempTask := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TChromiumCore.ExecuteSendCaptureLostEventTask : boolean;
|
||||
var
|
||||
TempTask : ICefTask;
|
||||
begin
|
||||
Result := False;
|
||||
|
||||
try
|
||||
if Initialized then
|
||||
begin
|
||||
TempTask := TCefSendCaptureLostEventTask.Create(self);
|
||||
Result := CefPostTask(TID_UI, TempTask);
|
||||
end;
|
||||
finally
|
||||
TempTask := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TChromiumCore.ExecuteUpdateXWindowVisibilityTask(aVisible : boolean) : boolean;
|
||||
var
|
||||
TempTask : ICefTask;
|
||||
begin
|
||||
Result := False;
|
||||
|
||||
try
|
||||
if Initialized then
|
||||
begin
|
||||
TempTask := TCefUpdateXWindowVisibilityTask.Create(self, aVisible);
|
||||
Result := CefPostTask(TID_UI, TempTask);
|
||||
end;
|
||||
finally
|
||||
TempTask := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.GoBack;
|
||||
begin
|
||||
ExecuteBrowserNavigationTask(bnBack);
|
||||
@ -2765,6 +2723,32 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{$IFDEF LINUX}
|
||||
function TChromiumCore.GetXDisplay : PXDisplay;
|
||||
{$IFDEF FPC}
|
||||
var
|
||||
TempParent : TCefWindowHandle;
|
||||
{$ENDIF}
|
||||
begin
|
||||
if (FXDisplay = nil) then
|
||||
begin
|
||||
{$IFDEF FPC}
|
||||
TempParent := ParentFormHandle;
|
||||
|
||||
if ValidCefWindowHandle(TempParent) and
|
||||
(PGtkWidget(TempParent)^.Window <> nil) then
|
||||
FXDisplay := GDK_WINDOW_XDISPLAY(PGtkWidget(TempParent)^.Window);
|
||||
{$ENDIF}
|
||||
|
||||
// GlobalCEFApp.XDisplay can only be called in the CEF UI thread.
|
||||
if (FXDisplay = nil) and (GlobalCEFApp <> nil) then
|
||||
FXDisplay := GlobalCEFApp.XDisplay;
|
||||
end;
|
||||
|
||||
Result := FXDisplay;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function TChromiumCore.GetHasValidMainFrame : boolean;
|
||||
begin
|
||||
Result := Initialized and (Browser.MainFrame <> nil) and Browser.MainFrame.IsValid;
|
||||
@ -4632,107 +4616,65 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.doUpdateSize(aLeft, aTop, aWidth, aHeight : integer);
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
{$IFDEF LINUX}
|
||||
procedure TChromiumCore.UpdateBrowserSize(aLeft, aTop, aWidth, aHeight : integer);
|
||||
{$IFDEF FPC}
|
||||
var
|
||||
TempHandle : TCefWindowHandle;
|
||||
TempChanges : TXWindowChanges;
|
||||
TempXDisplay : PXDisplay;
|
||||
{$ENDIF}{$ENDIF}
|
||||
{$ENDIF}
|
||||
begin
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
if (GlobalCEFApp <> nil) then
|
||||
{$IFDEF FPC}
|
||||
TempHandle := WindowHandle;
|
||||
|
||||
if ValidCefWindowHandle(TempHandle) then
|
||||
begin
|
||||
TempXDisplay := GlobalCEFApp.XDisplay;
|
||||
TempXDisplay := XDisplay;
|
||||
|
||||
if (TempXDisplay <> nil) then
|
||||
begin
|
||||
TempHandle := WindowHandle;
|
||||
TempChanges.x := aLeft;
|
||||
TempChanges.y := aTop;
|
||||
TempChanges.width := aWidth;
|
||||
TempChanges.height := aHeight;
|
||||
|
||||
if ValidCefWindowHandle(TempHandle) then
|
||||
begin
|
||||
TempChanges.x := aLeft;
|
||||
TempChanges.y := aTop;
|
||||
TempChanges.width := aWidth;
|
||||
TempChanges.height := aHeight;
|
||||
|
||||
XConfigureWindow(TempXDisplay, TempHandle, CWX or CWY or CWHeight or CWWidth, @TempChanges);
|
||||
end;
|
||||
XConfigureWindow(TempXDisplay, TempHandle, CWX or CWY or CWHeight or CWWidth, @TempChanges);
|
||||
end;
|
||||
end;
|
||||
{$ENDIF}{$ENDIF}
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.doSendCaptureLostEvent;
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
var
|
||||
TempXDisplay : PXDisplay;
|
||||
{$ENDIF}{$ENDIF}
|
||||
begin
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
if (GlobalCEFApp <> nil) then
|
||||
begin
|
||||
TempXDisplay := GlobalCEFApp.XDisplay;
|
||||
|
||||
if (TempXDisplay <> nil) then
|
||||
XSetInputFocus(TempXDisplay, X.None, RevertToNone, CurrentTime);
|
||||
end;
|
||||
{$ENDIF}{$ENDIF}
|
||||
|
||||
if Initialized then
|
||||
Browser.Host.SendCaptureLostEvent;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.doUpdateXWindowVisibility(aVisible : boolean);
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
procedure TChromiumCore.UpdateXWindowVisibility(aVisible : boolean);
|
||||
{$IFDEF FPC}
|
||||
var
|
||||
TempXDisplay : PXDisplay;
|
||||
TempHandle : TCefWindowHandle;
|
||||
TempState : TAtom;
|
||||
TempHidden : TAtom;
|
||||
{$ENDIF}{$ENDIF}
|
||||
{$ENDIF}
|
||||
begin
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
if (GlobalCEFApp <> nil) then
|
||||
{$IFDEF FPC}
|
||||
TempHandle := WindowHandle;
|
||||
|
||||
if ValidCefWindowHandle(TempHandle) then
|
||||
begin
|
||||
TempXDisplay := GlobalCEFApp.XDisplay;
|
||||
TempXDisplay := XDisplay;
|
||||
|
||||
if (TempXDisplay <> nil) then
|
||||
begin
|
||||
TempHandle := WindowHandle;
|
||||
begin
|
||||
TempState := XInternAtom(TempXDisplay, '_NET_WM_STATE', False);
|
||||
|
||||
if ValidCefWindowHandle(TempHandle) then
|
||||
if aVisible then
|
||||
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, nil, 0)
|
||||
else
|
||||
begin
|
||||
TempState := XInternAtom(TempXDisplay, '_NET_WM_STATE', False);
|
||||
|
||||
if aVisible then
|
||||
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, nil, 0)
|
||||
else
|
||||
begin
|
||||
TempHidden := XInternAtom(TempXDisplay, '_NET_WM_STATE_HIDDEN', False);
|
||||
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, @TempHidden, 1);
|
||||
end;
|
||||
TempHidden := XInternAtom(TempXDisplay, '_NET_WM_STATE_HIDDEN', False);
|
||||
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, @TempHidden, 1);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
{$ENDIF}{$ENDIF}
|
||||
end;
|
||||
|
||||
{$IFDEF LINUX}
|
||||
procedure TChromiumCore.UpdateBrowserSize(aLeft, aTop, aWidth, aHeight : integer);
|
||||
begin
|
||||
if CefCurrentlyOn(TID_UI) then
|
||||
doUpdateSize(aLeft, aTop, aWidth, aHeight)
|
||||
else
|
||||
ExecuteUpdateSizeTask(aLeft, aTop, aWidth, aHeight);
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.UpdateXWindowVisibility(aVisible : boolean);
|
||||
begin
|
||||
if CefCurrentlyOn(TID_UI) then
|
||||
doUpdateXWindowVisibility(aVisible)
|
||||
else
|
||||
ExecuteUpdateXWindowVisibilityTask(aVisible);
|
||||
{$ENDIF}
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
@ -6424,11 +6366,21 @@ begin
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.SendCaptureLostEvent;
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
var
|
||||
TempXDisplay : PXDisplay;
|
||||
{$ENDIF}{$ENDIF}
|
||||
begin
|
||||
if CefCurrentlyOn(TID_UI) then
|
||||
doSendCaptureLostEvent
|
||||
else
|
||||
ExecuteSendCaptureLostEventTask;
|
||||
if not(Initialized) then exit;
|
||||
|
||||
{$IFDEF LINUX}{$IFDEF FPC}
|
||||
TempXDisplay := XDisplay;
|
||||
|
||||
if (TempXDisplay <> nil) then
|
||||
XSetInputFocus(TempXDisplay, X.None, RevertToNone, CurrentTime);
|
||||
{$ENDIF}{$ENDIF}
|
||||
|
||||
Browser.Host.SendCaptureLostEvent;
|
||||
end;
|
||||
|
||||
procedure TChromiumCore.SetFocus(focus: Boolean);
|
||||
|
Reference in New Issue
Block a user