cocoa: Implements key up/pressed/down for TEdit, but only keyDown is not ideal due to cocoa limitations

git-svn-id: trunk@49817 -
This commit is contained in:
sekelsenmat 2015-09-12 07:37:40 +00:00
parent ff1747c1eb
commit 0d1f9bd856
2 changed files with 39 additions and 5 deletions

View File

@ -50,7 +50,7 @@ type
function MouseUpDownEvent(Event: NSEvent): Boolean;
procedure MouseClick;
function MouseMove(Event: NSEvent): Boolean;
function KeyEvent(Event: NSEvent): Boolean;
function KeyEvent(Event: NSEvent; AForceAsKeyDown: Boolean = False): Boolean;
function scrollWheel(Event: NSEvent): Boolean;
// size, pos events
procedure frameDidChange;
@ -247,6 +247,9 @@ type
procedure lclClearCallback; override;
procedure resetCursorRects; override;
function lclIsHandle: Boolean; override;
// key
//procedure keyDown(event: NSEvent); override; -> keyDown doesn't work in NSTextField
procedure keyUp(event: NSEvent); override;
end;
{ TCocoaSecureTextField }
@ -262,6 +265,9 @@ type
function resignFirstResponder: Boolean; override;
procedure resetCursorRects; override;
function lclIsHandle: Boolean; override;
// key
//procedure keyDown(event: NSEvent); override; -> keyDown doesn't work in NSTextField
procedure keyUp(event: NSEvent); override;
end;
@ -1862,6 +1868,18 @@ begin
inherited resetCursorRects;
end;
procedure TCocoaTextField.keyUp(event: NSEvent);
begin
if Assigned(callback) then
begin
// NSTextField doesn't provide keyDown, so emulate it here
callback.KeyEvent(event, True);
// keyUp now
callback.KeyEvent(event);
end;
inherited keyUp(event);
end;
{ TCocoaTextView }
function TCocoaTextView.lclIsHandle: Boolean;
@ -1990,6 +2008,18 @@ begin
inherited resetCursorRects;
end;
procedure TCocoaSecureTextField.keyUp(event: NSEvent);
begin
if Assigned(callback) then
begin
// NSTextField doesn't provide keyDown, so emulate it here
callback.KeyEvent(event, True);
// keyUp now
callback.KeyEvent(event);
end;
inherited keyUp(event);
end;
{ TCocoaCustomControl }
function TCocoaCustomControl.lclIsHandle: Boolean;

View File

@ -51,7 +51,7 @@ type
function GetTarget: TObject;
function GetCallbackObject: TObject;
function MouseUpDownEvent(Event: NSEvent): Boolean; virtual;
function KeyEvent(Event: NSEvent): Boolean; virtual;
function KeyEvent(Event: NSEvent; AForceAsKeyDown: Boolean = False): Boolean; virtual;
procedure MouseClick; virtual;
function MouseMove(Event: NSEvent): Boolean; virtual;
function scrollWheel(Event: NSEvent): Boolean; virtual;
@ -280,7 +280,7 @@ begin
end;
function TLCLCommonCallback.KeyEvent(Event: NSEvent): Boolean;
function TLCLCommonCallback.KeyEvent(Event: NSEvent; AForceAsKeyDown: Boolean): Boolean;
var
UTF8VKCharacter: TUTF8Char; // char without modifiers, used for VK_ key value
UTF8Character: TUTF8Char; // char to send via IntfUtf8KeyPress
@ -290,7 +290,7 @@ var
VKKeyCode: word; // VK_ code
IsSysKey: Boolean; // Is alt (option) key down?
KeyData: PtrInt; // Modifiers (ctrl, alt, mouse buttons...)
eventType: NSEventType;
(*
Mac keycodes handling is not so straight. For an explanation, see
@ -631,7 +631,11 @@ var
end;
begin
case Event.type_ of
eventType := Event.type_;
if AForceAsKeyDown then
eventType := NSKeyDown;
case eventType of
NSKeyDown:
begin
if not TranslateMacKeyCode then