src/macosx/native/sun/awt/AWTWindow.m

Print this page

        

@@ -68,28 +68,81 @@
 {
     return nil;
 }
 @end
 
+// --------------------------------------------------------------
+// NSWindow/NSPanel descendants implementation
+#define AWT_NS_WINDOW_IMPLEMENTATION                            \
+- (id) initWithDelegate:(AWTWindow *)delegate                   \
+              frameRect:(NSRect)contectRect                     \
+              styleMask:(NSUInteger)styleMask                   \
+            contentView:(NSView *)view                          \
+{                                                               \
+    self = [super initWithContentRect:contectRect               \
+                            styleMask:styleMask                 \
+                              backing:NSBackingStoreBuffered    \
+                                defer:NO];                      \
+                                                                \
+    if (self == nil) return nil;                                \
+                                                                \
+    [self setDelegate:delegate];                                \
+    [self setContentView:view];                                 \
+    [self setInitialFirstResponder:view];                       \
+    [self setReleasedWhenClosed:NO];                            \
+    [self setPreservesContentDuringLiveResize:YES];             \
+                                                                \
+    return self;                                                \
+}                                                               \
+                                                                \
+/* NSWindow overrides */                                        \
+- (BOOL) canBecomeKeyWindow {                                   \
+    return [(AWTWindow*)[self delegate] canBecomeKeyWindow];    \
+}                                                               \
+                                                                \
+- (BOOL) canBecomeMainWindow {                                  \
+    return [(AWTWindow*)[self delegate] canBecomeMainWindow];   \
+}                                                               \
+                                                                \
+- (BOOL) worksWhenModal {                                       \
+    return [(AWTWindow*)[self delegate] worksWhenModal];        \
+}                                                               \
+                                                                \
+- (void)sendEvent:(NSEvent *)event {                            \
+    [(AWTWindow*)[self delegate] sendEvent:event];              \
+    [super sendEvent:event];                                    \
+}
+
+@implementation AWTWindow_Normal
+AWT_NS_WINDOW_IMPLEMENTATION
+@end
+@implementation AWTWindow_Panel
+AWT_NS_WINDOW_IMPLEMENTATION
+@end
+// END of NSWindow/NSPanel descendants implementation
+// --------------------------------------------------------------
+
+
 @implementation AWTWindow
 
