diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2005-01-18 11:38:27 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2005-01-18 11:38:27 +0000 |
commit | f3b95f098b7b7568ffc7f30dbed89fb1f1f149d4 (patch) | |
tree | 718da4999907f46bbabfba7bc37de11798a0cb54 /native | |
parent | 2800ca913031a6702b4c493b0fb4794d7af80d6a (diff) | |
download | classpath-f3b95f098b7b7568ffc7f30dbed89fb1f1f149d4.tar.gz |
2005-01-18 Andrew John Hughes <gnu_andrew@member.fsf.org>
Merge of the following changes from HEAD
2005-01-18 Jeroen Frijters <jeroen@frijters.net>
* java/io/Externalizable.java,
java/io/Serializable.java
(serialVersionUID): Removed.
* java/rmi/server/RemoteObject.java,
java/rmi/server/UID.java
(serialVersionUID): Made private.
* java/rmi/server/RemoteRef.java,
java/rmi/server/ServerRef.java
(serialVersionUID): Set proper value.
* java/security/interfaces/DSAPrivateKey.java,
java/security/interfaces/DSAPublicKey.java,
java/security/interfaces/RSAMultiPrimePrivateCrtKey.java,
java/security/interfaces/RSAPrivateCrtKey.java,
java/security/interfaces/RSAPrivateKey.java,
java/security/interfaces/RSAPublicKey.java,
javax/crypto/SecretKey.java
(serialVersionUID): Added.
2005-01-18 Graydon Hoare <graydon@redhat.com>
* gnu/java/awt/ClasspathToolkit.java: Likewise.
* gnu/java/awt/peer/gtk/GtkToolkit.java: Likewise.
* java/awt/EventQueue.java (getNextEvent):
Adjust event loop to switch to native mode after 100ms.
* javax/swing/Timer.java (drainEvents): Reuse Runnable.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
(Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose):
Wake up event thread.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
(Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue):
Adjust event loop to switch to java mode after 100ms.
2005-01-18 Michael Koch <konqueror@gmx.de>
* include/gnu_java_awt_peer_gtk_GtkToolkit.h: Regenerated.
2005-01-17 Tom Tromey <tromey@redhat.com>
* java/text/MessageFormat.java (scanString): Changed how quoting
is handled.
(scanFormatElement): Likewise.
2005-01-17 Mark Wielaard <mark@klomp.org>
* scripts/check_jni_methods.sh: Don't use mktemp for TMPFILEs.
2005-01-17 Michael Koch <konqueror@gmx.de>
PR libgcj/19444
* java/net/URI.java
(AUTHORITY_REGEXP): New regexp constant.
(AUTHORITY_USERINFO_GROUP): New constant.
(AUTHORITY_HOST_GROUP): Likewise.
(AUTHORITY_PORT_GROUP): Likewise.
(port): Changed default value to -1.
(parseURI): Parse authority part and initialize host,
port and userInfo.
2005-01-17 Michael Koch <konqueror@gmx.de>
* javax/print/attribute/standard/Chromaticity.java,
javax/print/attribute/standard/Destination.java:
New files.
2005-01-17 Jerry Quinn <jlquinn@optonline.net>
* javax/imageio/metadata/IIOMetadataNode.java:
Implemented.
* javax/imageio/metadata/IIOAttr.java,
javax/imageio/metadata/IIONamedNodeMap.java,
javax/imageio/metadata/IIONodeList.java:
New files
Diffstat (limited to 'native')
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c | 7 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c | 48 |
2 files changed, 44 insertions, 11 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c index 8eebce980..808d76b20 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c @@ -56,6 +56,13 @@ Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose gtk_widget_destroy (GTK_WIDGET (ptr)); gdk_threads_leave (); + + /* + * Wake up the main thread, to make sure it re-checks the window + * destruction condition. + */ + + g_main_context_wakeup (NULL); } JNIEXPORT void JNICALL diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c index 6099303bb..59dc7c8ac 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c @@ -40,6 +40,8 @@ exception statement from your version. */ #include "gnu_java_awt_peer_gtk_GtkToolkit.h" #include "gthread-jni.h" +#include <sys/time.h> + #ifdef JVM_SUN struct state_table *native_state_table; struct state_table *native_global_ref_table; @@ -298,12 +300,27 @@ dpi_changed_cb (GtkSettings *settings, dpi_conversion_factor = PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE); } +static int +within_human_latency_tolerance(struct timeval *init) +{ + struct timeval curr; + unsigned long milliseconds_elapsed; + + gettimeofday(&curr, NULL); + + milliseconds_elapsed = (((curr.tv_sec * 1000) + (curr.tv_usec / 1000)) + - ((init->tv_sec * 1000) + (init->tv_usec / 1000))); + + return milliseconds_elapsed < 100; +} + JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue (JNIEnv *env, jobject self __attribute__((unused)), - jobject lockedQueue) + jobject lockedQueue, + jboolean block) { /* We're holding an EventQueue lock, and we're about to acquire the GDK * lock before dropping the EventQueue lock. This can deadlock if someone @@ -313,21 +330,30 @@ Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue * acquiring the GDK lock and calling back into * EventQueue.getNextEvent(). */ + + struct timeval init; + gettimeofday(&init, NULL); + gdk_threads_enter (); (*env)->MonitorExit (env, lockedQueue); - /* It is quite important that this be a do .. while loop. The first pass - * should do an iteration w/o a test so that it sleeps when there really - * aren't any events; and the loop should continue for as many events as - * there are to avoid pointless thrashing up and down through JNI (it - * runs very slowly when this is not a loop). - */ - do + if (block) { - gtk_main_iteration(); + + /* If we're blocking-when-empty, we want a do .. while loop. */ + do + gtk_main_iteration (); + while (within_human_latency_tolerance (&init) + && gtk_events_pending ()); } - while (gtk_events_pending()); - + else + { + /* If we're not blocking-when-empty, we want a while loop. */ + while (within_human_latency_tolerance (&init) + && gtk_events_pending ()) + gtk_main_iteration (); + } + (*env)->MonitorEnter (env, lockedQueue); gdk_threads_leave (); } |