--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m Tue Jul 23 13:09:44 2013 +0400
+++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m Wed Jul 24 17:14:45 2013 +0400
@@ -120,6 +120,7 @@
@synthesize javaMaxSize;
@synthesize styleBits;
@synthesize isEnabled;
+@synthesize ownerWindow;
- (void) updateMinMaxSize:(BOOL)resizable {
if (resizable) {
@@ -201,6 +202,7 @@
}
- (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)platformWindow
+ ownerWindow:owner
styleBits:(jint)bits
frameRect:(NSRect)rect
contentView:(NSView *)view
@@ -245,6 +247,7 @@
self.isEnabled = YES;
self.javaPlatformWindow = platformWindow;
self.styleBits = bits;
+ self.ownerWindow = owner;
[self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)];
return self;
@@ -350,7 +353,7 @@
[self.javaPlatformWindow setJObject:nil withEnv:env];
self.nsWindow = nil;
-
+ self.ownerWindow = nil;
[super dealloc];
}
@@ -539,11 +542,18 @@
AWT_ASSERT_APPKIT_THREAD;
[AWTToolkit eventCountPlusPlus];
AWTWindow *opposite = [AWTWindow lastKeyWindow];
- if (!IS(self.styleBits, IS_DIALOG)) {
- [CMenuBar activate:self.javaMenuBar modallyDisabled:NO];
- } else if ((opposite != NULL) && IS(self.styleBits, IS_MODAL)) {
- [CMenuBar activate:opposite->javaMenuBar modallyDisabled:YES];
+
+ // Finds appropriate menubar in our hierarchy,
+ AWTWindow *awtWindow = self;
+ while (awtWindow.ownerWindow != nil) {
+ awtWindow = awtWindow.ownerWindow;
}
+ CMenuBar *menuBar = nil;
+ if ([awtWindow.nsWindow isVisible]){
+ menuBar = awtWindow.javaMenuBar;
+ }
+ [CMenuBar activate:menuBar modallyDisabled:!awtWindow.isEnabled];
+
[AWTWindow setLastKeyWindow:nil];
[self _deliverWindowFocusEvent:YES oppositeWindow: opposite];
@@ -741,7 +751,7 @@
* Signature: (JJIIII)J
*/
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeCreateNSWindow
-(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h)
+(JNIEnv *env, jobject obj, jlong contentViewPtr, jlong ownerPtr, jlong styleBits, jdouble x, jdouble y, jdouble w, jdouble h)
{
__block AWTWindow *window = nil;
@@ -750,13 +760,14 @@
JNFWeakJObjectWrapper *platformWindow = [JNFWeakJObjectWrapper wrapperWithJObject:obj withEnv:env];
NSView *contentView = OBJC(contentViewPtr);
NSRect frameRect = NSMakeRect(x, y, w, h);
-
+ AWTWindow *owner = [OBJC(ownerPtr) delegate];
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
window = [[AWTWindow alloc] initWithPlatformWindow:platformWindow
- styleBits:styleBits
- frameRect:frameRect
- contentView:contentView];
+ ownerWindow:owner
+ styleBits:styleBits
+ frameRect:frameRect
+ contentView:contentView];
// the window is released is CPlatformWindow.nativeDispose()
if (window) CFRetain(window.nsWindow);