+@synthesize nsWindow;
 @synthesize javaPlatformWindow;
 @synthesize javaMenuBar;
 @synthesize growBoxWindow;
 @synthesize javaMinSize;
 @synthesize javaMaxSize;
 @synthesize styleBits;
 @synthesize isEnabled;
 
 - (void) updateMinMaxSize:(BOOL)resizable {
     if (resizable) {
-        [self setMinSize:self.javaMinSize];
-        [self setMaxSize:self.javaMaxSize];
+        [self.nsWindow setMinSize:self.javaMinSize];
+        [self.nsWindow setMaxSize:self.javaMaxSize];
     } else {
-        NSRect currentFrame = [self frame];
-        [self setMinSize:currentFrame.size];
-        [self setMaxSize:currentFrame.size];
+        NSRect currentFrame = [self.nsWindow frame];
+        [self.nsWindow setMinSize:currentFrame.size];
+        [self.nsWindow setMaxSize:currentFrame.size];
     }
 }
 
 // creates a new NSWindow style mask based on the _STYLE_PROP_BITMASK bits
 + (NSUInteger) styleMaskForStyleBits:(jint)styleBits {

@@ -116,42 +169,42 @@
 // updates _METHOD_PROP_BITMASK based properties on the window
 - (void) setPropertiesForStyleBits:(jint)bits mask:(jint)mask {
     if (IS(mask, RESIZABLE)) {
         BOOL resizable = IS(bits, RESIZABLE);
         [self updateMinMaxSize:resizable];
-        [self setShowsResizeIndicator:resizable];
+        [self.nsWindow setShowsResizeIndicator:resizable];
     }
 
     if (IS(mask, HAS_SHADOW)) {
-        [self setHasShadow:IS(bits, HAS_SHADOW)];
+        [self.nsWindow setHasShadow:IS(bits, HAS_SHADOW)];
     }
 
     if (IS(mask, ZOOMABLE)) {
-        [[self standardWindowButton:NSWindowZoomButton] setEnabled:IS(bits, ZOOMABLE)];
+        [[self.nsWindow standardWindowButton:NSWindowZoomButton] setEnabled:IS(bits, ZOOMABLE)];
     }
 
     if (IS(mask, ALWAYS_ON_TOP)) {
-        [self setLevel:IS(bits, ALWAYS_ON_TOP) ? NSFloatingWindowLevel : NSNormalWindowLevel];
+        [self.nsWindow setLevel:IS(bits, ALWAYS_ON_TOP) ? NSFloatingWindowLevel : NSNormalWindowLevel];
     }
 
     if (IS(mask, HIDES_ON_DEACTIVATE)) {
-        [self setHidesOnDeactivate:IS(bits, HIDES_ON_DEACTIVATE)];
+        [self.nsWindow setHidesOnDeactivate:IS(bits, HIDES_ON_DEACTIVATE)];
     }
 
     if (IS(mask, DRAGGABLE_BACKGROUND)) {
-        [self setMovableByWindowBackground:IS(bits, DRAGGABLE_BACKGROUND)];
+        [self.nsWindow setMovableByWindowBackground:IS(bits, DRAGGABLE_BACKGROUND)];
     }
 
     if (IS(mask, DOCUMENT_MODIFIED)) {
-        [self setDocumentEdited:IS(bits, DOCUMENT_MODIFIED)];
+        [self.nsWindow setDocumentEdited:IS(bits, DOCUMENT_MODIFIED)];
     }
 
-    if ([self respondsToSelector:@selector(toggleFullScreen:)]) {
+    if ([self.nsWindow respondsToSelector:@selector(toggleFullScreen:)]) {
         if (IS(mask, FULLSCREENABLE)) {
-            [self setCollectionBehavior:(1 << 7) /*NSWindowCollectionBehaviorFullScreenPrimary*/];
+            [self.nsWindow setCollectionBehavior:(1 << 7) /*NSWindowCollectionBehaviorFullScreenPrimary*/];
         } else {
-            [self setCollectionBehavior:NSWindowCollectionBehaviorDefault];
+            [self.nsWindow setCollectionBehavior:NSWindowCollectionBehaviorDefault];
         }
     }
 
 }
 

@@ -187,28 +240,40 @@
     }
     if (contentRect.size.height <= 0.0) {
         contentRect.size.height = 1.0;
     }
 
-    self = [super initWithContentRect:contentRect
-                            styleMask:styleMask
-                              backing:NSBackingStoreBuffered
-                                defer:NO];
+    self = [super init];
 
     if (self == nil) return nil; // no hope
 
+    if (IS(bits, UTILITY) ||
+        IS(bits, NONACTIVATING) ||
+        IS(bits, HUD) ||
+        IS(bits, HIDES_ON_DEACTIVATE))
+    {
+        self.nsWindow = [[AWTWindow_Panel alloc] initWithDelegate:self
+                            frameRect:contentRect
+                            styleMask:styleMask
+                          contentView:view];
+    }
+    else
+    {
+        // These windows will appear in the window list in the dock icon menu
+        self.nsWindow = [[AWTWindow_Normal alloc] initWithDelegate:self
+                            frameRect:contentRect
+                            styleMask:styleMask
+                          contentView:view];
+    }
+
+    if (self.nsWindow == nil) return nil; // no hope either
+
     self.isEnabled = YES;
     self.javaPlatformWindow = platformWindow;
     self.styleBits = bits;
     [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)];
 
-    [self setDelegate:self];
-    [self setContentView:view];
-    [self setInitialFirstResponder:view];
-    [self setReleasedWhenClosed:NO];
-    [self setPreservesContentDuringLiveResize:YES];
-
     if ([self shouldShowGrowBox]) {
         NSImage *growBoxImage = [self createGrowBoxImage];
         growBoxWindow = [[JavaResizeGrowBoxOverlayWindow alloc] initWithContentRect:NSMakeRect(0, 0, [growBoxImage size].width, [growBoxImage size].height) styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
         [self.growBoxWindow setIgnoresMouseEvents:YES];
         [self.growBoxWindow setOpaque:NO];

@@ -223,11 +288,11 @@
         [self.growBoxWindow setContentView:imageView];
         [imageView setImage:growBoxImage];
         [growBoxImage release];
         [imageView release];
 
-        [self addChildWindow:self.growBoxWindow ordered:NSWindowAbove];
+        [self.nsWindow addChildWindow:self.growBoxWindow ordered:NSWindowAbove];
         [self adjustGrowBoxWindow];
     } else growBoxWindow = nil;
 
     return self;
 }

@@ -237,10 +302,12 @@
 
     JNIEnv *env = [ThreadUtilities getJNIEnv];
     [self.javaPlatformWindow setJObject:nil withEnv:env];
     self.growBoxWindow = nil;
 
