diff --git a/lcl/interfaces/cocoa/cocoaprivate.pp b/lcl/interfaces/cocoa/cocoaprivate.pp index 27b28ce5d8..9d663dc5c0 100644 --- a/lcl/interfaces/cocoa/cocoaprivate.pp +++ b/lcl/interfaces/cocoa/cocoaprivate.pp @@ -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; diff --git a/lcl/interfaces/cocoa/cocoawscommon.pas b/lcl/interfaces/cocoa/cocoawscommon.pas index c4382619b1..821e00f28f 100644 --- a/lcl/interfaces/cocoa/cocoawscommon.pas +++ b/lcl/interfaces/cocoa/cocoawscommon.pas @@ -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: diff --git a/lcl/interfaces/cocoa/cocoawsstdctrls.pp b/lcl/interfaces/cocoa/cocoawsstdctrls.pp index 2f992c2466..c137b8bc34 100644 --- a/lcl/interfaces/cocoa/cocoawsstdctrls.pp +++ b/lcl/interfaces/cocoa/cocoawsstdctrls.pp @@ -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);