On Tue, Jun 11, 2019 at 10:06 AM David Jenkins via lazarus <
[email protected]> wrote:
> I looked at the assembly for NSApplication.run, there are a lot of things
> being called and set before the call to nextEventMatching... The
> .isRunning variable being one of them - which is read only and can't be
> set. It can be overridden (and is one of the suggested overrides) but
> unfortunately there are times, in other parts of the code, that they look
> directly at the ._running variable where the value of .isRunning is stored
> instead of calling .isRunning (look at NSApplication._setMainWindow).
> Which sets up a mismatch between what an overridden .isRunning method would
> return and what ._running is set to.
>
Let's back-up a little bit.
Can we actually try to set the value for the instance variable?
1) it's absolutely legal in Objective-C terms (object_getInstanceVariable,
object_setInstanceVariable).
2) its' absolutely legal in KVC term. (I can presume that KVC is pretty
much based on top of objc-run time. And this is how the entire Swift<->ObjC
binding works)
Can anyone try and modify TCocoaApplication.run to look like this. (If
you're using trunk, you'll need to have {$define COCOALOOPOVERRIDE} defines
in cocoadefines.inc}
procedure TCocoaApplication.run;
begin
self.setValue_forKey(NSNumber.numberWithBool(true),NSSTR('_running')); //
setting instance variable through KVC
isrun:=true;
aloop();
end;
--
_______________________________________________
lazarus mailing list
[email protected]
https://lists.lazarus-ide.org/listinfo/lazarus