[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fix, NSView (-releaseGState)
From: |
Georg Fleischmann |
Subject: |
Re: Fix, NSView (-releaseGState) |
Date: |
Fri, 24 Sep 2010 09:43:29 +0800 |
Hallo Fred,
I just testes GNUstep GUI from yesterday with Cenon, and now all graphic
windows are pitch black, no contents at all.
> _allocate_gstate will change its value when the view moves to another
> window. Application code will have to set this again.
If I remove the [self releaseGState] in [NSView _viewWillMoveToWindow:], it
works again.
It also works if I just keep the _allocate_gstate alive.
As the Cenon graphics code runs perfectly on OpenStep 4.2 and Apple, I would
say, the _allocate_gstate flag should be transferred with the view to the new
window.
Best wishes,
Georg
On 15.09.2010, at 16:22, Fred Kiefer wrote:
> Should be in SVN now. As the logic of undefining a gstate is now a bit
> more complicated I rather call this method from _viewWillMoveToWindow:
> instead of duplicating the code. This has the drawback that
> _allocate_gstate will change its value when the view moves to another
> window. Application code will have to set this again.
>
> Fred
>
> Am 13.09.2010 10:05, schrieb Georg Fleischmann:
>> Hi Fred,
>>
>>> if (_gstate)
>>> if (_window)
>>> GSUndefineGState([_window graphicsContext], _gstate);
>>> _gstate = 0;
>>
>> I added this at the beginning of _viewWillMoveToWindow: and played with some
>> graphic windows in Cenon.
>> It will crash, if there is a _gstate but _window has no graphicsContext,
>> which seems to be possible here.
>> If I add an additional test for [_window graphicsContext != nil, then I
>> don't get any problems.
>>
>> Georg
>>
>>
>> On 11.09.2010, at 20:17, Fred Kiefer wrote:
>>
>>> Hi Georg,
>>>
>>> thank you for this patch. It surely is correct and I will add it. But as
>>> you already pointed out there may be a deeper problem here.
>>> I think that we should always clean up the gstate when the window for a
>>> view changes, that is in the method _viewWillMoveToWindow:. Something like:
>>>
>>> if (_gstate)
>>> if (_window)
>>> GSUndefineGState([_window graphicsContext], _gstate);
>>> _gstate = 0;
>>>
>>> Do you or anybody else on this list, see any problem with that change?
>>>
>>> Fred
>>>
>>>
>>> Am 11.09.2010 12:24, schrieb Georg Fleischmann:
>>>> here is a small patch for NSView (SVN 2010-09-10 and before) to prevent a
>>>> crash in Cenon when closing a Graphic Window.
>>>> The same code of Cenon works on Apple, so I suspect it's an issue with
>>>> GNUstep.
>>>>
>>>> The crash is in NSView, which has a gstate but no _window (_window = nil)
>>>> to get the graphicsContext. This is causing the crash.
>>>> I simply tested for a _window != nil to prevent the crash, and everything
>>>> appears to work.
>>>>
>>>> There might be an issue with the order of releasing the hierarchy of
>>>> windows and views or something in that line, creating the situation in the
>>>> first place, but I'm not deep enough into that to have any idea.
>>>> I also add the stack of the situation.
>>>>
>>>> Best wishes,
>>>> Georg Fleischmann
>>>>
>>>>
>>>>
>>>> *** Source/NSView.m.old 2010-09-04 13:30:30.000000000 +0800
>>>> --- Source/NSView.m 2010-09-11 17:45:22.000000000 +0800
>>>> ***************
>>>> *** 2183,2189 ****
>>>> */
>>>> - (void) releaseGState
>>>> {
>>>> ! if (_allocate_gstate && _gstate)
>>>> GSUndefineGState([_window graphicsContext], _gstate);
>>>> _gstate = 0;
>>>> _allocate_gstate = NO;
>>>> --- 2183,2189 ----
>>>> */
>>>> - (void) releaseGState
>>>> {
>>>> ! if (_allocate_gstate && _gstate && _window)
>>>> GSUndefineGState([_window graphicsContext], _gstate);
>>>> _gstate = 0;
>>>> _allocate_gstate = NO;
>