From 769dc338bcdc5974243c56ebdd01839ccd234e80 Mon Sep 17 00:00:00 2001 From: rich2014 Date: Tue, 9 May 2023 21:20:28 +0800 Subject: [PATCH] FIX: Cocoa: SecureTextField crashed --- lcl/interfaces/cocoa/cocoawsstdctrls.pas | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lcl/interfaces/cocoa/cocoawsstdctrls.pas b/lcl/interfaces/cocoa/cocoawsstdctrls.pas index b69cf6bc1a..3a0083ff1a 100644 --- a/lcl/interfaces/cocoa/cocoawsstdctrls.pas +++ b/lcl/interfaces/cocoa/cocoawsstdctrls.pas @@ -1213,18 +1213,26 @@ end; class procedure TCocoaWSCustomEdit.SetText(const AWinControl: TWinControl; const AText: String); var - txt : NSString; // NSString for AText - txtWithLineBreak: NSString; // need not release - field: TCocoaTextField; + txt : NSString; // NSString for AText + txtWithoutLineBreak: NSString; // need not release + field: NSTextField; begin - if (AWinControl.HandleAllocated) then + if not AWinControl.HandleAllocated then exit; + + field:= NSTextField(AWinControl.Handle); + if TCustomEdit(AWinControl).PasswordChar=#0 then begin - field:= TCocoaTextField(AWinControl.Handle); + // TCocoaTextField txt:= NSStringUtf8(AText); - txtWithLineBreak := NSStringRemoveLineBreak(txt); - field.setStringValue(txtWithLineBreak); + txtWithoutLineBreak:= NSStringRemoveLineBreak(txt); + field.setStringValue(txtWithoutLineBreak); field.textDidChange(nil); // check maxLength and calls controls callback (if any) txt.release; + end + else + begin + // TCocoaSecureTextField + ControlSetTextWithChangeEvent(field, AText); end; end;