1 /*
2 * Copyright (c) 2002, 2017, 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 #include "sun_awt_X11_XlibWrapper.h"
27 #include <X11/Xlib.h>
28 #include <X11/keysym.h>
29 #include <X11/Xutil.h>
30 #include <X11/Xos.h>
31 #include <X11/Xatom.h>
32 #include <X11/extensions/Xdbe.h>
33 #include <X11/extensions/shape.h>
34 #include <string.h>
35 #include <stdlib.h>
36 #include <X11/Sunkeysym.h>
37
38 #include <jni.h>
39 #include <jni_util.h>
40 #include <jlong.h>
41 #include <sizecalc.h>
42
43 #include <awt.h>
44 #include <awt_util.h>
45 #include <jvm.h>
46
47 #include <Region.h>
48 #include "utility/rect.h"
49
50 #include <X11/XKBlib.h>
51
52 // From XWindow.c
53 extern KeySym keycodeToKeysym(Display *display, KeyCode keycode, int index);
54
55 #if defined(DEBUG)
56 static jmethodID lockIsHeldMID = NULL;
57
58 static void
59 CheckHaveAWTLock(JNIEnv *env)
60 {
61 if (lockIsHeldMID == NULL) {
62 if (tkClass == NULL) return;
63 lockIsHeldMID =
64 (*env)->GetStaticMethodID(env, tkClass,
65 "isAWTLockHeldByCurrentThread", "()Z");
66 if (lockIsHeldMID == NULL) return;
67 }
68 if (!(*env)->CallStaticBooleanMethod(env, tkClass, lockIsHeldMID)) {
69 JNU_ThrowInternalError(env, "Current thread does not hold AWT_LOCK!");
70 }
271 * Class: sun_awt_X11_XlibWrapper
272 * Method: RootWindow
273 * Signature: (JJ)J
274 */
275 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_RootWindow
276 (JNIEnv *env , jclass clazz, jlong display, jlong screen_number) {
277 AWT_CHECK_HAVE_LOCK_RETURN(0);
278 return (jlong) RootWindow((Display *) jlong_to_ptr(display), screen_number);
279 }
280
281 /*
282 * Class: sun_awt_X11_XlibWrapper
283 * Method: ScreenCount
284 */
285 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_ScreenCount
286 (JNIEnv *env , jclass clazz, jlong display) {
287 AWT_CHECK_HAVE_LOCK_RETURN(0);
288 return ScreenCount((Display *) jlong_to_ptr(display));
289 }
290
291
292 /*
293 * Class: XlibWrapper
294 * Method: XCreateWindow
295 * Signature: (JJIIIIIIJJJJ)J
296 */
297 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateWindow
298 (JNIEnv *env, jclass clazz, jlong display, jlong window,
299 jint x, jint y, jint w, jint h , jint border_width, jint depth,
300 jlong wclass, jlong visual, jlong valuemask, jlong attributes)
301 {
302 AWT_CHECK_HAVE_LOCK_RETURN(0);
303 return XCreateWindow((Display *) jlong_to_ptr(display),(Window) window, x, y, w, h,
304 border_width, depth, wclass, (Visual *) jlong_to_ptr(visual),
305 valuemask, (XSetWindowAttributes *) jlong_to_ptr(attributes));
306
307 }
308
309 /*
310 * Class: XlibWrapper
311 * Method: XConvertCase
312 * Signature: (JJJ)V
313 */
314 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConvertCase
315 (JNIEnv *env, jclass clazz, jlong keysym,
316 jlong keysym_lowercase, jlong keysym_uppercase)
317 {
318 AWT_CHECK_HAVE_LOCK();
319 XConvertCase(keysym, (jlong_to_ptr(keysym_lowercase)),
320 (jlong_to_ptr(keysym_uppercase)));
321 }
322
323
324 /*
325 * Class: XlibWrapper
326 * Method: XMapWindow
327 * Signature: (JJ)V
328 */
329 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMapWindow
330 (JNIEnv *env, jclass clazz, jlong display, jlong window)
331 {
332 AWT_CHECK_HAVE_LOCK();
333 XMapWindow( (Display *)jlong_to_ptr(display),(Window) window);
334
335 }
336
337 /*
338 * Class: XlibWrapper
339 * Method: XMapRaised
340 * Signature: (JJ)V
341 */
342 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMapRaised
343 (JNIEnv *env, jclass clazz, jlong display, jlong window)
344 {
345 AWT_CHECK_HAVE_LOCK();
346 XMapRaised( (Display *)jlong_to_ptr(display),(Window) window);
347
348 }
349
350 /*
351 * Class: XlibWrapper
352 * Method: XRaiseWindow
353 * Signature: (JJ)V
354 */
355 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRaiseWindow
356 (JNIEnv *env, jclass clazz, jlong display, jlong window)
357 {
358
359 AWT_CHECK_HAVE_LOCK();
360 XRaiseWindow( (Display *)jlong_to_ptr(display),(Window) window);
361
362 }
363
364 /*
365 * Class: XlibWrapper
366 * Method: XLowerWindow
367 * Signature: (JJ)V
368 */
369 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XLowerWindow
370 (JNIEnv *env, jclass clazz, jlong display, jlong window)
371 {
372
373 AWT_CHECK_HAVE_LOCK();
374 XLowerWindow( (Display *)jlong_to_ptr(display),(Window) window);
375
376 }
377
378 /*
379 * Class: XlibWrapper
380 * Method: XRestackWindows
381 * Signature: (JJI)V
382 */
383 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRestackWindows
384 (JNIEnv *env, jclass clazz, jlong display, jlong windows, jint length)
385 {
386
387 AWT_CHECK_HAVE_LOCK();
388 XRestackWindows( (Display *) jlong_to_ptr(display), (Window *) jlong_to_ptr(windows), length);
389
390 }
391
392 /*
393 * Class: XlibWrapper
394 * Method: XConfigureWindow
395 * Signature: (JJJJ)V
396 */
397 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConfigureWindow
398 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong value_mask,
399 jlong values)
400 {
401 AWT_CHECK_HAVE_LOCK();
402 XConfigureWindow((Display*)jlong_to_ptr(display), (Window)window,
403 (unsigned int)value_mask, (XWindowChanges*)jlong_to_ptr(values));
404 }
405
406 /*
407 * Class: XlibWrapper
408 * Method: XSetInputFocus
409 * Signature: (JJ)V
410 */
411 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus
412 (JNIEnv *env, jclass clazz, jlong display, jlong window)
413 {
414
415 AWT_CHECK_HAVE_LOCK();
416 XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, CurrentTime);
417
418 }
419 /*
420 * Class: XlibWrapper
421 * Method: XSetInputFocus2
422 * Signature: (JJJ)V
423 */
424 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus2
425 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong time)
426 {
427
428 AWT_CHECK_HAVE_LOCK();
429 XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, time);
430
431 }
432
433 /*
434 * Class: XlibWrapper
435 * Method: XGetInputFocus
436 * Signature: (JJ)V
437 */
438 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetInputFocus
439 (JNIEnv *env, jclass clazz, jlong display)
440 {
441
442 Window focusOwner;
443 int revert_to;
444 AWT_CHECK_HAVE_LOCK_RETURN(0);
445 XGetInputFocus( (Display *)jlong_to_ptr(display), &focusOwner, &revert_to);
446 return focusOwner;
447 }
448
449
450 /*
451 * Class: XlibWrapper
452 * Method: XDestroyWindow
453 * Signature: (JJ)V
454 */
455 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XDestroyWindow
456 (JNIEnv *env, jclass clazz, jlong display, jlong window)
457 {
458 AWT_CHECK_HAVE_LOCK();
459 XDestroyWindow( (Display *)jlong_to_ptr(display),(Window) window);
460 }
461
462 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabPointer
463 (JNIEnv *env, jclass clazz, jlong display, jlong window,
464 jint owner_events, jint event_mask, jint pointer_mode,
465 jint keyboard_mode, jlong confine_to, jlong cursor, jlong time)
466 {
467 AWT_CHECK_HAVE_LOCK_RETURN(0);
468 return XGrabPointer( (Display *)jlong_to_ptr(display), (Window) window,
469 (Bool) owner_events, (unsigned int) event_mask, (int) pointer_mode,
508 AWT_CHECK_HAVE_LOCK();
509 XUngrabServer((Display*)jlong_to_ptr(display));
510 /* Workaround for bug 5039226 */
511 XSync((Display*)jlong_to_ptr(display), False);
512 }
513
514 /*
515 * Class: XlibWrapper
516 * Method: XUnmapWindow
517 * Signature: (JJ)V
518 */
519 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XUnmapWindow
520 (JNIEnv *env, jclass clazz, jlong display, jlong window)
521 {
522
523 AWT_CHECK_HAVE_LOCK();
524 XUnmapWindow( (Display *)jlong_to_ptr(display),(Window) window);
525
526 }
527
528
529
530 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSelectInput
531 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong mask)
532 {
533 AWT_CHECK_HAVE_LOCK();
534 XSelectInput((Display *) jlong_to_ptr(display), (Window) window, mask);
535 }
536
537 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEvents
538 (JNIEnv *env, jclass clazz, jlong display, jlong device, jlong bits_to_change,
539 jlong values_for_bits)
540 {
541 AWT_CHECK_HAVE_LOCK();
542 XkbSelectEvents((Display *) jlong_to_ptr(display), (unsigned int)device,
543 (unsigned long)bits_to_change,
544 (unsigned long)values_for_bits);
545 }
546 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails
547 (JNIEnv *env, jclass clazz, jlong display, jlong device, jlong event_type,
548 jlong bits_to_change, jlong values_for_bits)
549 {
550 AWT_CHECK_HAVE_LOCK();
551 XkbSelectEventDetails((Display *) jlong_to_ptr(display), (unsigned int)device,
552 (unsigned int) event_type,
553 (unsigned long)bits_to_change,
554 (unsigned long)values_for_bits);
555 }
556 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension
557 (JNIEnv *env, jclass clazz, jlong display, jlong opcode_rtrn, jlong event_rtrn,
558 jlong error_rtrn, jlong major_in_out, jlong minor_in_out)
559 {
560 Bool status;
561 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
562 status = XkbQueryExtension((Display *) jlong_to_ptr(display),
563 (int *) jlong_to_ptr(opcode_rtrn),
564 (int *) jlong_to_ptr(event_rtrn),
565 (int *) jlong_to_ptr(error_rtrn),
566 (int *) jlong_to_ptr(major_in_out),
567 (int *) jlong_to_ptr(minor_in_out));
568 return status ? JNI_TRUE : JNI_FALSE;
569 }
570 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
571 (JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out)
572 {
573 Bool status;
574 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
575 *((int *)jlong_to_ptr(lib_major_in_out)) = XkbMajorVersion;
576 *((int *)jlong_to_ptr(lib_minor_in_out)) = XkbMinorVersion;
577 status = XkbLibraryVersion((int *)jlong_to_ptr(lib_major_in_out),
578 (int *)jlong_to_ptr(lib_minor_in_out));
579 return status ? JNI_TRUE : JNI_FALSE;
580 }
581
582 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap
583 (JNIEnv *env, jclass clazz, jlong display, jlong which, jlong device_spec)
584 {
585 AWT_CHECK_HAVE_LOCK_RETURN(0);
586 return (jlong) XkbGetMap( (Display *) jlong_to_ptr(display),
587 (unsigned int) which,
588 (unsigned int) device_spec);
589 }
590 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap
591 (JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb)
592 {
593 AWT_CHECK_HAVE_LOCK_RETURN(0);
594 return (jlong) XkbGetUpdatedMap( (Display *) jlong_to_ptr(display),
595 (unsigned int) which,
596 (XkbDescPtr) jlong_to_ptr(xkb));
597 }
598 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard
599 (JNIEnv *env, jclass clazz, jlong xkb, jlong which, jboolean free_all)
600 {
601 AWT_CHECK_HAVE_LOCK();
602 XkbFreeKeyboard(jlong_to_ptr(xkb), (unsigned int)which, free_all);
603 }
604 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode
605 (JNIEnv *env, jclass clazz, jlong xkb, jint keycode, jlong mods, jlong mods_rtrn, jlong keysym_rtrn)
606 {
607 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
608 Bool b;
609 b = XkbTranslateKeyCode((XkbDescPtr)xkb, (unsigned int)keycode, (unsigned int)mods,
610 (unsigned int *)jlong_to_ptr(mods_rtrn),
611 (KeySym *)jlong_to_ptr(keysym_rtrn));
612 //printf("native, input: keycode:0x%0X; mods:0x%0X\n", keycode, mods);
613 //printf("native, output: keysym:0x%0X; mods:0x%0X\n",
614 // *(unsigned int *)jlong_to_ptr(keysym_rtrn),
615 // *(unsigned int *)jlong_to_ptr(mods_rtrn));
616 return b ? JNI_TRUE : JNI_FALSE;
617 }
618 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSetDetectableAutoRepeat
619 (JNIEnv *env, jclass clazz, jlong display, jboolean detectable)
620 {
621 AWT_CHECK_HAVE_LOCK();
622 XkbSetDetectableAutoRepeat((Display *) jlong_to_ptr(display), detectable, NULL);
623 }
624 /*
625 * Class: sun_awt_X11_XlibWrapper
626 * Method: XNextEvent
627 * Signature: (JJ)V
628 */
629
630
631 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XNextEvent
632 (JNIEnv *env, jclass clazz, jlong display, jlong ptr)
633 {
634 AWT_CHECK_HAVE_LOCK();
635 XNextEvent( (Display *) jlong_to_ptr(display), jlong_to_ptr(ptr));
636 }
637
638 /*
639 * Class: sun_awt_X11_XlibWrapper
640 * Method: XMaskEvent
641 * Signature: (JJJ)V
642 */
643
644 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMaskEvent
645 (JNIEnv *env, jclass clazz, jlong display, jlong event_mask, jlong event_return)
646 {
647 AWT_CHECK_HAVE_LOCK();
648 XMaskEvent( (Display *) jlong_to_ptr(display), event_mask, (XEvent *) jlong_to_ptr(event_return));
649 }
650
651 /*
652 * Class: sun_awt_X11_XlibWrapper
653 * Method: XWindowEvent
654 * Signature: (JJJJ)V
655 */
656
657 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XWindowEvent
658 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong event_mask, jlong event_return)
659 {
660 AWT_CHECK_HAVE_LOCK();
661 XWindowEvent( (Display *) jlong_to_ptr(display), (Window)window, event_mask, (XEvent *) jlong_to_ptr(event_return));
662 }
663
664 /*
665 * Class: sun_awt_X11_XlibWrapper
666 * Method: XFilterEvent
667 * Signature: (JJ)Z
668 */
669 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent
670 (JNIEnv *env, jclass clazz, jlong ptr, jlong window)
671 {
672 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
673 return (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
674 }
675
676 /*
677 * Class: sun_awt_X11_XlibWrapper
678 * Method: XSupportsLocale
679 * Signature: ()Z
680 */
681 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XSupportsLocale
682 (JNIEnv *env, jclass clazz)
683 {
684 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
685 return (jboolean)XSupportsLocale();
686 }
687
688 /*
689 * Class: sun_awt_X11_XlibWrapper
690 * Method: XSetLocaleModifiers
691 * Signature: (Ljava/lang/String;)Ljava/lang/String;
692 */
710 }
711
712 return (ret != NULL ? JNU_NewStringPlatform(env, ret): NULL);
713 }
714
715
716 /*
717 * Class: sun_awt_X11_wrappers_XlibWrapper
718 * Method: XPeekEvent
719 * Signature: (JJ)V
720 */
721
722
723 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XPeekEvent
724 (JNIEnv *env, jclass clazz, jlong display, jlong ptr)
725 {
726 AWT_CHECK_HAVE_LOCK();
727 XPeekEvent((Display *) jlong_to_ptr(display),jlong_to_ptr(ptr));
728 }
729
730
731 /*
732 * Class: sun_awt_X11_XlibWrapper
733 * Method: XMoveResizeWindow
734 * Signature: (JJIIII)V
735 */
736
737 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMoveResizeWindow
738 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint x , jint y , jint width, jint height) {
739
740 AWT_CHECK_HAVE_LOCK();
741 XMoveResizeWindow( (Display *) jlong_to_ptr(display), (Window) window, x, y, width, height);
742
743 }
744
745 /*
746 * Class: sun_awt_X11_XlibWrapper
747 * Method: XResizeWindow
748 * Signature: (JJII)V
749 */
750
751 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XResizeWindow
752 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height)
753 {
754 AWT_CHECK_HAVE_LOCK();
755 XResizeWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
756 }
757
758 /*
759 * Class: sun_awt_X11_XlibWrapper
760 * Method: XMoveWindow
761 * Signature: (JJII)V
762 */
763
764 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMoveWindow
765 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height)
766 {
767 AWT_CHECK_HAVE_LOCK();
768 XMoveWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
769 }
770
771
772 /*
773 * Class: sun_awt_X11_XlibWrapper
774 * Method: XSetWindowBackground
775 * Signature: (JJJ)V
776 */
777
778 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetWindowBackground
779 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong background_pixel) {
780
781 AWT_CHECK_HAVE_LOCK();
782 XSetWindowBackground((Display *) jlong_to_ptr(display),window,background_pixel);
783
784 }
785
786
787 /*
788 * Class: sun_awt_X11_XlibWrapper
789 * Method: XFlush
790 * Signature: (J)V
791 */
792 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFlush
793 (JNIEnv *env, jclass clazz, jlong display) {
794
795 AWT_CHECK_HAVE_LOCK();
796 XFlush((Display *)jlong_to_ptr(display));
797 }
798
799 /*
800 * Class: sun_awt_X11_XlibWrapper
801 * Method: XSync
802 * Signature: (JI)V
803 */
804 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSync
805 (JNIEnv *env, jclass clazz, jlong display, jint discard) {
806
807 AWT_CHECK_HAVE_LOCK();
808 XSync((Display *) jlong_to_ptr(display), discard);
809
810 }
811
812 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates
813 (JNIEnv *env, jclass clazz, jlong display, jlong src_w, jlong dest_w,
814 jlong src_x, jlong src_y, jlong dest_x_return, jlong dest_y_return,
815 jlong child_return)
816 {
817 AWT_CHECK_HAVE_LOCK_RETURN(0);
818 return XTranslateCoordinates( (Display *) jlong_to_ptr(display), src_w, dest_w,
819 src_x, src_y,
820 (int *) jlong_to_ptr(dest_x_return),
821 (int *) jlong_to_ptr(dest_y_return),
822 (Window *) jlong_to_ptr(child_return));
823 }
824
825 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XEventsQueued
826 (JNIEnv *env, jclass clazz, jlong display, jint mode) {
827
828 AWT_CHECK_HAVE_LOCK_RETURN(0);
829 return XEventsQueued((Display *) jlong_to_ptr(display), mode);
838 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_SetProperty
839 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong atom, jstring jstr) {
840 char *cname;
841 XTextProperty tp;
842 int32_t status;
843
844 /*
845 In case there are direct support of UTF-8 declared, use UTF-8 strings.
846 */
847 if (!JNU_IsNull(env, jstr)) {
848 #ifdef X_HAVE_UTF8_STRING
849 cname = (char *) (*env)->GetStringUTFChars(env, jstr, JNI_FALSE);
850 #else
851 cname = (char *) JNU_GetStringPlatformChars(env, jstr, NULL);
852 #endif
853 CHECK_NULL(cname);
854 } else {
855 cname = "";
856 }
857
858
859 AWT_CHECK_HAVE_LOCK();
860
861 #ifdef X_HAVE_UTF8_STRING
862 status = Xutf8TextListToTextProperty((Display *)jlong_to_ptr(display), &cname, 1,
863 XStdICCTextStyle, &tp);
864 #else
865 status = XmbTextListToTextProperty((Display *)jlong_to_ptr(display), &cname, 1,
866 XStdICCTextStyle, &tp);
867 #endif
868
869
870 if (status == Success || status > 0) {
871 XChangeProperty((Display *)jlong_to_ptr(display), window, atom, tp.encoding, tp.format, PropModeReplace, tp.value, tp.nitems);
872 if (tp.value != NULL) {
873 XFree(tp.value);
874 }
875 }
876
877 if (!JNU_IsNull(env, jstr)) {
878 #ifdef X_HAVE_UTF8_STRING
879 (*env)->ReleaseStringUTFChars(env, jstr, (const char *) cname);
880 #else
881 JNU_ReleaseStringPlatformChars(env, jstr, (const char *) cname);
882 #endif
883 }
884 }
885
886 /*
887 * Class: sun_awt_X11_XlibWrapper
888 * Method: XChangeProperty
889 * Signature: (JJJJJJJJJJJ)V
988 } else {
989 cname = "";
990 }
991
992 atom = XInternAtom((Display *) jlong_to_ptr(display), cname, ife);
993
994 if (!JNU_IsNull(env, jstr)) {
995 JNU_ReleaseStringPlatformChars(env, jstr, (const char *) cname);
996 }
997
998 return (jlong) atom;
999
1000 }
1001
1002 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XCreateFontCursor
1003 (JNIEnv *env, jclass clazz, jlong display, jint shape) {
1004 AWT_CHECK_HAVE_LOCK_RETURN(0);
1005 return XCreateFontCursor((Display *) jlong_to_ptr(display), (int) shape);
1006 }
1007
1008
1009 /*
1010 * Class: sun_awt_X11_XlibWrapper
1011 * Method: XCreatePixmapCursor
1012 * Signature: (JJJJJII)J
1013 */
1014 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreatePixmapCursor
1015 (JNIEnv *env , jclass clazz, jlong display, jlong source, jlong mask, jlong fore, jlong back, jint x , jint y) {
1016
1017 AWT_CHECK_HAVE_LOCK_RETURN(0);
1018 return (jlong) XCreatePixmapCursor((Display *) jlong_to_ptr(display), (Pixmap) source, (Pixmap) mask,
1019 (XColor *) jlong_to_ptr(fore), (XColor *) jlong_to_ptr(back), x, y);
1020 }
1021
1022
1023 /*
1024 * Class: sun_awt_X11_XlibWrapper
1025 * Method: XQueryBestCursor
1026 * Signature: (JJIIJJ)Z
1027 */
1028 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryBestCursor
1029 (JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jlong width_return, jlong height_return) {
1030
1031 Status status;
1032
1033 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1034 status = XQueryBestCursor((Display *) jlong_to_ptr(display), (Drawable) drawable, width,height,
1035 (unsigned int *) jlong_to_ptr(width_return), (unsigned int *) jlong_to_ptr(height_return));
1036
1037 if (status == 0) return JNI_FALSE;
1038 else return JNI_TRUE;
1039 }
1040
1041
1042 /*
1043 * Class: sun_awt_X11_XlibWrapper
1044 * Method: XFreeCursor
1045 * Signature: (JJ)V
1046 */
1047 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFreeCursor
1048 (JNIEnv *env, jclass clazz, jlong display, jlong cursor) {
1049
1050 AWT_CHECK_HAVE_LOCK();
1051 XFreeCursor( (Display *) jlong_to_ptr(display), (Cursor) cursor);
1052 }
1053
1054 /*
1055 * Class: sun_awt_X11_XlibWrapper
1056 * Method: XQueryPointer
1057 * Signature: (JJJJJJJJJ)Z
1058 */
1059 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryPointer
1060 (JNIEnv *env, jclass clazz, jlong display, jlong w, jlong root_return, jlong child_return, jlong root_x_return , jlong root_y_return, jlong win_x_return, jlong win_y_return, jlong mask_return) {
1061
1067 (int *) jlong_to_ptr(root_x_return), (int *) jlong_to_ptr(root_y_return),
1068 (int *) jlong_to_ptr(win_x_return), (int *) jlong_to_ptr(win_y_return),
1069 (unsigned int *) jlong_to_ptr(mask_return));
1070
1071 return b ? JNI_TRUE : JNI_FALSE;
1072 }
1073
1074 /*
1075 * Class: sun_awt_X11_XlibWrapper
1076 * Method: XChangeWindowAttributes
1077 * Signature: (JJJJ)V
1078 */
1079 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XChangeWindowAttributes
1080 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong valuemask, jlong attributes) {
1081
1082 AWT_CHECK_HAVE_LOCK();
1083 XChangeWindowAttributes((Display *) jlong_to_ptr(display), (Window) window, (unsigned long) valuemask,
1084 (XSetWindowAttributes *) jlong_to_ptr(attributes));
1085 }
1086
1087
1088 /*
1089 * Class: sun_awt_X11_XlibWrapper
1090 * Method: XSetTransientFor
1091 * Signature: (JJJ)V
1092 */
1093 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetTransientFor
1094 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong transient_for_window)
1095 {
1096 AWT_CHECK_HAVE_LOCK();
1097 XSetTransientForHint((Display *) jlong_to_ptr(display), window, transient_for_window);
1098 }
1099
1100 /*
1101 * Class: sun_awt_X11_XlibWrapper
1102 * Method: XSetWMHints
1103 * Signature: (JJJ)V
1104 */
1105 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetWMHints
1106 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints)
1107 {
1164 if (c_option == NULL) {
1165 JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
1166 return NULL;
1167 }
1168
1169 AWT_CHECK_HAVE_LOCK_RETURN(NULL);
1170 c_res = XGetDefault((Display*)jlong_to_ptr(display), c_program, c_option);
1171 // The strings returned by XGetDefault() are owned by Xlib and
1172 // should not be modified or freed by the client.
1173
1174 JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
1175 JNU_ReleaseStringPlatformChars(env, option, (const char *) c_option);
1176
1177 if (c_res != NULL) {
1178 return JNU_NewStringPlatform(env, c_res);
1179 } else {
1180 return NULL;
1181 }
1182 }
1183
1184
1185 /*
1186 * Class: sun_awt_X11_XlibWrapper
1187 * Method: getScreenOfWindow
1188 * Signature: (JJ)J
1189 */
1190 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_getScreenOfWindow
1191 (JNIEnv *env, jclass clazz, jlong display, jlong window)
1192 {
1193 XWindowAttributes attrs;
1194 memset(&attrs, 0, sizeof(attrs));
1195 AWT_CHECK_HAVE_LOCK_RETURN(0);
1196 XGetWindowAttributes((Display *) jlong_to_ptr(display), window, &attrs);
1197 return ptr_to_jlong(attrs.screen);
1198 }
1199
1200 /*
1201 * Class: sun_awt_X11_XlibWrapper
1202 * Method: XScreenNumberOfScreen
1203 * Signature: (J)J
1204 */
1236 XFree(jlong_to_ptr(ptr));
1237 }
1238
1239 /*
1240 * Class: sun_awt_X11_XlibWrapper
1241 * Method: XFree
1242 * Signature: (J)V
1243 */
1244 JNIEXPORT jbyteArray JNICALL Java_sun_awt_X11_XlibWrapper_getStringBytes
1245 (JNIEnv *env, jclass clazz, jlong str_ptr)
1246 {
1247 unsigned char * str = (unsigned char*) jlong_to_ptr(str_ptr);
1248 long length = strlen((char*)str);
1249 jbyteArray res = (*env)->NewByteArray(env, length);
1250 CHECK_NULL_RETURN(res, NULL);
1251 (*env)->SetByteArrayRegion(env, res, 0, length,
1252 (const signed char*) str);
1253 return res;
1254 }
1255
1256
1257 /*
1258 * Class: sun_awt_X11_XlibWrapper
1259 * Method: ServerVendor
1260 * Signature: (J)Ljava/lang/String;
1261 */
1262 JNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_ServerVendor
1263 (JNIEnv *env, jclass clazz, jlong display)
1264 {
1265 AWT_CHECK_HAVE_LOCK_RETURN(NULL);
1266 return JNU_NewStringPlatform(env, ServerVendor((Display*)jlong_to_ptr(display)));
1267 }
1268 /*
1269 * Class: sun_awt_X11_XlibWrapper
1270 * Method: VendorRelease
1271 * Signature: (J)I;
1272 */
1273 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_VendorRelease
1274 (JNIEnv *env, jclass clazz, jlong display)
1275 {
1276 AWT_CHECK_HAVE_LOCK_RETURN(0);
1277 return VendorRelease((Display*)jlong_to_ptr(display));
1278 }
1279 /*
1280 * Class: sun_awt_X11_XlibWrapper
1281 * Method: IsXsunKPBehavior
1282 * Signature: (J)Z;
1283 */
1284 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsXsunKPBehavior
1285 (JNIEnv *env, jclass clazz, jlong display)
1286 {
1287 // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
1288 // Otherwise, it is [1] or sometimes [0].
1289 // This sniffer first tries to determine what is a keycode for XK_KP_7
1290 // using XKeysymToKeycode;
1291 // second, in which place in the keysymarray is XK_KP_7
1292 // using XKeycodeToKeysym.
1293 int kc7;
1294 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1295 kc7 = XKeysymToKeycode((Display*)jlong_to_ptr(display), XK_KP_7);
1296 if( !kc7 ) {
1297 // keycode is not defined. Why, it's a reduced keyboard perhaps:
1298 // report arbitrarily false.
1299 return JNI_FALSE;
1300 } else {
1301 long ks2 = keycodeToKeysym((Display*)jlong_to_ptr(display), kc7, 2);
1302 if( ks2 == XK_KP_7 ) {
1303 //XXX If some Xorg server would put XK_KP_7 in keysymarray[2] as well,
1304 //XXX for yet unknown to me reason, the sniffer would lie.
1305 return JNI_TRUE;
1306 }else{
1307 return JNI_FALSE;
1308 }
1309 }
1310 }
1311
1312
1313 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsSunKeyboard
1314 (JNIEnv *env, jclass clazz, jlong display)
1315 {
1316 int xx;
1317 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1318 xx = XKeysymToKeycode((Display*)jlong_to_ptr(display), SunXK_F37);
1319 return (!xx) ? JNI_FALSE : JNI_TRUE;
1320 }
1321
1322 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKanaKeyboard
1323 (JNIEnv *env, jclass clazz, jlong display)
1324 {
1325 int xx;
1326 static jboolean result = JNI_FALSE;
1327
1328 int32_t minKeyCode, maxKeyCode, keySymsPerKeyCode;
1329 KeySym *keySyms, *keySymsStart, keySym;
1330 int32_t i;
1331 int32_t kanaCount = 0;
1332
1390 * Signature: (J)V
1391 */
1392 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetErrorHandler
1393 (JNIEnv *env, jclass clazz, jlong handler)
1394 {
1395 AWT_CHECK_HAVE_LOCK();
1396 XSetErrorHandler((XErrorHandler) jlong_to_ptr(handler));
1397 }
1398
1399 /*
1400 * Class: sun_awt_X11_XlibWrapper
1401 * Method: CallErrorHandler
1402 * Signature: (JJJ)I
1403 */
1404 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_CallErrorHandler
1405 (JNIEnv *env, jclass clazz, jlong handler, jlong display, jlong event_ptr)
1406 {
1407 return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr));
1408 }
1409
1410
1411 /*
1412 * Class: sun_awt_X11_XlibWrapper
1413 * Method: PrintXErrorEvent
1414 * Signature: (JJ)V
1415 */
1416 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_PrintXErrorEvent
1417 (JNIEnv *env, jclass clazz, jlong display, jlong event_ptr)
1418 {
1419 char msg[128];
1420 char buf[128];
1421
1422 XErrorEvent* err = (XErrorEvent *)jlong_to_ptr(event_ptr);
1423
1424 XGetErrorText((Display *)jlong_to_ptr(display), err->error_code, msg, sizeof(msg));
1425 jio_fprintf(stderr, "Xerror %s, XID %x, ser# %d\n", msg, err->resourceid, err->serial);
1426 jio_snprintf(buf, sizeof(buf), "%d", err->request_code);
1427 XGetErrorDatabaseText((Display *)jlong_to_ptr(display), "XRequest", buf, "Unknown", msg, sizeof(msg));
1428 jio_fprintf(stderr, "Major opcode %d (%s)\n", err->request_code, msg);
1429 if (err->request_code > 128) {
1430 jio_fprintf(stderr, "Minor opcode %d\n", err->minor_code);
1431 }
1432 }
1433
1434
1435 /*
1436 * Class: sun_awt_X11_XlibWrapper
1437 * Method: XInternAtoms
1438 * Signature: (J[Ljava/lang/String;ZJ)I
1439 */
1440 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XInternAtoms
1441 (JNIEnv *env, jclass clazz, jlong display, jobjectArray names_arr, jboolean only_if_exists, jlong atoms)
1442 {
1443 int status = 0;
1444 AWT_CHECK_HAVE_LOCK_RETURN(0);
1445 jsize length;
1446 char** names = stringArrayToNative(env, names_arr, &length);
1447 if (names) {
1448 status = XInternAtoms((Display*)jlong_to_ptr(display), names, length, only_if_exists, (Atom*) jlong_to_ptr(atoms));
1449 freeNativeStringArray(names, length);
1450 }
1451 return status;
1452 }
1453
1454
1455
1456 /*
1457 * Class: sun_awt_X11_XlibWrapper
1458 * Method: XGetWindowAttributes
1459 * Signature: (JJJ)I
1460 */
1461 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWindowAttributes
1462 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong attr_ptr)
1463 {
1464 jint status;
1465 AWT_CHECK_HAVE_LOCK_RETURN(0);
1466 memset((XWindowAttributes*) jlong_to_ptr(attr_ptr), 0, sizeof(XWindowAttributes));
1467 status = XGetWindowAttributes((Display*)jlong_to_ptr(display), window, (XWindowAttributes*) jlong_to_ptr(attr_ptr));
1468 return status;
1469 }
1470
1471
1472 /*
1473 * Class: sun_awt_X11_XlibWrapper
1474 * Method: XGetGeometry
1475 * Signature: (JJJJJJJJJ)I
1476 */
1477 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetGeometry
1478 (JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong root_return,
1479 jlong x_return, jlong y_return, jlong width_return, jlong height_return,
1480 jlong border_width_return, jlong depth_return)
1481 {
1482 jint status;
1483 AWT_CHECK_HAVE_LOCK_RETURN(0);
1484 status = XGetGeometry((Display *)jlong_to_ptr(display),
1485 (Drawable)drawable, (Window *)jlong_to_ptr(root_return),
1486 (int *)jlong_to_ptr(x_return), (int *)jlong_to_ptr(y_return),
1487 (unsigned int *)jlong_to_ptr(width_return), (unsigned int *)jlong_to_ptr(height_return),
1488 (unsigned int *)jlong_to_ptr(border_width_return),
1489 (unsigned int *)jlong_to_ptr(depth_return));
1490 return status;
1491 }
1492
1493
1494 /*
1495 * Class: sun_awt_X11_XlibWrapper
1496 * Method: XGetWMNormalHints
1497 * Signature: (JJJJ)I
1498 */
1499 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWMNormalHints
1500 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints, jlong supplied_return)
1501 {
1502 AWT_CHECK_HAVE_LOCK_RETURN(0);
1503 return XGetWMNormalHints((Display*) jlong_to_ptr(display),
1504 window,
1505 (XSizeHints*) jlong_to_ptr(hints),
1506 (long*) jlong_to_ptr(supplied_return));
1507 }
1508
1509 /*
1510 * Class: sun_awt_X11_XlibWrapper
1511 * Method: XSetWMNormalHints
1512 * Signature: (JJJ)V
1513 */
1529 AWT_CHECK_HAVE_LOCK();
1530 XDeleteProperty((Display*) jlong_to_ptr(display), window, (Atom)atom);
1531 }
1532
1533 /*
1534 * Class: sun_awt_X11_XlibWrapper
1535 * Method: XSendEvent
1536 * Signature: (JJZJJ)V
1537 */
1538 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XSendEvent
1539 (JNIEnv *env, jclass clazz, jlong display, jlong window, jboolean propagate, jlong event_mask, jlong event)
1540 {
1541 AWT_CHECK_HAVE_LOCK_RETURN(0);
1542 return XSendEvent((Display*) jlong_to_ptr(display),
1543 window,
1544 propagate==JNI_TRUE?True:False,
1545 (long) event_mask,
1546 (XEvent*) jlong_to_ptr(event));
1547 }
1548
1549
1550 /*
1551 * Class: sun_awt_X11_XlibWrapper
1552 * Method: XQueryTree
1553 * Signature: (JJJJJJ)I
1554 */
1555 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XQueryTree
1556 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong root_return, jlong parent_return, jlong children_return, jlong nchildren_return)
1557 {
1558 AWT_CHECK_HAVE_LOCK_RETURN(0);
1559 return XQueryTree((Display*) jlong_to_ptr(display),
1560 window,
1561 (Window *) jlong_to_ptr(root_return),
1562 (Window*) jlong_to_ptr(parent_return),
1563 (Window**) jlong_to_ptr(children_return),
1564 (unsigned int*) jlong_to_ptr(nchildren_return));
1565 }
1566
1567
1568 /*
1569 * Class: sun_awt_X11_XlibWrapper
1570 * Method: memcpy
1571 * Signature: (JJJ)V
1572 */
1573 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_memcpy
1574 (JNIEnv *env, jclass clazz, jlong dest_ptr, jlong src_ptr, jlong length)
1575 {
1576 memcpy(jlong_to_ptr(dest_ptr), jlong_to_ptr(src_ptr), length);
1577 }
1578
1579
1580 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetMinMaxHints
1581 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint x, jint y, jint width, jint height, jlong flags) {
1582 XSizeHints * hints;
1583 AWT_CHECK_HAVE_LOCK();
1584 hints = XAllocSizeHints();
1585 hints->flags = flags;
1586 hints->width = width;
1587 hints->min_width = width;
1588 hints->max_width = width;
1589 hints->height = height;
1590 hints->min_height = height;
1591 hints->max_height = height;
1592 hints->x = x;
1593 hints->y = y;
1594 XSetWMNormalHints((Display*) jlong_to_ptr(display), window, hints);
1595 XFree(hints);
1596 }
1597
1598
1599 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetVisualInfo
1600 (JNIEnv *env, jclass clazz, jlong display, jlong vinfo_mask, jlong vinfo_template,
1601 jlong nitems_return)
1602 {
1603 AWT_CHECK_HAVE_LOCK_RETURN(0);
1604 return ptr_to_jlong(XGetVisualInfo((Display*) jlong_to_ptr(display),
1605 (long) vinfo_mask,
1606 (XVisualInfo*) jlong_to_ptr(vinfo_template),
1607 (int*) jlong_to_ptr(nitems_return)));
1608 }
1609
1610 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XAllocSizeHints
1611 (JNIEnv *env, jclass clazz)
1612 {
1613 AWT_CHECK_HAVE_LOCK_RETURN(0);
1614 return ptr_to_jlong(XAllocSizeHints());
1615 }
1616
1617 /*
1618 * Class: sun_awt_X11_XlibWrapper
1619 * Method: XIconifyWindow
1620 * Signature: (JJJ)V
1621 */
1622 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XBell
1623 (JNIEnv *env, jclass clazz, jlong display, jint percent)
1624 {
1625 AWT_CHECK_HAVE_LOCK();
1626 XBell((Display*)jlong_to_ptr(display), percent);
1627 }
1628
1629
1630 /*
1631 * Class: sun_awt_X11_XlibWrapper
1632 * Method: XAllocColor
1633 * Signature: (JJJ)Z
1634 */
1635 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XAllocColor
1636 (JNIEnv *env, jclass clazz, jlong display , jlong colormap, jlong xcolor) {
1637
1638 Status status;
1639 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1640 status = XAllocColor((Display *) jlong_to_ptr(display), (Colormap) colormap, (XColor *) jlong_to_ptr(xcolor));
1641
1642 if (status == 0) return JNI_FALSE;
1643 else return JNI_TRUE;
1644 }
1645
1646
1647 /*
1648 * Class: sun_awt_X11_XlibWrapper
1649 * Method: XCreateBitmapFromData
1650 * Signature: (JJJII)J
1651 */
1652 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateBitmapFromData
1653 (JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong data, jint width, jint height) {
1654 AWT_CHECK_HAVE_LOCK_RETURN(0);
1655
1656 return (jlong) XCreateBitmapFromData((Display *) jlong_to_ptr(display), (Drawable) drawable,
1657 (char *) jlong_to_ptr(data), width, height);
1658 }
1659
1660
1661 /*
1662 * Class: sun_awt_X11_XlibWrapper
1663 * Method: XFreePixmap
1664 * Signature: (JJ)V
1665 */
1666 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFreePixmap
1667 (JNIEnv *env, jclass clazz, jlong display, jlong pixmap) {
1668 AWT_CHECK_HAVE_LOCK();
1669 XFreePixmap((Display *)jlong_to_ptr(display), (Pixmap) pixmap);
1670 }
1671
1672 /*
1673 * Class: sun_awt_X11_XlibWrapper
1674 * Method: XReparentWindow
1675 * Signature: (JJJII)V
1676 */
1677 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XReparentWindow
1678 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong parent, jint x, jint y) {
1679 AWT_CHECK_HAVE_LOCK();
1680 XReparentWindow((Display*)jlong_to_ptr(display), window, parent, x, y);
1755 JNIEXPORT jlong JNICALL
1756 Java_sun_awt_X11_XlibWrapper_XMaxRequestSize(JNIEnv *env, jclass clazz,
1757 jlong display) {
1758 AWT_CHECK_HAVE_LOCK_RETURN(0);
1759 return XMaxRequestSize((Display*) jlong_to_ptr(display));
1760 }
1761
1762 JNIEXPORT jlong JNICALL
1763 Java_sun_awt_X11_XlibWrapper_XAllocWMHints(JNIEnv *env, jclass clazz)
1764 {
1765 AWT_CHECK_HAVE_LOCK_RETURN(0);
1766 return ptr_to_jlong(XAllocWMHints());
1767 }
1768
1769 JNIEXPORT jlong JNICALL
1770 Java_sun_awt_X11_XlibWrapper_XCreatePixmap(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jint depth)
1771 {
1772 AWT_CHECK_HAVE_LOCK_RETURN(0);
1773 return XCreatePixmap((Display*)jlong_to_ptr(display), (Drawable)drawable, width, height, depth);
1774 }
1775 JNIEXPORT jlong JNICALL
1776 Java_sun_awt_X11_XlibWrapper_XCreateImage
1777 (JNIEnv *env, jclass clazz, jlong display, jlong visual_ptr,
1778 jint depth, jint format, jint offset, jlong data, jint width,
1779 jint height, jint bitmap_pad, jint bytes_per_line)
1780 {
1781 AWT_CHECK_HAVE_LOCK_RETURN(0);
1782 return ptr_to_jlong(XCreateImage((Display*) jlong_to_ptr(display), (Visual*) jlong_to_ptr(visual_ptr),
1783 depth, format, offset, (char*) jlong_to_ptr(data),
1784 width, height, bitmap_pad, bytes_per_line));
1785 }
1786 JNIEXPORT jlong JNICALL
1787 Java_sun_awt_X11_XlibWrapper_XCreateGC
1788 (JNIEnv *env, jclass clazz, jlong display, jlong drawable,
1789 jlong valuemask, jlong values)
1790 {
1791 AWT_CHECK_HAVE_LOCK_RETURN(0);
1792 return ptr_to_jlong(XCreateGC((Display*) jlong_to_ptr(display), (Drawable)drawable, valuemask, (XGCValues*) jlong_to_ptr(values)));
1793 }
1794
1795 JNIEXPORT void JNICALL
1796 Java_sun_awt_X11_XlibWrapper_XDestroyImage(JNIEnv *env, jclass clazz, jlong image)
1797 {
1798 XImage *img = (XImage*) jlong_to_ptr(image);
1799 AWT_CHECK_HAVE_LOCK();
1800
1801 // Fix for bug 4903671 :
1802 // We should be careful to not double free the memory pointed to data
1803 // Since we use unsafe to allocate it, we should use unsafe to free it.
1804 // So we should NULL the data pointer before calling XDestroyImage so
1805 // that X does not free the pointer for us.
1806 img->data = NULL;
1807 XDestroyImage(img);
1808 }
1809 JNIEXPORT void JNICALL
1810 Java_sun_awt_X11_XlibWrapper_XPutImage(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong gc, jlong image, jint src_x, jint src_y, jint dest_x, jint dest_y, jint width, jint height)
1811 {
1812 AWT_CHECK_HAVE_LOCK();
1813 XPutImage((Display*)jlong_to_ptr(display), (Drawable)drawable, (GC) jlong_to_ptr(gc), (XImage*) jlong_to_ptr(image), src_x, src_y,
1814 dest_x, dest_y, width, height);
1815 }
1816 JNIEXPORT void JNICALL
1817 Java_sun_awt_X11_XlibWrapper_XFreeGC(JNIEnv *env, jclass clazz, jlong display, jlong gc)
1818 {
1819 AWT_CHECK_HAVE_LOCK();
1820 XFreeGC((Display*) jlong_to_ptr(display), (GC) jlong_to_ptr(gc));
1821 }
1822 JNIEXPORT void JNICALL
1823 Java_sun_awt_X11_XlibWrapper_XSetWindowBackgroundPixmap(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong pixmap)
1824 {
1825 AWT_CHECK_HAVE_LOCK();
1826 XSetWindowBackgroundPixmap((Display*) jlong_to_ptr(display), (Window)window, (Pixmap)pixmap);
1827 }
1828 JNIEXPORT void JNICALL
1829 Java_sun_awt_X11_XlibWrapper_XClearWindow(JNIEnv *env, jclass clazz, jlong display, jlong window)
1830 {
1831 AWT_CHECK_HAVE_LOCK();
1832 XClearWindow((Display*) jlong_to_ptr(display), (Window)window);
1833 }
1834
1835 JNIEXPORT jint JNICALL
1836 Java_sun_awt_X11_XlibWrapper_XGetIconSizes(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong ret_sizes, jlong ret_count)
1837 {
1838 XIconSize** psize = (XIconSize**) jlong_to_ptr(ret_sizes);
1839 int * pcount = (int *) jlong_to_ptr(ret_count);
1840 Status res;
1841 AWT_CHECK_HAVE_LOCK_RETURN(0);
1842 res = XGetIconSizes((Display*) jlong_to_ptr(display), (Window)window, psize, pcount);
1843 return res;
1844 }
1845
1846 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeQueryExtension
1847 (JNIEnv *env, jclass clazz, jlong display, jlong major_version_return,
1905 AWT_CHECK_HAVE_LOCK_RETURN(0);
1906 return XdbeBeginIdiom((Display*) jlong_to_ptr(display));
1907 }
1908
1909 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeEndIdiom
1910 (JNIEnv *env, jclass clazz, jlong display)
1911 {
1912 AWT_CHECK_HAVE_LOCK_RETURN(0);
1913 return XdbeEndIdiom((Display*) jlong_to_ptr(display));
1914 }
1915
1916 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeSwapBuffers
1917 (JNIEnv *env, jclass clazz, jlong display, jlong swap_info, jint num_windows)
1918 {
1919 AWT_CHECK_HAVE_LOCK_RETURN(0);
1920 return XdbeSwapBuffers((Display*) jlong_to_ptr(display), (XdbeSwapInfo *) jlong_to_ptr(swap_info), num_windows);
1921 }
1922 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XQueryKeymap
1923 (JNIEnv *env, jclass clazz, jlong display, jlong vector)
1924 {
1925
1926 AWT_CHECK_HAVE_LOCK();
1927 XQueryKeymap( (Display *) jlong_to_ptr(display), (char *) jlong_to_ptr(vector));
1928 }
1929
1930 // XKeycodeToKeysym is deprecated but for compatibility we keep the API.
1931 JNIEXPORT jlong JNICALL
1932 Java_sun_awt_X11_XlibWrapper_XKeycodeToKeysym(JNIEnv *env, jclass clazz,
1933 jlong display, jint keycode,
1934 jint index) {
1935 AWT_CHECK_HAVE_LOCK_RETURN(0);
1936 return keycodeToKeysym((Display*)jlong_to_ptr(display), (unsigned int)keycode, (int)index);
1937 }
1938
1939 JNIEXPORT jint JNICALL
1940 Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup(JNIEnv *env, jclass clazz,
1941 jlong display) {
1942 XkbStateRec sr;
1943 AWT_CHECK_HAVE_LOCK_RETURN(0);
1944 memset(&sr, 0, sizeof(XkbStateRec));
1945 XkbGetState((Display*) jlong_to_ptr(display), XkbUseCoreKbd, &sr);
1946 // printf("-------------------------------------VVVV\n");
1947 // printf(" group:0x%0X\n",sr.group);
1948 // printf(" base_group:0x%0X\n",sr.base_group);
1949 // printf(" latched_group:0x%0X\n",sr.latched_group);
1950 // printf(" locked_group:0x%0X\n",sr.locked_group);
1951 // printf(" mods:0x%0X\n",sr.mods);
1952 // printf(" base_mods:0x%0X\n",sr.base_mods);
1953 // printf(" latched_mods:0x%0X\n",sr.latched_mods);
1954 // printf(" locked_mods:0x%0X\n",sr.locked_mods);
1955 // printf(" compat_state:0x%0X\n",sr.compat_state);
1956 // printf(" grab_mods:0x%0X\n",sr.grab_mods);
1957 // printf(" compat_grab_mods:0x%0X\n",sr.compat_grab_mods);
1958 // printf(" lookup_mods:0x%0X\n",sr.lookup_mods);
1959 // printf(" compat_lookup_mods:0x%0X\n",sr.compat_lookup_mods);
1960 // printf(" ptr_buttons:0x%0X\n",sr.ptr_buttons);
1961 // printf("-------------------------------------^^^^\n");
1962 return (jint)(sr.group);
1963 }
1964 JNIEXPORT jlong JNICALL
1965 Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz,
1966 jlong display, jint keycode,
1967 jint group, jint level) {
1968 AWT_CHECK_HAVE_LOCK_RETURN(0);
1969 return XkbKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (unsigned int)group, (unsigned int)level);
1970 }
1971
1972 JNIEXPORT jint JNICALL
1973 Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode(JNIEnv *env, jclass clazz,
1974 jlong display, jlong keysym) {
1975 AWT_CHECK_HAVE_LOCK_RETURN(0);
1976 return XKeysymToKeycode((Display*) jlong_to_ptr(display), (KeySym)keysym);
1977 }
1978
1979 JNIEXPORT jlong JNICALL
1980 Java_sun_awt_X11_XlibWrapper_XGetModifierMapping(JNIEnv *env, jclass clazz,
1981 jlong display) {
1982 AWT_CHECK_HAVE_LOCK_RETURN(0);
1983 return ptr_to_jlong(XGetModifierMapping((Display*) jlong_to_ptr(display)));
1984 }
1985
1986 JNIEXPORT void JNICALL
1987 Java_sun_awt_X11_XlibWrapper_XFreeModifiermap(JNIEnv *env, jclass clazz,
1988 jlong keymap) {
1989 AWT_CHECK_HAVE_LOCK();
1990 XFreeModifiermap((XModifierKeymap*) jlong_to_ptr(keymap));
1991 }
1992 /*
1993 * Class: sun_awt_X11_XlibWrapper
1994 * Method: XRefreshKeyboardMapping
1995 * Signature: (J)V
1996 */
1997 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRefreshKeyboardMapping
1998 (JNIEnv *env, jclass clazz, jlong event_ptr)
1999 {
2000 AWT_CHECK_HAVE_LOCK();
2001 XRefreshKeyboardMapping((XMappingEvent*) jlong_to_ptr(event_ptr));
2002 }
2003
2004 JNIEXPORT void JNICALL
2005 Java_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab(JNIEnv *env, jclass clazz,
2006 jlong display, jint mask,
2007 jlong cursor, jlong time) {
2008 AWT_CHECK_HAVE_LOCK();
2009 XChangeActivePointerGrab((Display*)jlong_to_ptr(display), (unsigned int)mask,
2010 (Cursor)cursor, (Time)time);
2011 }
2017
2018 /*
2019 * This predicate procedure allows the Toolkit thread to process specific events
2020 * while it is blocked waiting for the event dispatch thread to process
2021 * a SunDropTargetEvent. We need this to prevent deadlock when the client code
2022 * processing SunDropTargetEvent sets or gets the contents of the system
2023 * clipboard/selection. In this case the event dispatch thread waits for the
2024 * Toolkit thread to process PropertyNotify or SelectionNotify events.
2025 */
2026 static Bool
2027 secondary_loop_event(Display* dpy, XEvent* event, XPointer xawt_root_window) {
2028 return (
2029 event->type == SelectionNotify ||
2030 event->type == SelectionClear ||
2031 event->type == PropertyNotify ||
2032 (event->type == ConfigureNotify
2033 && event->xany.window == *(Window*) xawt_root_window)
2034 ) ? True : False;
2035 }
2036
2037
2038 JNIEXPORT jboolean JNICALL
2039 Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent(JNIEnv *env, jclass clazz,
2040 jlong display, jlong ptr) {
2041 uint32_t timeout = 1;
2042
2043 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
2044 exitSecondaryLoop = False;
2045 Window xawt_root_window = get_xawt_root_shell(env);
2046
2047 while (!exitSecondaryLoop) {
2048 if (XCheckIfEvent((Display*) jlong_to_ptr(display),
2049 (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, (XPointer) &xawt_root_window)) {
2050 return JNI_TRUE;
2051 }
2052 timeout = (timeout < AWT_SECONDARY_LOOP_TIMEOUT) ? (timeout << 1) : AWT_SECONDARY_LOOP_TIMEOUT;
2053 AWT_WAIT(timeout);
2054 }
2055 return JNI_FALSE;
2056 }
2057
2058 JNIEXPORT void JNICALL
2059 Java_sun_awt_X11_XlibWrapper_ExitSecondaryLoop(JNIEnv *env, jclass clazz) {
2060 DASSERT(!exitSecondaryLoop);
2061 AWT_CHECK_HAVE_LOCK();
2062 exitSecondaryLoop = True;
2063 AWT_NOTIFY_ALL();
2064 }
2065 /*******************************************************************************/
2066
2067 JNIEXPORT jobjectArray JNICALL
2068 Java_sun_awt_X11_XlibWrapper_XTextPropertyToStringList(JNIEnv *env,
2069 jclass clazz,
2070 jbyteArray bytes,
2071 jlong encodingAtom) {
2072 XTextProperty tp;
2073 jbyte *value;
2074
2075 char** strings = (char **)NULL;
2076 int32_t nstrings = 0;
2077 jobjectArray ret = NULL;
2078 int32_t i;
2079 jsize len;
2080 jboolean isCopy = JNI_FALSE;
2081 static jclass stringClass = NULL;
2082 jclass stringClassLocal = NULL;
2083
2084 AWT_CHECK_HAVE_LOCK_RETURN(NULL);
2085
2163 }
2164
2165 (*env)->SetObjectArrayElement(env, ret, i, string);
2166
2167 if ((*env)->ExceptionCheck(env)) {
2168 (*env)->ExceptionDescribe(env);
2169 (*env)->ExceptionClear(env);
2170 goto wayout;
2171 }
2172
2173 (*env)->DeleteLocalRef(env, string);
2174 }
2175
2176 wayout:
2177 /*
2178 * Clean up and return
2179 */
2180 XFreeStringList(strings);
2181 return ret;
2182 }
2183
2184
2185 JNIEXPORT void JNICALL
2186 Java_sun_awt_X11_XlibWrapper_XPutBackEvent(JNIEnv *env,
2187 jclass clazz,
2188 jlong display,
2189 jlong event) {
2190 XPutBackEvent((Display*)jlong_to_ptr(display), (XEvent*) jlong_to_ptr(event));
2191 }
2192
2193 JNIEXPORT jlong JNICALL
2194 Java_sun_awt_X11_XlibWrapper_getAddress(JNIEnv *env,
2195 jclass clazz,
2196 jobject o) {
2197 return ptr_to_jlong(o);
2198 }
2199
2200 JNIEXPORT void JNICALL
2201 Java_sun_awt_X11_XlibWrapper_copyIntArray(JNIEnv *env,
2202 jclass clazz,
2203 jlong dest, jobject array, jint size) {
|
1 /*
2 * Copyright (c) 2002, 2018, 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 #include "awt.h"
27 #include "awt_util.h"
28 #include "jni.h"
29 #include "jlong.h"
30 #include "Region.h"
31 #include "sizecalc.h"
32 #include "utility/rect.h"
33
34 #include "sun_awt_X11_XlibWrapper.h"
35
36 #include <stdlib.h>
37 #include <string.h>
38 #include <X11/extensions/Xdbe.h>
39 #include <X11/extensions/shape.h>
40 #include <X11/keysym.h>
41 #include <X11/Sunkeysym.h>
42 #include <X11/Xlib.h>
43 #include <X11/Xatom.h>
44 #include <X11/XKBlib.h>
45 #include <X11/Xos.h>
46 #include <X11/Xutil.h>
47
48 #if defined(AIX)
49 #undef X_HAVE_UTF8_STRING
50 extern Bool statusWindowEventHandler(XEvent event);
51 #endif
52
53 // From XWindow.c
54 extern KeySym keycodeToKeysym(Display *display, KeyCode keycode, int index);
55
56 #if defined(DEBUG)
57 static jmethodID lockIsHeldMID = NULL;
58
59 static void
60 CheckHaveAWTLock(JNIEnv *env)
61 {
62 if (lockIsHeldMID == NULL) {
63 if (tkClass == NULL) return;
64 lockIsHeldMID =
65 (*env)->GetStaticMethodID(env, tkClass,
66 "isAWTLockHeldByCurrentThread", "()Z");
67 if (lockIsHeldMID == NULL) return;
68 }
69 if (!(*env)->CallStaticBooleanMethod(env, tkClass, lockIsHeldMID)) {
70 JNU_ThrowInternalError(env, "Current thread does not hold AWT_LOCK!");
71 }
272 * Class: sun_awt_X11_XlibWrapper
273 * Method: RootWindow
274 * Signature: (JJ)J
275 */
276 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_RootWindow
277 (JNIEnv *env , jclass clazz, jlong display, jlong screen_number) {
278 AWT_CHECK_HAVE_LOCK_RETURN(0);
279 return (jlong) RootWindow((Display *) jlong_to_ptr(display), screen_number);
280 }
281
282 /*
283 * Class: sun_awt_X11_XlibWrapper
284 * Method: ScreenCount
285 */
286 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_ScreenCount
287 (JNIEnv *env , jclass clazz, jlong display) {
288 AWT_CHECK_HAVE_LOCK_RETURN(0);
289 return ScreenCount((Display *) jlong_to_ptr(display));
290 }
291
292 /*
293 * Class: XlibWrapper
294 * Method: XCreateWindow
295 * Signature: (JJIIIIIIJJJJ)J
296 */
297 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateWindow
298 (JNIEnv *env, jclass clazz, jlong display, jlong window,
299 jint x, jint y, jint w, jint h , jint border_width, jint depth,
300 jlong wclass, jlong visual, jlong valuemask, jlong attributes)
301 {
302 AWT_CHECK_HAVE_LOCK_RETURN(0);
303 return XCreateWindow((Display *) jlong_to_ptr(display),(Window) window, x, y, w, h,
304 border_width, depth, wclass, (Visual *) jlong_to_ptr(visual),
305 valuemask, (XSetWindowAttributes *) jlong_to_ptr(attributes));
306 }
307
308 /*
309 * Class: XlibWrapper
310 * Method: XConvertCase
311 * Signature: (JJJ)V
312 */
313 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConvertCase
314 (JNIEnv *env, jclass clazz, jlong keysym,
315 jlong keysym_lowercase, jlong keysym_uppercase)
316 {
317 AWT_CHECK_HAVE_LOCK();
318 XConvertCase(keysym, (jlong_to_ptr(keysym_lowercase)),
319 (jlong_to_ptr(keysym_uppercase)));
320 }
321
322 /*
323 * Class: XlibWrapper
324 * Method: XMapWindow
325 * Signature: (JJ)V
326 */
327 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMapWindow
328 (JNIEnv *env, jclass clazz, jlong display, jlong window)
329 {
330 AWT_CHECK_HAVE_LOCK();
331 XMapWindow( (Display *)jlong_to_ptr(display),(Window) window);
332 }
333
334 /*
335 * Class: XlibWrapper
336 * Method: XMapRaised
337 * Signature: (JJ)V
338 */
339 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMapRaised
340 (JNIEnv *env, jclass clazz, jlong display, jlong window)
341 {
342 AWT_CHECK_HAVE_LOCK();
343 XMapRaised( (Display *)jlong_to_ptr(display),(Window) window);
344 }
345
346 /*
347 * Class: XlibWrapper
348 * Method: XRaiseWindow
349 * Signature: (JJ)V
350 */
351 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRaiseWindow
352 (JNIEnv *env, jclass clazz, jlong display, jlong window)
353 {
354 AWT_CHECK_HAVE_LOCK();
355 XRaiseWindow( (Display *)jlong_to_ptr(display),(Window) window);
356 }
357
358 /*
359 * Class: XlibWrapper
360 * Method: XLowerWindow
361 * Signature: (JJ)V
362 */
363 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XLowerWindow
364 (JNIEnv *env, jclass clazz, jlong display, jlong window)
365 {
366 AWT_CHECK_HAVE_LOCK();
367 XLowerWindow( (Display *)jlong_to_ptr(display),(Window) window);
368 }
369
370 /*
371 * Class: XlibWrapper
372 * Method: XRestackWindows
373 * Signature: (JJI)V
374 */
375 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRestackWindows
376 (JNIEnv *env, jclass clazz, jlong display, jlong windows, jint length)
377 {
378 AWT_CHECK_HAVE_LOCK();
379 XRestackWindows( (Display *) jlong_to_ptr(display), (Window *) jlong_to_ptr(windows), length);
380 }
381
382 /*
383 * Class: XlibWrapper
384 * Method: XConfigureWindow
385 * Signature: (JJJJ)V
386 */
387 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConfigureWindow
388 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong value_mask,
389 jlong values)
390 {
391 AWT_CHECK_HAVE_LOCK();
392 XConfigureWindow((Display*)jlong_to_ptr(display), (Window)window,
393 (unsigned int)value_mask, (XWindowChanges*)jlong_to_ptr(values));
394 }
395
396 /*
397 * Class: XlibWrapper
398 * Method: XSetInputFocus
399 * Signature: (JJ)V
400 */
401 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus
402 (JNIEnv *env, jclass clazz, jlong display, jlong window)
403 {
404 AWT_CHECK_HAVE_LOCK();
405 XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, CurrentTime);
406 }
407
408 /*
409 * Class: XlibWrapper
410 * Method: XSetInputFocus2
411 * Signature: (JJJ)V
412 */
413 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetInputFocus2
414 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong time)
415 {
416 AWT_CHECK_HAVE_LOCK();
417 XSetInputFocus( (Display *)jlong_to_ptr(display),(Window) window, RevertToPointerRoot, time);
418 }
419
420 /*
421 * Class: XlibWrapper
422 * Method: XGetInputFocus
423 * Signature: (JJ)V
424 */
425 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetInputFocus
426 (JNIEnv *env, jclass clazz, jlong display)
427 {
428 Window focusOwner;
429 int revert_to;
430 AWT_CHECK_HAVE_LOCK_RETURN(0);
431 XGetInputFocus( (Display *)jlong_to_ptr(display), &focusOwner, &revert_to);
432 return focusOwner;
433 }
434
435 /*
436 * Class: XlibWrapper
437 * Method: XDestroyWindow
438 * Signature: (JJ)V
439 */
440 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XDestroyWindow
441 (JNIEnv *env, jclass clazz, jlong display, jlong window)
442 {
443 AWT_CHECK_HAVE_LOCK();
444 XDestroyWindow( (Display *)jlong_to_ptr(display),(Window) window);
445 }
446
447 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGrabPointer
448 (JNIEnv *env, jclass clazz, jlong display, jlong window,
449 jint owner_events, jint event_mask, jint pointer_mode,
450 jint keyboard_mode, jlong confine_to, jlong cursor, jlong time)
451 {
452 AWT_CHECK_HAVE_LOCK_RETURN(0);
453 return XGrabPointer( (Display *)jlong_to_ptr(display), (Window) window,
454 (Bool) owner_events, (unsigned int) event_mask, (int) pointer_mode,
493 AWT_CHECK_HAVE_LOCK();
494 XUngrabServer((Display*)jlong_to_ptr(display));
495 /* Workaround for bug 5039226 */
496 XSync((Display*)jlong_to_ptr(display), False);
497 }
498
499 /*
500 * Class: XlibWrapper
501 * Method: XUnmapWindow
502 * Signature: (JJ)V
503 */
504 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XUnmapWindow
505 (JNIEnv *env, jclass clazz, jlong display, jlong window)
506 {
507
508 AWT_CHECK_HAVE_LOCK();
509 XUnmapWindow( (Display *)jlong_to_ptr(display),(Window) window);
510
511 }
512
513 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSelectInput
514 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong mask)
515 {
516 AWT_CHECK_HAVE_LOCK();
517 XSelectInput((Display *) jlong_to_ptr(display), (Window) window, mask);
518 }
519
520 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEvents
521 (JNIEnv *env, jclass clazz, jlong display, jlong device, jlong bits_to_change,
522 jlong values_for_bits)
523 {
524 AWT_CHECK_HAVE_LOCK();
525 XkbSelectEvents((Display *) jlong_to_ptr(display), (unsigned int)device,
526 (unsigned long)bits_to_change,
527 (unsigned long)values_for_bits);
528 }
529
530 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails
531 (JNIEnv *env, jclass clazz, jlong display, jlong device, jlong event_type,
532 jlong bits_to_change, jlong values_for_bits)
533 {
534 AWT_CHECK_HAVE_LOCK();
535 XkbSelectEventDetails((Display *) jlong_to_ptr(display), (unsigned int)device,
536 (unsigned int) event_type,
537 (unsigned long)bits_to_change,
538 (unsigned long)values_for_bits);
539 }
540
541 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension
542 (JNIEnv *env, jclass clazz, jlong display, jlong opcode_rtrn, jlong event_rtrn,
543 jlong error_rtrn, jlong major_in_out, jlong minor_in_out)
544 {
545 Bool status;
546 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
547 status = XkbQueryExtension((Display *) jlong_to_ptr(display),
548 (int *) jlong_to_ptr(opcode_rtrn),
549 (int *) jlong_to_ptr(event_rtrn),
550 (int *) jlong_to_ptr(error_rtrn),
551 (int *) jlong_to_ptr(major_in_out),
552 (int *) jlong_to_ptr(minor_in_out));
553 return status ? JNI_TRUE : JNI_FALSE;
554 }
555
556 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
557 (JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out)
558 {
559 Bool status;
560 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
561 *((int *)jlong_to_ptr(lib_major_in_out)) = XkbMajorVersion;
562 *((int *)jlong_to_ptr(lib_minor_in_out)) = XkbMinorVersion;
563 status = XkbLibraryVersion((int *)jlong_to_ptr(lib_major_in_out),
564 (int *)jlong_to_ptr(lib_minor_in_out));
565 return status ? JNI_TRUE : JNI_FALSE;
566 }
567
568 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap
569 (JNIEnv *env, jclass clazz, jlong display, jlong which, jlong device_spec)
570 {
571 AWT_CHECK_HAVE_LOCK_RETURN(0);
572 return (jlong) XkbGetMap( (Display *) jlong_to_ptr(display),
573 (unsigned int) which,
574 (unsigned int) device_spec);
575 }
576
577 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap
578 (JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb)
579 {
580 AWT_CHECK_HAVE_LOCK_RETURN(0);
581 return (jlong) XkbGetUpdatedMap( (Display *) jlong_to_ptr(display),
582 (unsigned int) which,
583 (XkbDescPtr) jlong_to_ptr(xkb));
584 }
585 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard
586 (JNIEnv *env, jclass clazz, jlong xkb, jlong which, jboolean free_all)
587 {
588 AWT_CHECK_HAVE_LOCK();
589 XkbFreeKeyboard(jlong_to_ptr(xkb), (unsigned int)which, free_all);
590 }
591 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode
592 (JNIEnv *env, jclass clazz, jlong xkb, jint keycode, jlong mods, jlong mods_rtrn, jlong keysym_rtrn)
593 {
594 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
595 Bool b;
596 b = XkbTranslateKeyCode((XkbDescPtr)xkb, (unsigned int)keycode, (unsigned int)mods,
597 (unsigned int *)jlong_to_ptr(mods_rtrn),
598 (KeySym *)jlong_to_ptr(keysym_rtrn));
599 //printf("native, input: keycode:0x%0X; mods:0x%0X\n", keycode, mods);
600 //printf("native, output: keysym:0x%0X; mods:0x%0X\n",
601 // *(unsigned int *)jlong_to_ptr(keysym_rtrn),
602 // *(unsigned int *)jlong_to_ptr(mods_rtrn));
603 return b ? JNI_TRUE : JNI_FALSE;
604 }
605 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSetDetectableAutoRepeat
606 (JNIEnv *env, jclass clazz, jlong display, jboolean detectable)
607 {
608 AWT_CHECK_HAVE_LOCK();
609 XkbSetDetectableAutoRepeat((Display *) jlong_to_ptr(display), detectable, NULL);
610 }
611 /*
612 * Class: sun_awt_X11_XlibWrapper
613 * Method: XNextEvent
614 * Signature: (JJ)V
615 */
616 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XNextEvent
617 (JNIEnv *env, jclass clazz, jlong display, jlong ptr)
618 {
619 AWT_CHECK_HAVE_LOCK();
620 XNextEvent( (Display *) jlong_to_ptr(display), jlong_to_ptr(ptr));
621 }
622
623 /*
624 * Class: sun_awt_X11_XlibWrapper
625 * Method: XMaskEvent
626 * Signature: (JJJ)V
627 */
628 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMaskEvent
629 (JNIEnv *env, jclass clazz, jlong display, jlong event_mask, jlong event_return)
630 {
631 AWT_CHECK_HAVE_LOCK();
632 XMaskEvent( (Display *) jlong_to_ptr(display), event_mask, (XEvent *) jlong_to_ptr(event_return));
633 }
634
635 /*
636 * Class: sun_awt_X11_XlibWrapper
637 * Method: XWindowEvent
638 * Signature: (JJJJ)V
639 */
640 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XWindowEvent
641 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong event_mask, jlong event_return)
642 {
643 AWT_CHECK_HAVE_LOCK();
644 XWindowEvent( (Display *) jlong_to_ptr(display), (Window)window, event_mask, (XEvent *) jlong_to_ptr(event_return));
645 }
646
647 /*
648 * Class: sun_awt_X11_XlibWrapper
649 * Method: XFilterEvent
650 * Signature: (JJ)Z
651 */
652 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XFilterEvent
653 (JNIEnv *env, jclass clazz, jlong ptr, jlong window)
654 {
655 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
656 #if defined(AIX)
657 if (True == statusWindowEventHandler(*((XEvent *)(uintptr_t)ptr))) {
658 return (jboolean)True;
659 }
660 #endif
661 return (jboolean) XFilterEvent((XEvent *) jlong_to_ptr(ptr), (Window) window);
662 }
663
664 /*
665 * Class: sun_awt_X11_XlibWrapper
666 * Method: XSupportsLocale
667 * Signature: ()Z
668 */
669 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XSupportsLocale
670 (JNIEnv *env, jclass clazz)
671 {
672 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
673 return (jboolean)XSupportsLocale();
674 }
675
676 /*
677 * Class: sun_awt_X11_XlibWrapper
678 * Method: XSetLocaleModifiers
679 * Signature: (Ljava/lang/String;)Ljava/lang/String;
680 */
698 }
699
700 return (ret != NULL ? JNU_NewStringPlatform(env, ret): NULL);
701 }
702
703
704 /*
705 * Class: sun_awt_X11_wrappers_XlibWrapper
706 * Method: XPeekEvent
707 * Signature: (JJ)V
708 */
709
710
711 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XPeekEvent
712 (JNIEnv *env, jclass clazz, jlong display, jlong ptr)
713 {
714 AWT_CHECK_HAVE_LOCK();
715 XPeekEvent((Display *) jlong_to_ptr(display),jlong_to_ptr(ptr));
716 }
717
718 /*
719 * Class: sun_awt_X11_XlibWrapper
720 * Method: XMoveResizeWindow
721 * Signature: (JJIIII)V
722 */
723 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMoveResizeWindow
724 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint x , jint y , jint width, jint height) {
725 AWT_CHECK_HAVE_LOCK();
726 XMoveResizeWindow( (Display *) jlong_to_ptr(display), (Window) window, x, y, width, height);
727 }
728
729 /*
730 * Class: sun_awt_X11_XlibWrapper
731 * Method: XResizeWindow
732 * Signature: (JJII)V
733 */
734 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XResizeWindow
735 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height) {
736 AWT_CHECK_HAVE_LOCK();
737 XResizeWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
738 }
739
740 /*
741 * Class: sun_awt_X11_XlibWrapper
742 * Method: XMoveWindow
743 * Signature: (JJII)V
744 */
745 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XMoveWindow
746 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint width, jint height) {
747 AWT_CHECK_HAVE_LOCK();
748 XMoveWindow( (Display *) jlong_to_ptr(display),(Window) window,width,height);
749 }
750
751
752 /*
753 * Class: sun_awt_X11_XlibWrapper
754 * Method: XSetWindowBackground
755 * Signature: (JJJ)V
756 */
757 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetWindowBackground
758 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong background_pixel) {
759 AWT_CHECK_HAVE_LOCK();
760 XSetWindowBackground((Display *) jlong_to_ptr(display),window,background_pixel);
761 }
762
763
764 /*
765 * Class: sun_awt_X11_XlibWrapper
766 * Method: XFlush
767 * Signature: (J)V
768 */
769 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFlush
770 (JNIEnv *env, jclass clazz, jlong display) {
771
772 AWT_CHECK_HAVE_LOCK();
773 XFlush((Display *)jlong_to_ptr(display));
774 }
775
776 /*
777 * Class: sun_awt_X11_XlibWrapper
778 * Method: XSync
779 * Signature: (JI)V
780 */
781 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSync
782 (JNIEnv *env, jclass clazz, jlong display, jint discard) {
783 AWT_CHECK_HAVE_LOCK();
784 XSync((Display *) jlong_to_ptr(display), discard);
785 }
786
787 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XTranslateCoordinates
788 (JNIEnv *env, jclass clazz, jlong display, jlong src_w, jlong dest_w,
789 jlong src_x, jlong src_y, jlong dest_x_return, jlong dest_y_return,
790 jlong child_return)
791 {
792 AWT_CHECK_HAVE_LOCK_RETURN(0);
793 return XTranslateCoordinates( (Display *) jlong_to_ptr(display), src_w, dest_w,
794 src_x, src_y,
795 (int *) jlong_to_ptr(dest_x_return),
796 (int *) jlong_to_ptr(dest_y_return),
797 (Window *) jlong_to_ptr(child_return));
798 }
799
800 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XEventsQueued
801 (JNIEnv *env, jclass clazz, jlong display, jint mode) {
802
803 AWT_CHECK_HAVE_LOCK_RETURN(0);
804 return XEventsQueued((Display *) jlong_to_ptr(display), mode);
813 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_SetProperty
814 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong atom, jstring jstr) {
815 char *cname;
816 XTextProperty tp;
817 int32_t status;
818
819 /*
820 In case there are direct support of UTF-8 declared, use UTF-8 strings.
821 */
822 if (!JNU_IsNull(env, jstr)) {
823 #ifdef X_HAVE_UTF8_STRING
824 cname = (char *) (*env)->GetStringUTFChars(env, jstr, JNI_FALSE);
825 #else
826 cname = (char *) JNU_GetStringPlatformChars(env, jstr, NULL);
827 #endif
828 CHECK_NULL(cname);
829 } else {
830 cname = "";
831 }
832
833 AWT_CHECK_HAVE_LOCK();
834
835 #ifdef X_HAVE_UTF8_STRING
836 status = Xutf8TextListToTextProperty((Display *)jlong_to_ptr(display), &cname, 1,
837 XStdICCTextStyle, &tp);
838 #else
839 status = XmbTextListToTextProperty((Display *)jlong_to_ptr(display), &cname, 1,
840 XStdICCTextStyle, &tp);
841 #endif
842
843 if (status == Success || status > 0) {
844 XChangeProperty((Display *)jlong_to_ptr(display), window, atom, tp.encoding, tp.format, PropModeReplace, tp.value, tp.nitems);
845 if (tp.value != NULL) {
846 XFree(tp.value);
847 }
848 }
849
850 if (!JNU_IsNull(env, jstr)) {
851 #ifdef X_HAVE_UTF8_STRING
852 (*env)->ReleaseStringUTFChars(env, jstr, (const char *) cname);
853 #else
854 JNU_ReleaseStringPlatformChars(env, jstr, (const char *) cname);
855 #endif
856 }
857 }
858
859 /*
860 * Class: sun_awt_X11_XlibWrapper
861 * Method: XChangeProperty
862 * Signature: (JJJJJJJJJJJ)V
961 } else {
962 cname = "";
963 }
964
965 atom = XInternAtom((Display *) jlong_to_ptr(display), cname, ife);
966
967 if (!JNU_IsNull(env, jstr)) {
968 JNU_ReleaseStringPlatformChars(env, jstr, (const char *) cname);
969 }
970
971 return (jlong) atom;
972
973 }
974
975 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XCreateFontCursor
976 (JNIEnv *env, jclass clazz, jlong display, jint shape) {
977 AWT_CHECK_HAVE_LOCK_RETURN(0);
978 return XCreateFontCursor((Display *) jlong_to_ptr(display), (int) shape);
979 }
980
981 /*
982 * Class: sun_awt_X11_XlibWrapper
983 * Method: XCreatePixmapCursor
984 * Signature: (JJJJJII)J
985 */
986 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreatePixmapCursor
987 (JNIEnv *env , jclass clazz, jlong display, jlong source, jlong mask, jlong fore, jlong back, jint x , jint y) {
988
989 AWT_CHECK_HAVE_LOCK_RETURN(0);
990 return (jlong) XCreatePixmapCursor((Display *) jlong_to_ptr(display), (Pixmap) source, (Pixmap) mask,
991 (XColor *) jlong_to_ptr(fore), (XColor *) jlong_to_ptr(back), x, y);
992 }
993
994 /*
995 * Class: sun_awt_X11_XlibWrapper
996 * Method: XQueryBestCursor
997 * Signature: (JJIIJJ)Z
998 */
999 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryBestCursor
1000 (JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jlong width_return, jlong height_return) {
1001
1002 Status status;
1003
1004 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1005 status = XQueryBestCursor((Display *) jlong_to_ptr(display), (Drawable) drawable, width,height,
1006 (unsigned int *) jlong_to_ptr(width_return), (unsigned int *) jlong_to_ptr(height_return));
1007
1008 if (status == 0) return JNI_FALSE;
1009 else return JNI_TRUE;
1010 }
1011
1012 /*
1013 * Class: sun_awt_X11_XlibWrapper
1014 * Method: XFreeCursor
1015 * Signature: (JJ)V
1016 */
1017 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFreeCursor
1018 (JNIEnv *env, jclass clazz, jlong display, jlong cursor) {
1019
1020 AWT_CHECK_HAVE_LOCK();
1021 XFreeCursor( (Display *) jlong_to_ptr(display), (Cursor) cursor);
1022 }
1023
1024 /*
1025 * Class: sun_awt_X11_XlibWrapper
1026 * Method: XQueryPointer
1027 * Signature: (JJJJJJJJJ)Z
1028 */
1029 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XQueryPointer
1030 (JNIEnv *env, jclass clazz, jlong display, jlong w, jlong root_return, jlong child_return, jlong root_x_return , jlong root_y_return, jlong win_x_return, jlong win_y_return, jlong mask_return) {
1031
1037 (int *) jlong_to_ptr(root_x_return), (int *) jlong_to_ptr(root_y_return),
1038 (int *) jlong_to_ptr(win_x_return), (int *) jlong_to_ptr(win_y_return),
1039 (unsigned int *) jlong_to_ptr(mask_return));
1040
1041 return b ? JNI_TRUE : JNI_FALSE;
1042 }
1043
1044 /*
1045 * Class: sun_awt_X11_XlibWrapper
1046 * Method: XChangeWindowAttributes
1047 * Signature: (JJJJ)V
1048 */
1049 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XChangeWindowAttributes
1050 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong valuemask, jlong attributes) {
1051
1052 AWT_CHECK_HAVE_LOCK();
1053 XChangeWindowAttributes((Display *) jlong_to_ptr(display), (Window) window, (unsigned long) valuemask,
1054 (XSetWindowAttributes *) jlong_to_ptr(attributes));
1055 }
1056
1057 /*
1058 * Class: sun_awt_X11_XlibWrapper
1059 * Method: XSetTransientFor
1060 * Signature: (JJJ)V
1061 */
1062 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetTransientFor
1063 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong transient_for_window)
1064 {
1065 AWT_CHECK_HAVE_LOCK();
1066 XSetTransientForHint((Display *) jlong_to_ptr(display), window, transient_for_window);
1067 }
1068
1069 /*
1070 * Class: sun_awt_X11_XlibWrapper
1071 * Method: XSetWMHints
1072 * Signature: (JJJ)V
1073 */
1074 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetWMHints
1075 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints)
1076 {
1133 if (c_option == NULL) {
1134 JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
1135 return NULL;
1136 }
1137
1138 AWT_CHECK_HAVE_LOCK_RETURN(NULL);
1139 c_res = XGetDefault((Display*)jlong_to_ptr(display), c_program, c_option);
1140 // The strings returned by XGetDefault() are owned by Xlib and
1141 // should not be modified or freed by the client.
1142
1143 JNU_ReleaseStringPlatformChars(env, program, (const char *) c_program);
1144 JNU_ReleaseStringPlatformChars(env, option, (const char *) c_option);
1145
1146 if (c_res != NULL) {
1147 return JNU_NewStringPlatform(env, c_res);
1148 } else {
1149 return NULL;
1150 }
1151 }
1152
1153 /*
1154 * Class: sun_awt_X11_XlibWrapper
1155 * Method: getScreenOfWindow
1156 * Signature: (JJ)J
1157 */
1158 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_getScreenOfWindow
1159 (JNIEnv *env, jclass clazz, jlong display, jlong window)
1160 {
1161 XWindowAttributes attrs;
1162 memset(&attrs, 0, sizeof(attrs));
1163 AWT_CHECK_HAVE_LOCK_RETURN(0);
1164 XGetWindowAttributes((Display *) jlong_to_ptr(display), window, &attrs);
1165 return ptr_to_jlong(attrs.screen);
1166 }
1167
1168 /*
1169 * Class: sun_awt_X11_XlibWrapper
1170 * Method: XScreenNumberOfScreen
1171 * Signature: (J)J
1172 */
1204 XFree(jlong_to_ptr(ptr));
1205 }
1206
1207 /*
1208 * Class: sun_awt_X11_XlibWrapper
1209 * Method: XFree
1210 * Signature: (J)V
1211 */
1212 JNIEXPORT jbyteArray JNICALL Java_sun_awt_X11_XlibWrapper_getStringBytes
1213 (JNIEnv *env, jclass clazz, jlong str_ptr)
1214 {
1215 unsigned char * str = (unsigned char*) jlong_to_ptr(str_ptr);
1216 long length = strlen((char*)str);
1217 jbyteArray res = (*env)->NewByteArray(env, length);
1218 CHECK_NULL_RETURN(res, NULL);
1219 (*env)->SetByteArrayRegion(env, res, 0, length,
1220 (const signed char*) str);
1221 return res;
1222 }
1223
1224 /*
1225 * Class: sun_awt_X11_XlibWrapper
1226 * Method: ServerVendor
1227 * Signature: (J)Ljava/lang/String;
1228 */
1229 JNIEXPORT jstring JNICALL Java_sun_awt_X11_XlibWrapper_ServerVendor
1230 (JNIEnv *env, jclass clazz, jlong display)
1231 {
1232 AWT_CHECK_HAVE_LOCK_RETURN(NULL);
1233 return JNU_NewStringPlatform(env, ServerVendor((Display*)jlong_to_ptr(display)));
1234 }
1235
1236 /*
1237 * Class: sun_awt_X11_XlibWrapper
1238 * Method: VendorRelease
1239 * Signature: (J)I;
1240 */
1241 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_VendorRelease
1242 (JNIEnv *env, jclass clazz, jlong display)
1243 {
1244 AWT_CHECK_HAVE_LOCK_RETURN(0);
1245 return VendorRelease((Display*)jlong_to_ptr(display));
1246 }
1247
1248 /*
1249 * Class: sun_awt_X11_XlibWrapper
1250 * Method: IsXsunKPBehavior
1251 * Signature: (J)Z;
1252 */
1253 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsXsunKPBehavior
1254 (JNIEnv *env, jclass clazz, jlong display)
1255 {
1256 // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
1257 // Otherwise, it is [1] or sometimes [0].
1258 // This sniffer first tries to determine what is a keycode for XK_KP_7
1259 // using XKeysymToKeycode;
1260 // second, in which place in the keysymarray is XK_KP_7
1261 // using XKeycodeToKeysym.
1262 int kc7;
1263 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1264 kc7 = XKeysymToKeycode((Display*)jlong_to_ptr(display), XK_KP_7);
1265 if( !kc7 ) {
1266 // keycode is not defined. Why, it's a reduced keyboard perhaps:
1267 // report arbitrarily false.
1268 return JNI_FALSE;
1269 } else {
1270 long ks2 = keycodeToKeysym((Display*)jlong_to_ptr(display), kc7, 2);
1271 if( ks2 == XK_KP_7 ) {
1272 //XXX If some Xorg server would put XK_KP_7 in keysymarray[2] as well,
1273 //XXX for yet unknown to me reason, the sniffer would lie.
1274 return JNI_TRUE;
1275 }else{
1276 return JNI_FALSE;
1277 }
1278 }
1279 }
1280
1281 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsSunKeyboard
1282 (JNIEnv *env, jclass clazz, jlong display)
1283 {
1284 int xx;
1285 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1286 xx = XKeysymToKeycode((Display*)jlong_to_ptr(display), SunXK_F37);
1287 return (!xx) ? JNI_FALSE : JNI_TRUE;
1288 }
1289
1290 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKanaKeyboard
1291 (JNIEnv *env, jclass clazz, jlong display)
1292 {
1293 int xx;
1294 static jboolean result = JNI_FALSE;
1295
1296 int32_t minKeyCode, maxKeyCode, keySymsPerKeyCode;
1297 KeySym *keySyms, *keySymsStart, keySym;
1298 int32_t i;
1299 int32_t kanaCount = 0;
1300
1358 * Signature: (J)V
1359 */
1360 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetErrorHandler
1361 (JNIEnv *env, jclass clazz, jlong handler)
1362 {
1363 AWT_CHECK_HAVE_LOCK();
1364 XSetErrorHandler((XErrorHandler) jlong_to_ptr(handler));
1365 }
1366
1367 /*
1368 * Class: sun_awt_X11_XlibWrapper
1369 * Method: CallErrorHandler
1370 * Signature: (JJJ)I
1371 */
1372 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_CallErrorHandler
1373 (JNIEnv *env, jclass clazz, jlong handler, jlong display, jlong event_ptr)
1374 {
1375 return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr));
1376 }
1377
1378 /*
1379 * Class: sun_awt_X11_XlibWrapper
1380 * Method: PrintXErrorEvent
1381 * Signature: (JJ)V
1382 */
1383 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_PrintXErrorEvent
1384 (JNIEnv *env, jclass clazz, jlong display, jlong event_ptr)
1385 {
1386 char msg[128];
1387 char buf[128];
1388
1389 XErrorEvent* err = (XErrorEvent *)jlong_to_ptr(event_ptr);
1390
1391 XGetErrorText((Display *)jlong_to_ptr(display), err->error_code, msg, sizeof(msg));
1392 jio_fprintf(stderr, "Xerror %s, XID %x, ser# %d\n", msg, err->resourceid, err->serial);
1393 jio_snprintf(buf, sizeof(buf), "%d", err->request_code);
1394 XGetErrorDatabaseText((Display *)jlong_to_ptr(display), "XRequest", buf, "Unknown", msg, sizeof(msg));
1395 jio_fprintf(stderr, "Major opcode %d (%s)\n", err->request_code, msg);
1396 if (err->request_code > 128) {
1397 jio_fprintf(stderr, "Minor opcode %d\n", err->minor_code);
1398 }
1399 }
1400
1401 /*
1402 * Class: sun_awt_X11_XlibWrapper
1403 * Method: XInternAtoms
1404 * Signature: (J[Ljava/lang/String;ZJ)I
1405 */
1406 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XInternAtoms
1407 (JNIEnv *env, jclass clazz, jlong display, jobjectArray names_arr, jboolean only_if_exists, jlong atoms)
1408 {
1409 int status = 0;
1410 AWT_CHECK_HAVE_LOCK_RETURN(0);
1411 jsize length;
1412 char** names = stringArrayToNative(env, names_arr, &length);
1413 if (names) {
1414 status = XInternAtoms((Display*)jlong_to_ptr(display), names, length, only_if_exists, (Atom*) jlong_to_ptr(atoms));
1415 freeNativeStringArray(names, length);
1416 }
1417 return status;
1418 }
1419
1420 /*
1421 * Class: sun_awt_X11_XlibWrapper
1422 * Method: XGetWindowAttributes
1423 * Signature: (JJJ)I
1424 */
1425 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWindowAttributes
1426 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong attr_ptr)
1427 {
1428 jint status;
1429 AWT_CHECK_HAVE_LOCK_RETURN(0);
1430 memset((XWindowAttributes*) jlong_to_ptr(attr_ptr), 0, sizeof(XWindowAttributes));
1431 status = XGetWindowAttributes((Display*)jlong_to_ptr(display), window, (XWindowAttributes*) jlong_to_ptr(attr_ptr));
1432 return status;
1433 }
1434
1435 /*
1436 * Class: sun_awt_X11_XlibWrapper
1437 * Method: XGetGeometry
1438 * Signature: (JJJJJJJJJ)I
1439 */
1440 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetGeometry
1441 (JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong root_return,
1442 jlong x_return, jlong y_return, jlong width_return, jlong height_return,
1443 jlong border_width_return, jlong depth_return)
1444 {
1445 jint status;
1446 AWT_CHECK_HAVE_LOCK_RETURN(0);
1447 status = XGetGeometry((Display *)jlong_to_ptr(display),
1448 (Drawable)drawable, (Window *)jlong_to_ptr(root_return),
1449 (int *)jlong_to_ptr(x_return), (int *)jlong_to_ptr(y_return),
1450 (unsigned int *)jlong_to_ptr(width_return), (unsigned int *)jlong_to_ptr(height_return),
1451 (unsigned int *)jlong_to_ptr(border_width_return),
1452 (unsigned int *)jlong_to_ptr(depth_return));
1453 return status;
1454 }
1455
1456 /*
1457 * Class: sun_awt_X11_XlibWrapper
1458 * Method: XGetWMNormalHints
1459 * Signature: (JJJJ)I
1460 */
1461 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XGetWMNormalHints
1462 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong hints, jlong supplied_return)
1463 {
1464 AWT_CHECK_HAVE_LOCK_RETURN(0);
1465 return XGetWMNormalHints((Display*) jlong_to_ptr(display),
1466 window,
1467 (XSizeHints*) jlong_to_ptr(hints),
1468 (long*) jlong_to_ptr(supplied_return));
1469 }
1470
1471 /*
1472 * Class: sun_awt_X11_XlibWrapper
1473 * Method: XSetWMNormalHints
1474 * Signature: (JJJ)V
1475 */
1491 AWT_CHECK_HAVE_LOCK();
1492 XDeleteProperty((Display*) jlong_to_ptr(display), window, (Atom)atom);
1493 }
1494
1495 /*
1496 * Class: sun_awt_X11_XlibWrapper
1497 * Method: XSendEvent
1498 * Signature: (JJZJJ)V
1499 */
1500 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XSendEvent
1501 (JNIEnv *env, jclass clazz, jlong display, jlong window, jboolean propagate, jlong event_mask, jlong event)
1502 {
1503 AWT_CHECK_HAVE_LOCK_RETURN(0);
1504 return XSendEvent((Display*) jlong_to_ptr(display),
1505 window,
1506 propagate==JNI_TRUE?True:False,
1507 (long) event_mask,
1508 (XEvent*) jlong_to_ptr(event));
1509 }
1510
1511 /*
1512 * Class: sun_awt_X11_XlibWrapper
1513 * Method: XQueryTree
1514 * Signature: (JJJJJJ)I
1515 */
1516 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XQueryTree
1517 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong root_return, jlong parent_return, jlong children_return, jlong nchildren_return)
1518 {
1519 AWT_CHECK_HAVE_LOCK_RETURN(0);
1520 return XQueryTree((Display*) jlong_to_ptr(display),
1521 window,
1522 (Window *) jlong_to_ptr(root_return),
1523 (Window*) jlong_to_ptr(parent_return),
1524 (Window**) jlong_to_ptr(children_return),
1525 (unsigned int*) jlong_to_ptr(nchildren_return));
1526 }
1527
1528 /*
1529 * Class: sun_awt_X11_XlibWrapper
1530 * Method: memcpy
1531 * Signature: (JJJ)V
1532 */
1533 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_memcpy
1534 (JNIEnv *env, jclass clazz, jlong dest_ptr, jlong src_ptr, jlong length)
1535 {
1536 memcpy(jlong_to_ptr(dest_ptr), jlong_to_ptr(src_ptr), length);
1537 }
1538
1539 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XSetMinMaxHints
1540 (JNIEnv *env, jclass clazz, jlong display, jlong window, jint x, jint y, jint width, jint height, jlong flags) {
1541 XSizeHints * hints;
1542 AWT_CHECK_HAVE_LOCK();
1543 hints = XAllocSizeHints();
1544 hints->flags = flags;
1545 hints->width = width;
1546 hints->min_width = width;
1547 hints->max_width = width;
1548 hints->height = height;
1549 hints->min_height = height;
1550 hints->max_height = height;
1551 hints->x = x;
1552 hints->y = y;
1553 XSetWMNormalHints((Display*) jlong_to_ptr(display), window, hints);
1554 XFree(hints);
1555 }
1556
1557 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XGetVisualInfo
1558 (JNIEnv *env, jclass clazz, jlong display, jlong vinfo_mask, jlong vinfo_template,
1559 jlong nitems_return)
1560 {
1561 AWT_CHECK_HAVE_LOCK_RETURN(0);
1562 return ptr_to_jlong(XGetVisualInfo((Display*) jlong_to_ptr(display),
1563 (long) vinfo_mask,
1564 (XVisualInfo*) jlong_to_ptr(vinfo_template),
1565 (int*) jlong_to_ptr(nitems_return)));
1566 }
1567
1568 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XAllocSizeHints
1569 (JNIEnv *env, jclass clazz)
1570 {
1571 AWT_CHECK_HAVE_LOCK_RETURN(0);
1572 return ptr_to_jlong(XAllocSizeHints());
1573 }
1574
1575 /*
1576 * Class: sun_awt_X11_XlibWrapper
1577 * Method: XIconifyWindow
1578 * Signature: (JJJ)V
1579 */
1580 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XBell
1581 (JNIEnv *env, jclass clazz, jlong display, jint percent)
1582 {
1583 AWT_CHECK_HAVE_LOCK();
1584 XBell((Display*)jlong_to_ptr(display), percent);
1585 }
1586
1587 /*
1588 * Class: sun_awt_X11_XlibWrapper
1589 * Method: XAllocColor
1590 * Signature: (JJJ)Z
1591 */
1592 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XAllocColor
1593 (JNIEnv *env, jclass clazz, jlong display , jlong colormap, jlong xcolor) {
1594
1595 Status status;
1596 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
1597 status = XAllocColor((Display *) jlong_to_ptr(display), (Colormap) colormap, (XColor *) jlong_to_ptr(xcolor));
1598
1599 if (status == 0) return JNI_FALSE;
1600 else return JNI_TRUE;
1601 }
1602
1603 /*
1604 * Class: sun_awt_X11_XlibWrapper
1605 * Method: XCreateBitmapFromData
1606 * Signature: (JJJII)J
1607 */
1608 JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XCreateBitmapFromData
1609 (JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong data, jint width, jint height) {
1610 AWT_CHECK_HAVE_LOCK_RETURN(0);
1611
1612 return (jlong) XCreateBitmapFromData((Display *) jlong_to_ptr(display), (Drawable) drawable,
1613 (char *) jlong_to_ptr(data), width, height);
1614 }
1615
1616 /*
1617 * Class: sun_awt_X11_XlibWrapper
1618 * Method: XFreePixmap
1619 * Signature: (JJ)V
1620 */
1621 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XFreePixmap
1622 (JNIEnv *env, jclass clazz, jlong display, jlong pixmap) {
1623 AWT_CHECK_HAVE_LOCK();
1624 XFreePixmap((Display *)jlong_to_ptr(display), (Pixmap) pixmap);
1625 }
1626
1627 /*
1628 * Class: sun_awt_X11_XlibWrapper
1629 * Method: XReparentWindow
1630 * Signature: (JJJII)V
1631 */
1632 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XReparentWindow
1633 (JNIEnv *env, jclass clazz, jlong display, jlong window, jlong parent, jint x, jint y) {
1634 AWT_CHECK_HAVE_LOCK();
1635 XReparentWindow((Display*)jlong_to_ptr(display), window, parent, x, y);
1710 JNIEXPORT jlong JNICALL
1711 Java_sun_awt_X11_XlibWrapper_XMaxRequestSize(JNIEnv *env, jclass clazz,
1712 jlong display) {
1713 AWT_CHECK_HAVE_LOCK_RETURN(0);
1714 return XMaxRequestSize((Display*) jlong_to_ptr(display));
1715 }
1716
1717 JNIEXPORT jlong JNICALL
1718 Java_sun_awt_X11_XlibWrapper_XAllocWMHints(JNIEnv *env, jclass clazz)
1719 {
1720 AWT_CHECK_HAVE_LOCK_RETURN(0);
1721 return ptr_to_jlong(XAllocWMHints());
1722 }
1723
1724 JNIEXPORT jlong JNICALL
1725 Java_sun_awt_X11_XlibWrapper_XCreatePixmap(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jint width, jint height, jint depth)
1726 {
1727 AWT_CHECK_HAVE_LOCK_RETURN(0);
1728 return XCreatePixmap((Display*)jlong_to_ptr(display), (Drawable)drawable, width, height, depth);
1729 }
1730
1731 JNIEXPORT jlong JNICALL
1732 Java_sun_awt_X11_XlibWrapper_XCreateImage
1733 (JNIEnv *env, jclass clazz, jlong display, jlong visual_ptr,
1734 jint depth, jint format, jint offset, jlong data, jint width,
1735 jint height, jint bitmap_pad, jint bytes_per_line)
1736 {
1737 AWT_CHECK_HAVE_LOCK_RETURN(0);
1738 return ptr_to_jlong(XCreateImage((Display*) jlong_to_ptr(display), (Visual*) jlong_to_ptr(visual_ptr),
1739 depth, format, offset, (char*) jlong_to_ptr(data),
1740 width, height, bitmap_pad, bytes_per_line));
1741 }
1742
1743 JNIEXPORT jlong JNICALL
1744 Java_sun_awt_X11_XlibWrapper_XCreateGC
1745 (JNIEnv *env, jclass clazz, jlong display, jlong drawable,
1746 jlong valuemask, jlong values)
1747 {
1748 AWT_CHECK_HAVE_LOCK_RETURN(0);
1749 return ptr_to_jlong(XCreateGC((Display*) jlong_to_ptr(display), (Drawable)drawable, valuemask, (XGCValues*) jlong_to_ptr(values)));
1750 }
1751
1752 JNIEXPORT void JNICALL
1753 Java_sun_awt_X11_XlibWrapper_XDestroyImage(JNIEnv *env, jclass clazz, jlong image)
1754 {
1755 XImage *img = (XImage*) jlong_to_ptr(image);
1756 AWT_CHECK_HAVE_LOCK();
1757
1758 // Fix for bug 4903671 :
1759 // We should be careful to not double free the memory pointed to data
1760 // Since we use unsafe to allocate it, we should use unsafe to free it.
1761 // So we should NULL the data pointer before calling XDestroyImage so
1762 // that X does not free the pointer for us.
1763 img->data = NULL;
1764 XDestroyImage(img);
1765 }
1766
1767 JNIEXPORT void JNICALL
1768 Java_sun_awt_X11_XlibWrapper_XPutImage(JNIEnv *env, jclass clazz, jlong display, jlong drawable, jlong gc, jlong image, jint src_x, jint src_y, jint dest_x, jint dest_y, jint width, jint height)
1769 {
1770 AWT_CHECK_HAVE_LOCK();
1771 XPutImage((Display*)jlong_to_ptr(display), (Drawable)drawable, (GC) jlong_to_ptr(gc), (XImage*) jlong_to_ptr(image), src_x, src_y,
1772 dest_x, dest_y, width, height);
1773 }
1774
1775 JNIEXPORT void JNICALL
1776 Java_sun_awt_X11_XlibWrapper_XFreeGC(JNIEnv *env, jclass clazz, jlong display, jlong gc)
1777 {
1778 AWT_CHECK_HAVE_LOCK();
1779 XFreeGC((Display*) jlong_to_ptr(display), (GC) jlong_to_ptr(gc));
1780 }
1781
1782 JNIEXPORT void JNICALL
1783 Java_sun_awt_X11_XlibWrapper_XSetWindowBackgroundPixmap(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong pixmap)
1784 {
1785 AWT_CHECK_HAVE_LOCK();
1786 XSetWindowBackgroundPixmap((Display*) jlong_to_ptr(display), (Window)window, (Pixmap)pixmap);
1787 }
1788
1789 JNIEXPORT void JNICALL
1790 Java_sun_awt_X11_XlibWrapper_XClearWindow(JNIEnv *env, jclass clazz, jlong display, jlong window)
1791 {
1792 AWT_CHECK_HAVE_LOCK();
1793 XClearWindow((Display*) jlong_to_ptr(display), (Window)window);
1794 }
1795
1796 JNIEXPORT jint JNICALL
1797 Java_sun_awt_X11_XlibWrapper_XGetIconSizes(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong ret_sizes, jlong ret_count)
1798 {
1799 XIconSize** psize = (XIconSize**) jlong_to_ptr(ret_sizes);
1800 int * pcount = (int *) jlong_to_ptr(ret_count);
1801 Status res;
1802 AWT_CHECK_HAVE_LOCK_RETURN(0);
1803 res = XGetIconSizes((Display*) jlong_to_ptr(display), (Window)window, psize, pcount);
1804 return res;
1805 }
1806
1807 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeQueryExtension
1808 (JNIEnv *env, jclass clazz, jlong display, jlong major_version_return,
1866 AWT_CHECK_HAVE_LOCK_RETURN(0);
1867 return XdbeBeginIdiom((Display*) jlong_to_ptr(display));
1868 }
1869
1870 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeEndIdiom
1871 (JNIEnv *env, jclass clazz, jlong display)
1872 {
1873 AWT_CHECK_HAVE_LOCK_RETURN(0);
1874 return XdbeEndIdiom((Display*) jlong_to_ptr(display));
1875 }
1876
1877 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XdbeSwapBuffers
1878 (JNIEnv *env, jclass clazz, jlong display, jlong swap_info, jint num_windows)
1879 {
1880 AWT_CHECK_HAVE_LOCK_RETURN(0);
1881 return XdbeSwapBuffers((Display*) jlong_to_ptr(display), (XdbeSwapInfo *) jlong_to_ptr(swap_info), num_windows);
1882 }
1883 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XQueryKeymap
1884 (JNIEnv *env, jclass clazz, jlong display, jlong vector)
1885 {
1886 AWT_CHECK_HAVE_LOCK();
1887 XQueryKeymap( (Display *) jlong_to_ptr(display), (char *) jlong_to_ptr(vector));
1888 }
1889
1890 // XKeycodeToKeysym is deprecated but for compatibility we keep the API.
1891 JNIEXPORT jlong JNICALL
1892 Java_sun_awt_X11_XlibWrapper_XKeycodeToKeysym(JNIEnv *env, jclass clazz,
1893 jlong display, jint keycode,
1894 jint index) {
1895 AWT_CHECK_HAVE_LOCK_RETURN(0);
1896 return keycodeToKeysym((Display*)jlong_to_ptr(display), (unsigned int)keycode, (int)index);
1897 }
1898
1899 JNIEXPORT jint JNICALL
1900 Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup(JNIEnv *env, jclass clazz,
1901 jlong display) {
1902 XkbStateRec sr;
1903 AWT_CHECK_HAVE_LOCK_RETURN(0);
1904 memset(&sr, 0, sizeof(XkbStateRec));
1905 XkbGetState((Display*) jlong_to_ptr(display), XkbUseCoreKbd, &sr);
1906 // printf("-------------------------------------VVVV\n");
1907 // printf(" group:0x%0X\n",sr.group);
1908 // printf(" base_group:0x%0X\n",sr.base_group);
1909 // printf(" latched_group:0x%0X\n",sr.latched_group);
1910 // printf(" locked_group:0x%0X\n",sr.locked_group);
1911 // printf(" mods:0x%0X\n",sr.mods);
1912 // printf(" base_mods:0x%0X\n",sr.base_mods);
1913 // printf(" latched_mods:0x%0X\n",sr.latched_mods);
1914 // printf(" locked_mods:0x%0X\n",sr.locked_mods);
1915 // printf(" compat_state:0x%0X\n",sr.compat_state);
1916 // printf(" grab_mods:0x%0X\n",sr.grab_mods);
1917 // printf(" compat_grab_mods:0x%0X\n",sr.compat_grab_mods);
1918 // printf(" lookup_mods:0x%0X\n",sr.lookup_mods);
1919 // printf(" compat_lookup_mods:0x%0X\n",sr.compat_lookup_mods);
1920 // printf(" ptr_buttons:0x%0X\n",sr.ptr_buttons);
1921 // printf("-------------------------------------^^^^\n");
1922 return (jint)(sr.group);
1923 }
1924
1925 JNIEXPORT jlong JNICALL
1926 Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz,
1927 jlong display, jint keycode,
1928 jint group, jint level) {
1929 AWT_CHECK_HAVE_LOCK_RETURN(0);
1930 return XkbKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (unsigned int)group, (unsigned int)level);
1931 }
1932
1933 JNIEXPORT jint JNICALL
1934 Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode(JNIEnv *env, jclass clazz,
1935 jlong display, jlong keysym) {
1936 AWT_CHECK_HAVE_LOCK_RETURN(0);
1937 return XKeysymToKeycode((Display*) jlong_to_ptr(display), (KeySym)keysym);
1938 }
1939
1940 JNIEXPORT jlong JNICALL
1941 Java_sun_awt_X11_XlibWrapper_XGetModifierMapping(JNIEnv *env, jclass clazz,
1942 jlong display) {
1943 AWT_CHECK_HAVE_LOCK_RETURN(0);
1944 return ptr_to_jlong(XGetModifierMapping((Display*) jlong_to_ptr(display)));
1945 }
1946
1947 JNIEXPORT void JNICALL
1948 Java_sun_awt_X11_XlibWrapper_XFreeModifiermap(JNIEnv *env, jclass clazz,
1949 jlong keymap) {
1950 AWT_CHECK_HAVE_LOCK();
1951 XFreeModifiermap((XModifierKeymap*) jlong_to_ptr(keymap));
1952 }
1953
1954 /*
1955 * Class: sun_awt_X11_XlibWrapper
1956 * Method: XRefreshKeyboardMapping
1957 * Signature: (J)V
1958 */
1959 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRefreshKeyboardMapping
1960 (JNIEnv *env, jclass clazz, jlong event_ptr)
1961 {
1962 AWT_CHECK_HAVE_LOCK();
1963 XRefreshKeyboardMapping((XMappingEvent*) jlong_to_ptr(event_ptr));
1964 }
1965
1966 JNIEXPORT void JNICALL
1967 Java_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab(JNIEnv *env, jclass clazz,
1968 jlong display, jint mask,
1969 jlong cursor, jlong time) {
1970 AWT_CHECK_HAVE_LOCK();
1971 XChangeActivePointerGrab((Display*)jlong_to_ptr(display), (unsigned int)mask,
1972 (Cursor)cursor, (Time)time);
1973 }
1979
1980 /*
1981 * This predicate procedure allows the Toolkit thread to process specific events
1982 * while it is blocked waiting for the event dispatch thread to process
1983 * a SunDropTargetEvent. We need this to prevent deadlock when the client code
1984 * processing SunDropTargetEvent sets or gets the contents of the system
1985 * clipboard/selection. In this case the event dispatch thread waits for the
1986 * Toolkit thread to process PropertyNotify or SelectionNotify events.
1987 */
1988 static Bool
1989 secondary_loop_event(Display* dpy, XEvent* event, XPointer xawt_root_window) {
1990 return (
1991 event->type == SelectionNotify ||
1992 event->type == SelectionClear ||
1993 event->type == PropertyNotify ||
1994 (event->type == ConfigureNotify
1995 && event->xany.window == *(Window*) xawt_root_window)
1996 ) ? True : False;
1997 }
1998
1999 JNIEXPORT jboolean JNICALL
2000 Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent(JNIEnv *env, jclass clazz,
2001 jlong display, jlong ptr) {
2002 uint32_t timeout = 1;
2003
2004 AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
2005 exitSecondaryLoop = False;
2006 Window xawt_root_window = get_xawt_root_shell(env);
2007
2008 while (!exitSecondaryLoop) {
2009 if (XCheckIfEvent((Display*) jlong_to_ptr(display),
2010 (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, (XPointer) &xawt_root_window)) {
2011 return JNI_TRUE;
2012 }
2013 timeout = (timeout < AWT_SECONDARY_LOOP_TIMEOUT) ? (timeout << 1) : AWT_SECONDARY_LOOP_TIMEOUT;
2014 AWT_WAIT(timeout);
2015 }
2016 return JNI_FALSE;
2017 }
2018
2019 JNIEXPORT void JNICALL
2020 Java_sun_awt_X11_XlibWrapper_ExitSecondaryLoop(JNIEnv *env, jclass clazz) {
2021 DASSERT(!exitSecondaryLoop);
2022 AWT_CHECK_HAVE_LOCK();
2023 exitSecondaryLoop = True;
2024 AWT_NOTIFY_ALL();
2025 }
2026
2027 JNIEXPORT jobjectArray JNICALL
2028 Java_sun_awt_X11_XlibWrapper_XTextPropertyToStringList(JNIEnv *env,
2029 jclass clazz,
2030 jbyteArray bytes,
2031 jlong encodingAtom) {
2032 XTextProperty tp;
2033 jbyte *value;
2034
2035 char** strings = (char **)NULL;
2036 int32_t nstrings = 0;
2037 jobjectArray ret = NULL;
2038 int32_t i;
2039 jsize len;
2040 jboolean isCopy = JNI_FALSE;
2041 static jclass stringClass = NULL;
2042 jclass stringClassLocal = NULL;
2043
2044 AWT_CHECK_HAVE_LOCK_RETURN(NULL);
2045
2123 }
2124
2125 (*env)->SetObjectArrayElement(env, ret, i, string);
2126
2127 if ((*env)->ExceptionCheck(env)) {
2128 (*env)->ExceptionDescribe(env);
2129 (*env)->ExceptionClear(env);
2130 goto wayout;
2131 }
2132
2133 (*env)->DeleteLocalRef(env, string);
2134 }
2135
2136 wayout:
2137 /*
2138 * Clean up and return
2139 */
2140 XFreeStringList(strings);
2141 return ret;
2142 }
2143
2144 JNIEXPORT void JNICALL
2145 Java_sun_awt_X11_XlibWrapper_XPutBackEvent(JNIEnv *env,
2146 jclass clazz,
2147 jlong display,
2148 jlong event) {
2149 XPutBackEvent((Display*)jlong_to_ptr(display), (XEvent*) jlong_to_ptr(event));
2150 }
2151
2152 JNIEXPORT jlong JNICALL
2153 Java_sun_awt_X11_XlibWrapper_getAddress(JNIEnv *env,
2154 jclass clazz,
2155 jobject o) {
2156 return ptr_to_jlong(o);
2157 }
2158
2159 JNIEXPORT void JNICALL
2160 Java_sun_awt_X11_XlibWrapper_copyIntArray(JNIEnv *env,
2161 jclass clazz,
2162 jlong dest, jobject array, jint size) {
|