So, there are no memory leaks? I'm OK with the fix, then. 

On Jul 24, 2013, at 4:28 PM, Sergey Bylokhov <sergey.bylok...@oracle.com> wrote:

> Hi, Leonid.
> Yes. When the child window is created, it create its parent also. And the 
> owner cannot be deallocated until child window is live, but when the owner is 
> disposed, it dispose all its child windows.
> 
> On 24.07.2013 15:46, Leonid Romanov wrote:
>> Looks good for me as well. The only thing that is not clear to me is the 
>> memory management in AWTWindow: since every child references its parent now, 
>> wouldn't it prevent the parent from  being deallocated after it has been 
>> disposed?
>> 
>> On Jul 24, 2013, at 3:17 PM, Sergey Bylokhov <sergey.bylok...@oracle.com> 
>> wrote:
>> 
>>> Hi, Anthony.
>>> Please review the updated version
>>> http://cr.openjdk.java.net/~serb/8017189/webrev.02/
>>> In the fix a dependency from the dialog was removed. now we use menubar 
>>> from the toplvl parent window.
>>> 
>>> On 24.07.2013 0:12, Anthony Petrov wrote:
>>>> Hi Sergey,
>>>> 
>>>> I'll let Leonid test this patch since he has a number of good test cases. 
>>>> As for the code changes, they look good to me overall. The only scenario 
>>>> that concerns me is if we have a hierarchy of a frame and an owned 
>>>> undecorated window (e.g., a toolbar). With your current fix the menu will 
>>>> disappear as soon as the window gets activated because it is not a dialog 
>>>> and its menubar is obviously null:
>>>> 
>>>>> 546     // Finds appropriate menubar in our hierarchy,
>>>>> 547      if (self.javaMenuBar != nil || !IS(self.styleBits, IS_DIALOG)) {
>>>>> 548         // shortpath
>>>>> 549         [CMenuBar activate:self.javaMenuBar modallyDisabled:NO];
>>>>> 550     }
>>>> IMO, this is undesirable. Can we remove this if/else altogether and 
>>>> instead code this logic as follows:
>>>> 
>>>>   CMenuBar *menu = <traverse-owners-till-first-non-null-menu>;
>>>>   [CMenuBar activate:menu modallyDisabled:!<menu-owner>.isEnabled];
>>>> 
>>>> ? It seems to me that this should cover all possible use cases.
>>>> 
>>>> -- 
>>>> best regards,
>>>> Anthony
>>>> 
>>>> On 07/23/2013 09:37 PM, Sergey Bylokhov wrote:
>>>>> Hello.
>>>>> Please review updated version of the fix:
>>>>> http://cr.openjdk.java.net/~serb/8017189/webrev.01
>>>>> After the fix, for dialogs we activates a menubar from the first visible
>>>>> and enabled owner. I use awtwindow owner instead of
>>>>> nswindow.parentWindow, because when the windowDidBecomeKey is called for
>>>>> the first time our nswindow still have no parentWindow(it is added later).
>>>>> Any testing are welcome.
>>>>> Thanks.
>>>>> 
>>>>> On 23.07.2013 14:37, Leonid Romanov wrote:
>>>>>> On 7/23/2013 14:06, Sergey Bylokhov wrote:
>>>>>>> On 22.07.2013 23:32, Leonid Romanov wrote:
>>>>>>>> Well, I'd like us to stay consistent with JDK 6. However, if we
>>>>>>>> decide to fix this issue in some other way, we need to be consistent
>>>>>>>> with other possible cases, like setting frame's menu to null before
>>>>>>>> showing a dialog, making frame invisible, and so on.
>>>>>>>> But as you've said, this issue is not related to 8017189, so let's
>>>>>>>> go back to the fix for 8017189. I've got another question about it.
>>>>>>>> When native window loses focus, we call -(void) deactivate method of
>>>>>>>> CMenuBar class. At first, I thought that it basically removes all
>>>>>>>> the menu items from the menu bar, but then I realized that it is not
>>>>>>>> the case, because your fix depends on the fact that the window
>>>>>>>> gaining focus inherits the menu bar from the window that just lost
>>>>>>>> it. Now, consider step 4 of your scenario. Here, the dialog2 is the
>>>>>>>> window that is loosing focus, and dialog1 is the window that is
>>>>>>>> gaining it. As a result of dialog2 loosing focus, the current menu
>>>>>>>> bar gets marked as not active (sActiveMenuBar in CMenuBar is set to
>>>>>>>> false). When dialog1 gains focus, we do nothing with the current
>>>>>>>> menu, because the opposite window (dialog2) doesn't formally have a
>>>>>>>> menu (opposite->javaMenuBar is NULL). This means that dialog1 now
>>>>>>>> has a menu that is formally inactive.
>>>>>>>> Since I don't really understand the purpose of  -(void) deactivate
>>>>>>>> method, I can't say whether the situation I've described above is
>>>>>>>> problematic or not.  What do you think?
>>>>>>> Actually this is not a problem of my fix, this is a problem of
>>>>>>> 8010906,  which was implemented on top of "opposite" property instead
>>>>>>> of "dialog parent".  Probably you know why?
>>>>>>> I'll try to change it, but not sure is it dangerous to change it now
>>>>>>> or not.
>>>>>> I agree, after looking more closely at the original code, it seems
>>>>>> that we will get the same deactivation issue in case of showing non
>>>>>> modal dialog. I've no idea why 8010906 was implemented on top of the
>>>>>> opposite, perhaps it looked like the simplest approach back then. Do
>>>>>> you think that traversing windows hierarchy tree from the dialog being
>>>>>> shown to an ancestor frame with a menu would have been a better idea?
>>>>>> 
>>>>>>>>> On 22.07.2013 16:57, Leonid Romanov wrote:
>>>>>>>>>> Hi.
>>>>>>>>>> Here is a test case that, with your patch applied, works
>>>>>>>>>> differently than JDK 6:
>>>>>>>>>> 1. Show JFrame with a menu
>>>>>>>>>> 2.  Create a modal dialog with the frame as a parent
>>>>>>>>>> 3. Dispose the frame
>>>>>>>>>> 4. Make dialog visible
>>>>>>>>>> 
>>>>>>>>>> With JDK 6, the dialog's menu will be disabled. With JDK 8, it
>>>>>>>>>> will be enabled.  So, formally, we've got a regression. I'm not
>>>>>>>>>> sure whether it is worth fixing, because it looks like a corner
>>>>>>>>>> case, but still.
>>>>>>>>>> 
>>>>>>>>>> On Jul 19, 2013, at 10:15 PM, Sergey Bylokhov
>>>>>>>>>> <sergey.bylok...@oracle.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Hello,
>>>>>>>>>>> Please review the fix for jdk 8 and 7u40.
>>>>>>>>>>> The fix for JDK-8010906 don't take into account situation then
>>>>>>>>>>> first parent has no menu bar, but the second has.
>>>>>>>>>>> So it introduce the next scenario:
>>>>>>>>>>> #1. Open the window with File menu.
>>>>>>>>>>> #2. Open modal dialog1 =>File menu is disabled
>>>>>>>>>>> #3. Open modal dialog2 =>File menu disappears
>>>>>>>>>>> #4. Close dialog two
>>>>>>>>>>> #5. Close dialog one. File menu reappears, but File still disabled
>>>>>>>>>>> 
>>>>>>>>>>> The steps #3. occurred, because CMenuBar.activate resets the
>>>>>>>>>>> current menubar if a passed javaMenuBar is null.
>>>>>>>>>>> The steps #5. occurred, because at step #3 we do not remove our
>>>>>>>>>>> nsmenu from the deleted NSMenuItem, when the appropriate
>>>>>>>>>>> NSMenuItem removed from mainMenu. So at step #5 we got a
>>>>>>>>>>> situation, when our nsmenu was added to the two different
>>>>>>>>>>> nsmenuitems: old(disabled) and new(enabled).
>>>>>>>>>>> 
>>>>>>>>>>> Bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8017189
>>>>>>>>>>> Webrev can be found at:
>>>>>>>>>>> http://cr.openjdk.java.net/~serb/8017189/webrev.00
>>>>>>>>>>> 
>>>>>>>>>>> -- 
>>>>>>>>>>> Best regards, Sergey.
>>>>>>>>>>> 
>>>>>>>>> -- 
>>>>>>>>> Best regards, Sergey.
>>>>>>>>> 
>>>>>>> 
>>>>> 
>>> 
>>> -- 
>>> Best regards, Sergey.
>>> 
> 
> 
> -- 
> Best regards, Sergey.
> 

Reply via email to