gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: crash in GUI / ProjectCenter


From: Wolfgang Lux
Subject: Re: crash in GUI / ProjectCenter
Date: Tue, 10 Jan 2023 14:58:32 +0100


> Am 10.01.2023 um 01:42 schrieb Riccardo Mottola <riccardo.mottola@libero.it>:
> 
> Hi,
> 
> 
> Riccardo Mottola wrote:
>> y to understand if this is more a GUI or a ProjectCenter issue 
> 
> I checked this a little more, also with Fred. The SplitView looses its 
> delegate.. it must be one of the subviews. I suppose the Editor subview, 
> because it happens only if a proper editor is loader.
> Editor loading is a bit complex since the Framework loads some editor Bundles.
> The Editor itself can function both as in-window and in-project...
> 
> Anyone has a good clue?

<rant>
Yes. It's 2023 (happy new year, btw). Use an up to date compiler and declare 
the delegate as a zeroing weak reference.
</rant>

Apart from that, the problem is that you've closed the editor window and the 
editor object has been released and deallocated, but the editor window still 
exists and is still receiving events after the window has been closed. While 
-[NSWindow sendEvent:] ignores most events for closed windows is does still 
accept NSAppKitDefined events (for instance, your window manager could post a 
window moved event; I've seen that happening under Gnome for windows after they 
were closed). If for some reason the cursor rectangles of that window have been 
invalidated, sendEvent: will reset all cursor rectangles. Now if the window 
happens to contain a split view, that split view will ask its delegate for the 
size of the divider. Unfortunately, though, in this case the delegate has been 
deallocated (without the relevant pointer being reset) and hence the program 
crashes.

I'm not really familiar with the cursor rectangle code, but it seems to me that 
there is no point resetting the cursor rectangles after a window has been 
closed. With a little bit of luck, just changing the condition
  !_f.cursor_rects_valid
in line 4071 of NSWindow.m (fairly at the beginning of the -[NSWindow 
sendEvent:] method) into
  !_f.cursor_rects_valid && !_f.has_closed
should be enough to fix this issue. And hopefully it doesn't break anything for 
windows that aren't released upon closing. But it's worth reviewing that the 
cursor rectangles will be reset when such a window is opened again.

Wolfgang




reply via email to

[Prev in Thread] Current Thread [Next in Thread]