awt.h revision 12561:e5c910daa1a4
1/*
2 * Copyright (c) 1995, 2014, 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/*
27 * Common AWT definitions
28 */
29
30#ifndef _AWT_
31#define _AWT_
32
33#include "jvm.h"
34#include "jni_util.h"
35#include "debug_util.h"
36
37#if !defined(HEADLESS) && !defined(MACOSX)
38#include <X11/Intrinsic.h>
39#endif /* !HEADLESS && !MACOSX */
40
41
42/* The JVM instance: defined in awt_MToolkit.c */
43extern JavaVM *jvm;
44
45extern jclass tkClass;
46extern jmethodID awtLockMID;
47extern jmethodID awtUnlockMID;
48extern jmethodID awtWaitMID;
49extern jmethodID awtNotifyMID;
50extern jmethodID awtNotifyAllMID;
51extern jboolean awtLockInited;
52
53/* Perform sanity and consistency checks on AWT locking */
54#ifdef DEBUG
55#define DEBUG_AWT_LOCK
56#endif
57
58/*
59 * The following locking primitives should be defined
60 *
61#define AWT_LOCK()
62#define AWT_NOFLUSH_UNLOCK()
63#define AWT_WAIT(tm)
64#define AWT_NOTIFY()
65#define AWT_NOTIFY_ALL()
66 */
67
68/*
69 * Convenience macros based on AWT_NOFLUSH_UNLOCK
70 */
71extern void awt_output_flush();
72#define AWT_UNLOCK() AWT_FLUSH_UNLOCK()
73#define AWT_FLUSH_UNLOCK() do {                 \
74    awt_output_flush();                         \
75    AWT_NOFLUSH_UNLOCK();                       \
76} while (0)
77
78#define AWT_UNLOCK_CHECK_EXCEPTION(env) \
79    do { \
80      AWT_UNLOCK(); \
81      JNU_CHECK_EXCEPTION(env); \
82    } while (0)
83
84#define AWT_LOCK_IMPL() \
85    do { \
86        (*env)->CallStaticVoidMethod(env, tkClass, awtLockMID); \
87        if ((*env)->ExceptionCheck(env)) { \
88            (*env)->ExceptionClear(env); \
89        } \
90    } while(0)
91
92#define AWT_NOFLUSH_UNLOCK_IMPL() \
93    do { \
94      jthrowable pendingException; \
95      if ((pendingException = (*env)->ExceptionOccurred(env)) != NULL) { \
96         (*env)->ExceptionClear(env); \
97      } \
98      (*env)->CallStaticVoidMethod(env, tkClass, awtUnlockMID); \
99      if ((*env)->ExceptionCheck(env)) { \
100         (*env)->ExceptionClear(env); \
101      } \
102      if (pendingException) { \
103         (*env)->Throw(env, pendingException); \
104      } \
105    } while (0)
106#define AWT_WAIT_IMPL(tm) \
107    (*env)->CallStaticVoidMethod(env, tkClass, awtWaitMID, (jlong)(tm))
108#define AWT_NOTIFY_IMPL() \
109    (*env)->CallStaticVoidMethod(env, tkClass, awtNotifyMID)
110#define AWT_NOTIFY_ALL_IMPL() \
111    (*env)->CallStaticVoidMethod(env, tkClass, awtNotifyAllMID)
112
113/*
114 * Unfortunately AWT_LOCK debugging does not work with XAWT due to mixed
115 * Java/C use of AWT lock.
116 */
117#define AWT_LOCK()           AWT_LOCK_IMPL()
118#define AWT_NOFLUSH_UNLOCK() AWT_NOFLUSH_UNLOCK_IMPL()
119#define AWT_WAIT(tm)         AWT_WAIT_IMPL(tm)
120#define AWT_NOTIFY()         AWT_NOTIFY_IMPL()
121#define AWT_NOTIFY_ALL()     AWT_NOTIFY_ALL_IMPL()
122
123#if !defined(HEADLESS) && !defined(MACOSX)
124extern Display         *awt_display; /* awt_GraphicsEnv.c */
125extern Boolean          awt_ModLockIsShiftLock; /* XToolkit.c */
126#endif /* !HEADLESS && !MACOSX */
127
128#endif /* ! _AWT_ */
129