mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 07:59:28 +02:00
Cocoa: Fix the issue of missing sending LM_CUT/LM_PASTE to LCL
This commit is contained in:
parent
dcacf7aaac
commit
1c77cb1974
@ -338,11 +338,10 @@ begin
|
|||||||
case ACapability of
|
case ACapability of
|
||||||
lcCanDrawOutsideOnPaint,
|
lcCanDrawOutsideOnPaint,
|
||||||
lcNeedMininimizeAppWithMainForm,
|
lcNeedMininimizeAppWithMainForm,
|
||||||
lcApplicationTitle,
|
|
||||||
{$ifndef COCOA_USE_NATIVE_MODAL}
|
{$ifndef COCOA_USE_NATIVE_MODAL}
|
||||||
lcModalWindow,
|
lcModalWindow,
|
||||||
{$endif}
|
{$endif}
|
||||||
lcReceivesLMClearCutCopyPasteReliably:
|
lcApplicationTitle:
|
||||||
Result := LCL_CAPABILITY_NO;
|
Result := LCL_CAPABILITY_NO;
|
||||||
{$ifdef COCOA_USE_NATIVE_MODAL}
|
{$ifdef COCOA_USE_NATIVE_MODAL}
|
||||||
lcModalWindow,
|
lcModalWindow,
|
||||||
|
@ -92,6 +92,8 @@ type
|
|||||||
procedure ResignFirstResponder;
|
procedure ResignFirstResponder;
|
||||||
procedure DidBecomeKeyNotification;
|
procedure DidBecomeKeyNotification;
|
||||||
procedure DidResignKeyNotification;
|
procedure DidResignKeyNotification;
|
||||||
|
function SendOnEditCut: Boolean;
|
||||||
|
function SendOnEditPaste: Boolean;
|
||||||
procedure SendOnChange;
|
procedure SendOnChange;
|
||||||
procedure SendOnTextChanged;
|
procedure SendOnTextChanged;
|
||||||
procedure scroll(isVert: Boolean; Pos: Integer; AScrollPart: NSScrollerPart = NSScrollerNoPart);
|
procedure scroll(isVert: Boolean; Pos: Integer; AScrollPart: NSScrollerPart = NSScrollerNoPart);
|
||||||
|
@ -126,6 +126,8 @@ type
|
|||||||
|
|
||||||
procedure changeColor(sender: id); override;
|
procedure changeColor(sender: id); override;
|
||||||
// keyboard
|
// keyboard
|
||||||
|
procedure cut(sender: id); override;
|
||||||
|
procedure paste(sender: id); override;
|
||||||
procedure insertNewline(sender: id); override;
|
procedure insertNewline(sender: id); override;
|
||||||
// mouse
|
// mouse
|
||||||
procedure mouseDown(event: NSEvent); override;
|
procedure mouseDown(event: NSEvent); override;
|
||||||
@ -170,6 +172,8 @@ type
|
|||||||
procedure setDelegate(adelegate: NSTextDelegateProtocol); override;
|
procedure setDelegate(adelegate: NSTextDelegateProtocol); override;
|
||||||
procedure lclReviseCursorColor; message 'lclReviseCursorColor';
|
procedure lclReviseCursorColor; message 'lclReviseCursorColor';
|
||||||
// keyboard
|
// keyboard
|
||||||
|
procedure cut(sender: id); override;
|
||||||
|
procedure paste(sender: id); override;
|
||||||
procedure insertNewline(sender: id); override;
|
procedure insertNewline(sender: id); override;
|
||||||
// mouse
|
// mouse
|
||||||
procedure mouseDown(event: NSEvent); override;
|
procedure mouseDown(event: NSEvent); override;
|
||||||
@ -799,6 +803,30 @@ begin
|
|||||||
setInsertionPointColor(ReverseColor(clr));
|
setInsertionPointColor(ReverseColor(clr));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaFieldEditor.cut(sender: id);
|
||||||
|
var
|
||||||
|
callback: ICommonCallback;
|
||||||
|
accept: Boolean = False;
|
||||||
|
begin
|
||||||
|
callback:= self.lclGetCallback;
|
||||||
|
if Assigned(callback) then
|
||||||
|
accept:= callback.SendOnEditCut;
|
||||||
|
if accept then
|
||||||
|
inherited cut(sender);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaFieldEditor.paste(sender: id);
|
||||||
|
var
|
||||||
|
callback: ICommonCallback;
|
||||||
|
accept: Boolean = False;
|
||||||
|
begin
|
||||||
|
callback:= self.lclGetCallback;
|
||||||
|
if Assigned(callback) then
|
||||||
|
accept:= callback.SendOnEditPaste;
|
||||||
|
if accept then
|
||||||
|
inherited paste(sender);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCocoaFieldEditor.insertNewline(sender: id);
|
procedure TCocoaFieldEditor.insertNewline(sender: id);
|
||||||
begin
|
begin
|
||||||
// 10.6 cocoa handles the editors Return key as "insertNewLine" command (that makes sense)
|
// 10.6 cocoa handles the editors Return key as "insertNewLine" command (that makes sense)
|
||||||
@ -1049,6 +1077,26 @@ begin
|
|||||||
//inherited changeColor(sender);
|
//inherited changeColor(sender);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaTextView.cut(sender: id);
|
||||||
|
var
|
||||||
|
accept: Boolean = False;
|
||||||
|
begin
|
||||||
|
if Assigned(callback) then
|
||||||
|
accept:= callback.SendOnEditCut;
|
||||||
|
if accept then
|
||||||
|
inherited cut(sender);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCocoaTextView.paste(sender: id);
|
||||||
|
var
|
||||||
|
accept: Boolean = False;
|
||||||
|
begin
|
||||||
|
if Assigned(callback) then
|
||||||
|
accept:= callback.SendOnEditPaste;
|
||||||
|
if accept then
|
||||||
|
inherited paste(sender);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCocoaTextView.dealloc;
|
procedure TCocoaTextView.dealloc;
|
||||||
begin
|
begin
|
||||||
if Assigned(FUndoManager) then
|
if Assigned(FUndoManager) then
|
||||||
|
@ -97,6 +97,8 @@ type
|
|||||||
procedure ResignFirstResponder; virtual;
|
procedure ResignFirstResponder; virtual;
|
||||||
procedure DidBecomeKeyNotification; virtual;
|
procedure DidBecomeKeyNotification; virtual;
|
||||||
procedure DidResignKeyNotification; virtual;
|
procedure DidResignKeyNotification; virtual;
|
||||||
|
function SendOnEditCut: Boolean; virtual;
|
||||||
|
function SendOnEditPaste: Boolean; virtual;
|
||||||
procedure SendOnChange; virtual;
|
procedure SendOnChange; virtual;
|
||||||
procedure SendOnTextChanged; virtual; // text controls (like spin) respond to OnChange for this event, but not for SendOnChange
|
procedure SendOnTextChanged; virtual; // text controls (like spin) respond to OnChange for this event, but not for SendOnChange
|
||||||
procedure scroll(isVert: Boolean; Pos: Integer; AScrollPart: NSScrollerPart); virtual;
|
procedure scroll(isVert: Boolean; Pos: Integer; AScrollPart: NSScrollerPart); virtual;
|
||||||
@ -1404,6 +1406,20 @@ begin
|
|||||||
LCLSendKillFocusMsg(Target);
|
LCLSendKillFocusMsg(Target);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TLCLCommonCallback.SendOnEditCut: Boolean;
|
||||||
|
begin
|
||||||
|
Result:= false;
|
||||||
|
if Assigned(Target) then
|
||||||
|
Result:= SendSimpleMessage(Target, LM_CUT)=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TLCLCommonCallback.SendOnEditPaste: Boolean;
|
||||||
|
begin
|
||||||
|
Result:= false;
|
||||||
|
if Assigned(Target) then
|
||||||
|
Result:= SendSimpleMessage(Target, LM_PASTE)=0;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TLCLCommonCallback.SendOnChange;
|
procedure TLCLCommonCallback.SendOnChange;
|
||||||
begin
|
begin
|
||||||
if not Assigned(Target) then Exit;
|
if not Assigned(Target) then Exit;
|
||||||
|
Loading…
Reference in New Issue
Block a user