1 /*
   2  * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 #import "CWrapper.h"
  27 
  28 #import <JavaNativeFoundation/JavaNativeFoundation.h>
  29 
  30 #import "AWTWindow.h"
  31 #import "LWCToolkit.h"
  32 #import "GeomUtilities.h"
  33 #import "ThreadUtilities.h"
  34 
  35 #import "sun_lwawt_macosx_CWrapper_NSWindow.h"
  36 
  37 /*
  38  * Class:     sun_lwawt_macosx_CWrapper$NSObject
  39  * Method:    release
  40  * Signature: (J)V
  41  */
  42 JNIEXPORT void JNICALL
  43 Java_sun_lwawt_macosx_CWrapper_00024NSObject_release
  44 (JNIEnv *env, jclass cls, jlong objectPtr)
  45 {
  46 JNF_COCOA_ENTER(env);
  47 
  48     id obj = (id)jlong_to_ptr(objectPtr);
  49     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
  50         CFRelease(obj);
  51     }];
  52 
  53 JNF_COCOA_EXIT(env);
  54 }
  55 
  56 
  57 /*
  58  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
  59  * Method:    makeKeyAndOrderFront
  60  * Signature: (J)V
  61  */
  62 JNIEXPORT void JNICALL
  63 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyAndOrderFront
  64 (JNIEnv *env, jclass cls, jlong windowPtr)
  65 {
  66 JNF_COCOA_ENTER(env);
  67 
  68     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
  69     [ThreadUtilities performOnMainThread:@selector(makeKeyAndOrderFront:)
  70                                       on:window
  71                               withObject:nil
  72                            waitUntilDone:NO];
  73 
  74 JNF_COCOA_EXIT(env);
  75 }
  76 
  77 /*
  78  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
  79  * Method:    makeKeyWindow
  80  * Signature: (J)V
  81  */
  82 JNIEXPORT void JNICALL
  83 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow
  84 (JNIEnv *env, jclass cls, jlong windowPtr)
  85 {
  86 JNF_COCOA_ENTER(env);
  87 
  88     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
  89     [ThreadUtilities performOnMainThread:@selector(makeKeyWindow)
  90                                       on:window
  91                               withObject:nil
  92                            waitUntilDone:NO];
  93 
  94 JNF_COCOA_EXIT(env);
  95 }
  96 
  97 /*
  98  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
  99  * Method:    makeMainWindow
 100  * Signature: (J)V
 101  */
 102 JNIEXPORT void JNICALL
 103 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeMainWindow
 104 (JNIEnv *env, jclass cls, jlong windowPtr)
 105 {
 106 JNF_COCOA_ENTER(env);
 107 
 108     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 109     [ThreadUtilities performOnMainThread:@selector(makeMainWindow)
 110                                       on:window
 111                               withObject:nil
 112                            waitUntilDone:NO];
 113 
 114 JNF_COCOA_EXIT(env);
 115 }
 116 
 117 /*
 118  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 119  * Method:    canBecomeMainWindow
 120  * Signature: (J)V
 121  */
 122 JNIEXPORT jboolean JNICALL
 123 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_canBecomeMainWindow
 124 (JNIEnv *env, jclass cls, jlong windowPtr)
 125 {
 126     __block jboolean canBecomeMainWindow = JNI_FALSE;
 127 
 128 JNF_COCOA_ENTER(env);
 129 
 130     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 131     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 132         canBecomeMainWindow = [window canBecomeMainWindow];
 133     }];
 134 
 135 JNF_COCOA_EXIT(env);
 136 
 137     return canBecomeMainWindow;
 138 }
 139 
 140 /*
 141  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 142  * Method:    isKeyWindow
 143  * Signature: (J)Z
 144  */
 145 JNIEXPORT jboolean JNICALL
 146 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isKeyWindow
 147 (JNIEnv *env, jclass cls, jlong windowPtr)
 148 {
 149     __block jboolean isKeyWindow = JNI_FALSE;
 150 
 151 JNF_COCOA_ENTER(env);
 152 
 153     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 154     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 155         isKeyWindow = [window isKeyWindow];
 156     }];
 157 
 158 JNF_COCOA_EXIT(env);
 159 
 160     return isKeyWindow;
 161 }
 162 
 163 /*
 164  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 165  * Method:    orderFront
 166  * Signature: (J)V
 167  */
 168 JNIEXPORT void JNICALL
 169 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFront
 170 (JNIEnv *env, jclass cls, jlong windowPtr)
 171 {
 172 JNF_COCOA_ENTER(env);
 173 
 174     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 175     [ThreadUtilities performOnMainThread:@selector(orderFront:)
 176                                       on:window
 177                               withObject:window
 178                            waitUntilDone:NO];
 179 
 180 JNF_COCOA_EXIT(env);
 181 }
 182 
 183 /*
 184  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 185  * Method:    orderOut
 186  * Signature: (J)V
 187  */
 188 JNIEXPORT void JNICALL
 189 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderOut
 190 (JNIEnv *env, jclass cls, jlong windowPtr)
 191 {
 192 JNF_COCOA_ENTER(env);
 193 
 194     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 195     [ThreadUtilities performOnMainThread:@selector(orderOut:)
 196                                       on:window
 197                               withObject:window
 198                            waitUntilDone:NO];
 199 
 200 JNF_COCOA_EXIT(env);
 201 }
 202 
 203 /*
 204  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 205  * Method:    orderFrontRegardless
 206  * Signature: (J)V
 207  */
 208 JNIEXPORT void JNICALL
 209 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderFrontRegardless
 210 (JNIEnv *env, jclass cls, jlong windowPtr)
 211 {
 212 JNF_COCOA_ENTER(env);
 213 
 214     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 215     [ThreadUtilities performOnMainThread:@selector(orderFrontRegardless)
 216                                       on:window
 217                               withObject:nil
 218                            waitUntilDone:NO];
 219 
 220 JNF_COCOA_EXIT(env);
 221 }
 222 
 223 /*
 224  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 225  * Method:    orderWindow
 226  * Signature: (JIJ)V
 227  */
 228 JNIEXPORT void JNICALL
 229 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_orderWindow
 230 (JNIEnv *env, jclass cls, jlong windowPtr, jint order, jlong relativeToPtr)
 231 {
 232 JNF_COCOA_ENTER(env);
 233 
 234     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 235     NSWindow *relativeTo = (NSWindow *)jlong_to_ptr(relativeToPtr);
 236     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 237         [window orderWindow:(NSWindowOrderingMode)order relativeTo:[relativeTo windowNumber]];
 238     }];
 239 
 240 JNF_COCOA_EXIT(env);
 241 }
 242 
 243 // Used for CWrapper.NSWindow.setLevel() (and level() which isn't implemented yet)
 244 static NSInteger LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS];
 245 static void initLevels()
 246 {
 247     static dispatch_once_t pred;
 248 
 249     dispatch_once(&pred, ^{
 250         LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSNormalWindowLevel] = NSNormalWindowLevel;
 251         LEVELS[sun_lwawt_macosx_CWrapper_NSWindow_NSFloatingWindowLevel] = NSFloatingWindowLevel;
 252     });
 253 }
 254 
 255 /*
 256  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 257  * Method:    setLevel
 258  * Signature: (JI)V
 259  */
 260 JNIEXPORT void JNICALL
 261 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setLevel
 262 (JNIEnv *env, jclass cls, jlong windowPtr, jint level)
 263 {
 264 JNF_COCOA_ENTER(env);
 265 
 266     if (level >= 0 && level < sun_lwawt_macosx_CWrapper_NSWindow_MAX_WINDOW_LEVELS) {
 267         initLevels();
 268 
 269         NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 270         [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 271             [window setLevel: LEVELS[level]];
 272         }];
 273     } else {
 274         [JNFException raise:env as:kIllegalArgumentException reason:"unknown level"];
 275     }
 276 
 277 JNF_COCOA_EXIT(env);
 278 }
 279 
 280 /*
 281  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 282  * Method:    addChildWindow
 283  * Signature: (JJI)V
 284  */
 285 JNIEXPORT void JNICALL
 286 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_addChildWindow
 287 (JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr, jint order)
 288 {
 289 JNF_COCOA_ENTER(env);
 290 
 291     NSWindow *parent = (NSWindow *)jlong_to_ptr(parentPtr);
 292     NSWindow *child = (NSWindow *)jlong_to_ptr(childPtr);
 293     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 294         [parent addChildWindow:child ordered:order];
 295     }];
 296 
 297 JNF_COCOA_EXIT(env);
 298 }
 299 
 300 /*
 301  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 302  * Method:    removeChildWindow
 303  * Signature: (JJ)V
 304  */
 305 JNIEXPORT void JNICALL
 306 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_removeChildWindow
 307 (JNIEnv *env, jclass cls, jlong parentPtr, jlong childPtr)
 308 {
 309 JNF_COCOA_ENTER(env);
 310 
 311     AWTWindow *parent = (AWTWindow *)jlong_to_ptr(parentPtr);
 312     AWTWindow *child = (AWTWindow *)jlong_to_ptr(childPtr);
 313     [ThreadUtilities performOnMainThread:@selector(removeChildWindow:)
 314                                       on:parent
 315                               withObject:child
 316                            waitUntilDone:NO];
 317 
 318 JNF_COCOA_EXIT(env);
 319 }
 320 
 321 /*
 322  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 323  * Method:    setFrame
 324  * Signature: (JIIIIZ)V
 325  */
 326 JNIEXPORT void JNICALL
 327 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setFrame
 328 (JNIEnv *env, jclass cls, jlong windowPtr, jint x, jint y, jint w, jint h, jboolean display)
 329 {
 330 JNF_COCOA_ENTER(env);
 331 
 332     AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
 333     NSRect frame = NSMakeRect(x, y, w, h);
 334     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 335         [window setFrame:frame display:display];
 336     }];
 337 
 338 JNF_COCOA_EXIT(env);
 339 }
 340 
 341 /*
 342  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 343  * Method:    setAlphaValue
 344  * Signature: (JF)V
 345  */
 346 JNIEXPORT void JNICALL
 347 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setAlphaValue
 348 (JNIEnv *env, jclass cls, jlong windowPtr, jfloat alpha)
 349 {
 350 JNF_COCOA_ENTER(env);
 351 
 352     AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
 353     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 354         [window setAlphaValue:(CGFloat)alpha];
 355     }];
 356 
 357 JNF_COCOA_EXIT(env);
 358 }
 359 
 360 /*
 361  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 362  * Method:    setOpaque
 363  * Signature: (Z)V
 364  */
 365 JNIEXPORT void JNICALL
 366 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setOpaque
 367 (JNIEnv *env, jclass cls, jlong windowPtr, jboolean opaque)
 368 {
 369 JNF_COCOA_ENTER(env);
 370 
 371     AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
 372     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 373         [window setOpaque:(BOOL)opaque];
 374     }];
 375 
 376 JNF_COCOA_EXIT(env);
 377 }
 378 
 379 /*
 380  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 381  * Method:    setBackgroundColor
 382  * Signature: (J)V
 383  */
 384 JNIEXPORT void JNICALL
 385 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_setBackgroundColor
 386 (JNIEnv *env, jclass cls, jlong windowPtr, jlong colorPtr)
 387 {
 388 JNF_COCOA_ENTER(env);
 389 
 390     AWTWindow *window = (AWTWindow *)jlong_to_ptr(windowPtr);
 391     NSColor *color = (NSColor *)jlong_to_ptr(colorPtr);
 392     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 393         [window setBackgroundColor:color];
 394     }];
 395 
 396 JNF_COCOA_EXIT(env);
 397 }
 398 
 399 /*
 400  * Method:    miniaturize
 401  * Signature: (J)V
 402  */
 403 JNIEXPORT void JNICALL
 404 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_miniaturize
 405 (JNIEnv *env, jclass cls, jlong windowPtr)
 406 {
 407 JNF_COCOA_ENTER(env);
 408 
 409     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 410     [ThreadUtilities performOnMainThread:@selector(miniaturize:)
 411                                       on:window
 412                               withObject:nil
 413                            waitUntilDone:NO];
 414 
 415 JNF_COCOA_EXIT(env);
 416 }
 417 
 418 /*
 419  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 420  * Method:    deminiaturize
 421  * Signature: (J)V
 422  */
 423 JNIEXPORT void JNICALL
 424 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_deminiaturize
 425 (JNIEnv *env, jclass cls, jlong windowPtr)
 426 {
 427 JNF_COCOA_ENTER(env);
 428 
 429     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 430     [ThreadUtilities performOnMainThread:@selector(deminiaturize:)
 431                                       on:window
 432                               withObject:nil
 433                            waitUntilDone:NO];
 434 
 435 JNF_COCOA_EXIT(env);
 436 }
 437 
 438 /*
 439  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 440  * Method:    isZoomed
 441  * Signature: (J)Z
 442  */
 443 JNIEXPORT jboolean JNICALL
 444 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_isZoomed
 445 (JNIEnv *env, jclass cls, jlong windowPtr)
 446 {
 447     __block jboolean isZoomed = JNI_FALSE;
 448     
 449 JNF_COCOA_ENTER(env);
 450     
 451     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 452     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 453         isZoomed = [window isZoomed];
 454     }];
 455     
 456 JNF_COCOA_EXIT(env);
 457     
 458     return isZoomed;
 459 }
 460 
 461 /*
 462  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 463  * Method:    zoom
 464  * Signature: (J)V
 465  */
 466 JNIEXPORT void JNICALL
 467 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_zoom
 468 (JNIEnv *env, jclass cls, jlong windowPtr)
 469 {
 470 JNF_COCOA_ENTER(env);
 471 
 472     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 473     [ThreadUtilities performOnMainThread:@selector(zoom:)
 474                                       on:window
 475                               withObject:nil
 476                            waitUntilDone:NO];
 477 
 478 JNF_COCOA_EXIT(env);
 479 }
 480 
 481 /*
 482  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
 483  * Method:    makeFirstResponder
 484  * Signature: (JJ)V
 485  */
 486 JNIEXPORT void JNICALL
 487 Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeFirstResponder
 488 (JNIEnv *env, jclass cls, jlong windowPtr, jlong responderPtr)
 489 {
 490 JNF_COCOA_ENTER(env);
 491 
 492     NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
 493     NSResponder *responder = (NSResponder *)jlong_to_ptr(responderPtr);
 494     [ThreadUtilities performOnMainThread:@selector(makeFirstResponder:)
 495                                       on:window
 496                               withObject:responder
 497                            waitUntilDone:NO];
 498 
 499 JNF_COCOA_EXIT(env);
 500 }
 501 
 502 /*
 503  * Class:     sun_lwawt_macosx_CWrapper$NSView
 504  * Method:    addSubview
 505  * Signature: (JJ)V
 506  */
 507 JNIEXPORT void JNICALL
 508 Java_sun_lwawt_macosx_CWrapper_00024NSView_addSubview
 509 (JNIEnv *env, jclass cls, jlong viewPtr, jlong subviewPtr)
 510 {
 511 JNF_COCOA_ENTER(env);
 512 
 513     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 514     NSView *subview = (NSView *)jlong_to_ptr(subviewPtr);
 515     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 516         [view addSubview:subview];
 517     }];
 518 
 519 JNF_COCOA_EXIT(env);
 520 }
 521 
 522 /*
 523  * Class:     sun_lwawt_macosx_CWrapper$NSView
 524  * Method:    removeFromSuperview
 525  * Signature: (J)V
 526  */
 527 JNIEXPORT void JNICALL
 528 Java_sun_lwawt_macosx_CWrapper_00024NSView_removeFromSuperview
 529 (JNIEnv *env, jclass cls, jlong viewPtr)
 530 {
 531 JNF_COCOA_ENTER(env);
 532 
 533     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 534     [ThreadUtilities performOnMainThread:@selector(removeFromSuperview)
 535                                       on:view
 536                               withObject:nil
 537                            waitUntilDone:NO];
 538 
 539 JNF_COCOA_EXIT(env);
 540 }
 541 
 542 /*
 543  * Class:     sun_lwawt_macosx_CWrapper$NSView
 544  * Method:    setFrame
 545  * Signature: (JIIII)V
 546  */
 547 JNIEXPORT void JNICALL
 548 Java_sun_lwawt_macosx_CWrapper_00024NSView_setFrame
 549 (JNIEnv *env, jclass cls, jlong viewPtr, jint x, jint y, jint w, jint h)
 550 {
 551 JNF_COCOA_ENTER(env);
 552 
 553     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 554     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 555         [view setFrame:NSMakeRect(x, y, w, h)];
 556     }];
 557 
 558 JNF_COCOA_EXIT(env);
 559 }
 560 
 561 /*
 562  * Class:     sun_lwawt_macosx_CWrapper$NSView
 563  * Method:    frame
 564  * Signature: (J)Ljava/awt/Rectangle;
 565  */
 566 JNIEXPORT jobject JNICALL
 567 Java_sun_lwawt_macosx_CWrapper_00024NSView_frame
 568 (JNIEnv *env, jclass cls, jlong viewPtr)
 569 {
 570     jobject jRect = NULL;
 571 
 572 JNF_COCOA_ENTER(env);
 573 
 574     __block NSRect rect = NSZeroRect;
 575 
 576     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 577     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 578         rect = [view frame];
 579     }];
 580 
 581     jRect = NSToJavaRect(env, rect);
 582 
 583 JNF_COCOA_EXIT(env);
 584 
 585     return jRect;
 586 }
 587 
 588 /*
 589  * Class:     sun_lwawt_macosx_CWrapper$NSView
 590  * Method:    enterFullScreenMode
 591  * Signature: (J)V
 592  */
 593 JNIEXPORT void JNICALL
 594 Java_sun_lwawt_macosx_CWrapper_00024NSView_enterFullScreenMode
 595 (JNIEnv *env, jclass cls, jlong viewPtr)
 596 {
 597 JNF_COCOA_ENTER(env);
 598 
 599     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 600     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 601         NSScreen *screen = [[view window] screen];
 602         NSDictionary *opts = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], NSFullScreenModeAllScreens, nil];
 603         [view enterFullScreenMode:screen withOptions:opts];
 604     }];
 605 
 606 JNF_COCOA_EXIT(env);
 607 }
 608 
 609 /*
 610  * Class:     sun_lwawt_macosx_CWrapper$NSView
 611  * Method:    exitFullScreenMode
 612  * Signature: (J)V
 613  */
 614 JNIEXPORT void JNICALL
 615 Java_sun_lwawt_macosx_CWrapper_00024NSView_exitFullScreenMode
 616 (JNIEnv *env, jclass cls, jlong viewPtr)
 617 {
 618 JNF_COCOA_ENTER(env);
 619 
 620     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 621     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 622         [view exitFullScreenModeWithOptions:nil];
 623     }];
 624 
 625 JNF_COCOA_EXIT(env);
 626 }
 627 
 628 /*
 629  * Class:     sun_lwawt_macosx_CWrapper$NSView
 630  * Method:    window
 631  * Signature: (J)J
 632  */
 633 JNIEXPORT jlong JNICALL
 634 Java_sun_lwawt_macosx_CWrapper_00024NSView_window
 635 (JNIEnv *env, jclass cls, jlong viewPtr)
 636 {
 637     __block jlong windowPtr = 0L;
 638 
 639 JNF_COCOA_ENTER(env);
 640 
 641     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 642     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 643         windowPtr = ptr_to_jlong([view window]);
 644     }];
 645 
 646 JNF_COCOA_EXIT(env);
 647 
 648     return windowPtr;
 649 }
 650 
 651 /*
 652  * Class:     sun_lwawt_macosx_CWrapper$NSView
 653  * Method:    setHidden
 654  * Signature: (JZ)V
 655  */
 656 JNIEXPORT void JNICALL
 657 Java_sun_lwawt_macosx_CWrapper_00024NSView_setHidden
 658 (JNIEnv *env, jclass cls, jlong viewPtr, jboolean toHide)
 659 {    
 660     JNF_COCOA_ENTER(env);
 661     
 662     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 663     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 664         [view setHidden:(BOOL)toHide];
 665     }];
 666     
 667     JNF_COCOA_EXIT(env);
 668 }
 669 
 670 /*
 671  * Class:     sun_lwawt_macosx_CWrapper$NSView
 672  * Method:    setToolTip
 673  * Signature: (JLjava/lang/String;)V
 674  */
 675 JNIEXPORT void JNICALL
 676 Java_sun_lwawt_macosx_CWrapper_00024NSView_setToolTip
 677 (JNIEnv *env, jclass cls, jlong viewPtr, jstring msg)
 678 {
 679 
 680 JNF_COCOA_ENTER(env);
 681 
 682     NSView *view = (NSView *)jlong_to_ptr(viewPtr);
 683     NSString* s = JNFJavaToNSString(env, msg); 
 684     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 685         [view setToolTip: s];
 686     }];
 687 
 688 JNF_COCOA_EXIT(env);
 689 }
 690 
 691 /*
 692  * Class:     sun_lwawt_macosx_CWrapper$NSColor
 693  * Method:    clearColor
 694  * Signature: ()J
 695  */
 696 JNIEXPORT jlong JNICALL
 697 Java_sun_lwawt_macosx_CWrapper_00024NSColor_clearColor
 698 (JNIEnv *env, jclass cls)
 699 {
 700     __block jlong clearColorPtr = 0L;
 701 
 702 JNF_COCOA_ENTER(env);
 703 
 704     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 705         clearColorPtr = ptr_to_jlong([NSColor clearColor]);
 706     }];
 707 
 708 JNF_COCOA_EXIT(env);
 709 
 710     return clearColorPtr;
 711 }
 712