You've already forked CEF4Delphi
mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-06-22 22:17:48 +02:00
Improved keyboard and mouse support in FMXExternalPumpBrowser for MacOS
Added X11 error handling functions to FMXExternalPumpBrowser2 demo for Linux. Deleted FMXExternalPumpBrowser demo for Linux. Added uCEFMacOSConstants and uCEFMacOSFunctions units for MacOS. Replaced TThread.Queue for TThread.ForceQueue to avoid executing that method immediately in some cases.
This commit is contained in:
@ -46,13 +46,6 @@ unit uCEFWorkScheduler;
|
||||
|
||||
{$I cef.inc}
|
||||
|
||||
// Define this conditional to use TCEFWorkSchedulerQueueThread instead of using
|
||||
// PostMessage, Application.QueueAsyncCall or TThread.Queue inside
|
||||
// TCEFWorkScheduler.ScheduleMessagePumpWork
|
||||
// TCEFWorkSchedulerQueueThread is just a new experimental way to handle the
|
||||
// external message pump events for all platforms.
|
||||
{.$DEFINE USEQUEUETHREAD}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
@ -66,7 +59,7 @@ uses
|
||||
Messages,
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
uCEFConstants, {$IFDEF USEQUEUETHREAD}uCEFWorkSchedulerQueueThread,{$ENDIF} uCEFWorkSchedulerThread;
|
||||
uCEFConstants, uCEFWorkSchedulerQueueThread, uCEFWorkSchedulerThread;
|
||||
|
||||
|
||||
type
|
||||
@ -74,13 +67,12 @@ type
|
||||
TCEFWorkScheduler = class(TComponent)
|
||||
protected
|
||||
FThread : TCEFWorkSchedulerThread;
|
||||
{$IFDEF USEQUEUETHREAD}
|
||||
FQueueThread : TCEFWorkSchedulerQueueThread;
|
||||
{$ENDIF}
|
||||
FDepleteWorkCycles : cardinal;
|
||||
FDepleteWorkDelay : cardinal;
|
||||
FDefaultInterval : integer;
|
||||
FStopped : boolean;
|
||||
FUseQueueThread : boolean;
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$WARN SYMBOL_PLATFORM OFF}
|
||||
FCompHandle : HWND;
|
||||
@ -88,11 +80,9 @@ type
|
||||
{$WARN SYMBOL_PLATFORM ON}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF USEQUEUETHREAD}
|
||||
procedure CreateQueueThread;
|
||||
procedure DestroyQueueThread;
|
||||
procedure QueueThread_OnPulse(Sender : TObject; aDelay : integer);
|
||||
{$ENDIF}
|
||||
|
||||
procedure DestroyThread;
|
||||
procedure DepleteWork;
|
||||
@ -136,6 +126,7 @@ type
|
||||
property DefaultInterval : integer read FDefaultInterval write SetDefaultInterval default CEF_TIMER_MAXDELAY;
|
||||
property DepleteWorkCycles : cardinal read FDepleteWorkCycles write FDepleteWorkCycles default CEF_TIMER_DEPLETEWORK_CYCLES;
|
||||
property DepleteWorkDelay : cardinal read FDepleteWorkDelay write FDepleteWorkDelay default CEF_TIMER_DEPLETEWORK_DELAY;
|
||||
property UseQueueThread : boolean read FUseQueueThread write FUseQueueThread default False;
|
||||
end;
|
||||
|
||||
var
|
||||
@ -199,9 +190,7 @@ end;
|
||||
destructor TCEFWorkScheduler.Destroy;
|
||||
begin
|
||||
DestroyThread;
|
||||
{$IFDEF USEQUEUETHREAD}
|
||||
DestroyQueueThread;
|
||||
{$ENDIF}
|
||||
{$IFDEF MSWINDOWS}
|
||||
DeallocateWindowHandle;
|
||||
{$ENDIF}
|
||||
@ -210,10 +199,9 @@ end;
|
||||
|
||||
procedure TCEFWorkScheduler.Initialize;
|
||||
begin
|
||||
FUseQueueThread := False;
|
||||
FThread := nil;
|
||||
{$IFDEF USEQUEUETHREAD}
|
||||
FQueueThread := nil;
|
||||
{$ENDIF}
|
||||
FStopped := False;
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$WARN SYMBOL_PLATFORM OFF}
|
||||
@ -246,12 +234,10 @@ begin
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF USEQUEUETHREAD}
|
||||
CreateQueueThread;
|
||||
{$ENDIF}
|
||||
end;
|
||||
if FUseQueueThread then
|
||||
CreateQueueThread;
|
||||
end;
|
||||
|
||||
{$IFDEF USEQUEUETHREAD}
|
||||
procedure TCEFWorkScheduler.CreateQueueThread;
|
||||
begin
|
||||
FQueueThread := TCEFWorkSchedulerQueueThread.Create;
|
||||
@ -287,7 +273,6 @@ procedure TCEFWorkScheduler.QueueThread_OnPulse(Sender : TObject; aDelay : integ
|
||||
begin
|
||||
ScheduleWork(aDelay);
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
procedure TCEFWorkScheduler.DestroyThread;
|
||||
begin
|
||||
@ -322,6 +307,14 @@ begin
|
||||
FCompHandle := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
{$WARN SYMBOL_PLATFORM OFF}
|
||||
procedure TCEFWorkScheduler.SetPriority(aValue : TThreadPriority);
|
||||
begin
|
||||
FPriority := aValue;
|
||||
if (FThread <> nil) then FThread.Priority := aValue;
|
||||
end;
|
||||
{$WARN SYMBOL_PLATFORM ON}
|
||||
{$ENDIF}
|
||||
|
||||
procedure TCEFWorkScheduler.DoMessageLoopWork;
|
||||
@ -335,16 +328,6 @@ begin
|
||||
if (FThread <> nil) then FThread.DefaultInterval := aValue;
|
||||
end;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$WARN SYMBOL_PLATFORM OFF}
|
||||
procedure TCEFWorkScheduler.SetPriority(aValue : TThreadPriority);
|
||||
begin
|
||||
FPriority := aValue;
|
||||
if (FThread <> nil) then FThread.Priority := aValue;
|
||||
end;
|
||||
{$WARN SYMBOL_PLATFORM ON}
|
||||
{$ENDIF}
|
||||
|
||||
procedure TCEFWorkScheduler.DepleteWork;
|
||||
var
|
||||
i : cardinal;
|
||||
@ -363,27 +346,24 @@ procedure TCEFWorkScheduler.ScheduleMessagePumpWork(const delay_ms : int64);
|
||||
begin
|
||||
if FStopped then exit;
|
||||
|
||||
{$IFDEF USEQUEUETHREAD}
|
||||
if (FQueueThread <> nil) and FQueueThread.Ready then
|
||||
begin
|
||||
FQueueThread.EnqueueValue(integer(delay_ms));
|
||||
exit;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
if (FCompHandle <> 0) then
|
||||
PostMessage(FCompHandle, CEF_PUMPHAVEWORK, 0, LPARAM(delay_ms));
|
||||
{$ELSE}
|
||||
{$IFDEF FPC}
|
||||
Application.QueueAsyncCall(@ScheduleWorkAsync, integer(delay_ms));
|
||||
{$ELSE}
|
||||
TThread.Queue(nil, procedure
|
||||
begin
|
||||
ScheduleWork(delay_ms);
|
||||
end);
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
if FUseQueueThread and (FQueueThread <> nil) and FQueueThread.Ready then
|
||||
FQueueThread.EnqueueValue(integer(delay_ms))
|
||||
else
|
||||
begin
|
||||
{$IFDEF MSWINDOWS}
|
||||
if (FCompHandle <> 0) then
|
||||
PostMessage(FCompHandle, CEF_PUMPHAVEWORK, 0, LPARAM(delay_ms));
|
||||
{$ELSE}
|
||||
{$IFDEF FPC}
|
||||
Application.QueueAsyncCall(@ScheduleWorkAsync, integer(delay_ms));
|
||||
{$ELSE}
|
||||
TThread.ForceQueue(nil, procedure
|
||||
begin
|
||||
ScheduleWork(delay_ms);
|
||||
end);
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
end;
|
||||
end;
|
||||
|
||||
{$IFNDEF MSWINDOWS}{$IFDEF FPC}
|
||||
|
Reference in New Issue
Block a user