cocoa: Implements work around to support TMemo.OnClick

git-svn-id: trunk@50335 -
This commit is contained in:
sekelsenmat 2015-11-15 20:00:10 +00:00
parent e99d4f997b
commit 1950d6e64d
3 changed files with 59 additions and 10 deletions

View File

@ -47,7 +47,7 @@ type
ICommonCallback = interface
// mouse events
function MouseUpDownEvent(Event: NSEvent): Boolean;
function MouseUpDownEvent(Event: NSEvent; AForceAsMouseUp: Boolean = False): Boolean;
procedure MouseClick;
function MouseMove(Event: NSEvent): Boolean;
function KeyEvent(Event: NSEvent; AForceAsKeyDown: Boolean = False): Boolean;
@ -111,7 +111,6 @@ type
{ LCLViewExtension }
LCLViewExtension = objccategory(NSView)
function lclInitWithCreateParams(const AParams: TCreateParams): id; message 'lclInitWithCreateParams:';
function lclIsVisible: Boolean; message 'lclIsVisible'; reintroduce;
@ -276,6 +275,7 @@ type
TCocoaTextView = objcclass(NSTextView)
public
callback: ICommonCallback;
FEnabled: Boolean;
function acceptsFirstResponder: Boolean; override;
function becomeFirstResponder: Boolean; override;
function resignFirstResponder: Boolean; override;
@ -287,6 +287,21 @@ type
procedure keyDown(event: NSEvent); override;
procedure keyUp(event: NSEvent); override;
procedure flagsChanged(event: NSEvent); override;
// mouse
procedure mouseDown(event: NSEvent); override;
procedure mouseUp(event: NSEvent); override;
{procedure rightMouseDown(event: NSEvent); override;
procedure rightMouseUp(event: NSEvent); override;
procedure otherMouseDown(event: NSEvent); override;
procedure otherMouseUp(event: NSEvent); override;
procedure mouseDragged(event: NSEvent); override;
procedure mouseEntered(event: NSEvent); override;
procedure mouseExited(event: NSEvent); override;
procedure mouseMoved(event: NSEvent); override;}
//
function lclIsEnabled: Boolean; override;
procedure lclSetEnabled(AEnabled: Boolean); override;
end;
{ TCocoaPanel }
@ -1941,6 +1956,37 @@ begin
inherited resetCursorRects;
end;
procedure TCocoaTextView.mouseDown(event: NSEvent);
begin
inherited mouseDown(event);
if callback <> nil then
begin
callback.MouseUpDownEvent(event);
// Cocoa doesn't call mouseUp for NSTextView, so we have to emulate it here :(
// See bug 29000
callback.MouseUpDownEvent(event, True);
end;
end;
procedure TCocoaTextView.mouseUp(event: NSEvent);
begin
inherited mouseUp(event);
if callback <> nil then
callback.MouseUpDownEvent(event);
end;
function TCocoaTextView.lclIsEnabled: Boolean;
begin
Result := FEnabled;
if Result and CocoaWidgetSet.IsControlDisabledDueToModal(Self) then Result := False;
end;
procedure TCocoaTextView.lclSetEnabled(AEnabled: Boolean);
begin
FEnabled := AEnabled;
end;
//
{ TCocoaSecureTextField }
function TCocoaSecureTextField.lclIsHandle: Boolean;
@ -2480,7 +2526,6 @@ begin
Result.Bottom := Round(r.size.height);
end;
{ LCLWindowExtension }
function LCLWindowExtension.lclIsVisible: Boolean;

View File

@ -51,7 +51,7 @@ type
function GetTarget: TObject;
function GetCallbackObject: TObject;
function GetCaptureControlCallback: ICommonCallBack;
function MouseUpDownEvent(Event: NSEvent): Boolean; virtual;
function MouseUpDownEvent(Event: NSEvent; AForceAsMouseUp: Boolean = False): Boolean; virtual;
function KeyEvent(Event: NSEvent; AForceAsKeyDown: Boolean = False): Boolean; virtual;
procedure MouseClick; virtual;
function MouseMove(Event: NSEvent): Boolean; virtual;
@ -108,7 +108,7 @@ type
TLCLCustomControlCallback = class(TLCLCommonCallback)
public
function MouseMove(Event: NSEvent): Boolean; override;
function MouseUpDownEvent(Event: NSEvent): Boolean; override;
function MouseUpDownEvent(Event: NSEvent; AForceAsMouseUp: Boolean = False): Boolean; override;
end;
{ TCocoaWSCustomControl }
@ -159,9 +159,9 @@ begin
Result:=True;
end;
function TLCLCustomControlCallback.MouseUpDownEvent(Event: NSEvent): Boolean;
function TLCLCustomControlCallback.MouseUpDownEvent(Event: NSEvent; AForceAsMouseUp: Boolean = False): Boolean;
begin
inherited MouseUpDownEvent(Event);
inherited MouseUpDownEvent(Event, AForceAsMouseUp);
Result := True;
end;
@ -696,7 +696,7 @@ begin
Result := MSGKIND[AButton][ClickCount];
end;
function TLCLCommonCallback.MouseUpDownEvent(Event: NSEvent): Boolean;
function TLCLCommonCallback.MouseUpDownEvent(Event: NSEvent; AForceAsMouseUp: Boolean = False): Boolean;
const
MSGKINDUP: array[0..3] of Integer = (LM_LBUTTONUP, LM_RBUTTONUP, LM_MBUTTONUP, LM_XBUTTONUP);
var
@ -706,6 +706,7 @@ var
MButton: NSInteger;
lCaptureControlCallback: ICommonCallback;
//Str: string;
lEventType: NSEventType;
begin
Result := False; // allow cocoa to handle message
@ -742,8 +743,10 @@ begin
MButton := 3;
end;
case Event.type_ of
lEventType := Event.type_;
if AForceAsMouseUp then
lEventType := NSLeftMouseUp;
case lEventType of
NSLeftMouseDown,
NSRightMouseDown,
NSOtherMouseDown:

View File

@ -788,6 +788,7 @@ begin
nr:=scr.documentVisibleRect;
txt.setFrame(nr);
txt.textContainer.setLineFragmentPadding(0);
txt.lclSetEnabled(True);
// ToDo: This should be made selectable in the LCL
txt.setAutomaticQuoteSubstitutionEnabled(False);