+    self.nsWindow = nil;
+
     [super dealloc];
 }
 
 // NSWindow overrides
 - (BOOL) canBecomeKeyWindow {

@@ -270,11 +337,11 @@
         static JNF_MEMBER_CACHE(jf_target, jc_CPlatformWindow, "target", "Ljava/awt/Window;");
         jobject awtWindow = JNFGetObjectField(env, platformWindow, jf_target);
         if (awtWindow != NULL) {
             // translate the point into Java coordinates
             NSPoint loc = [event locationInWindow];
-            loc.y = [self frame].size.height - loc.y;
+            loc.y = [self.nsWindow frame].size.height - loc.y;
 
             // send up to the GestureHandler to recursively dispatch on the AWT event thread
             static JNF_CLASS_CACHE(jc_GestureHandler, "com/apple/eawt/event/GestureHandler");
             static JNF_STATIC_MEMBER_CACHE(sjm_handleGestureFromNative, jc_GestureHandler, "handleGestureFromNative", "(Ljava/awt/Window;IDDDD)V");
             JNFCallStaticVoidMethod(env, sjm_handleGestureFromNative, awtWindow, type, (jdouble)loc.x, (jdouble)loc.y, (jdouble)a, (jdouble)b);

@@ -322,11 +389,11 @@
 
 // NSWindowDelegate methods
 
 - (void) adjustGrowBoxWindow {
     if (self.growBoxWindow != nil) {
-        NSRect parentRect = [self frame];
+        NSRect parentRect = [self.nsWindow frame];
         parentRect.origin.x += (parentRect.size.width - [self.growBoxWindow frame].size.width);
         [self.growBoxWindow setFrameOrigin:parentRect.origin];
     }
 }
 

@@ -343,11 +410,11 @@
         // TODO: create generic AWT assert
     }
 
     [self adjustGrowBoxWindow];
 
-    NSRect frame = ConvertNSScreenRect(env, [self frame]);
+    NSRect frame = ConvertNSScreenRect(env, [self.nsWindow frame]);
 
     static JNF_MEMBER_CACHE(jm_deliverMoveResizeEvent, jc_CPlatformWindow, "deliverMoveResizeEvent", "(IIII)V");
     JNFCallVoidMethod(env, platformWindow, jm_deliverMoveResizeEvent,
                       (jint)frame.origin.x,
                       (jint)frame.origin.y,

@@ -533,31 +600,30 @@
 
 - (void)sendEvent:(NSEvent *)event {
         if ([event type] == NSLeftMouseDown || [event type] == NSRightMouseDown || [event type] == NSOtherMouseDown) {
 
             NSPoint p = [NSEvent mouseLocation];
-            NSRect frame = [self frame];
-            NSRect contentRect = [self contentRectForFrameRect:frame];
+            NSRect frame = [self.nsWindow frame];
+            NSRect contentRect = [self.nsWindow contentRectForFrameRect:frame];
 
             // Check if the click happened in the non-client area (title bar)
             if (p.y >= (frame.origin.y + contentRect.size.height)) {
                 JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
                 jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env];
                 // Currently, no need to deliver the whole NSEvent.
                 static JNF_MEMBER_CACHE(jm_deliverNCMouseDown, jc_CPlatformWindow, "deliverNCMouseDown", "()V");
                 JNFCallVoidMethod(env, platformWindow, jm_deliverNCMouseDown);
             }
         }
-        [super sendEvent:event];
 }
 
 - (void)constrainSize:(NSSize*)size {
     float minWidth = 0.f, minHeight = 0.f;
 
     if (IS(self.styleBits, DECORATED)) {
-        NSRect frame = [self frame];
-        NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self styleMask]];
+        NSRect frame = [self.nsWindow frame];
+        NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self.nsWindow styleMask]];
 
         float top = frame.size.height - contentRect.size.height;
         float left = contentRect.origin.x - frame.origin.x;
         float bottom = contentRect.origin.y - frame.origin.y;
         float right = frame.size.width - (contentRect.size.width + left);

@@ -581,24 +647,24 @@
 
 - (void) setEnabled: (BOOL)flag {
     self.isEnabled = flag;
 
     if (IS(self.styleBits, CLOSEABLE)) {
-        [[self standardWindowButton:NSWindowCloseButton] setEnabled: flag];
+        [[self.nsWindow standardWindowButton:NSWindowCloseButton] setEnabled: flag];
     }
 
     if (IS(self.styleBits, MINIMIZABLE)) {        
-        [[self standardWindowButton:NSWindowMiniaturizeButton] setEnabled: flag];
+        [[self.nsWindow standardWindowButton:NSWindowMiniaturizeButton] setEnabled: flag];
     }
 
     if (IS(self.styleBits, ZOOMABLE)) {
-        [[self standardWindowButton:NSWindowZoomButton] setEnabled: flag];
+        [[self.nsWindow standardWindowButton:NSWindowZoomButton] setEnabled: flag];
     }
 
     if (IS(self.styleBits, RESIZABLE)) {
         [self updateMinMaxSize:flag];
-        [self setShowsResizeIndicator:flag];
+        [self.nsWindow setShowsResizeIndicator:flag];
     }
 }
 
 @end // AWTWindow
 

