From a87256405aa349d6c4c13e1a5d0ce0e0f31d2d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salvador=20D=C3=ADaz=20Fau?= Date: Wed, 4 Dec 2024 16:10:43 +0100 Subject: [PATCH] Possible fix for issue #538 --- .../ExternalPumpBrowser.lpr | 27 ++++++++++++++----- .../globalcefapplication.pas | 5 ++-- .../uExternalPumpBrowser.lfm | 7 +++-- .../uExternalPumpBrowser.pas | 27 ++----------------- source/uCEFLinkedWinControlBase.pas | 6 ++++- update_CEF4Delphi.json | 2 +- 6 files changed, 33 insertions(+), 41 deletions(-) diff --git a/demos/Lazarus_Mac/ExternalPumpBrowser/ExternalPumpBrowser.lpr b/demos/Lazarus_Mac/ExternalPumpBrowser/ExternalPumpBrowser.lpr index da644cdb..01120f40 100644 --- a/demos/Lazarus_Mac/ExternalPumpBrowser/ExternalPumpBrowser.lpr +++ b/demos/Lazarus_Mac/ExternalPumpBrowser/ExternalPumpBrowser.lpr @@ -21,18 +21,31 @@ uses {$ENDIF}{$ENDIF} Interfaces, Forms, - uExternalPumpBrowser, GlobalCefApplication + uExternalPumpBrowser, GlobalCefApplication, uCEFApplication, uCEFWorkScheduler { you can add units after this } ; {$R *.res} begin - RequireDerivedFormResource:=True; - Application.Title:='External Pump Browser'; - Application.Scaled:=True; - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; + CreateGlobalCEFApp; + + if GlobalCEFApp.StartMainProcess then + begin + RequireDerivedFormResource := True; + Application.Title := 'External Pump Browser'; + Application.Scaled := True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; + + // The form needs to be destroyed *BEFORE* stopping the scheduler. + Form1.Free; + + GlobalCEFWorkScheduler.StopScheduler; + end; + + DestroyGlobalCEFApp; + DestroyGlobalCEFWorkScheduler; end. diff --git a/demos/Lazarus_Mac/ExternalPumpBrowser/globalcefapplication.pas b/demos/Lazarus_Mac/ExternalPumpBrowser/globalcefapplication.pas index 4927a11a..5f1f8274 100644 --- a/demos/Lazarus_Mac/ExternalPumpBrowser/globalcefapplication.pas +++ b/demos/Lazarus_Mac/ExternalPumpBrowser/globalcefapplication.pas @@ -6,7 +6,7 @@ unit GlobalCefApplication; interface uses - uCEFApplication, uCEFWorkScheduler, uCEFConstants; + uCEFLazarusCocoa, uCEFApplication, uCEFWorkScheduler, uCEFConstants; procedure CreateGlobalCEFApp; @@ -19,8 +19,7 @@ end; procedure CreateGlobalCEFApp; begin - if GlobalCEFApp <> nil then - exit; + AddCrDelegate; // TCEFWorkScheduler will call cef_do_message_loop_work when // it's told in the GlobalCEFApp.OnScheduleMessagePumpWork event. diff --git a/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.lfm b/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.lfm index 96b97a0f..3691ab2e 100644 --- a/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.lfm +++ b/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.lfm @@ -10,7 +10,6 @@ object Form1: TForm1 OnCloseQuery = FormCloseQuery OnCreate = FormCreate Position = poScreenCenter - LCLVersion = '2.2.6.0' object AddressPnl: TPanel Left = 0 Height = 23 @@ -29,16 +28,16 @@ object Form1: TForm1 Width = 35 Align = alRight Caption = 'Go' - OnClick = GoBtnClick TabOrder = 0 + OnClick = GoBtnClick end object AddressEdt: TComboBox Left = 0 - Height = 24 + Height = 20 Top = 0 Width = 932 Align = alClient - ItemHeight = 16 + ItemHeight = 19 ItemIndex = 0 Items.Strings = ( 'https://www.google.com' diff --git a/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.pas b/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.pas index f0abf55c..492da2a2 100644 --- a/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.pas +++ b/demos/Lazarus_Mac/ExternalPumpBrowser/uExternalPumpBrowser.pas @@ -6,12 +6,9 @@ unit uExternalPumpBrowser; interface uses - GlobalCefApplication, - uCEFLazarusCocoa, // required for Cocoa Classes, SysUtils, Messages, Forms, Controls, Graphics, - Dialogs, ExtCtrls, StdCtrls, LMessages, uCEFChromium, uCEFWindowParent, - uCEFConstants, uCEFTypes, uCEFInterfaces, uCEFChromiumEvents, - uCEFLinkedWindowParent, uCEFWorkScheduler; + Dialogs, ExtCtrls, StdCtrls, LMessages, uCEFChromium, + uCEFTypes, uCEFInterfaces, uCEFLinkedWindowParent; type @@ -91,8 +88,6 @@ implementation // 2. TChromium.OnClose sets aAction to cbaClose to destroy the browser, which triggers the TChromium.OnBeforeClose event. // 3. TChromium.OnBeforeClose sets FCanClose := True and sends CEF_BEFORECLOSE to close the form. -uses - uCEFApplication; { TForm1 } @@ -233,23 +228,5 @@ begin Chromium1.NotifyMoveOrResizeStarted; end; -initialization - AddCrDelegate; - if GlobalCEFApp = nil then begin - CreateGlobalCEFApp; - if not GlobalCEFApp.StartMainProcess then begin - DestroyGlobalCEFApp; - DestroyGlobalCEFWorkScheduler; - halt(0); // exit the subprocess - end; - end; - -finalization - (* Destroy from this unit, which is used after "Interfaces". So this happens before the Application object is destroyed *) - if GlobalCEFWorkScheduler <> nil then - GlobalCEFWorkScheduler.StopScheduler; - DestroyGlobalCEFApp; - DestroyGlobalCEFWorkScheduler; - end. diff --git a/source/uCEFLinkedWinControlBase.pas b/source/uCEFLinkedWinControlBase.pas index 44815b1c..71020677 100644 --- a/source/uCEFLinkedWinControlBase.pas +++ b/source/uCEFLinkedWinControlBase.pas @@ -157,7 +157,8 @@ end; procedure TCEFLinkedWinControlBase.UpdateSize; {$IFDEF MACOSX}{$IFDEF FPC} var - TempSize: NSSize; + TempSize : NSSize; + TempPoint : NSPoint; {$ENDIF}{$ENDIF} begin {$IFDEF MSWINDOWS} @@ -177,6 +178,9 @@ begin (Chromium <> nil) and Chromium.Initialized then begin + TempPoint.x:= 0; + TempPoint.y:= 0; + NSView(Chromium.WindowHandle).setFrameOrigin(TempPoint); TempSize.width:= Width; TempSize.height:= Height; NSView(Chromium.WindowHandle).setFrameSize(TempSize); diff --git a/update_CEF4Delphi.json b/update_CEF4Delphi.json index 6b7fe325..39081009 100644 --- a/update_CEF4Delphi.json +++ b/update_CEF4Delphi.json @@ -2,7 +2,7 @@ "UpdateLazPackages" : [ { "ForceNotify" : true, - "InternalVersion" : 680, + "InternalVersion" : 681, "Name" : "cef4delphi_lazarus.lpk", "Version" : "131.2.7" }