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

Print this page

        

*** 51,74 **** static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow"); @implementation AWTWindow @synthesize javaPlatformWindow; @synthesize javaMenuBar; @synthesize javaMinSize; @synthesize javaMaxSize; @synthesize styleBits; - (void) updateMinMaxSize:(BOOL)resizable { if (resizable) { ! [self setMinSize:self.javaMinSize]; ! [self setMaxSize:self.javaMaxSize]; } else { ! NSRect currentFrame = [self frame]; ! [self setMinSize:currentFrame.size]; ! [self setMaxSize:currentFrame.size]; } } // creates a new NSWindow style mask based on the _STYLE_PROP_BITMASK bits + (NSUInteger) styleMaskForStyleBits:(jint)styleBits { --- 51,75 ---- static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow"); @implementation AWTWindow + @synthesize nsWindow; @synthesize javaPlatformWindow; @synthesize javaMenuBar; @synthesize javaMinSize; @synthesize javaMaxSize; @synthesize styleBits; - (void) updateMinMaxSize:(BOOL)resizable { if (resizable) { ! [self.nsWindow setMinSize:self.javaMinSize]; ! [self.nsWindow setMaxSize:self.javaMaxSize]; } else { ! 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 {
*** 95,136 **** // 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]; } if (IS(mask, HAS_SHADOW)) { ! [self setHasShadow:IS(bits, HAS_SHADOW)]; } if (IS(mask, ZOOMABLE)) { ! [[self standardWindowButton:NSWindowZoomButton] setEnabled:IS(bits, ZOOMABLE)]; } if (IS(mask, ALWAYS_ON_TOP)) { ! [self setLevel:IS(bits, ALWAYS_ON_TOP) ? NSFloatingWindowLevel : NSNormalWindowLevel]; } if (IS(mask, HIDES_ON_DEACTIVATE)) { ! [self setHidesOnDeactivate:IS(bits, HIDES_ON_DEACTIVATE)]; } if (IS(mask, DRAGGABLE_BACKGROUND)) { ! [self setMovableByWindowBackground:IS(bits, DRAGGABLE_BACKGROUND)]; } if (IS(mask, DOCUMENT_MODIFIED)) { ! [self setDocumentEdited:IS(bits, DOCUMENT_MODIFIED)]; } ! if ([self respondsToSelector:@selector(toggleFullScreen:)]) { if (IS(mask, FULLSCREENABLE)) { ! [self setCollectionBehavior:(1 << 7) /*NSWindowCollectionBehaviorFullScreenPrimary*/]; } else { ! [self setCollectionBehavior:NSWindowCollectionBehaviorDefault]; } } } --- 96,137 ---- // 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.nsWindow setShowsResizeIndicator:resizable]; } if (IS(mask, HAS_SHADOW)) { ! [self.nsWindow setHasShadow:IS(bits, HAS_SHADOW)]; } if (IS(mask, ZOOMABLE)) { ! [[self.nsWindow standardWindowButton:NSWindowZoomButton] setEnabled:IS(bits, ZOOMABLE)]; } if (IS(mask, ALWAYS_ON_TOP)) { ! [self.nsWindow setLevel:IS(bits, ALWAYS_ON_TOP) ? NSFloatingWindowLevel : NSNormalWindowLevel]; } if (IS(mask, HIDES_ON_DEACTIVATE)) { ! [self.nsWindow setHidesOnDeactivate:IS(bits, HIDES_ON_DEACTIVATE)]; } if (IS(mask, DRAGGABLE_BACKGROUND)) { ! [self.nsWindow setMovableByWindowBackground:IS(bits, DRAGGABLE_BACKGROUND)]; } if (IS(mask, DOCUMENT_MODIFIED)) { ! [self.nsWindow setDocumentEdited:IS(bits, DOCUMENT_MODIFIED)]; } ! if ([self.nsWindow respondsToSelector:@selector(toggleFullScreen:)]) { if (IS(mask, FULLSCREENABLE)) { ! [self.nsWindow setCollectionBehavior:(1 << 7) /*NSWindowCollectionBehaviorFullScreenPrimary*/]; } else { ! [self.nsWindow setCollectionBehavior:NSWindowCollectionBehaviorDefault]; } } }
*** 148,183 **** } if (contentRect.size.height <= 0.0) { contentRect.size.height = 1.0; } ! self = [super initWithContentRect:contentRect ! styleMask:styleMask ! backing:NSBackingStoreBuffered ! defer:NO]; if (self == nil) return nil; // no hope 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]; - return self; } - (void) dealloc { AWT_ASSERT_APPKIT_THREAD; JNIEnv *env = [ThreadUtilities getJNIEnv]; [self.javaPlatformWindow setJObject:nil withEnv:env]; [super dealloc]; } // NSWindow overrides --- 149,198 ---- } if (contentRect.size.height <= 0.0) { contentRect.size.height = 1.0; } ! 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.javaPlatformWindow = platformWindow; self.styleBits = bits; [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)]; return self; } - (void) dealloc { AWT_ASSERT_APPKIT_THREAD; JNIEnv *env = [ThreadUtilities getJNIEnv]; [self.javaPlatformWindow setJObject:nil withEnv:env]; + self.nsWindow = nil; + [super dealloc]; } // NSWindow overrides
*** 208,218 **** 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; // 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); --- 223,233 ---- 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.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);
*** 271,281 **** jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env]; if (platformWindow == NULL) { // TODO: create generic AWT assert } ! NSRect frame = ConvertNSScreenRect(env, [self 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, --- 286,296 ---- jobject platformWindow = [self.javaPlatformWindow jObjectWithEnv:env]; if (platformWindow == NULL) { // TODO: create generic AWT assert } ! 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,
*** 461,491 **** - (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]; // 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]]; 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); --- 476,505 ---- - (void)sendEvent:(NSEvent *)event { if ([event type] == NSLeftMouseDown || [event type] == NSRightMouseDown || [event type] == NSOtherMouseDown) { NSPoint p = [NSEvent mouseLocation]; ! 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); } } } - (void)constrainSize:(NSSize*)size { float minWidth = 0.f, minHeight = 0.f; if (IS(self.styleBits, DECORATED)) { ! 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);
*** 534,544 **** [window release]; // GC }]; JNF_COCOA_EXIT(env); ! return ptr_to_jlong(window); } /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativeSetNSWindowStyleBits --- 548,558 ---- [window release]; // GC }]; JNF_COCOA_EXIT(env); ! return ptr_to_jlong(window ? window.nsWindow : nil); } /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativeSetNSWindowStyleBits
*** 548,568 **** (JNIEnv *env, jclass clazz, jlong windowPtr, jint mask, jint bits) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; // 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]]; } // calls methods on NSWindow to change other properties, based on the mask if (mask & MASK(_METHOD_PROP_BITMASK)) { [window setPropertiesForStyleBits:bits mask:mask]; --- 562,584 ---- (JNIEnv *env, jclass clazz, jlong windowPtr, jint mask, jint bits) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! 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)) { ! [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];
*** 583,598 **** (JNIEnv *env, jclass clazz, jlong windowPtr, jlong menuBarPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); CMenuBar *menuBar = OBJC(menuBarPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! if ([window isKeyWindow]) [window.javaMenuBar deactivate]; window.javaMenuBar = menuBar; // if ([self isKeyWindow]) { [CMenuBar activate:window.javaMenuBar modallyDisabled:NO]; // } --- 599,616 ---- (JNIEnv *env, jclass clazz, jlong windowPtr, jlong menuBarPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); CMenuBar *menuBar = OBJC(menuBarPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! AWTWindow *window = (AWTWindow*)[nsWindow delegate]; ! ! if ([nsWindow isKeyWindow]) [window.javaMenuBar deactivate]; window.javaMenuBar = menuBar; // if ([self isKeyWindow]) { [CMenuBar activate:window.javaMenuBar modallyDisabled:NO]; // }
*** 612,630 **** jobject ret = NULL; JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = 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]]; }]; 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); --- 630,648 ---- jobject ret = NULL; JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); __block NSRect contentRect = NSZeroRect; __block NSRect frame = NSZeroRect; [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! 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);
*** 650,672 **** 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); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; NSRect rect = ConvertNSScreenRect(NULL, jrect); [window constrainSize:&rect.size]; ! [window 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)]; // ensure we repaint the whole window after the resize operation // (this will also re-enable screen updates, which were disabled above) // TODO: send PaintEvent }]; --- 668,692 ---- AWT_ASSERT_NOT_APPKIT_THREAD; NSRect jrect = NSMakeRect(originX, originY, width, height); // TODO: not sure we need displayIfNeeded message in our view ! 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]; ! [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]; ! [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 }];
*** 688,701 **** if (minW < 1) minW = 1; if (minH < 1) minH = 1; if (maxW < 1) maxW = 1; if (maxH < 1) maxH = 1; ! AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; NSSize min = { minW, minH }; NSSize max = { maxW, maxH }; [window constrainSize:&min]; [window constrainSize:&max]; --- 708,723 ---- if (minW < 1) minW = 1; if (minH < 1) minH = 1; if (maxW < 1) maxW = 1; if (maxH < 1) maxH = 1; ! 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];
*** 717,731 **** (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [window orderBack:nil]; }]; JNF_COCOA_EXIT(env); } --- 739,753 ---- (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [nsWindow orderBack:nil]; }]; JNF_COCOA_EXIT(env); }
*** 738,755 **** (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! if (![window isKeyWindow]) { ! [window makeKeyAndOrderFront:window]; } else { ! [window orderFront:window]; } }]; JNF_COCOA_EXIT(env); } --- 760,777 ---- (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! if (![nsWindow isKeyWindow]) { ! [nsWindow makeKeyAndOrderFront:nsWindow]; } else { ! [nsWindow orderFront:nsWindow]; } }]; JNF_COCOA_EXIT(env); }
*** 763,774 **** (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:) withObject:JNFJavaToNSString(env, jtitle) waitUntilDone:NO]; JNF_COCOA_EXIT(env); } --- 785,796 ---- (JNIEnv *env, jclass clazz, jlong windowPtr, jstring jtitle) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); ! [nsWindow performSelectorOnMainThread:@selector(setTitle:) withObject:JNFJavaToNSString(env, jtitle) waitUntilDone:NO]; JNF_COCOA_EXIT(env); }
*** 782,796 **** (JNIEnv *env, jclass clazz, jlong windowPtr, jfloat alpha) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [window setAlphaValue:alpha]; }]; JNF_COCOA_EXIT(env); } --- 804,818 ---- (JNIEnv *env, jclass clazz, jlong windowPtr, jfloat alpha) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [nsWindow setAlphaValue:alpha]; }]; JNF_COCOA_EXIT(env); }
*** 803,817 **** (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [window invalidateShadow]; }]; JNF_COCOA_EXIT(env); } --- 825,839 ---- (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [nsWindow invalidateShadow]; }]; JNF_COCOA_EXIT(env); }
*** 826,837 **** jint ret = 0; JNF_COCOA_ENTER(env); AWT_ASSERT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); ! NSDictionary *props = [[window screen] deviceDescription]; ret = [[props objectForKey:@"NSScreenNumber"] intValue]; JNF_COCOA_EXIT(env); return ret; --- 848,859 ---- jint ret = 0; JNF_COCOA_ENTER(env); AWT_ASSERT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); ! NSDictionary *props = [[nsWindow screen] deviceDescription]; ret = [[props objectForKey:@"NSScreenNumber"] intValue]; JNF_COCOA_EXIT(env); return ret;
*** 846,861 **** (JNIEnv *env, jclass clazz, jlong windowPtr, jlong nsImagePtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); NSImage *image = OBJC(nsImagePtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [window setMiniwindowImage:image]; }]; JNF_COCOA_EXIT(env); } --- 868,883 ---- (JNIEnv *env, jclass clazz, jlong windowPtr, jlong nsImagePtr) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); NSImage *image = OBJC(nsImagePtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [nsWindow setMiniwindowImage:image]; }]; JNF_COCOA_EXIT(env); }
*** 868,883 **** (JNIEnv *env, jclass clazz, jlong windowPtr, jstring filename) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:JNFNormalizedNSStringForPath(env, filename)]; [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [window setRepresentedURL:url]; }]; JNF_COCOA_EXIT(env); } --- 890,905 ---- (JNIEnv *env, jclass clazz, jlong windowPtr, jstring filename) { JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); NSURL *url = (filename == NULL) ? nil : [NSURL fileURLWithPath:JNFNormalizedNSStringForPath(env, filename)]; [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; ! [nsWindow setRepresentedURL:url]; }]; JNF_COCOA_EXIT(env); }
*** 908,919 **** jint index = -1; JNF_COCOA_ENTER(env); AWT_ASSERT_APPKIT_THREAD; ! AWTWindow *window = OBJC(windowPtr); ! NSScreen* screen = [window 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]; --- 930,941 ---- jint index = -1; JNF_COCOA_ENTER(env); AWT_ASSERT_APPKIT_THREAD; ! 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];
*** 940,955 **** JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow__1toggleFullScreenMode (JNIEnv *env, jobject peer, jlong windowPtr) { JNF_COCOA_ENTER(env); ! AWTWindow *window = OBJC(windowPtr); SEL toggleFullScreenSelector = @selector(toggleFullScreen:); ! if (![window respondsToSelector:toggleFullScreenSelector]) return; [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ ! [window performSelector:toggleFullScreenSelector withObject:nil]; }]; JNF_COCOA_EXIT(env); } --- 962,977 ---- JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow__1toggleFullScreenMode (JNIEnv *env, jobject peer, jlong windowPtr) { JNF_COCOA_ENTER(env); ! NSWindow *nsWindow = OBJC(windowPtr); SEL toggleFullScreenSelector = @selector(toggleFullScreen:); ! if (![nsWindow respondsToSelector:toggleFullScreenSelector]) return; [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ ! [nsWindow performSelector:toggleFullScreenSelector withObject:nil]; }]; JNF_COCOA_EXIT(env); }
*** 959,974 **** __block jboolean underMouse = JNI_FALSE; JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! AWTWindow *aWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^() { AWT_ASSERT_APPKIT_THREAD; ! NSPoint pt = [aWindow mouseLocationOutsideOfEventStream]; ! underMouse = [[aWindow contentView] hitTest:pt] != nil; }]; JNF_COCOA_EXIT(env); return underMouse; --- 981,996 ---- __block jboolean underMouse = JNI_FALSE; JNF_COCOA_ENTER(env); AWT_ASSERT_NOT_APPKIT_THREAD; ! NSWindow *nsWindow = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^() { AWT_ASSERT_APPKIT_THREAD; ! NSPoint pt = [nsWindow mouseLocationOutsideOfEventStream]; ! underMouse = [[nsWindow contentView] hitTest:pt] != nil; }]; JNF_COCOA_EXIT(env); return underMouse;