summaryrefslogtreecommitdiff
path: root/native
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2005-01-18 11:38:27 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2005-01-18 11:38:27 +0000
commitf3b95f098b7b7568ffc7f30dbed89fb1f1f149d4 (patch)
tree718da4999907f46bbabfba7bc37de11798a0cb54 /native
parent2800ca913031a6702b4c493b0fb4794d7af80d6a (diff)
downloadclasspath-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.c7
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c48
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 ();
}