#include "gtkpeer.h"
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include "classpath_jawt.h"
jint
classpath_jawt_get_awt_version ()
{
return CLASSPATH_JAWT_VERSION;
}
Display*
classpath_jawt_get_default_display (JNIEnv* env, jobject canvas)
{
GdkDisplay *display;
Display *xdisplay;
GtkWidget *widget;
void *ptr;
jobject peer;
jclass class_id;
jmethodID method_id;
class_id = (*env)->GetObjectClass (env, canvas);
method_id = (*env)->GetMethodID (env, class_id,
"getPeer",
"()Ljava/awt/peer/ComponentPeer;");
peer = (*env)->CallObjectMethod (env, canvas, method_id);
ptr = NSA_GET_PTR (env, peer);
gdk_threads_enter ();
widget = GTK_WIDGET (ptr);
g_assert (GTK_WIDGET_REALIZED (widget));
display = gtk_widget_get_display (widget);
xdisplay = GDK_DISPLAY_XDISPLAY (display);
gdk_threads_leave ();
return xdisplay;
}
VisualID
classpath_jawt_get_visualID (JNIEnv* env, jobject canvas)
{
GtkWidget *widget;
Visual *visual;
void *ptr;
jobject peer;
jclass class_id;
jmethodID method_id;
class_id = (*env)->GetObjectClass (env, canvas);
method_id = (*env)->GetMethodID (env, class_id,
"getPeer",
"()Ljava/awt/peer/ComponentPeer;");
peer = (*env)->CallObjectMethod (env, canvas, method_id);
ptr = NSA_GET_PTR (env, peer);
gdk_threads_enter ();
widget = GTK_WIDGET (ptr);
g_assert (GTK_WIDGET_REALIZED (widget));
visual = gdk_x11_visual_get_xvisual (gtk_widget_get_visual (widget));
g_assert (visual != NULL);
gdk_threads_leave ();
return visual->visualid;
}
Drawable
classpath_jawt_get_drawable (JNIEnv* env, jobject canvas)
{
GtkWidget *widget;
int drawable;
void *ptr;
jobject peer;
jclass class_id;
jmethodID method_id;
class_id = (*env)->GetObjectClass (env, canvas);
method_id = (*env)->GetMethodID (env, class_id,
"getPeer",
"()Ljava/awt/peer/ComponentPeer;");
peer = (*env)->CallObjectMethod (env, canvas, method_id);
ptr = NSA_GET_PTR (env, peer);
gdk_threads_enter ();
widget = GTK_WIDGET (ptr);
g_assert (GTK_WIDGET_REALIZED (widget));
drawable = GDK_DRAWABLE_XID (widget->window);
gdk_threads_leave ();
return drawable;
}
jint
classpath_jawt_lock ()
{
gdk_threads_enter ();
return 0;
}
void
classpath_jawt_unlock ()
{
gdk_threads_leave ();
}