@@ -632,11 +698,11 @@
         [window release]; // GC
     }];
 
 JNF_COCOA_EXIT(env);
 
-    return ptr_to_jlong(window);
+    return ptr_to_jlong(window ? window.nsWindow : nil);
 }
 
 /*
  * Class:     sun_lwawt_macosx_CPlatformWindow
  * Method:    nativeSetNSWindowStyleBits

@@ -646,21 +712,23 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr, jint mask, jint bits)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
+        AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+
         // scans the bit field, and only updates the values requested by the mask
         // (this implicity handles the _CALLBACK_PROP_BITMASK case, since those are passive reads)
         jint newBits = window.styleBits & ~mask | bits & mask;
 
         // resets the NSWindow's style mask if the mask intersects any of those bits
         if (mask & MASK(_STYLE_PROP_BITMASK)) {
-            [window setStyleMask:[AWTWindow styleMaskForStyleBits:newBits]];
+            [nsWindow setStyleMask:[AWTWindow styleMaskForStyleBits:newBits]];
         }
 
         // calls methods on NSWindow to change other properties, based on the mask
         if (mask & MASK(_METHOD_PROP_BITMASK)) {
             [window setPropertiesForStyleBits:bits mask:mask];

@@ -681,16 +749,18 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr, jlong menuBarPtr)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     CMenuBar *menuBar = OBJC(menuBarPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        if ([window isKeyWindow]) [window.javaMenuBar deactivate];
+        AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+
+        if ([nsWindow isKeyWindow]) [window.javaMenuBar deactivate];
         window.javaMenuBar = menuBar;
 
         // if ([self isKeyWindow]) {
         [CMenuBar activate:window.javaMenuBar modallyDisabled:NO];
         // }

@@ -710,19 +780,19 @@
     jobject ret = NULL;
 
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     __block NSRect contentRect = NSZeroRect;
     __block NSRect frame = NSZeroRect;
 
     [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        frame = [window frame];
-        contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[window styleMask]];
+        frame = [nsWindow frame];
+        contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[nsWindow styleMask]];
     }];
 
     jint top = (jint)(frame.size.height - contentRect.size.height);
     jint left = (jint)(contentRect.origin.x - frame.origin.x);
     jint bottom = (jint)(contentRect.origin.y - frame.origin.y);

@@ -748,23 +818,25 @@
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
     NSRect jrect = NSMakeRect(originX, originY, width, height);
 
     // TODO: not sure we need displayIfNeeded message in our view
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
+        AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+
         NSRect rect = ConvertNSScreenRect(NULL, jrect);
         [window constrainSize:&rect.size];
 
-        [window setFrame:rect display:YES];
+        [nsWindow setFrame:rect display:YES];
 
         // only start tracking events if pointer is above the toplevel
         // TODO: should post an Entered event if YES.
         NSPoint mLocation = [NSEvent mouseLocation];
-        [window setAcceptsMouseMovedEvents:NSPointInRect(mLocation, rect)];
+        [nsWindow setAcceptsMouseMovedEvents:NSPointInRect(mLocation, rect)];
 
         // ensure we repaint the whole window after the resize operation
         // (this will also re-enable screen updates, which were disabled above)
         // TODO: send PaintEvent
     }];

@@ -786,14 +858,16 @@
     if (minW < 1) minW = 1;
     if (minH < 1) minH = 1;
     if (maxW < 1) maxW = 1;
     if (maxH < 1) maxH = 1;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
+        AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+
         NSSize min = { minW, minH };
         NSSize max = { maxW, maxH };
 
         [window constrainSize:&min];
         [window constrainSize:&max];

@@ -815,15 +889,15 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        [window orderBack:nil];
+        [nsWindow orderBack:nil];
     }];
 
 JNF_COCOA_EXIT(env);
 }
 

@@ -836,18 +910,18 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        if (![window isKeyWindow]) {
-            [window makeKeyAndOrderFront:window];
+        if (![nsWindow isKeyWindow]) {
+            [nsWindow makeKeyAndOrderFront:nsWindow];
         } else {
-            [window orderFront:window];
+            [nsWindow orderFront:nsWindow];
         }
     }];
 
 JNF_COCOA_EXIT(env);
 }

@@ -861,12 +935,12 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr, jstring jtitle)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
-    [window performSelectorOnMainThread:@selector(setTitle:)
+    NSWindow *nsWindow = OBJC(windowPtr);
+    [nsWindow performSelectorOnMainThread:@selector(setTitle:)
                               withObject:JNFJavaToNSString(env, jtitle)
                            waitUntilDone:NO];
 
 JNF_COCOA_EXIT(env);
 }

@@ -880,15 +954,16 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr, jfloat alpha)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        [window setAlphaValue:alpha];
+        AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+        [nsWindow setAlphaValue:alpha];
         [window.growBoxWindow setAlphaValue:alpha];
     }];
 
 JNF_COCOA_EXIT(env);
 }

@@ -902,15 +977,15 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        [window invalidateShadow];
+        [nsWindow invalidateShadow];
     }];
 
 JNF_COCOA_EXIT(env);
 }
 

@@ -925,12 +1000,12 @@
     jint ret = 0;
 
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
-    NSDictionary *props = [[window screen] deviceDescription];
+    NSWindow *nsWindow = OBJC(windowPtr);
+    NSDictionary *props = [[nsWindow screen] deviceDescription];
     ret = [[props objectForKey:@"NSScreenNumber"] intValue];
 
 JNF_COCOA_EXIT(env);
 
     return ret;

@@ -945,16 +1020,16 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr, jlong nsImagePtr)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     NSImage *image = OBJC(nsImagePtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        [window setMiniwindowImage:image];
+        [nsWindow setMiniwindowImage:image];
     }];
 
 JNF_COCOA_EXIT(env);
 }
 

@@ -967,16 +1042,16 @@
 (JNIEnv *env, jclass clazz, jlong windowPtr, jstring filename)
 {
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:JNFNormalizedNSStringForPath(env, filename)];
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
-        [window setRepresentedURL:url];
+        [nsWindow setRepresentedURL:url];
     }];
 
 JNF_COCOA_EXIT(env);
 }
 

@@ -1007,12 +1082,12 @@
     jint index = -1;
 
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_APPKIT_THREAD;
 
-    AWTWindow *window = OBJC(windowPtr);
-    NSScreen* screen = [window screen];
+    NSWindow *nsWindow = OBJC(windowPtr);
+    NSScreen* screen = [nsWindow screen];
 
     //+++gdb NOTE: This is using a linear search of the screens. If it should
     //  prove to be a bottleneck, this can definitely be improved. However,
     //  many screens should prove to be the exception, rather than the rule.
     NSArray* screens = [NSScreen screens];

@@ -1039,16 +1114,16 @@
 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow__1toggleFullScreenMode
 (JNIEnv *env, jobject peer, jlong windowPtr)
 {
 JNF_COCOA_ENTER(env);
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     SEL toggleFullScreenSelector = @selector(toggleFullScreen:);
-    if (![window respondsToSelector:toggleFullScreenSelector]) return;
+    if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return;
 
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
-        [window performSelector:toggleFullScreenSelector withObject:nil];
+        [nsWindow performSelector:toggleFullScreenSelector withObject:nil];
     }];
 
 JNF_COCOA_EXIT(env);
 }
 

@@ -1058,16 +1133,16 @@
     __block jboolean underMouse = JNI_FALSE;
 
 JNF_COCOA_ENTER(env);
 AWT_ASSERT_NOT_APPKIT_THREAD;
 
-    AWTWindow *aWindow = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^() {
         AWT_ASSERT_APPKIT_THREAD;
 
-        NSPoint pt = [aWindow mouseLocationOutsideOfEventStream];
-        underMouse = [[aWindow contentView] hitTest:pt] != nil;
+        NSPoint pt = [nsWindow mouseLocationOutsideOfEventStream];
+        underMouse = [[nsWindow contentView] hitTest:pt] != nil;
     }];
 
 JNF_COCOA_EXIT(env);
 
     return underMouse;

@@ -1076,12 +1151,14 @@
 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetEnabled
 (JNIEnv *env, jclass clazz, jlong windowPtr, jboolean isEnabled)
 {
 JNF_COCOA_ENTER(env);
 
-    AWTWindow *window = OBJC(windowPtr);
+    NSWindow *nsWindow = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
+        AWTWindow *window = (AWTWindow*)[nsWindow delegate];
+
         [window setEnabled: isEnabled];
     }];
 
 JNF_COCOA_EXIT(env);
 }