mirror of git://gcc.gnu.org/git/gcc.git
gtkpeer.h: Extend NSA set of macros to handle a second native state table --...
2003-12-12 Fernando Nasser <fnasser@redhat.com> * jni/gtk-peer/gtkpeer.h: Extend NSA set of macros to handle a second native state table -- native_global_ref_table. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Define native_global_ref_table pointer. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): Make sure JNI global reference is deleted and memory allocated for pointer freed. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): Use saved JNI global reference instead of JNI local reference. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (pre_event_handler): Remove compilation warning. (connect_awt_hook): Use saved JNI global reference instead of creating a new one. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create): Save JNI global reference to the Java object. (Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals): Remove unused variable declaration and add comment. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c (Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create): Save JNI global reference to the Java object. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c (Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c (Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate): Ditto. (Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals): Use saved JNI global reference instead of JNI local reference. (item_toggled): Add debug statement. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): Save JNI global reference to the Java object. (connect_choice_item_selectable_hook): Use saved JNI global references instead of JNI local reference. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c (Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create): Save JNI global reference to the Java object. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create): Save JNI global reference to the Java object. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c (Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c (Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c (Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c (Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c (Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (Java_gnu_java_awt_peer_gtk_GtkListPeer_create): Ditto. (Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals): Use saved JNI global reference instead of JNI local reference. (item_selected): Add debug statement. (item_unselected): Add debug statement. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c (Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Save JNI global reference to the Java object. Connect "activate" signal handler using global JNI reference. (connect_activate_hook): Removed in favor of inline code. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create): Save JNI global reference to the Java object. (Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals): Use saved JNI global reference instead of JNI local reference. Add FIXME comment. (Java_gnu_java_awt_peer_gtk_GtkPanelPeer_gtkPanelNew): Save JNI global reference to the Java object. Add FIXME comment. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c (Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create): Save JNI global reference to the Java object. (Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals): Use saved JNI global reference instead of JNI local reference. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c (Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals): Use saved JNI global reference instead of JNI local reference. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create): Save JNI global reference to the Java object. (Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals): Use saved JNI global reference instead of JNI local reference. From-SVN: r74593
This commit is contained in:
parent
b944d18757
commit
7ecd45764f
|
|
@ -1,3 +1,88 @@
|
|||
2003-12-12 Fernando Nasser <fnasser@redhat.com>
|
||||
|
||||
* jni/gtk-peer/gtkpeer.h: Extend NSA set of macros to handle a second
|
||||
native state table -- native_global_ref_table.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Define
|
||||
native_global_ref_table pointer.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): Make sure JNI
|
||||
global reference is deleted and memory allocated for pointer freed.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): Use saved
|
||||
JNI global reference instead of JNI local reference.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
|
||||
(pre_event_handler): Remove compilation warning.
|
||||
(connect_awt_hook): Use saved JNI global reference instead of creating
|
||||
a new one.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals): Remove
|
||||
unused variable declaration and add comment.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate): Ditto.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals): Use saved
|
||||
JNI global reference instead of JNI local reference.
|
||||
(item_toggled): Add debug statement.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
(connect_choice_item_selectable_hook): Use saved JNI global references
|
||||
instead of JNI local reference.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create): Save JNI
|
||||
global reference to the Java object.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkListPeer_create): Ditto.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals): Use saved
|
||||
JNI global reference instead of JNI local reference.
|
||||
(item_selected): Add debug statement.
|
||||
(item_unselected): Add debug statement.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
Connect "activate" signal handler using global JNI reference.
|
||||
(connect_activate_hook): Removed in favor of inline code.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals): Use saved
|
||||
JNI global reference instead of JNI local reference. Add FIXME comment.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkPanelPeer_gtkPanelNew): Save JNI global
|
||||
reference to the Java object. Add FIXME comment.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals): Use saved
|
||||
JNI global reference instead of JNI local reference.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals): Use
|
||||
saved JNI global reference instead of JNI local reference.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create): Save JNI global
|
||||
reference to the Java object.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals): Use saved
|
||||
JNI global reference instead of JNI local reference.
|
||||
|
||||
2003-12-11 Michael Koch <konqueror@gmx.de>
|
||||
|
||||
* java/text/Format.java (serialVersionUID): Fixed value.
|
||||
|
|
|
|||
|
|
@ -46,10 +46,16 @@ Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
|
|||
{
|
||||
GtkWidget *button;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
button = gtk_button_new();
|
||||
gtk_widget_show (button);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, button);
|
||||
}
|
||||
|
||||
|
|
@ -74,7 +80,8 @@ JNIEXPORT void JNICALL
|
|||
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
/* FIXME: Do we need to connect any signals here? Otherwise just do not
|
||||
override parent method. */
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
|
|
|
|||
|
|
@ -44,8 +44,13 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create
|
|||
{
|
||||
gpointer widget;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
widget = gtk_type_new (gtk_drawing_area_get_type ());
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, widget);
|
||||
|
|
|
|||
|
|
@ -46,12 +46,17 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer_create
|
|||
GtkWidget *widget;
|
||||
const char *str;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
str = (*env)->GetStringUTFChars (env, label, NULL);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
widget = gtk_check_menu_item_new_with_label (str);
|
||||
gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (widget), 1);
|
||||
gtk_widget_show (widget);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
(*env)->ReleaseStringUTFChars (env, label, str);
|
||||
|
|
|
|||
|
|
@ -82,6 +82,9 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate
|
|||
{
|
||||
GtkWidget *button;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
if (group == NULL)
|
||||
|
|
@ -98,6 +101,7 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate
|
|||
}
|
||||
}
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), state);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, button);
|
||||
|
|
@ -108,11 +112,13 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals
|
|||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
g_assert (gref);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
g_signal_connect (G_OBJECT (ptr), "toggled",
|
||||
GTK_SIGNAL_FUNC (item_toggled), obj);
|
||||
GTK_SIGNAL_FUNC (item_toggled), *gref);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
|
|
@ -161,6 +167,7 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup
|
|||
static void
|
||||
item_toggled (GtkToggleButton *item, jobject peer)
|
||||
{
|
||||
//g_print ("toggled\n");
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postItemEventID,
|
||||
peer,
|
||||
|
|
|
|||
|
|
@ -51,7 +51,11 @@ Java_gnu_java_awt_peer_gtk_GtkChoicePeer_create
|
|||
GtkOptionMenu *option_menu;
|
||||
GtkRequisition child_requisition;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
option_menu = GTK_OPTION_MENU (gtk_option_menu_new ());
|
||||
menu = gtk_menu_new ();
|
||||
gtk_widget_show (menu);
|
||||
|
|
@ -193,12 +197,19 @@ connect_choice_item_selectable_hook (JNIEnv *env, jobject peer_obj,
|
|||
GtkItem *item, jobject item_obj)
|
||||
{
|
||||
struct item_event_hook_info *ie;
|
||||
jobject *peer_objGlobPtr;
|
||||
jobject *item_objGlobPtr;
|
||||
|
||||
ie = (struct item_event_hook_info *)
|
||||
malloc (sizeof (struct item_event_hook_info));
|
||||
|
||||
ie->peer_obj = (*env)->NewGlobalRef (env, peer_obj);
|
||||
ie->item_obj = (*env)->NewGlobalRef (env, item_obj);
|
||||
peer_objGlobPtr = NSA_GET_GLOBAL_REF (env, peer_obj);
|
||||
g_assert (peer_objGlobPtr);
|
||||
item_objGlobPtr = NSA_GET_GLOBAL_REF (env, item_obj);
|
||||
g_assert (item_objGlobPtr);
|
||||
|
||||
ie->peer_obj = *peer_objGlobPtr;
|
||||
ie->item_obj = *item_objGlobPtr;
|
||||
|
||||
g_signal_connect (G_OBJECT (item), "activate",
|
||||
GTK_SIGNAL_FUNC (item_activate), ie);
|
||||
|
|
|
|||
|
|
@ -48,12 +48,16 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose
|
|||
{
|
||||
void *ptr;
|
||||
|
||||
/* Remove entries from state tables */
|
||||
NSA_DEL_GLOBAL_REF (env, obj);
|
||||
ptr = NSA_DEL_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
/* For now the native state for any object must be a widget.
|
||||
However, a subclass could override dispose() if required. */
|
||||
gdk_threads_enter ();
|
||||
gtk_widget_destroy (GTK_WIDGET (ptr));
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
|
|
@ -548,11 +552,11 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObjec
|
|||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals
|
||||
(JNIEnv *env, jobject peer_obj)
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, peer_obj);
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
g_assert (gref);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
|
|
@ -567,7 +571,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignal
|
|||
/* Connect EVENT signal, which happens _before_ any specific signal. */
|
||||
|
||||
g_signal_connect (GTK_OBJECT (ptr), "event",
|
||||
G_CALLBACK (pre_event_handler), peer_obj);
|
||||
G_CALLBACK (pre_event_handler), *gref);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,8 +47,11 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create
|
|||
GtkWidget *window;
|
||||
GtkWidget *vbox, *layout;
|
||||
|
||||
gdk_threads_enter ();
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
window = gtk_plug_new (window_id);
|
||||
|
||||
vbox = gtk_vbox_new (0, 0);
|
||||
|
|
|
|||
|
|
@ -1037,15 +1037,17 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
|
|||
case GDK_KEY_PRESS:
|
||||
case GDK_KEY_RELEASE:
|
||||
{
|
||||
GtkWindow *window;
|
||||
GdkWindow *obj_window;
|
||||
jobject *focus_obj_ptr = NULL;
|
||||
int generates_key_typed = 0;
|
||||
|
||||
/* A widget with a grab will get key events */
|
||||
if (!GTK_IS_WINDOW (widget))
|
||||
*focus_obj_ptr = peer;
|
||||
else
|
||||
{
|
||||
GtkWindow *window;
|
||||
|
||||
/* Check if we have an enabled focused widget in this window.
|
||||
If not don't handle the event. */
|
||||
window = GTK_WINDOW (widget);
|
||||
|
|
@ -1079,6 +1081,9 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
|
|||
/* If the window has no jobject attached we can't send anything */
|
||||
if (!focus_obj_ptr)
|
||||
return FALSE;
|
||||
|
||||
/* Should we generate an AWT_KEY_TYPED event? */
|
||||
generates_key_typed = generates_key_typed_event (event, window->focus_widget);
|
||||
}
|
||||
|
||||
if (event->type == GDK_KEY_PRESS)
|
||||
|
|
@ -1092,7 +1097,7 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
|
|||
keyevent_to_awt_keychar (event),
|
||||
keysym_to_awt_keylocation (event));
|
||||
|
||||
if (generates_key_typed_event (event, window->focus_widget))
|
||||
if (generates_key_typed)
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr,
|
||||
postKeyEventID,
|
||||
|
|
@ -1159,10 +1164,11 @@ connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...)
|
|||
{
|
||||
va_list ap;
|
||||
jobject *obj;
|
||||
void *ptr = NSA_GET_PTR (env, peer_obj);
|
||||
|
||||
obj = (jobject *) malloc (sizeof (jobject));
|
||||
*obj = (*env)->NewGlobalRef (env, peer_obj);
|
||||
//g_print("Connection obj %p\n", peer_obj);
|
||||
obj = NSA_GET_GLOBAL_REF (env, peer_obj);
|
||||
//g_print("Connection obj %s\n", gtk_widget_get_name (GTK_WIDGET (ptr)));
|
||||
g_assert (obj);
|
||||
|
||||
va_start (ap, nwindows);
|
||||
{
|
||||
|
|
@ -1170,7 +1176,6 @@ connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...)
|
|||
for (i = 0; i < nwindows; i++)
|
||||
{
|
||||
GdkWindow* attach = (va_arg (ap, GdkWindow *));
|
||||
//g_print("attach peer obj %p and %p\n", peer_obj, attach);
|
||||
attach_jobject(attach, obj);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,8 +49,13 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
|
|||
{
|
||||
gpointer widget;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
widget = gtk_type_new (gtk_file_selection_get_type ());
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, widget);
|
||||
|
|
|
|||
|
|
@ -48,10 +48,13 @@ Java_gnu_java_awt_peer_gtk_GtkLabelPeer_create
|
|||
GtkContainer *ebox_container;
|
||||
const char *str;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
str = (*env)->GetStringUTFChars (env, text, 0);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
|
||||
ebox = gtk_event_box_new ();
|
||||
ebox_container = GTK_CONTAINER (ebox);
|
||||
label = gtk_label_new (str);
|
||||
|
|
|
|||
|
|
@ -58,7 +58,11 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create
|
|||
{
|
||||
GtkWidget *list, *sw;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
list = gtk_clist_new (1);
|
||||
gtk_widget_show (list);
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
|
|
@ -66,6 +70,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create
|
|||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_container_add (GTK_CONTAINER (sw), list);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, sw);
|
||||
|
|
@ -90,12 +95,12 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_connectJObject
|
|||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
|
||||
(JNIEnv *env, jobject peer_obj)
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
GtkCList *list;
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, peer_obj);
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
g_assert (gref);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
|
|
@ -106,17 +111,17 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
|
|||
list = CLIST_FROM_SW (ptr);
|
||||
|
||||
g_signal_connect (G_OBJECT (list), "select_row",
|
||||
GTK_SIGNAL_FUNC (item_select), peer_obj);
|
||||
GTK_SIGNAL_FUNC (item_select), *gref);
|
||||
|
||||
g_signal_connect (G_OBJECT (list), "unselect_row",
|
||||
GTK_SIGNAL_FUNC (item_unselect), peer_obj);
|
||||
GTK_SIGNAL_FUNC (item_unselect), *gref);
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
/* FIXME: Cannot do that here or it will get the sw and not the list.
|
||||
We must a generic way of doing this. */
|
||||
/* Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, peer_obj); */
|
||||
g_signal_connect (GTK_OBJECT (list), "event",
|
||||
G_CALLBACK (pre_event_handler), peer_obj);
|
||||
G_CALLBACK (pre_event_handler), *gref);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
|
@ -319,6 +324,7 @@ item_select (GtkCList *list __attribute__((unused)),
|
|||
GdkEventButton *event __attribute__((unused)),
|
||||
jobject peer_obj)
|
||||
{
|
||||
//g_print ("select_row\n");
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer_obj,
|
||||
postListItemEventID,
|
||||
row,
|
||||
|
|
@ -332,6 +338,7 @@ item_unselect (GtkCList *list __attribute__((unused)),
|
|||
GdkEventButton *event __attribute__((unused)),
|
||||
jobject peer_obj)
|
||||
{
|
||||
//g_print ("unselect_row\n");
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer_obj,
|
||||
postListItemEventID,
|
||||
row,
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ exception statement from your version. */
|
|||
|
||||
#ifdef JVM_SUN
|
||||
struct state_table *native_state_table;
|
||||
struct state_table *native_global_ref_table;
|
||||
#endif
|
||||
|
||||
jmethodID setBoundsCallbackID;
|
||||
|
|
|
|||
|
|
@ -44,9 +44,14 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_create
|
|||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
widget = gtk_menu_bar_new ();
|
||||
gtk_widget_show (widget);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, widget);
|
||||
|
|
|
|||
|
|
@ -40,26 +40,35 @@ exception statement from your version. */
|
|||
#include "gnu_java_awt_peer_gtk_GtkMenuItemPeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
|
||||
|
||||
static void
|
||||
connect_activate_hook (JNIEnv *, jobject, GtkMenuItem *);
|
||||
static void item_activate (GtkMenuItem *item __attribute__((unused)),
|
||||
jobject *peer_obj);
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create
|
||||
(JNIEnv *env, jobject obj, jstring label)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
const char *str;
|
||||
jobject *gref;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
|
||||
str = (*env)->GetStringUTFChars (env, label, NULL);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
|
||||
if (strcmp (str, "-") == 0) /* "-" signals that we need a separator */
|
||||
widget = gtk_menu_item_new ();
|
||||
else
|
||||
widget = gtk_menu_item_new_with_label (str);
|
||||
|
||||
connect_activate_hook (env, obj, GTK_MENU_ITEM (widget));
|
||||
/* Connect activate hook */
|
||||
g_signal_connect (G_OBJECT (widget), "activate",
|
||||
GTK_SIGNAL_FUNC (item_activate), *gref);
|
||||
|
||||
gtk_widget_show (widget);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
(*env)->ReleaseStringUTFChars (env, label, str);
|
||||
|
|
@ -101,14 +110,3 @@ item_activate (GtkMenuItem *item __attribute__((unused)), jobject *peer_obj)
|
|||
postMenuActionEventID);
|
||||
}
|
||||
|
||||
static void
|
||||
connect_activate_hook (JNIEnv *env, jobject peer_obj, GtkMenuItem *item)
|
||||
{
|
||||
jobject *obj;
|
||||
|
||||
obj = (jobject *) malloc (sizeof (jobject));
|
||||
*obj = (*env)->NewGlobalRef (env, peer_obj);
|
||||
|
||||
g_signal_connect (G_OBJECT (item), "activate",
|
||||
GTK_SIGNAL_FUNC (item_activate), obj);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,9 +92,13 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
|
|||
GtkWidget *menu_title, *menu;
|
||||
const char *str;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
str = (*env)->GetStringUTFChars (env, label, NULL);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
menu = gtk_menu_new ();
|
||||
|
||||
menu_title = gtk_menu_item_new_with_label (str);
|
||||
|
|
@ -104,6 +108,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
|
|||
gtk_widget_show (menu_title);
|
||||
|
||||
NSA_SET_PTR (env, obj, menu_title);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
(*env)->ReleaseStringUTFChars (env, label, str);
|
||||
|
|
|
|||
|
|
@ -46,8 +46,13 @@ Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create
|
|||
{
|
||||
gpointer widget;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
widget = gtk_layout_new (NULL, NULL);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, widget);
|
||||
|
|
@ -80,13 +85,14 @@ JNIEXPORT void JNICALL
|
|||
Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
g_assert (gref);
|
||||
|
||||
gdk_threads_enter ();
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
/* FIXME: If we don't need this then remove this method. */
|
||||
/* g_signal_connect (G_OBJECT (ptr), "size_request", GTK_SIGNAL_FUNC (sr), */
|
||||
/* NULL); */
|
||||
gdk_threads_leave ();
|
||||
|
|
@ -95,6 +101,8 @@ Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals
|
|||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
}
|
||||
|
||||
/* FIXME: The following doesn't seem to be used.
|
||||
Is not declared as a native function in GtkPanelPeer.java */
|
||||
/*
|
||||
* Make a new panel.
|
||||
*/
|
||||
|
|
@ -105,19 +113,26 @@ Java_gnu_java_awt_peer_gtk_GtkPanelPeer_gtkPanelNew
|
|||
GtkWidget *layout;
|
||||
void *parent;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
parent = NSA_GET_PTR (env, parent_obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
layout = gtk_layout_new (NULL, NULL);
|
||||
|
||||
set_parent (layout, GTK_CONTAINER (parent));
|
||||
|
||||
gtk_widget_realize (layout);
|
||||
|
||||
connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window);
|
||||
|
||||
set_visible (layout, 1);
|
||||
|
||||
NSA_SET_PTR (env, obj, layout);
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, layout);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -108,13 +108,18 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
|
|||
GtkWidget *sb;
|
||||
GtkObject *adj;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
adj = gtk_adjustment_new (value, min, max,
|
||||
step_incr, page_incr,
|
||||
visible_amount);
|
||||
|
||||
sb = (orientation) ? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) :
|
||||
gtk_hscrollbar_new (GTK_ADJUSTMENT (adj));
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, sb);
|
||||
|
|
@ -141,19 +146,19 @@ JNIEXPORT void JNICALL
|
|||
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
struct range_scrollbar *rs;
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
g_assert (gref);
|
||||
|
||||
rs = (struct range_scrollbar *) malloc (sizeof (struct range_scrollbar));
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
rs->range = GTK_RANGE (ptr);
|
||||
rs->scrollbar = (jobject *) malloc (sizeof (jobject));
|
||||
*(rs->scrollbar) = (*env)->NewGlobalRef (env, obj);
|
||||
rs->scrollbar = gref;
|
||||
|
||||
g_signal_connect (G_OBJECT (GTK_RANGE (ptr)),
|
||||
"move-slider",
|
||||
|
|
|
|||
|
|
@ -45,8 +45,13 @@ Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create
|
|||
{
|
||||
gpointer window;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
window = gtk_scrolled_window_new (NULL, NULL);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, window);
|
||||
|
|
|
|||
|
|
@ -46,8 +46,11 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
|
|||
{
|
||||
GtkWidget *text, *sw;
|
||||
|
||||
gdk_threads_enter ();
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
text = gtk_text_view_new ();
|
||||
gtk_widget_show (text);
|
||||
|
||||
|
|
|
|||
|
|
@ -51,26 +51,26 @@ JNIEXPORT void JNICALL
|
|||
Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
GtkTextView *text = NULL;
|
||||
GtkTextBuffer *buf;
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
g_assert (gref);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
if (GTK_IS_ENTRY(ptr))
|
||||
{
|
||||
g_signal_connect (GTK_ENTRY (ptr)->im_context, "commit",
|
||||
G_CALLBACK (textcomponent_commit_cb), obj);
|
||||
G_CALLBACK (textcomponent_commit_cb), *gref);
|
||||
|
||||
g_signal_connect (GTK_EDITABLE (ptr), "changed",
|
||||
G_CALLBACK (textcomponent_changed_cb), obj);
|
||||
G_CALLBACK (textcomponent_changed_cb), *gref);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, *gref);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -86,20 +86,20 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals
|
|||
if (text)
|
||||
{
|
||||
g_signal_connect (text->im_context, "commit",
|
||||
G_CALLBACK (textcomponent_commit_cb), obj);
|
||||
G_CALLBACK (textcomponent_commit_cb), *gref);
|
||||
|
||||
buf = gtk_text_view_get_buffer (text);
|
||||
if (buf)
|
||||
g_signal_connect (buf, "changed",
|
||||
G_CALLBACK (textcomponent_changed_cb), obj);
|
||||
G_CALLBACK (textcomponent_changed_cb), *gref);
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
/* FIXME: Cannot do that here or it will get the sw and not the list.
|
||||
We must a generic way of doing this. */
|
||||
/* Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env,
|
||||
peer_obj); */
|
||||
obj); */
|
||||
g_signal_connect (GTK_OBJECT (text), "event",
|
||||
G_CALLBACK (pre_event_handler), obj);
|
||||
G_CALLBACK (pre_event_handler), *gref);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,8 +45,13 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create
|
|||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
widget = gtk_entry_new ();
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, widget);
|
||||
|
|
|
|||
|
|
@ -74,7 +74,11 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
|
|||
void *window_parent;
|
||||
GtkWidget *vbox, *layout;
|
||||
|
||||
/* Create global reference and save it for future use */
|
||||
NSA_SET_GLOBAL_REF (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
window_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
window = GTK_WINDOW (window_widget);
|
||||
|
||||
|
|
@ -179,9 +183,9 @@ JNIEXPORT void JNICALL
|
|||
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
|
||||
g_assert (gref);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
|
|
@ -189,22 +193,22 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
|
|||
|
||||
/* Connect signals for window event support. */
|
||||
g_signal_connect (G_OBJECT (ptr), "delete-event",
|
||||
G_CALLBACK (window_delete_cb), obj);
|
||||
G_CALLBACK (window_delete_cb), *gref);
|
||||
|
||||
g_signal_connect (G_OBJECT (ptr), "destroy-event",
|
||||
G_CALLBACK (window_destroy_cb), obj);
|
||||
G_CALLBACK (window_destroy_cb), *gref);
|
||||
|
||||
g_signal_connect (G_OBJECT (ptr), "show",
|
||||
G_CALLBACK (window_show_cb), obj);
|
||||
G_CALLBACK (window_show_cb), *gref);
|
||||
|
||||
g_signal_connect (G_OBJECT (ptr), "focus-in-event",
|
||||
G_CALLBACK (window_focus_in_cb), obj);
|
||||
G_CALLBACK (window_focus_in_cb), *gref);
|
||||
|
||||
g_signal_connect (G_OBJECT (ptr), "focus-out-event",
|
||||
G_CALLBACK (window_focus_out_cb), obj);
|
||||
G_CALLBACK (window_focus_out_cb), *gref);
|
||||
|
||||
g_signal_connect (G_OBJECT (ptr), "window-state-event",
|
||||
G_CALLBACK (window_window_state_cb), obj);
|
||||
G_CALLBACK (window_window_state_cb), *gref);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
|
|
|
|||
|
|
@ -61,9 +61,11 @@ exception statement from your version. */
|
|||
#ifdef JVM_SUN
|
||||
|
||||
extern struct state_table *native_state_table;
|
||||
extern struct state_table *native_global_ref_table;
|
||||
|
||||
#define NSA_INIT(env, clazz) \
|
||||
native_state_table = init_state_table (env, clazz)
|
||||
do {native_state_table = init_state_table (env, clazz); \
|
||||
native_global_ref_table = init_state_table (env, clazz);} while (0)
|
||||
|
||||
#define NSA_GET_PTR(env, obj) \
|
||||
get_state (env, obj, native_state_table)
|
||||
|
|
@ -74,6 +76,21 @@ extern struct state_table *native_state_table;
|
|||
#define NSA_DEL_PTR(env, obj) \
|
||||
remove_state_slot (env, obj, native_state_table)
|
||||
|
||||
#define NSA_GET_GLOBAL_REF(env, obj) \
|
||||
get_state (env, obj, native_global_ref_table)
|
||||
|
||||
#define NSA_SET_GLOBAL_REF(env, obj) \
|
||||
do {jobject *globRefPtr; \
|
||||
globRefPtr = (jobject *) malloc (sizeof (jobject)); \
|
||||
*globRefPtr = (*env)->NewGlobalRef (env, obj); \
|
||||
set_state (env, obj, native_global_ref_table, (void *)globRefPtr);} while (0)
|
||||
|
||||
#define NSA_DEL_GLOBAL_REF(env, obj) \
|
||||
do {jobject *globRefPtr = get_state (env, obj, native_global_ref_table); \
|
||||
remove_state_slot (env, obj, native_global_ref_table); \
|
||||
(*env)->DeleteGlobalRef (env, *globRefPtr); \
|
||||
free (globRefPtr);} while (0)
|
||||
|
||||
#endif /* JVM_SUN */
|
||||
|
||||
struct graphics
|
||||
|
|
|
|||
Loading…
Reference in New Issue