mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 02:39:37 +02:00
cocoa: using a single place to process keyDown event related to LCL callbacks
git-svn-id: trunk@59178 -
This commit is contained in:
parent
75d1f28106
commit
aa5acf09a9
@ -253,16 +253,10 @@ begin
|
||||
end;
|
||||
|
||||
procedure TCocoaButton.keyDown(event: NSEvent);
|
||||
const
|
||||
KeyCode_Space = 49;
|
||||
begin
|
||||
if not Assigned(callback) or not callback.KeyEvent(event) then
|
||||
begin
|
||||
// space would attempt to change checked status
|
||||
if event.keyCode = KeyCode_Space then
|
||||
lclCheckMixedAllowance;
|
||||
inherited keyDown(event);
|
||||
end;
|
||||
if event.keyCode = kVK_Space then
|
||||
lclCheckMixedAllowance;
|
||||
inherited keyDown(event);
|
||||
end;
|
||||
|
||||
procedure TCocoaButton.keyUp(event: NSEvent);
|
||||
|
@ -206,7 +206,6 @@ type
|
||||
procedure mouseMoved(event: NSEvent); override;
|
||||
procedure scrollWheel(event: NSEvent); override;
|
||||
// key
|
||||
procedure keyDown(event: NSEvent); override;
|
||||
procedure keyUp(event: NSEvent); override;
|
||||
procedure flagsChanged(event: NSEvent); override;
|
||||
// nsview
|
||||
@ -337,6 +336,7 @@ type
|
||||
|
||||
procedure lclAddManTick(atick : integer); message 'lclAddManTick:';
|
||||
procedure lclSetManTickDraw(adraw: Boolean); message 'lclSetManTickDraw:';
|
||||
procedure lclExpectedKeys(var wantTabs, wantArrows, wantAll: Boolean); override;
|
||||
end;
|
||||
|
||||
TCocoaSliderCell = objcclass(NSSliderCell)
|
||||
@ -604,23 +604,6 @@ begin
|
||||
inherited scrollWheel(event);
|
||||
end;
|
||||
|
||||
procedure TCocoaCustomControl.keyDown(event: NSEvent);
|
||||
var
|
||||
cb : ICommonCallback;
|
||||
res : Boolean;
|
||||
begin
|
||||
cb := lclGetCallback;
|
||||
if Assigned(cb) then
|
||||
begin
|
||||
cb.KeyEvPrepare(event);
|
||||
cb.KeyEvBefore(res);
|
||||
if res then inherited keyDown(event);
|
||||
cb.KeyEvAfter;
|
||||
end else
|
||||
inherited keyDown(event);
|
||||
|
||||
end;
|
||||
|
||||
procedure TCocoaCustomControl.keyUp(event: NSEvent);
|
||||
begin
|
||||
if not Assigned(callback) or not callback.KeyEvent(event) then
|
||||
@ -1358,8 +1341,7 @@ begin
|
||||
MK_RIGHT : SnapToInteger(1);
|
||||
else
|
||||
// If this isn't done callback.KeyEvent will cause arrow left/right to change control
|
||||
if Assigned(callback) then callback.KeyEvent(event)
|
||||
else inherited keyDown(event);
|
||||
inherited keyDown(event);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1492,6 +1474,14 @@ begin
|
||||
self.setNeedsDisplay;
|
||||
end;
|
||||
|
||||
procedure TCocoaSlider.lclExpectedKeys(var wantTabs, wantArrows,
|
||||
wantAll: Boolean);
|
||||
begin
|
||||
wantTabs := false;
|
||||
wantArrows := true;
|
||||
wantAll := false;
|
||||
end;
|
||||
|
||||
type
|
||||
NSViewControlSizeExt = objccategory external (NSView)
|
||||
function controlSize: Integer; message 'controlSize';
|
||||
|
@ -102,7 +102,6 @@ type
|
||||
procedure mouseExited(event: NSEvent); override;
|
||||
procedure mouseMoved(event: NSEvent); override;
|
||||
// key
|
||||
procedure keyDown(event: NSEvent); override;
|
||||
procedure keyUp(event: NSEvent); override;
|
||||
procedure lclExpectedKeys(var wantTabs, wantKeys, wantAllKeys: Boolean); override;
|
||||
procedure lclSetFirstColumCheckboxes(acheckboxes: Boolean); message 'lclSetFirstColumCheckboxes:';
|
||||
@ -557,21 +556,6 @@ begin
|
||||
inherited mouseMoved(event);
|
||||
end;
|
||||
|
||||
procedure TCocoaTableListView.keyDown(event: NSEvent);
|
||||
var
|
||||
allow : Boolean;
|
||||
begin
|
||||
if not Assigned(callback) then
|
||||
inherited keyDown(event)
|
||||
else
|
||||
begin
|
||||
callback.KeyEvPrepare(event);
|
||||
callback.KeyEvBefore(allow);
|
||||
if allow then inherited KeyDown(event);
|
||||
callback.KeyEvAfter;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCocoaTableListView.keyUp(event: NSEvent);
|
||||
var
|
||||
allow : Boolean;
|
||||
|
@ -63,7 +63,6 @@ type
|
||||
procedure lclClearCallback; override;
|
||||
procedure resetCursorRects; override;
|
||||
// key
|
||||
//procedure keyDown(event: NSEvent); override; -> keyDown doesn't work in NSTextField
|
||||
procedure keyUp(event: NSEvent); override;
|
||||
procedure textDidChange(notification: NSNotification); override;
|
||||
// mouse
|
||||
@ -85,7 +84,6 @@ type
|
||||
function acceptsFirstResponder: Boolean; override;
|
||||
procedure resetCursorRects; override;
|
||||
// key
|
||||
//procedure keyDown(event: NSEvent); override; -> keyDown doesn't work in NSTextField
|
||||
procedure keyUp(event: NSEvent); override;
|
||||
// mouse
|
||||
procedure mouseDown(event: NSEvent); override;
|
||||
@ -115,7 +113,6 @@ type
|
||||
|
||||
procedure changeColor(sender: id); override;
|
||||
// key
|
||||
procedure keyDown(event: NSEvent); override;
|
||||
procedure keyUp(event: NSEvent); override;
|
||||
procedure flagsChanged(event: NSEvent); override;
|
||||
// mouse
|
||||
@ -143,8 +140,6 @@ type
|
||||
TCocoaFieldEditor = objcclass(NSTextView)
|
||||
public
|
||||
function lclGetCallback: ICommonCallback; override;
|
||||
// keyboard
|
||||
procedure keyDown(event: NSEvent); override;
|
||||
// mouse
|
||||
procedure mouseDown(event: NSEvent); override;
|
||||
procedure mouseUp(event: NSEvent); override;
|
||||
@ -480,30 +475,6 @@ begin
|
||||
else Result := nil;
|
||||
end;
|
||||
|
||||
procedure TCocoaFieldEditor.keyDown(event: NSEvent);
|
||||
var
|
||||
cb : ICommonCallback;
|
||||
res : Boolean;
|
||||
v : NSView;
|
||||
begin
|
||||
v := GetEditBox(Self);
|
||||
if Assigned(v) then
|
||||
cb := v.lclGetCallback
|
||||
else
|
||||
cb := nil;
|
||||
|
||||
if not Assigned(cb) then
|
||||
begin
|
||||
inherited keyDown(event);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
cb.KeyEvPrepare(event);
|
||||
cb.KeyEvBefore(res);
|
||||
if res then inherited keyDown(event);
|
||||
cb.KeyEvAfter;
|
||||
end;
|
||||
|
||||
procedure TCocoaFieldEditor.mouseDown(event: NSEvent);
|
||||
var
|
||||
v : NSView;
|
||||
@ -724,20 +695,6 @@ begin
|
||||
//inherited changeColor(sender);
|
||||
end;
|
||||
|
||||
procedure TCocoaTextView.keyDown(event: NSEvent);
|
||||
var
|
||||
res : Boolean;
|
||||
begin
|
||||
if Assigned(callback) then
|
||||
begin
|
||||
callback.KeyEvPrepare(event);
|
||||
callback.KeyEvBefore(res);
|
||||
if res then inherited keyDown(event);
|
||||
callback.KeyEvAfter;
|
||||
end else
|
||||
inherited keyDown(event);
|
||||
end;
|
||||
|
||||
procedure TCocoaTextView.keyUp(event: NSEvent);
|
||||
var
|
||||
res : Boolean;
|
||||
|
@ -239,36 +239,61 @@ var
|
||||
r : NSResponder;
|
||||
fr : NSResponder;
|
||||
mn : NSMenu;
|
||||
cb : ICommonCallback;
|
||||
allowcocoa : Boolean;
|
||||
|
||||
begin
|
||||
fr := win.firstResponder;
|
||||
r := fr;
|
||||
processed := false;
|
||||
allowcocoa := true;
|
||||
|
||||
// let controls to performKeyEquivalent first
|
||||
while Assigned(r) and not processed do begin
|
||||
if r.respondsToSelector(objcselector('performKeyEquivalent:')) then
|
||||
processed := r.performKeyEquivalent(event);
|
||||
if not processed then r := r.nextResponder;
|
||||
end;
|
||||
if processed then Exit;
|
||||
|
||||
// let menus do the hot key, if controls don't like it.
|
||||
if not processed then
|
||||
if Assigned(fr) then
|
||||
begin
|
||||
mn := NSApplication(NSApp).mainMenu;
|
||||
if Assigned(mn) then
|
||||
processed := mn.performKeyEquivalent(event);
|
||||
end;
|
||||
if processed then Exit;
|
||||
|
||||
r := fr;
|
||||
while Assigned(r) and not processed do begin
|
||||
if r.respondsToSelector(objcselector('keyDown:')) then
|
||||
cb := fr.lclGetCallback;
|
||||
if Assigned(cb) then
|
||||
begin
|
||||
r.keyDown(event);
|
||||
processed := true;
|
||||
cb.KeyEvPrepare(event);
|
||||
cb.KeyEvBefore(allowcocoa);
|
||||
end;
|
||||
if not processed then r := r.nextResponder;
|
||||
end else
|
||||
cb := nil;
|
||||
|
||||
// try..finally here is to handle "Exit"s
|
||||
// rather than excepting any exceptions to happen
|
||||
try
|
||||
if not allowcocoa then Exit;
|
||||
|
||||
// let controls to performKeyEquivalent first
|
||||
while Assigned(r) and not processed do begin
|
||||
if r.respondsToSelector(objcselector('performKeyEquivalent:')) then
|
||||
processed := r.performKeyEquivalent(event);
|
||||
if not processed then r := r.nextResponder;
|
||||
end;
|
||||
if processed then Exit;
|
||||
|
||||
// let menus do the hot key, if controls don't like it.
|
||||
if not processed then
|
||||
begin
|
||||
mn := NSApplication(NSApp).mainMenu;
|
||||
if Assigned(mn) then
|
||||
processed := mn.performKeyEquivalent(event);
|
||||
end;
|
||||
if processed then Exit;
|
||||
|
||||
r := fr;
|
||||
while Assigned(r) and not processed do begin
|
||||
if r.respondsToSelector(objcselector('keyDown:')) then
|
||||
begin
|
||||
r.keyDown(event);
|
||||
processed := true;
|
||||
end;
|
||||
if not processed then r := r.nextResponder;
|
||||
end;
|
||||
|
||||
finally
|
||||
if Assigned(cb) then
|
||||
cb.KeyEvAfter;
|
||||
end;
|
||||
|
||||
end;
|
||||
@ -950,19 +975,8 @@ begin
|
||||
end;
|
||||
|
||||
procedure TCocoaWindow.keyDown(event: NSEvent);
|
||||
var
|
||||
cb : ICommonCallback;
|
||||
res : Boolean;
|
||||
begin
|
||||
cb := lclGetCallback;
|
||||
if Assigned(cb) then
|
||||
begin
|
||||
cb.KeyEvPrepare(event);
|
||||
cb.KeyEvBefore(res);
|
||||
inherited keyDown(event);
|
||||
cb.KeyEvAfter;
|
||||
end else
|
||||
inherited keyDown(event);
|
||||
inherited keyDown(event);
|
||||
end;
|
||||
|
||||
procedure TCocoaWindow.keyUp(event: NSEvent);
|
||||
|
Loading…
Reference in New Issue
Block a user