diff --git a/lcl/asyncprocess.pp b/lcl/asyncprocess.pp index bea3780912..a82f29bd1c 100644 --- a/lcl/asyncprocess.pp +++ b/lcl/asyncprocess.pp @@ -101,19 +101,13 @@ end; procedure TAsyncProcess.UnhookProcessHandle; begin if FProcessHandler <> nil then - begin RemoveProcessEventHandler(FProcessHandler); - FProcessHandler := nil; - end; end; procedure TAsyncProcess.UnhookPipeHandle; begin if FPipeHandler <> nil then - begin RemovePipeEventHandler(FPipeHandler); - FPipeHandler := nil; - end; end; procedure TAsyncProcess.HandlePipeInput(AData: PtrInt; AReasons: TPipeReasons); diff --git a/lcl/include/intfbaselcl.inc b/lcl/include/intfbaselcl.inc index 68e0e9ae46..dd96dc19cc 100644 --- a/lcl/include/intfbaselcl.inc +++ b/lcl/include/intfbaselcl.inc @@ -562,15 +562,15 @@ begin Result := false; end; -procedure TWidgetSet.RemoveEventHandler(AHandler: PEventHandler); +procedure TWidgetSet.RemoveEventHandler(var AHandler: PEventHandler); begin end; -procedure TWidgetSet.RemoveProcessEventHandler(AHandler: PProcessEventHandler); +procedure TWidgetSet.RemoveProcessEventHandler(var AHandler: PProcessEventHandler); begin end; -procedure TWidgetSet.RemovePipeEventHandler(AHandler: PPipeEventHandler); +procedure TWidgetSet.RemovePipeEventHandler(var AHandler: PPipeEventHandler); begin end; diff --git a/lcl/include/lclintf.inc b/lcl/include/lclintf.inc index 31483b14da..deab0edc37 100644 --- a/lcl/include/lclintf.inc +++ b/lcl/include/lclintf.inc @@ -393,17 +393,17 @@ begin Result := WidgetSet.ReleaseDesignerDC(hWnd, DC); end; -procedure RemoveEventHandler(AHandler: PEventHandler); +procedure RemoveEventHandler(var AHandler: PEventHandler); begin WidgetSet.RemoveEventHandler(AHandler); end; -procedure RemoveProcessEventHandler(AHandler: PProcessEventHandler); +procedure RemoveProcessEventHandler(var AHandler: PProcessEventHandler); begin WidgetSet.RemoveProcessEventHandler(AHandler); end; -procedure RemovePipeEventHandler(AHandler: PPipeEventHandler); +procedure RemovePipeEventHandler(var AHandler: PPipeEventHandler); begin WidgetSet.RemovePipeEventHandler(AHandler); end; diff --git a/lcl/include/lclintfh.inc b/lcl/include/lclintfh.inc index 6e149fc7a6..45cb68753b 100644 --- a/lcl/include/lclintfh.inc +++ b/lcl/include/lclintfh.inc @@ -107,9 +107,9 @@ function RadialPie(DC: HDC; x,y,width,height,sx,sy,ex,ey : Integer): Boolean; {$ function RadialPieWithAngles(DC: HDC; X,Y,Width,Height,Angle1,Angle2: Integer): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function RegroupMenuItem(hndMenu: HMENU; GroupIndex: integer): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function ReleaseDesignerDC(hWnd: HWND; DC: HDC): Integer; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} -procedure RemoveEventHandler(AHandler: PEventHandler); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} -procedure RemoveProcessEventHandler(AHandler: PProcessEventHandler); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} -procedure RemovePipeEventHandler(AHandler: PPipeEventHandler); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} +procedure RemoveEventHandler(var AHandler: PEventHandler); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} +procedure RemoveProcessEventHandler(var AHandler: PProcessEventHandler); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} +procedure RemovePipeEventHandler(var AHandler: PPipeEventHandler); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function ReplaceBitmapMask(var Image, Mask: HBitmap; NewMask: HBitmap): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function RequestInput(const InputCaption, InputPrompt : String; MaskInput : Boolean; var Value : String) : Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} diff --git a/lcl/interfaces/gtk/gtklclintf.inc b/lcl/interfaces/gtk/gtklclintf.inc index 444cb5b7ad..9bfe93fde4 100644 --- a/lcl/interfaces/gtk/gtklclintf.inc +++ b/lcl/interfaces/gtk/gtklclintf.inc @@ -61,7 +61,7 @@ begin Result := lEventHandler; end; -procedure TGtkWidgetSet.RemoveEventHandler(AHandler: PEventHandler); +procedure TGtkWidgetSet.RemoveEventHandler(var AHandler: PEventHandler); var lEventHandler: PWaitHandleEventHandler absolute AHandler; begin @@ -74,6 +74,7 @@ begin if lEventHandler^.NextHandler <> nil then lEventHandler^.NextHandler^.PrevHandler := lEventHandler^.PrevHandler; Dispose(lEventHandler); + AHandler := nil; end; procedure TGtkWidgetSet.SetEventHandlerFlags(AHandler: PEventHandler; NewFlags: dword); @@ -124,13 +125,14 @@ begin lPipeEventInfo^.OnEvent(lPipeEventInfo^.UserData, lReasons); end; -procedure TGtkWidgetSet.RemovePipeEventHandler(AHandler: PPipeEventHandler); +procedure TGtkWidgetSet.RemovePipeEventHandler(var AHandler: PPipeEventHandler); var lPipeEventInfo: PPipeEventInfo absolute AHandler; begin if AHandler = nil then exit; RemoveEventHandler(lPipeEventInfo^.Handler); Dispose(lPipeEventInfo); + AHandler := nil; end; function TGtkWidgetSet.AddProcessEventHandler(AHandle: THandle; @@ -151,7 +153,7 @@ begin Result := lHandler; end; -procedure TGtkWidgetSet.RemoveProcessEventHandler(AHandler: PProcessEventHandler); +procedure TGtkWidgetSet.RemoveProcessEventHandler(var AHandler: PProcessEventHandler); var lHandler: PChildSignalEventHandler absolute AHandler; begin @@ -163,6 +165,7 @@ begin if lHandler^.NextHandler <> nil then lHandler^.NextHandler^.PrevHandler := lHandler^.PrevHandler; Dispose(lHandler); + AHandler := nil; end; {------------------------------------------------------------------------------ diff --git a/lcl/interfaces/gtk/gtklclintfh.inc b/lcl/interfaces/gtk/gtklclintfh.inc index 7059ae97a6..041da2b241 100644 --- a/lcl/interfaces/gtk/gtklclintfh.inc +++ b/lcl/interfaces/gtk/gtklclintfh.inc @@ -50,9 +50,9 @@ function GetListBoxItemRect(ListBox: TComponent; Index: integer; var ARect: TRec function IntfSendsUTF8KeyPress: boolean; override; -procedure RemoveEventHandler(AHandler: PEventHandler); override; -procedure RemovePipeEventHandler(AHandler: PPipeEventHandler); override; -procedure RemoveProcessEventHandler(AHandler: PProcessEventHandler); override; +procedure RemoveEventHandler(var AHandler: PEventHandler); override; +procedure RemovePipeEventHandler(var AHandler: PPipeEventHandler); override; +procedure RemoveProcessEventHandler(var AHandler: PProcessEventHandler); override; function ReplaceBitmapMask(var Image, Mask: HBitmap; NewMask: HBitmap): boolean; override; procedure SetEventHandlerFlags(AHandler: PEventHandler; NewFlags: dword); override; diff --git a/lcl/interfaces/win32/win32lclintf.inc b/lcl/interfaces/win32/win32lclintf.inc index 8b58714c1f..4096b54f36 100644 --- a/lcl/interfaces/win32/win32lclintf.inc +++ b/lcl/interfaces/win32/win32lclintf.inc @@ -55,7 +55,7 @@ begin Result := lListIndex; end; -procedure TWin32WidgetSet.RemoveEventHandler(AHandler: PEventHandler); +procedure TWin32WidgetSet.RemoveEventHandler(var AHandler: PEventHandler); var lListIndex: pdword absolute AHandler; I: dword; @@ -76,6 +76,7 @@ begin end; Dec(FWaitHandleCount); Dispose(lListIndex); + AHandler := nil; end; function TWin32WidgetSet.AddPipeEventHandler(AHandle: THandle; @@ -96,7 +97,7 @@ begin Result := lHandler; end; -procedure TWin32WidgetSet.RemovePipeEventHandler(AHandler: PPipeEventHandler); +procedure TWin32WidgetSet.RemovePipeEventHandler(var AHandler: PPipeEventHandler); var lHandler: PPipeEventInfo absolute AHandler; begin @@ -108,6 +109,7 @@ begin if lHandler^.Next <> nil then lHandler^.Next^.Prev := lHandler^.Prev; Dispose(lHandler); + AHandler := nil; end; function TWin32WidgetSet.AddProcessEventHandler(AHandle: THandle; @@ -135,13 +137,14 @@ begin lProcessEvent^.OnEvent(lProcessEvent^.UserData, cerExit, exitcode); end; -procedure TWin32WidgetSet.RemoveProcessEventHandler(AHandler: PProcessEventHandler); +procedure TWin32WidgetSet.RemoveProcessEventHandler(var AHandler: PProcessEventHandler); var lProcessEvent: PProcessEvent absolute AHandler; begin if AHandler = nil then exit; RemoveEventHandler(lProcessEvent^.Handler); Dispose(lProcessEvent); + AHandler := nil; end; procedure TWin32WidgetSet.DrawArrow(Arrow: TComponent; Canvas: TPersistent); diff --git a/lcl/interfaces/win32/win32lclintfh.inc b/lcl/interfaces/win32/win32lclintfh.inc index b3e411fc07..3d5ab4c818 100644 --- a/lcl/interfaces/win32/win32lclintfh.inc +++ b/lcl/interfaces/win32/win32lclintfh.inc @@ -42,9 +42,9 @@ function GetAcceleratorString(const AVKey: Byte; const AShiftState: TShiftState) function GetControlConstraints(Constraints: TObject): boolean; override; function GetListBoxIndexAtY(ListBox: TComponent; y: integer): integer; override; -procedure RemoveEventHandler(AHandler: PEventHandler); override; -procedure RemovePipeEventHandler(AHandler: PPipeEventHandler); override; -procedure RemoveProcessEventHandler(AHandler: PProcessEventHandler); override; +procedure RemoveEventHandler(var AHandler: PEventHandler); override; +procedure RemovePipeEventHandler(var AHandler: PPipeEventHandler); override; +procedure RemoveProcessEventHandler(var AHandler: PProcessEventHandler); override; //##apiwiz##eps## // Do not remove, no wizard declaration after this line