Commit 29e531ff by Thomas Fitzsimmons Committed by Thomas Fitzsimmons

glib-2.0.m4: New file.

	* glib-2.0.m4: New file.
	* gtk-2.0.m4: New file.
	* glib.m4: Remove.
	* gtk.m4: Remove.
	* configure.in: Update AM_PATH_GTK macro call to
	AM_PATH_GTK_2_0.  Likewise for AM_PATH_GLIB.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,
	jni/gtk-peer/gthread-jni.c,
	jni/gtk-peer/gthread-jni.h:
	New versions from classpath.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* gcj/Makefile.in: Regenerate.
	* include/Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.

From-SVN: r68746
parent 884a757a
2003-06-30 Thomas Fitzsimmons <fitzsim@redhat.com>
* glib-2.0.m4: New file.
* gtk-2.0.m4: New file.
* glib.m4: Remove.
* gtk.m4: Remove.
* configure.in: Update AM_PATH_GTK macro call to
AM_PATH_GTK_2_0. Likewise for AM_PATH_GLIB.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,
jni/gtk-peer/gthread-jni.c,
jni/gtk-peer/gthread-jni.h:
New versions from classpath.
* aclocal.m4: Regenerate.
* configure: Regenerate.
* Makefile.in: Regenerate.
* gcj/Makefile.in: Regenerate.
* include/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
2003-06-30 Gary Benson <gbenson@redhat.com> 2003-06-30 Gary Benson <gbenson@redhat.com>
For PR libgcj/11349: For PR libgcj/11349:
......
...@@ -86,10 +86,11 @@ GCOBJS = @GCOBJS@ ...@@ -86,10 +86,11 @@ GCOBJS = @GCOBJS@
GCSPEC = @GCSPEC@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@ GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@ GLIB_LIBS = @GLIB_LIBS@
GLIB_MKENUMS = @GLIB_MKENUMS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GTK_CFLAGS = @GTK_CFLAGS@ GTK_CFLAGS = @GTK_CFLAGS@
GTK_CONFIG = @GTK_CONFIG@
GTK_LIBS = @GTK_LIBS@ GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
IEEESPEC = @IEEESPEC@ IEEESPEC = @IEEESPEC@
...@@ -115,6 +116,7 @@ OBJDUMP = @OBJDUMP@ ...@@ -115,6 +116,7 @@ OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PERL = @PERL@ PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PLATFORMOBJS = @PLATFORMOBJS@ PLATFORMOBJS = @PLATFORMOBJS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
STRIP = @STRIP@ STRIP = @STRIP@
...@@ -4284,7 +4286,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) ...@@ -4284,7 +4286,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 \ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 \
./acinclude.m4 ./aclocal.m4 ./glib.m4 ./gtk.m4 \ ./acinclude.m4 ./aclocal.m4 ./glib-2.0.m4 ./gtk-2.0.m4 \
./libart.m4 ./libart.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -785,8 +785,8 @@ else ...@@ -785,8 +785,8 @@ else
# Test for Gtk stuff, if asked for. # Test for Gtk stuff, if asked for.
if test "$use_gtk_awt" = yes; then if test "$use_gtk_awt" = yes; then
AM_PATH_GTK(1.2.4,,exit 1) AM_PATH_GTK_2_0(2.0.0,,exit 1)
AM_PATH_GLIB(1.2.4,,exit 1,gthread) AM_PATH_GLIB_2_0(2.0.0,,exit 1,gthread)
dnl XXX Fix me when libart.m4 has the compile test fixed! dnl XXX Fix me when libart.m4 has the compile test fixed!
enable_libarttest=no enable_libarttest=no
AM_PATH_LIBART(2.1.0,,exit 1) AM_PATH_LIBART(2.1.0,,exit 1)
......
...@@ -87,10 +87,11 @@ GCOBJS = @GCOBJS@ ...@@ -87,10 +87,11 @@ GCOBJS = @GCOBJS@
GCSPEC = @GCSPEC@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@ GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@ GLIB_LIBS = @GLIB_LIBS@
GLIB_MKENUMS = @GLIB_MKENUMS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GTK_CFLAGS = @GTK_CFLAGS@ GTK_CFLAGS = @GTK_CFLAGS@
GTK_CONFIG = @GTK_CONFIG@
GTK_LIBS = @GTK_LIBS@ GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
IEEESPEC = @IEEESPEC@ IEEESPEC = @IEEESPEC@
...@@ -117,6 +118,7 @@ OBJDUMP = @OBJDUMP@ ...@@ -117,6 +118,7 @@ OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PERL = @PERL@ PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PLATFORMOBJS = @PLATFORMOBJS@ PLATFORMOBJS = @PLATFORMOBJS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
STRIP = @STRIP@ STRIP = @STRIP@
......
...@@ -87,10 +87,11 @@ GCOBJS = @GCOBJS@ ...@@ -87,10 +87,11 @@ GCOBJS = @GCOBJS@
GCSPEC = @GCSPEC@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@ GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@ GLIB_LIBS = @GLIB_LIBS@
GLIB_MKENUMS = @GLIB_MKENUMS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GTK_CFLAGS = @GTK_CFLAGS@ GTK_CFLAGS = @GTK_CFLAGS@
GTK_CONFIG = @GTK_CONFIG@
GTK_LIBS = @GTK_LIBS@ GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
IEEESPEC = @IEEESPEC@ IEEESPEC = @IEEESPEC@
...@@ -117,6 +118,7 @@ OBJDUMP = @OBJDUMP@ ...@@ -117,6 +118,7 @@ OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PERL = @PERL@ PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PLATFORMOBJS = @PLATFORMOBJS@ PLATFORMOBJS = @PLATFORMOBJS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
STRIP = @STRIP@ STRIP = @STRIP@
......
/* gdkgraphics.c /* gdkgraphics.c
Copyright (C) 1999, 2003 Free Software Foundation, Inc. Copyright (C) 1999 Free Software Foundation, Inc.
This file is part of GNU Classpath. This file is part of GNU Classpath.
...@@ -40,7 +40,7 @@ exception statement from your version. */ ...@@ -40,7 +40,7 @@ exception statement from your version. */
#include <gdk/gdkprivate.h> #include <gdk/gdkprivate.h>
#include <gdk/gdkx.h> #include <gdk/gdkx.h>
#define GDK_STABLE_IS_PIXMAP(d) (((GdkWindowPrivate *)d)->window_type == GDK_WINDOW_PIXMAP) #define GDK_STABLE_IS_PIXMAP(d) (GDK_IS_PIXMAP(d))
GdkPoint * GdkPoint *
translate_points (JNIEnv *env, jintArray xpoints, jintArray ypoints, translate_points (JNIEnv *env, jintArray xpoints, jintArray ypoints,
......
...@@ -42,47 +42,43 @@ exception statement from your version. */ ...@@ -42,47 +42,43 @@ exception statement from your version. */
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
(JNIEnv *env, jobject obj) (JNIEnv *env, jobject obj)
{ {
gpointer widget; GtkButton *button;
gdk_threads_enter (); gdk_threads_enter ();
widget = gtk_type_new (gtk_button_get_type ()); button = gtk_button_new();
gtk_widget_show (GTK_WIDGET(button));
gdk_threads_leave (); gdk_threads_leave ();
NSA_SET_PTR (env, obj, button);
NSA_SET_PTR (env, obj, widget);
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont
(JNIEnv *env, jobject obj, jstring jname, jint size) (JNIEnv *env, jobject obj, jstring jname, jint size)
{ {
const char *xlfd; const char *font_name;
# define FBUFSZ 200
char buf[FBUFSZ];
void *ptr; void *ptr;
GdkFont * new_font; GtkWidget *button;
GtkStyle * style; GtkWidget *label;
GtkWidget * button; PangoFontDescription *font_desc;
GtkWidget * label;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
button = GTK_WIDGET (ptr); button = GTK_WIDGET (ptr);
label = GTK_BIN(button)->child; label = gtk_bin_get_child (GTK_BIN(button));
if (label == NULL) return; if (!label)
xlfd = (*env)->GetStringUTFChars (env, jname, NULL);
snprintf(buf, FBUFSZ, xlfd, size);
(*env)->ReleaseStringUTFChars (env, jname, xlfd);
gdk_threads_enter();
new_font = gdk_font_load (buf); /* FIXME: deprecated. Replacement? */
if (new_font == NULL)
{
/* Fail quietly for now. */
gdk_threads_leave();
return; return;
}
style = gtk_style_copy (gtk_widget_get_style (label)); font_name = (*env)->GetStringUTFChars (env, jname, NULL);
style -> font = new_font;
gtk_widget_set_style (label, style); gdk_threads_enter();
/* FIXME: Documentation varies as to whether we should unref style. */
font_desc = pango_font_description_from_string (font_name);
pango_font_description_set_size (font_desc, size);
gtk_widget_modify_font (GTK_WIDGET(label), font_desc);
pango_font_description_free (font_desc);
gdk_threads_leave(); gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, font_name);
} }
...@@ -40,22 +40,6 @@ exception statement from your version. */ ...@@ -40,22 +40,6 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include <gtk/gtkprivate.h> #include <gtk/gtkprivate.h>
#define GTK_OBJECT_SETV(ptr, arg) \
gdk_threads_enter (); \
{ \
GtkArgInfo *info = NULL; \
char *error; \
\
error = gtk_object_arg_get_info (GTK_OBJECT_TYPE (ptr), arg.name, &info); \
if (error) \
{ \
/* assume the argument is destined for the container's only child */ \
ptr = gtk_container_children (GTK_CONTAINER (ptr))->data; \
} \
gtk_object_setv (GTK_OBJECT (ptr), 1, &arg); \
} \
gdk_threads_leave (); \
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose
(JNIEnv *env, jobject obj) (JNIEnv *env, jobject obj)
{ {
...@@ -519,8 +503,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_S ...@@ -519,8 +503,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_S
arg.type = GTK_TYPE_STRING; arg.type = GTK_TYPE_STRING;
arg.name = (char *) name; arg.name = (char *) name;
GTK_VALUE_STRING (arg) = (char *) value; GTK_VALUE_STRING (arg) = (char *) value;
gdk_threads_enter();
GTK_OBJECT_SETV (ptr, arg); g_object_set(ptr, name, value, NULL);
gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, name); (*env)->ReleaseStringUTFChars (env, jname, name);
(*env)->ReleaseStringUTFChars (env, jvalue, value); (*env)->ReleaseStringUTFChars (env, jvalue, value);
...@@ -540,7 +525,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la ...@@ -540,7 +525,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la
arg.name = (char *) name; arg.name = (char *) name;
GTK_VALUE_BOOL (arg) = value; GTK_VALUE_BOOL (arg) = value;
GTK_OBJECT_SETV (ptr, arg); gdk_threads_enter();
g_object_set(ptr, name, value, NULL);
gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, name); (*env)->ReleaseStringUTFChars (env, jname, name);
} }
...@@ -559,7 +546,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la ...@@ -559,7 +546,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la
arg.name = (char *) name; arg.name = (char *) name;
GTK_VALUE_INT (arg) = value; GTK_VALUE_INT (arg) = value;
GTK_OBJECT_SETV (ptr, arg); gdk_threads_enter();
g_object_set(ptr, name, value, NULL);
gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, name); (*env)->ReleaseStringUTFChars (env, jname, name);
} }
...@@ -578,7 +567,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la ...@@ -578,7 +567,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_la
arg.name = (char *) name; arg.name = (char *) name;
GTK_VALUE_FLOAT (arg) = value; GTK_VALUE_FLOAT (arg) = value;
GTK_OBJECT_SETV (ptr, arg); gdk_threads_enter();
g_object_set(ptr, name, value, NULL);
gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, name); (*env)->ReleaseStringUTFChars (env, jname, name);
} }
...@@ -611,7 +602,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_O ...@@ -611,7 +602,9 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_O
arg.name = (char *) name; arg.name = (char *) name;
GTK_VALUE_OBJECT (arg) = GTK_OBJECT (ptr2); GTK_VALUE_OBJECT (arg) = GTK_OBJECT (ptr2);
GTK_OBJECT_SETV (ptr1, arg); gdk_threads_enter();
g_object_set(ptr1, name, ptr2, NULL);
gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, name); (*env)->ReleaseStringUTFChars (env, jname, name);
} }
...@@ -644,6 +637,15 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks ...@@ -644,6 +637,15 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks
gdk_threads_enter (); gdk_threads_enter ();
gtk_widget_realize (GTK_WIDGET (ptr)); gtk_widget_realize (GTK_WIDGET (ptr));
if(GTK_IS_BUTTON(ptr))
{
g_print("-- connecting a button --\n");
connect_awt_hook (env, obj, 1, GTK_BUTTON(ptr)->event_window);
}
else
{
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window); connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
g_print("Connection object %p with window %p (but ptr is %p)\n", obj, GTK_WIDGET(ptr)->window, ptr);
}
gdk_threads_leave (); gdk_threads_leave ();
} }
...@@ -526,6 +526,7 @@ attach_jobject (GdkWindow *window, jobject *obj) ...@@ -526,6 +526,7 @@ attach_jobject (GdkWindow *window, jobject *obj)
| GDK_KEY_PRESS_MASK | GDK_KEY_PRESS_MASK
| GDK_FOCUS_CHANGE_MASK); | GDK_FOCUS_CHANGE_MASK);
// g_print("storing obj %p property on window %p\n", obj, window);
gdk_property_change (window, gdk_property_change (window,
addr_atom, addr_atom,
type_atom, type_atom,
...@@ -538,15 +539,22 @@ attach_jobject (GdkWindow *window, jobject *obj) ...@@ -538,15 +539,22 @@ attach_jobject (GdkWindow *window, jobject *obj)
void void
connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...) connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...)
{ {
int i;
va_list ap; va_list ap;
jobject *obj; jobject *obj;
obj = (jobject *) malloc (sizeof (jobject)); obj = (jobject *) malloc (sizeof (jobject));
*obj = (*env)->NewGlobalRef (env, peer_obj); *obj = (*env)->NewGlobalRef (env, peer_obj);
//g_print("Connection obj %p\n", peer_obj);
va_start (ap, nwindows); va_start (ap, nwindows);
{
int i;
for (i = 0; i < nwindows; i++) for (i = 0; i < nwindows; i++)
attach_jobject (va_arg (ap, GdkWindow *), obj); {
GdkWindow* attach = (va_arg (ap, GdkWindow *));
//g_print("attach peer obj %p and %p\n", peer_obj, attach);
attach_jobject(attach, obj);
}
}
va_end (ap); va_end (ap);
} }
...@@ -251,33 +251,9 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize ...@@ -251,33 +251,9 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize
list = GTK_WIDGET (CLIST_FROM_SW (ptr)); list = GTK_WIDGET (CLIST_FROM_SW (ptr));
sw = GTK_SCROLLED_WINDOW (ptr); sw = GTK_SCROLLED_WINDOW (ptr);
/* gtk_widget_size_request(list, &myreq);
gtk_widget_size_request(GTK_WIDGET (GTK_SCROLLED_WINDOW(sw)->hscrollbar), dims[1]=myreq.height;
&myreq); dims[0]=myreq.width;
dims[1]=myreq.height+GTK_SCROLLED_WINDOW_CLASS
(GTK_OBJECT (sw)->klass)->scrollbar_spacing;
*/
gtk_signal_emit_by_name (GTK_OBJECT (GTK_SCROLLED_WINDOW(sw)->vscrollbar),
"size_request", &myreq);
/*
gtk_widget_size_request(GTK_WIDGET (GTK_SCROLLED_WINDOW(sw)->vscrollbar),
&myreq);
*/
dims[0]=myreq.width+GTK_SCROLLED_WINDOW_CLASS
(GTK_OBJECT (sw)->klass)->scrollbar_spacing;
gtk_signal_emit_by_name (GTK_OBJECT (list), "size_request", &myreq);
// gtk_widget_size_request(GTK_WIDGET (list), &myreq);
dims[0] += myreq.width + gdk_char_width (list->style->font, 'W');
dims[1] += ((rows * (gdk_char_height (list->style->font, 'W')+7))
+ (2 * (list->style->klass->ythickness)));
gdk_threads_leave (); gdk_threads_leave ();
......
...@@ -56,6 +56,10 @@ jmethodID postItemEventID; ...@@ -56,6 +56,10 @@ jmethodID postItemEventID;
jmethodID postListItemEventID; jmethodID postListItemEventID;
JNIEnv *gdk_env; JNIEnv *gdk_env;
#ifdef PORTABLE_NATIVE_SYNC
JavaVM *gdk_vm;
#endif
/* /*
* Call gtk_init. It is very important that this happen before any other * Call gtk_init. It is very important that this happen before any other
* gtk calls. * gtk calls.
...@@ -81,7 +85,16 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz) ...@@ -81,7 +85,16 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz)
/* until we have JDK 1.2 JNI, assume we have a VM with threads that /* until we have JDK 1.2 JNI, assume we have a VM with threads that
match what GLIB was compiled for */ match what GLIB was compiled for */
g_thread_init (NULL); #ifdef PORTABLE_NATIVE_SYNC
(*env)->GetJavaVM( env, &gdk_vm );
g_thread_init ( &g_thread_jni_functions );
printf("called gthread init\n");
#else
g_thread_init ( NULL );
#endif
/* From GDK 2.0 onwards we have to explicitly call gdk_threads_init */
gdk_threads_init();
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
......
...@@ -46,11 +46,15 @@ struct range_scrollbar ...@@ -46,11 +46,15 @@ struct range_scrollbar
}; };
static void static void
post_adjustment_event (GtkAdjustment *adj, struct range_scrollbar *rs) post_adjustment_event (GtkRange *range, GtkScrollType scroll,
struct range_scrollbar *rs)
{ {
jint type; jint type;
GtkAdjustment *adj;
adj = gtk_range_get_adjustment (range);
switch (rs->range->scroll_type) switch (scroll)
{ {
case GTK_SCROLL_STEP_FORWARD: case GTK_SCROLL_STEP_FORWARD:
type = AWT_ADJUSTMENT_UNIT_INCREMENT; type = AWT_ADJUSTMENT_UNIT_INCREMENT;
...@@ -113,15 +117,11 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectHooks ...@@ -113,15 +117,11 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectHooks
rs->range = GTK_RANGE (ptr); rs->range = GTK_RANGE (ptr);
rs->scrollbar = (jobject *) malloc (sizeof (jobject)); rs->scrollbar = (jobject *) malloc (sizeof (jobject));
*(rs->scrollbar) = (*env)->NewGlobalRef (env, obj); *(rs->scrollbar) = (*env)->NewGlobalRef (env, obj);
gtk_signal_connect (GTK_OBJECT (GTK_RANGE (ptr)->adjustment), gtk_signal_connect (GTK_OBJECT (GTK_RANGE (ptr)),
"value_changed", "move_slider",
GTK_SIGNAL_FUNC (post_adjustment_event), rs); GTK_SIGNAL_FUNC (post_adjustment_event), rs);
connect_awt_hook (env, obj, 4, connect_awt_hook (env, obj, 1, GTK_SCROLLBAR (ptr)->range);
GTK_RANGE (ptr)->trough,
GTK_RANGE (ptr)->slider,
GTK_RANGE (ptr)->step_forw,
GTK_RANGE (ptr)->step_back);
gdk_threads_leave (); gdk_threads_leave ();
} }
......
...@@ -39,7 +39,7 @@ exception statement from your version. */ ...@@ -39,7 +39,7 @@ exception statement from your version. */
#include "gtkpeer.h" #include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkTextAreaPeer.h" #include "gnu_java_awt_peer_gtk_GtkTextAreaPeer.h"
#define TEXT_FROM_SW(obj) (GTK_TEXT(GTK_SCROLLED_WINDOW (obj)->container.child)) #define TEXT_FROM_SW(obj) (GTK_TEXT_VIEW(GTK_SCROLLED_WINDOW (obj)->container.child))
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
(JNIEnv *env, jobject obj, jint scroll) (JNIEnv *env, jobject obj, jint scroll)
...@@ -47,7 +47,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create ...@@ -47,7 +47,7 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
GtkWidget *text, *sw; GtkWidget *text, *sw;
gdk_threads_enter (); gdk_threads_enter ();
text = gtk_text_new (NULL, NULL); text = gtk_text_view_new ();
gtk_widget_show (text); gtk_widget_show (text);
sw = gtk_scrolled_window_new (NULL, NULL); sw = gtk_scrolled_window_new (NULL, NULL);
...@@ -64,54 +64,9 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create ...@@ -64,54 +64,9 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
(scroll == AWT_TEXTAREA_SCROLLBARS_BOTH (scroll == AWT_TEXTAREA_SCROLLBARS_BOTH
|| scroll == AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY) ? || scroll == AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY) ?
GTK_POLICY_ALWAYS : GTK_POLICY_NEVER); GTK_POLICY_ALWAYS : GTK_POLICY_NEVER);
gdk_threads_leave ();
NSA_SET_PTR (env, obj, sw);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_old_create
(JNIEnv *env, jobject obj, jobject parent_obj,
jstring contents, jint scroll)
{
GtkWidget *text, *sw;
const char *str;
int pos=0;
void *parent;
parent = NSA_GET_PTR (env, parent_obj);
str = (*env)->GetStringUTFChars (env, contents, NULL);
gdk_threads_enter ();
text = gtk_text_new (NULL, NULL);
gtk_text_set_editable (GTK_TEXT (text), TRUE);
gtk_editable_insert_text (GTK_EDITABLE (text), str,
strlen (str), &pos);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (sw), text);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
/* horizontal scrollbar */
(scroll == AWT_TEXTAREA_SCROLLBARS_BOTH
|| scroll == AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY) ?
GTK_POLICY_ALWAYS : GTK_POLICY_NEVER,
/* vertical scrollbar */
(scroll == AWT_TEXTAREA_SCROLLBARS_BOTH
|| scroll == AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY) ?
GTK_POLICY_ALWAYS : GTK_POLICY_NEVER);
set_visible (text, TRUE);
set_parent (sw, GTK_CONTAINER (parent));
gdk_threads_leave (); gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, contents, str);
NSA_SET_PTR (env, obj, sw); NSA_SET_PTR (env, obj, sw);
} }
...@@ -122,8 +77,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkTextGetSize ...@@ -122,8 +77,8 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkTextGetSize
void *ptr; void *ptr;
jint *dims; jint *dims;
GtkWidget *text; GtkWidget *text;
GtkScrolledWindow *sw; /* GtkScrolledWindow *sw; */
GtkRequisition myreq; GtkRequisition requisition;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
...@@ -133,35 +88,11 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkTextGetSize ...@@ -133,35 +88,11 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkTextGetSize
gdk_threads_enter (); gdk_threads_enter ();
text = GTK_WIDGET (TEXT_FROM_SW (ptr)); text = GTK_WIDGET (TEXT_FROM_SW (ptr));
sw = GTK_SCROLLED_WINDOW (ptr); /* sw = GTK_SCROLLED_WINDOW (ptr); */
gtk_signal_emit_by_name (GTK_OBJECT (GTK_SCROLLED_WINDOW(sw)->vscrollbar),
"size_request", &myreq);
//gtk_widget_size_request(GTK_WIDGET (GTK_SCROLLED_WINDOW(sw)->hscrollbar),
// &myreq);
dims[0]=myreq.width+GTK_SCROLLED_WINDOW_CLASS
(GTK_OBJECT (sw)->klass)->scrollbar_spacing;
gtk_signal_emit_by_name (GTK_OBJECT (GTK_SCROLLED_WINDOW(sw)->hscrollbar),
"size_request", &myreq);
//gtk_widget_size_request(GTK_WIDGET (GTK_SCROLLED_WINDOW(sw)->vscrollbar),
// &myreq);
dims[1]=myreq.height+GTK_SCROLLED_WINDOW_CLASS
(GTK_OBJECT (sw)->klass)->scrollbar_spacing;
/* The '1' in the following assignments is from
#define TEXT_BORDER_ROOM 1
in gtktext.c */
/* Gtk text seems to wrap slightly prematurely. Compensate. */
++cols;
++dims[0];
dims[0] += ((cols * gdk_char_width (text->style->font, 'W')) gtk_widget_size_request(GTK_WIDGET (text), &requisition);
+ (2 * (text->style->klass->xthickness + 1))); dims[0] = requisition.width;
/* Guess at the height. Is there a better way? */ dims[1] = requisition.height;
dims[1] += ((rows * gdk_string_height (text->style->font, "Wg"))
+ (2 * (text->style->klass->ythickness + 1)));
gdk_threads_leave (); gdk_threads_leave ();
...@@ -173,6 +104,9 @@ JNIEXPORT void JNICALL ...@@ -173,6 +104,9 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert
(JNIEnv *env, jobject obj, jstring contents, jint position) (JNIEnv *env, jobject obj, jstring contents, jint position)
{ {
GtkTextBuffer *buf;
GtkTextIter iter;
GtkWidget *text;
void *ptr; void *ptr;
const char *str; const char *str;
int pos=position; int pos=position;
...@@ -181,8 +115,13 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert ...@@ -181,8 +115,13 @@ Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert
str = (*env)->GetStringUTFChars (env, contents, NULL); str = (*env)->GetStringUTFChars (env, contents, NULL);
gdk_threads_enter (); gdk_threads_enter ();
gtk_editable_insert_text (GTK_EDITABLE (TEXT_FROM_SW (ptr)),
str, strlen (str), &pos); text = GTK_WIDGET (TEXT_FROM_SW (ptr));
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);
gtk_text_buffer_insert (buf, &iter, str, strlen (str));
gdk_threads_leave (); gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, contents, str); (*env)->ReleaseStringUTFChars (env, contents, str);
...@@ -192,21 +131,29 @@ JNIEXPORT void JNICALL ...@@ -192,21 +131,29 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_replaceRange Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_replaceRange
(JNIEnv *env, jobject obj, jstring contents, jint start, jint end) (JNIEnv *env, jobject obj, jstring contents, jint start, jint end)
{ {
GtkWidget *text;
GtkTextBuffer *buf;
GtkTextIter iter, startIter, endIter;
void *ptr; void *ptr;
GtkEditable *text;
const char *str; const char *str;
int pos = start; int mystart = start;
int myend = end;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, contents, NULL); str = (*env)->GetStringUTFChars (env, contents, NULL);
gdk_threads_enter (); gdk_threads_enter ();
text = GTK_EDITABLE (TEXT_FROM_SW (ptr)); text = GTK_WIDGET (TEXT_FROM_SW (ptr));
gtk_text_freeze (GTK_TEXT (text));
gtk_editable_delete_text (text, start, end); buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_editable_insert_text (text, str, strlen (str), &pos);
gtk_text_thaw (GTK_TEXT (text)); gtk_text_buffer_get_iter_at_offset (buf, &startIter, mystart);
gtk_text_buffer_get_iter_at_offset (buf, &endIter, myend);
gtk_text_buffer_delete (buf, &startIter, &endIter);
gtk_text_buffer_get_iter_at_offset (buf, &iter, mystart);
gtk_text_buffer_insert(buf, &iter, str, strlen (str));
gdk_threads_leave (); gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, contents, str); (*env)->ReleaseStringUTFChars (env, contents, str);
...@@ -216,31 +163,25 @@ JNIEXPORT void JNICALL ...@@ -216,31 +163,25 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont
(JNIEnv *env, jobject obj, jstring jname, jint size) (JNIEnv *env, jobject obj, jstring jname, jint size)
{ {
const char *xlfd; const char *font_name;
# define FBUFSZ 200
char buf[FBUFSZ];
void *ptr; void *ptr;
GdkFont * new_font; GtkWidget *text;
GtkStyle * style; PangoFontDescription *font_desc;
GtkWidget * text;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
text = GTK_WIDGET (TEXT_FROM_SW (ptr)); text = GTK_WIDGET (TEXT_FROM_SW (ptr));
xlfd = (*env)->GetStringUTFChars (env, jname, NULL); font_name = (*env)->GetStringUTFChars (env, jname, NULL);
snprintf(buf, FBUFSZ, xlfd, size);
(*env)->ReleaseStringUTFChars (env, jname, xlfd);
gdk_threads_enter(); gdk_threads_enter();
new_font = gdk_font_load (buf); /* FIXME: deprecated. Replacement? */
if (new_font == NULL) font_desc = pango_font_description_from_string (font_name);
{ pango_font_description_set_size (font_desc, size);
/* Fail quietly for now. */ gtk_widget_modify_font (GTK_WIDGET(text), font_desc);
gdk_threads_leave(); pango_font_description_free (font_desc);
return;
}
style = gtk_style_copy (gtk_widget_get_style (text));
style -> font = new_font;
gtk_widget_set_style (text , style);
/* FIXME: Documentation varies as to whether we should unref style. */
gdk_threads_leave(); gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, font_name);
} }
...@@ -39,20 +39,47 @@ exception statement from your version. */ ...@@ -39,20 +39,47 @@ exception statement from your version. */
#include "gtkpeer.h" #include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkTextComponentPeer.h" #include "gnu_java_awt_peer_gtk_GtkTextComponentPeer.h"
#define GET_EDITABLE(obj) (GTK_IS_EDITABLE (obj) ? GTK_EDITABLE (obj) : \
GTK_EDITABLE (GTK_SCROLLED_WINDOW (obj)->container.child))
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getCaretPosition Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getCaretPosition
(JNIEnv *env, jobject obj) (JNIEnv *env, jobject obj)
{ {
void *ptr; void *ptr;
int pos; int pos;
GtkEditable *editable; // type of GtkEntry (TextField)
GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf;
GtkTextMark *mark;
GtkTextIter iter;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
pos = gtk_editable_get_position (GET_EDITABLE (ptr));
if (GTK_IS_EDITABLE (ptr))
{
editable = GTK_EDITABLE (ptr);
pos = gtk_editable_get_position (editable);
}
else
{
if (GTK_IS_SCROLLED_WINDOW (ptr))
{
text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
}
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
mark = gtk_text_buffer_get_insert (buf);
gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
pos = gtk_text_iter_get_offset (&iter);
}
}
gdk_threads_leave (); gdk_threads_leave ();
return pos; return pos;
...@@ -63,11 +90,40 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setCaretPosition ...@@ -63,11 +90,40 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setCaretPosition
(JNIEnv *env, jobject obj, jint pos) (JNIEnv *env, jobject obj, jint pos)
{ {
void *ptr; void *ptr;
GtkEditable *editable; // type of GtkEntry (TextField)
GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf;
GtkTextMark *mark;
GtkTextIter iter;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
gtk_editable_set_position (GET_EDITABLE (ptr), pos); if (GTK_IS_EDITABLE (ptr))
{
editable = GTK_EDITABLE (ptr);
gtk_editable_set_position (editable, pos);
}
else
{
if (GTK_IS_SCROLLED_WINDOW (ptr))
{
text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
}
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
mark = gtk_text_buffer_get_insert (buf);
gtk_text_buffer_get_iter_at_mark (buf, &iter, mark);
gtk_text_iter_set_offset (&iter, pos);
}
}
gdk_threads_leave (); gdk_threads_leave ();
} }
...@@ -77,11 +133,42 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionStart ...@@ -77,11 +133,42 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionStart
{ {
void *ptr; void *ptr;
int pos; int pos;
GtkEditable *editable; // type of GtkEntry (TextField)
GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf;
GtkTextIter start;
GtkTextIter end;
int starti, endi;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
pos = GET_EDITABLE (ptr)->selection_start_pos;
if (GTK_IS_EDITABLE (ptr))
{
editable = GTK_EDITABLE (ptr);
if (gtk_editable_get_selection_bounds (editable, &starti, &endi))
pos = starti;
}
else
{
if (GTK_IS_SCROLLED_WINDOW (ptr))
{
text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
}
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
if (gtk_text_buffer_get_selection_bounds(buf, &start, &end))
pos = gtk_text_iter_get_offset (&start);
}
}
gdk_threads_leave (); gdk_threads_leave ();
return pos; return pos;
...@@ -93,11 +180,42 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionEnd ...@@ -93,11 +180,42 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getSelectionEnd
{ {
void *ptr; void *ptr;
int pos; int pos;
GtkEditable *editable; // type of GtkEntry (TextField)
GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf;
GtkTextIter start;
GtkTextIter end;
int starti, endi;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
pos = GET_EDITABLE (ptr)->selection_end_pos;
if (GTK_IS_EDITABLE (ptr))
{
editable = GTK_EDITABLE (ptr);
if (gtk_editable_get_selection_bounds (editable, &starti, &endi))
pos = endi;
}
else
{
if (GTK_IS_SCROLLED_WINDOW (ptr))
{
text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
}
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
if (gtk_text_buffer_get_selection_bounds(buf, &start, &end))
pos = gtk_text_iter_get_offset (&end);
}
}
gdk_threads_leave (); gdk_threads_leave ();
return pos; return pos;
...@@ -108,11 +226,44 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_select ...@@ -108,11 +226,44 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_select
(JNIEnv *env, jobject obj, jint start, jint end) (JNIEnv *env, jobject obj, jint start, jint end)
{ {
void *ptr; void *ptr;
GtkEditable *editable; // type of GtkEntry (TextField)
GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf;
GtkTextIter iter;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
gtk_editable_select_region (GET_EDITABLE (ptr), start, end);
if (GTK_IS_EDITABLE (ptr))
{
editable = GTK_EDITABLE (ptr);
gtk_editable_select_region (editable, start, end);
}
else
{
if (GTK_IS_SCROLLED_WINDOW (ptr))
{
text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
}
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_get_iter_at_offset (buf, &iter, start);
/* quickly move both 'insert' and 'selection_bound' to the
same position */
gtk_text_buffer_place_cursor (buf, &iter);
gtk_text_buffer_get_iter_at_offset (buf, &iter, end);
gtk_text_buffer_move_mark_by_name (buf, "selection_bound", &iter);
}
}
gdk_threads_leave (); gdk_threads_leave ();
} }
...@@ -121,11 +272,35 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setEditable ...@@ -121,11 +272,35 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setEditable
(JNIEnv *env, jobject obj, jboolean state) (JNIEnv *env, jobject obj, jboolean state)
{ {
void *ptr; void *ptr;
GtkEditable *editable; // type of GtkEntry (TextField)
GtkWidget *text = NULL; // type of GtkTextView (TextArea)
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
gtk_editable_set_editable (GET_EDITABLE (ptr), state);
if (GTK_IS_EDITABLE (ptr))
{
editable = GTK_EDITABLE (ptr);
gtk_editable_set_editable (editable, state);
}
else
{
if (GTK_IS_SCROLLED_WINDOW (ptr))
{
text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
}
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
gtk_text_view_set_editable (GTK_TEXT_VIEW (text), state);
}
}
gdk_threads_leave (); gdk_threads_leave ();
} }
...@@ -136,11 +311,40 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getText ...@@ -136,11 +311,40 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_getText
void *ptr; void *ptr;
char *contents; char *contents;
jstring jcontents; jstring jcontents;
GtkEditable *editable; // type of GtkEntry (TextField)
GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf;
GtkTextIter start, end;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
contents = gtk_editable_get_chars (GET_EDITABLE (ptr), 0, -1);
if (GTK_IS_EDITABLE (ptr))
{
editable = GTK_EDITABLE (ptr);
contents = gtk_editable_get_chars (editable, 0, -1);
}
else
{
if (GTK_IS_SCROLLED_WINDOW (ptr))
{
text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
}
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_get_start_iter (buf, &start);
gtk_text_buffer_get_end_iter (buf, &end);
contents = gtk_text_buffer_get_text (buf, &start, &end, FALSE);
}
}
gdk_threads_leave (); gdk_threads_leave ();
jcontents = (*env)->NewStringUTF (env, contents); jcontents = (*env)->NewStringUTF (env, contents);
...@@ -154,25 +358,36 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText ...@@ -154,25 +358,36 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_setText
(JNIEnv *env, jobject obj, jstring contents) (JNIEnv *env, jobject obj, jstring contents)
{ {
void *ptr; void *ptr;
GtkEditable *text;
const char *str; const char *str;
int pos = 0; GtkWidget *text = NULL; // type of GtkTextView (TextArea)
GtkTextBuffer *buf;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, contents, NULL); str = (*env)->GetStringUTFChars (env, contents, NULL);
gdk_threads_enter (); gdk_threads_enter ();
text = GET_EDITABLE (ptr); if (GTK_IS_EDITABLE (ptr))
{
if (GTK_IS_TEXT (text)) gtk_entry_set_text (GTK_ENTRY (ptr), str);
gtk_text_freeze (GTK_TEXT (text)); }
else
gtk_editable_delete_text (text, 0, -1); {
gtk_editable_insert_text (text, str, strlen (str), &pos); if (GTK_IS_SCROLLED_WINDOW (ptr))
{
if (GTK_IS_TEXT (text)) text = GTK_WIDGET (GTK_TEXT_VIEW (GTK_SCROLLED_WINDOW (ptr)->container.child));
gtk_text_thaw (GTK_TEXT (text)); }
else if (GTK_IS_TEXT_VIEW (ptr))
{
text = GTK_WIDGET (ptr);
}
if (text)
{
buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_set_text (buf, str, strlen (str));
}
}
gdk_threads_leave (); gdk_threads_leave ();
......
...@@ -43,10 +43,10 @@ JNIEXPORT void JNICALL ...@@ -43,10 +43,10 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_create
(JNIEnv *env, jobject obj) (JNIEnv *env, jobject obj)
{ {
gpointer widget; GtkWidget *widget;
gdk_threads_enter (); gdk_threads_enter ();
widget = gtk_type_new (gtk_entry_get_type ()); widget = gtk_entry_new ();
gdk_threads_leave (); gdk_threads_leave ();
NSA_SET_PTR (env, obj, widget); NSA_SET_PTR (env, obj, widget);
...@@ -68,36 +68,6 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_connectHooks ...@@ -68,36 +68,6 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_connectHooks
gdk_threads_leave (); gdk_threads_leave ();
} }
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_old_create
(JNIEnv *env, jobject obj, jobject parent_obj, jstring text)
{
GtkWidget *entry;
const char *str;
void *parent;
parent = NSA_GET_PTR (env, parent_obj);
str = (*env)->GetStringUTFChars (env, text, NULL);
gdk_threads_enter ();
entry = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (entry), str);
set_parent (entry, GTK_CONTAINER (parent));
gtk_widget_realize (entry);
connect_awt_hook (env, obj, 2,
entry->window, GTK_ENTRY (entry)->text_area);
NSA_SET_PTR (env, obj, entry);
gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, text, str);
}
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetSize Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetSize
(JNIEnv *env, jobject obj, jint cols, jintArray jdims) (JNIEnv *env, jobject obj, jint cols, jintArray jdims)
...@@ -105,19 +75,16 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetSize ...@@ -105,19 +75,16 @@ Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkEntryGetSize
void *ptr; void *ptr;
jint *dims; jint *dims;
GtkRequisition myreq; GtkRequisition myreq;
GtkEntry *entry; GtkWidget *entry;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
dims = (*env)->GetIntArrayElements (env, jdims, 0); dims = (*env)->GetIntArrayElements (env, jdims, 0);
gdk_threads_enter (); gdk_threads_enter ();
entry = GTK_ENTRY (ptr);
gtk_signal_emit_by_name (GTK_OBJECT (entry), "size_request", &myreq);
dims[0]=myreq.width-150 + (cols * entry = GTK_WIDGET (ptr);
gdk_char_width (GTK_WIDGET (entry)->style->font, gtk_widget_size_request(entry, &myreq);
'W')); dims[0]=myreq.width;
dims[1]=myreq.height; dims[1]=myreq.height;
gdk_threads_leave (); gdk_threads_leave ();
...@@ -153,31 +120,24 @@ JNIEXPORT void JNICALL ...@@ -153,31 +120,24 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont
(JNIEnv *env, jobject obj, jstring jname, jint size) (JNIEnv *env, jobject obj, jstring jname, jint size)
{ {
const char *xlfd; const char *font_name;
# define FBUFSZ 200
char buf[FBUFSZ];
void *ptr; void *ptr;
GdkFont * new_font; GtkWidget *entry;
GtkStyle * style; PangoFontDescription *font_desc;
GtkWidget * text;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
text = GTK_WIDGET (ptr);
xlfd = (*env)->GetStringUTFChars (env, jname, NULL); entry = GTK_WIDGET (ptr);
snprintf(buf, FBUFSZ, xlfd, size); font_name = (*env)->GetStringUTFChars (env, jname, NULL);
(*env)->ReleaseStringUTFChars (env, jname, xlfd);
gdk_threads_enter(); gdk_threads_enter();
new_font = gdk_font_load(buf); /* FIXME: deprecated. Replacement? */
if (new_font == NULL) font_desc = pango_font_description_from_string (font_name);
{ pango_font_description_set_size (font_desc, size);
/* Fail quietly for now. */ gtk_widget_modify_font (GTK_WIDGET(entry), font_desc);
gdk_threads_leave(); pango_font_description_free (font_desc);
return;
}
style = gtk_style_copy (gtk_widget_get_style (text));
style -> font = new_font;
gtk_widget_set_style (text , style);
/* FIXME: Documentation varies as to whether we should unref style. */
gdk_threads_leave(); gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, jname, font_name);
} }
...@@ -93,17 +93,37 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks ...@@ -93,17 +93,37 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks
(JNIEnv *env, jobject obj) (JNIEnv *env, jobject obj)
{ {
void *ptr; void *ptr;
GtkVBox* vbox;
GtkWidget *layout; GtkWidget *layout;
GList* children;
char* name;
ptr = NSA_GET_PTR (env, obj); ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter (); gdk_threads_enter ();
layout = GTK_WIDGET (gtk_container_children (GTK_CONTAINER (GTK_BIN (ptr)->child))->data);
children = gtk_container_get_children(GTK_CONTAINER(ptr));
vbox = children->data;
name = GTK_OBJECT_TYPE_NAME(vbox);
if(!GTK_IS_VBOX(vbox))
{
printf("*** this is not a vbox\n");
}
children = gtk_container_get_children(GTK_CONTAINER(vbox));
layout = children->data;
name = GTK_OBJECT_TYPE_NAME(layout);
if(!GTK_IS_LAYOUT(layout))
{
printf("*** widget is not a layout ***");
}
gtk_widget_realize (layout); gtk_widget_realize (layout);
connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window); connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window);
gtk_widget_realize (GTK_WIDGET (ptr)); gtk_widget_realize (ptr);
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window); connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
gdk_threads_leave (); gdk_threads_leave ();
} }
...@@ -112,8 +132,8 @@ setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width, ...@@ -112,8 +132,8 @@ setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width,
jint height, jboolean visible) jint height, jboolean visible)
{ {
GtkWidget *layout, *vbox; GtkWidget *layout, *vbox;
gint x, y;
gdk_threads_enter();
gtk_window_set_policy (GTK_WINDOW (window), 1, 1, 0); gtk_window_set_policy (GTK_WINDOW (window), 1, 1, 0);
gtk_widget_set_usize (window, width, height); gtk_widget_set_usize (window, width, height);
...@@ -131,6 +151,7 @@ setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width, ...@@ -131,6 +151,7 @@ setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width,
connect_awt_hook (env, obj, 1, window->window); connect_awt_hook (env, obj, 1, window->window);
set_visible (window, visible); set_visible (window, visible);
gdk_threads_leave ();
} }
/* /*
...@@ -212,9 +233,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env, ...@@ -212,9 +233,6 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env,
static void static void
setBounds (GtkWidget *widget, jint x, jint y, jint width, jint height) setBounds (GtkWidget *widget, jint x, jint y, jint width, jint height)
{ {
gint current_x, current_y;
gint origin_x, origin_y;
/* gdk_window_get_root_origin (widget->window, &current_x, &current_y); */ /* gdk_window_get_root_origin (widget->window, &current_x, &current_y); */
/* if (current_x != x || current_y != y) */ /* if (current_x != x || current_y != y) */
...@@ -295,16 +313,12 @@ gdk_window_get_root_geometry (GdkWindow *window, ...@@ -295,16 +313,12 @@ gdk_window_get_root_geometry (GdkWindow *window,
gint *border, gint *border,
gint *depth) gint *depth)
{ {
GdkWindowPrivate *private; GdkWindow *private;
Window xwindow;
Window xparent;
Window root;
Window *children;
unsigned int nchildren; unsigned int nchildren;
g_return_if_fail (window != NULL); g_return_if_fail (window != NULL);
private = (GdkWindowPrivate*) window; private = (GdkWindow*) window;
if (x) if (x)
*x = 0; *x = 0;
if (y) if (y)
...@@ -318,48 +332,14 @@ gdk_window_get_root_geometry (GdkWindow *window, ...@@ -318,48 +332,14 @@ gdk_window_get_root_geometry (GdkWindow *window,
if (depth) if (depth)
*depth = 0; *depth = 0;
if (private->destroyed) if (GDK_WINDOW_DESTROYED (private))
return; return;
while (private->parent && ((GdkWindowPrivate*) private->parent)->parent) private = gdk_window_get_toplevel (private);
private = (GdkWindowPrivate*) private->parent; if (GDK_WINDOW_DESTROYED(private))
if (private->destroyed)
return; return;
xparent = private->xwindow; gdk_window_get_geometry (private, x, y, width, height, depth);
do
{
xwindow = xparent;
if (!XQueryTree (private->xdisplay, xwindow,
&root, &xparent,
&children, &nchildren))
return;
if (children)
XFree (children);
}
while (xparent != root);
if (xparent == root)
{
unsigned int ww, wh, wb, wd;
int wx, wy;
if (XGetGeometry (private->xdisplay, xwindow, &root, &wx, &wy, &ww, &wh, &wb, &wd))
{
if (x)
*x = wx;
if (y)
*y = wy;
if (width)
*width = ww;
if (height)
*height = wh;
if (border)
*border = wb;
if (depth)
*depth = wd;
}
}
} }
...@@ -43,5 +43,6 @@ exception statement from your version. */ ...@@ -43,5 +43,6 @@ exception statement from your version. */
#include "gtkpeer.h" #include "gtkpeer.h"
extern GThreadFunctions g_thread_jni_functions; extern GThreadFunctions g_thread_jni_functions;
extern JavaVM *gdk_vm;
#endif /* __GTHREADJNI_H__ */ #endif /* __GTHREADJNI_H__ */
...@@ -87,10 +87,11 @@ GCOBJS = @GCOBJS@ ...@@ -87,10 +87,11 @@ GCOBJS = @GCOBJS@
GCSPEC = @GCSPEC@ GCSPEC = @GCSPEC@
GCTESTSPEC = @GCTESTSPEC@ GCTESTSPEC = @GCTESTSPEC@
GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@ GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
GLIB_LIBS = @GLIB_LIBS@ GLIB_LIBS = @GLIB_LIBS@
GLIB_MKENUMS = @GLIB_MKENUMS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GTK_CFLAGS = @GTK_CFLAGS@ GTK_CFLAGS = @GTK_CFLAGS@
GTK_CONFIG = @GTK_CONFIG@
GTK_LIBS = @GTK_LIBS@ GTK_LIBS = @GTK_LIBS@
HASH_SYNC_SPEC = @HASH_SYNC_SPEC@ HASH_SYNC_SPEC = @HASH_SYNC_SPEC@
IEEESPEC = @IEEESPEC@ IEEESPEC = @IEEESPEC@
...@@ -117,6 +118,7 @@ OBJDUMP = @OBJDUMP@ ...@@ -117,6 +118,7 @@ OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
PERL = @PERL@ PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PLATFORMOBJS = @PLATFORMOBJS@ PLATFORMOBJS = @PLATFORMOBJS@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
STRIP = @STRIP@ STRIP = @STRIP@
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment